OSDN Git Service

2003-12-30 Michael Koch <konqueror@gmx.de>
authormkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 30 Dec 2003 13:43:24 +0000 (13:43 +0000)
committermkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4>
Tue, 30 Dec 2003 13:43:24 +0000 (13:43 +0000)
* gnu/java/net/protocol/http/Connection.java
(outputStream): New field.
(bufferedOutputStream): New field.
(connect): Initialize outputStream and bufferedOutputStream.
(sendRequest): Create PrintWriter object from outputStream,
support HTTP 1.1, send missing HTTP headers and buffered output data
for POST method.
(getOutputStream): Set request method to POST if output stream is
used, return bufferedOutputStream.
(setRequestMethod): Allow HEAD and POST methods.
This fixes libgcj PR/6302 and libgcj PR/7752.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@75233 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/gnu/java/net/protocol/http/Connection.java

index f7fbbb7..639b936 100644 (file)
@@ -1,3 +1,17 @@
+2003-12-30  Michael Koch  <konqueror@gmx.de>
+
+       * gnu/java/net/protocol/http/Connection.java
+       (outputStream): New field.
+       (bufferedOutputStream): New field.
+       (connect): Initialize outputStream and bufferedOutputStream.
+       (sendRequest): Create PrintWriter object from outputStream,
+       support HTTP 1.1, send missing HTTP headers and buffered output data
+       for POST method.
+       (getOutputStream): Set request method to POST if output stream is
+       used, return bufferedOutputStream.
+       (setRequestMethod): Allow HEAD and POST methods.
+       This fixes libgcj PR/6302 and libgcj PR/7752.
+
 2003-12-30  Guilhem Lavaux <guilhem@kaffe.org>
 
        * java/io/LineNumberReader.java
index 1a6d45c..0bc50d1 100644 (file)
@@ -39,6 +39,8 @@ exception statement from your version. */
 package gnu.java.net.protocol.http;
 
 import java.io.BufferedInputStream;
+import java.io.BufferedOutputStream;
+import java.io.ByteArrayOutputStream;
 import java.io.DataInputStream;
 import java.io.InputStream;
 import java.io.IOException;
@@ -106,6 +108,17 @@ public final class Connection extends HttpURLConnection
   private DataInputStream inputStream;
 
   /**
+   * The OutputStream for this connection
+   */
+  private OutputStream outputStream;
+
+  /**
+   * bufferedOutputStream is a buffer to contain content of the HTTP request,
+   * and will be written to outputStream all at once
+   */
+  private ByteArrayOutputStream bufferedOutputStream;
+
+  /**
    * This object holds the request properties.
    */
   private HashMap requestProperties = new HashMap();
@@ -153,6 +166,8 @@ public final class Connection extends HttpURLConnection
 
     inputStream =
       new DataInputStream(new BufferedInputStream(socket.getInputStream()));
+    outputStream = new BufferedOutputStream (socket.getOutputStream());
+    bufferedOutputStream = new ByteArrayOutputStream (256); //default is too small
 
     sendRequest();
     receiveReply();
@@ -185,16 +200,32 @@ public final class Connection extends HttpURLConnection
   void sendRequest() throws IOException
   {
     // Create PrintWriter for easier sending of headers.
-    PrintWriter outputWriter = new PrintWriter(socket.getOutputStream());
+    PrintWriter outputWriter = new PrintWriter(outputStream);
     
     // Send request including any request properties that were set.
     outputWriter.print (getRequestMethod() + " " + url.getFile()
-                        + " HTTP/1.0\r\n");
+                        + " HTTP/1.1\r\n");
 
     // Set additional HTTP headers.
     if (getRequestProperty ("Host") == null)
       setRequestProperty ("Host", url.getHost());
     
+    if (getRequestProperty ("Connection") == null)
+      setRequestProperty ("Connection", "Close");
+    
+    if (getRequestProperty ("user-agent") == null)
+      setRequestProperty ("user-agent", "gnu-libgcj/"
+                          + System.getProperty ("classpath.version"));
+    
+    if (getRequestProperty ("accept") == null)
+      setRequestProperty ("accept", "*/*");
+    
+    if (getRequestProperty ("Content-type") == null)
+      setRequestProperty ("Content-type", "application/x-www-form-urlencoded");
+
+    // Set correct content length.
+    setRequestProperty ("Content-length", String.valueOf (bufferedOutputStream.size()));
+
     // Write all req_props name-value pairs to the output writer.
     Iterator itr = getRequestProperties().entrySet().iterator();
 
@@ -207,6 +238,10 @@ public final class Connection extends HttpURLConnection
     // One more CR-LF indicates end of header.
     outputWriter.print ("\r\n");
     outputWriter.flush();
+
+    // Write content
+    bufferedOutputStream.writeTo (outputStream);
+    outputStream.flush();
   }
 
   /**
@@ -352,7 +387,7 @@ public final class Connection extends HttpURLConnection
     if (!connected)
       connect();
     
-    return socket.getOutputStream();
+    return bufferedOutputStream;
   }
 
   /**
@@ -367,7 +402,9 @@ public final class Connection extends HttpURLConnection
   {
     method = method.toUpperCase();
     
-    if (method.equals("GET"))
+    if (method.equals("GET")
+        || method.equals("HEAD")
+        || method.equals("POST"))
       super.setRequestMethod (method);
     else
       throw new ProtocolException ("Unsupported or unknown request method " +