2009-07-02 Gonzalo Paniagua Javier <gonzalo@novell.com>
authorGonzalo Paniagua Javier <gonzalo.mono@gmail.com>
Thu, 2 Jul 2009 23:03:11 +0000 (23:03 -0000)
committerGonzalo Paniagua Javier <gonzalo.mono@gmail.com>
Thu, 2 Jul 2009 23:03:11 +0000 (23:03 -0000)
* WebConnection.cs: provide better error message when there's an error
writing.
* WebConnectionStream.cs: don't nullify the buffer until
CheckFinalStatus() decides that there are no more authentication
retries or redirects.

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

mcs/class/System/System.Net/ChangeLog
mcs/class/System/System.Net/WebConnection.cs
mcs/class/System/System.Net/WebConnectionStream.cs

index 37e2909b95b4f8dfdf5e0b29b8613183de2a3b1f..c17c79f7f5b567731b92a99bd993086fb3374828 100644 (file)
@@ -1,3 +1,11 @@
+2009-07-02 Gonzalo Paniagua Javier <gonzalo@novell.com>
+
+       * WebConnection.cs: provide better error message when there's an error
+       writing.
+       * WebConnectionStream.cs: don't nullify the buffer until
+       CheckFinalStatus() decides that there are no more authentication
+       retries or redirects.
+
 2009-07-02 Gonzalo Paniagua Javier <gonzalo@novell.com>
 
        * ServicePointManager.cs: implement ServerCertificateValidationCallback.
index 393fe596b5e10b687c3bd516152825bd50e06bb3..09b6f6bed0502f51eb9559899119213e15143ddb 100644 (file)
@@ -958,8 +958,9 @@ namespace System.Net
                        return result;
                }
 
-               internal bool Write (HttpWebRequest request, byte [] buffer, int offset, int size)
+               internal bool Write (HttpWebRequest request, byte [] buffer, int offset, int size, ref string err_msg)
                {
+                       err_msg = null;
                        lock (this) {
                                if (Data.request != request)
                                        throw new ObjectDisposedException (typeof (NetworkStream).FullName);
@@ -973,8 +974,9 @@ namespace System.Net
                                if (ssl && !certsAvailable)
                                        GetCertificates ();
                        } catch (Exception e) {
+                               err_msg = e.Message;
                                WebExceptionStatus wes = WebExceptionStatus.SendFailure;
-                               string msg = "Write";
+                               string msg = "Write: " + err_msg;
                                if (e is WebException) {
                                        HandleError (wes, e, msg);
                                        return false;
index 006536d52255ad3fd93dcdef3577667b38e16eec..9cda6c424b9e713ca83e67f631048903d78bc73d 100644 (file)
@@ -641,7 +641,6 @@ namespace System.Net
                        requestWritten = true;
                        byte [] bytes = writeBuffer.GetBuffer ();
                        int length = (int) writeBuffer.Length;
-                       writeBuffer = null;
                        // Headers already written to the stream
                        return (length > 0) ? cnc.BeginWrite (request, bytes, 0, length, cb, state) : null;
                }
@@ -652,8 +651,9 @@ namespace System.Net
                                return;
 
                        headersSent = true;
-                       if (!cnc.Write (request, headers, 0, headers.Length))
-                               throw new WebException ("Error writing request.", null, WebExceptionStatus.SendFailure, null);
+                       string err_msg = null;
+                       if (!cnc.Write (request, headers, 0, headers.Length, ref err_msg))
+                               throw new WebException ("Error writing request: " + err_msg, null, WebExceptionStatus.SendFailure, null);
                }
 
                internal void WriteRequest ()
@@ -671,7 +671,6 @@ namespace System.Net
 
                        byte [] bytes = writeBuffer.GetBuffer ();
                        int length = (int) writeBuffer.Length;
-                       writeBuffer = null;
                        if (request.ContentLength != -1 && request.ContentLength < length) {
                                nextReadCalled = true;
                                cnc.Close (true);
@@ -719,7 +718,8 @@ namespace System.Net
                                disposed = true;
                                pending.WaitOne ();
                                byte [] chunk = Encoding.ASCII.GetBytes ("0\r\n\r\n");
-                               cnc.Write (request, chunk, 0, chunk.Length);
+                               string err_msg = null;
+                               cnc.Write (request, chunk, 0, chunk.Length, ref err_msg);
                                return;
                        }