Merge pull request #2092 from kasthack/system-web-stuff-import
[mono.git] / mcs / class / System / System.Net / FtpDataStream.cs
index 2418ed2dfecdd6fa3662c230d49e9afa479f5c1a..7bb47468c3aa899d5875cce7eaa0323b854d1f57 100644 (file)
@@ -11,43 +11,27 @@ using System;
 using System.IO;
 using System.Net.Sockets;
 using System.Runtime.Remoting.Messaging;
-using System.Threading;\r
+using System.Threading;
 using System.Net;
 
-#if NET_2_0
-
 namespace System.Net
 {
        class FtpDataStream : Stream, IDisposable
        {
                FtpWebRequest request;
-               NetworkStream networkStream;
+               Stream networkStream;
                bool disposed;
                bool isRead;
                int totalRead;
-               int contentLength;
-
-               ManualResetEvent closewh;
 
-               internal FtpDataStream (FtpWebRequest request, Socket socket, bool isRead)
+               internal FtpDataStream (FtpWebRequest request, Stream stream, bool isRead)
                {
                        if (request == null)
                                throw new ArgumentNullException ("request");
-                       if (socket == null)
-                               throw new ArgumentNullException ("socket");
-                       if (!socket.Connected)
-                               throw new ArgumentException ("socket");
 
                        this.request = request;
-                       this.contentLength = socket.Available;
-                       this.networkStream = new NetworkStream (socket, true);
-                       this.isRead = isRead;\r
-\r
-                       if (request.EnableSsl) {\r
-                               FtpWebRequest.ChangeToSSLSocket (ref networkStream);\r
-                       }
-
-                       closewh = new ManualResetEvent (false);
+                       this.networkStream = stream;
+                       this.isRead = isRead;
                }
 
                public override bool CanRead {
@@ -83,7 +67,7 @@ namespace System.Net
                        }
                }
 
-               internal NetworkStream NetworkStream {
+               internal Stream NetworkStream {
                        get {
                                CheckDisposed ();
                                return networkStream;
@@ -91,12 +75,8 @@ namespace System.Net
                }
 
                public override void Close ()
-               {\r
-                       if (!disposed) {\r
-                               networkStream.Close ();\r
-                               request.SetTransferCompleted ();\r
-                               ((IDisposable) this).Dispose ();\r
-                       }
+               {
+                       Dispose (true);
                }
 
                public override void Flush ()
@@ -116,24 +96,23 @@ namespace System.Net
 
                int ReadInternal (byte [] buffer, int offset, int size)
                {
-                       int nbytes;\r
-\r
+                       int nbytes = 0;
                        request.CheckIfAborted ();
 
                        try {
                                // Probably it would be better to have the socket here
-                               nbytes = networkStream.Read (buffer, offset, size);\r
+                               nbytes = networkStream.Read (buffer, offset, size);
                        } catch (IOException) {
                                throw new ProtocolViolationException ("Server commited a protocol violation");
                        }
 
-                       totalRead += nbytes;\r
-                       if (nbytes == 0) {\r
-                               contentLength = totalRead;\r
-                               request.SetTransferCompleted ();\r
-                               networkStream.Close ();\r
+                       totalRead += nbytes;
+                       if (nbytes == 0) {
+                               networkStream = null;
+                               request.CloseDataConnection ();
+                               request.SetTransferCompleted ();
                        }
-                       
+
                        return nbytes;
                }
 
@@ -171,12 +150,11 @@ namespace System.Net
                }
 
                public override int Read (byte [] buffer, int offset, int size)
-               {\r
-                       request.CheckIfAborted ();\r
+               {
+                       request.CheckIfAborted ();
                        IAsyncResult ar = BeginRead (buffer, offset, size, null, null);
                        if (!ar.IsCompleted && !ar.AsyncWaitHandle.WaitOne (request.ReadWriteTimeout, false))
                                throw new WebException ("Read timed out.", WebExceptionStatus.Timeout);
-
                        return EndRead (ar);
                }
 
@@ -184,8 +162,8 @@ namespace System.Net
                delegate void WriteDelegate (byte [] buffer, int offset, int size);
                
                void WriteInternal (byte [] buffer, int offset, int size)
-               {\r
-                       request.CheckIfAborted ();\r
+               {
+                       request.CheckIfAborted ();
                        
                        try {
                                networkStream.Write (buffer, offset, size);
@@ -227,8 +205,8 @@ namespace System.Net
                }
 
                public override void Write (byte [] buffer, int offset, int size)
-               {\r
-                       request.CheckIfAborted ();\r
+               {
+                       request.CheckIfAborted ();
                        IAsyncResult ar = BeginWrite (buffer, offset, size, null, null);
                        if (!ar.IsCompleted && !ar.AsyncWaitHandle.WaitOne (request.ReadWriteTimeout, false))
                                throw new WebException ("Read timed out.", WebExceptionStatus.Timeout);
@@ -253,11 +231,12 @@ namespace System.Net
                                return;
 
                        disposed = true;
-
-                       networkStream.Close ();
-                       networkStream = null;
-
-                       closewh.Set ();
+                       if (networkStream != null)  {
+                               request.CloseDataConnection ();
+                               request.SetTransferCompleted ();
+                               request = null;
+                               networkStream = null;
+                       }
                }
 
                void CheckDisposed ()
@@ -267,15 +246,7 @@ namespace System.Net
                }
 
                delegate int ReadDelegate (byte [] buffer, int offset, int size);
-
-               // We need to know whether the stream has been closed
-               internal ManualResetEvent CloseWaitHandle {
-                       get {
-                               return closewh;
-                       }
-               }
        }
 }
 
-#endif