Explorar o código

2009-07-02 Gonzalo Paniagua Javier <[email protected]>

	* 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
Gonzalo Paniagua Javier %!s(int64=16) %!d(string=hai) anos
pai
achega
781e4faf6c

+ 8 - 0
mcs/class/System/System.Net/ChangeLog

@@ -1,3 +1,11 @@
+2009-07-02 Gonzalo Paniagua Javier <[email protected]>
+
+	* 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 <[email protected]>
 
 	* ServicePointManager.cs: implement ServerCertificateValidationCallback.

+ 4 - 2
mcs/class/System/System.Net/WebConnection.cs

@@ -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;

+ 5 - 5
mcs/class/System/System.Net/WebConnectionStream.cs

@@ -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;
 			}