2004-12-17 Lluis Sanchez Gual <lluis@ximian.com>
authorLluis Sanchez <lluis@novell.com>
Fri, 17 Dec 2004 12:01:43 +0000 (12:01 -0000)
committerLluis Sanchez <lluis@novell.com>
Fri, 17 Dec 2004 12:01:43 +0000 (12:01 -0000)
* HttpHelper.cs: Removed unused method. Optimized CopyStream method.
* HttpServerChannel.cs: SendResponse does not return a bool any
  more, it throws an exception when it fails.
* HttpServer.cs: Improved handling of errors.

svn path=/trunk/mcs/; revision=37874

mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels.Http/ChangeLog
mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels.Http/HttpClientChannel.cs
mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels.Http/HttpHelper.cs
mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels.Http/HttpServer.cs
mcs/class/System.Runtime.Remoting/System.Runtime.Remoting.Channels.Http/HttpServerChannel.cs

index 1790bfb7bdbd0eac9444ea662c2b973ece2d2cbb..0107b17c464122f8ff7ffcd6240424e7f2c6311b 100644 (file)
@@ -1,3 +1,10 @@
+2004-12-17  Lluis Sanchez Gual <lluis@ximian.com>
+
+       * HttpHelper.cs: Removed unused method. Optimized CopyStream method.
+       * HttpServerChannel.cs: SendResponse does not return a bool any
+         more, it throws an exception when it fails.
+       * HttpServer.cs: Improved handling of errors.
+
 2004-10-22  Lluis Sanchez Gual <lluis@ximian.com>
 
        * HttpClientChannel.cs: In CreateMessageSink, process the remote channel
index 6225b1e4de2ff35bd8a0de9b46271e9a0246fa4a..e92b059b435b8b9422ea9ea54fae9aa88efa52dc 100644 (file)
@@ -326,9 +326,9 @@ namespace System.Runtime.Remoting.Channels.Http
                        requestHeaders [CommonTransportKeys.RequestUri] = uri;
                        CreateUrl(uri,out url);
 
-                       HttpWebRequest httpWebRequest = CreateWebRequest(url,requestHeaders,requestStream);
+                       HttpWebRequest httpWebRequest = CreateWebRequest (url,requestHeaders,requestStream);
 
-                       SendAndRecieve(httpWebRequest,out responseHeaders,out responseStream);
+                       SendAndRecieve (httpWebRequest,out responseHeaders,out responseStream);
                }
 
 
@@ -567,15 +567,11 @@ namespace System.Runtime.Remoting.Channels.Http
                        }
 
                        Stream reqStream = request.GetRequestStream();
-                       if (requestStream is MemoryStream)
-                       {
-                               MemoryStream memStream = (MemoryStream)requestStream;
-                               reqStream.Write (memStream.GetBuffer(), 0, (int)memStream.Length);
-                       }
-                       else
+                       try {
                                HttpHelper.CopyStream(requestStream, reqStream);
-
-                       reqStream.Close();
+                       } finally {
+                               reqStream.Close();
+                       }
                        
                        return request;
                }       
@@ -602,17 +598,19 @@ namespace System.Runtime.Remoting.Channels.Http
                private void ReceiveResponse (HttpWebResponse httpWebResponse, out ITransportHeaders responseHeaders, out Stream responseStream)
                {
                        responseHeaders = new TransportHeaders();
+                       Stream webStream = httpWebResponse.GetResponseStream();
 
                        try
                        {
-                               Stream webStream = httpWebResponse.GetResponseStream();
-
                                if (httpWebResponse.ContentLength != -1)
                                {
                                        byte[] buffer = new byte [httpWebResponse.ContentLength];
                                        int nr = 0;
-                                       while (nr < buffer.Length)
-                                               nr += webStream.Read (buffer, nr, buffer.Length - nr);
+                                       while (nr < buffer.Length) {
+                                               int pr = webStream.Read (buffer, nr, buffer.Length - nr);
+                                               if (pr == 0) throw new RemotingException ("Connection closed");
+                                               nr += pr;
+                                       }
                                        responseStream = new MemoryStream (buffer);
                                }
                                else
@@ -632,8 +630,8 @@ namespace System.Runtime.Remoting.Channels.Http
                        }
                        finally
                        {
-                               if(httpWebResponse!=null)
-                                       httpWebResponse.Close();
+                               webStream.Close ();
+                               httpWebResponse.Close();
                        }
                }
 
index 4c188facfc257ce475f226c8c0fba2c12ca0c9e3..71db924d3a0c6e5c739e0ca469cad38432bd7d79 100644 (file)
@@ -73,60 +73,18 @@ namespace System.Runtime.Remoting.Channels.Http
                                return false;
                }
 
-               public static Stream CopyStream(Stream inStream)
+               public static void CopyStream (Stream inStream, Stream outStream)
                {
-                       
-                       Stream outStream = new MemoryStream();
-                       
-                       int  temp;
-                       
-                       try
-                       {
-                               while(true)
-                               {
-                                       temp = inStream.ReadByte();
-                                       if(temp==-1)
-                                               break;
-                                       outStream.WriteByte((byte)temp);
-                               }
-                               outStream.Flush();
-                               outStream.Seek(0,SeekOrigin.Begin);
-                       }
-                       catch(Exception e)
-                       {
-                               Console.WriteLine(e);
-                       }
-                       
-                       return outStream;
-               }
+                       byte[] buffer = new byte [1024];
 
-               public static bool CopyStream(Stream inStream, Stream outStream)
-               {
-                       int  temp;
+                       int nr;
+                       while ((nr = inStream.Read (buffer, 0, buffer.Length)) > 0)
+                               outStream.Write (buffer, 0, nr);
 
-                       try
-                       {
-                               while(true)
-                               {
-                                       temp = inStream.ReadByte();
-                                                                               
-                                       if(temp==-1)
-                                               break;
-                                       outStream.WriteByte((byte)temp);
-                               }
-                               
-                               outStream.Flush();
-                               
-                               if(outStream.CanSeek)
-                                       outStream.Seek(0,SeekOrigin.Begin);
-                       }
-                       catch(Exception e)
-                       {
-                               Console.WriteLine(e);
-                               return false;
-                       }
-                       return true;
-                       
+                       outStream.Flush ();
+
+                       if (outStream.CanSeek)
+                               outStream.Seek (0,SeekOrigin.Begin);
                }
 
                public static String GetHostName()
index 2f8660692d462552b93521616baf80e6ffd815e1..3c60866951857254dbd97cae7c37c7cc5496bbd5 100644 (file)
@@ -59,12 +59,6 @@ namespace System.Runtime.Remoting.Channels.Http
                        Sink = sink;
                }
                
-               public RequestArguments (Stream inputStream, Stream outputStream, HttpServerTransportSink sink)
-               {
-                       InputStream = inputStream;
-                       OutputStream = outputStream;
-                       Sink = sink;
-               }
                public Stream InputStream;
                public Stream OutputStream;
                public HttpServerTransportSink Sink;
@@ -105,9 +99,8 @@ namespace System.Runtime.Remoting.Channels.Http
                        else
                                buffer = new byte [0];
                                
-                       
                        //Step (5)
-                   SendRequestForChannel (reqArg, HeaderFields, CustomHeaders, buffer);
+                       SendRequestForChannel (reqArg, HeaderFields, CustomHeaders, buffer);
                }
 
                private static ArrayList RecieveHeader (RequestArguments reqArg)
@@ -215,8 +208,7 @@ namespace System.Runtime.Remoting.Channels.Http
                                                SendResponse (reqArg, 408, null, null);
                                                break;
                                        default :
-                                               //<Exception>                                   
-                                               break;
+                                               throw e;
                                }
                                
                                return false;
@@ -261,7 +253,7 @@ namespace System.Runtime.Remoting.Channels.Http
                        
                }
                
-               public static bool SendResponse (RequestArguments reqArg, int httpStatusCode, ITransportHeaders headers, Stream responseStream)
+               public static void SendResponse (RequestArguments reqArg, int httpStatusCode, ITransportHeaders headers, Stream responseStream)
                {
                        byte [] headersBuffer = null;
                        byte [] entityBuffer = null;
@@ -309,22 +301,11 @@ namespace System.Runtime.Remoting.Channels.Http
                
                        headersBuffer = Encoding.ASCII.GetBytes (responseStr.ToString());
 
-                       try
-                       {
-                               //send headersBuffer
-                               reqArg.OutputStream.Write (headersBuffer, 0, headersBuffer.Length);
+                       //send headersBuffer
+                       reqArg.OutputStream.Write (headersBuffer, 0, headersBuffer.Length);
 
-                               if (entityBuffer != null)
-                                       reqArg.OutputStream.Write (entityBuffer, 0, entityBuffer.Length);
-                       }
-                       catch
-                       {
-                               //<EXCEPTION>
-                               //may be its the client's fault so just return with false
-                               return false;
-                       }
-
-                       return true;
+                       if (entityBuffer != null)
+                               reqArg.OutputStream.Write (entityBuffer, 0, entityBuffer.Length);
                }
 
                internal static string GetReasonPhrase (int HttpStatusCode)
index b0ea27a281218815a1645db2d3c0f44f5c72f2a8..e069ee8d0ebb12ad73b20509ac3e54b739f2f16d 100644 (file)
@@ -353,17 +353,11 @@ namespace System.Runtime.Remoting.Channels.Http
                                switch (processing)
                                {                    
                                        case ServerProcessing.Complete:
-                                               if (!HttpServer.SendResponse (reqArg, 200, responseHeaders, responseStream))
-                                               {
-                                                       //ooops couldnot send response !!!!!! and error occured
-                                               }
+                                               HttpServer.SendResponse (reqArg, 200, responseHeaders, responseStream);
                                                break;
 
                                        case ServerProcessing.OneWay:                           
-                                               if (!HttpServer.SendResponse (reqArg, 200, null, null))
-                                               {
-                                                       //ooops couldnot send response !!!!!! and error occured
-                                               }
+                                               HttpServer.SendResponse (reqArg, 200, null, null);
                                                break;
 
                                        case ServerProcessing.Async: