Merge pull request #2092 from kasthack/system-web-stuff-import
[mono.git] / mcs / class / System / System.Net / FtpDataStream.cs
index 45af275065506f8ac51b8da72dbc2f2a92f30bc9..7bb47468c3aa899d5875cce7eaa0323b854d1f57 100644 (file)
@@ -14,36 +14,24 @@ using System.Runtime.Remoting.Messaging;
 using System.Threading;
 using System.Net;
 
-#if NET_2_0
-
 namespace System.Net
 {
        class FtpDataStream : Stream, IDisposable
        {
                FtpWebRequest request;
-               NetworkStream networkStream;
-               Socket socket;
+               Stream networkStream;
                bool disposed;
                bool isRead;
                int totalRead;
 
-               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.socket = socket;
-                       this.networkStream = new NetworkStream (socket, true);
+                       this.networkStream = stream;
                        this.isRead = isRead;
-
-                       if (request.EnableSsl) {
-                               FtpWebRequest.ChangeToSSLSocket (ref networkStream);
-                       }
                }
 
                public override bool CanRead {
@@ -79,7 +67,7 @@ namespace System.Net
                        }
                }
 
-               internal NetworkStream NetworkStream {
+               internal Stream NetworkStream {
                        get {
                                CheckDisposed ();
                                return networkStream;
@@ -108,8 +96,7 @@ namespace System.Net
 
                int ReadInternal (byte [] buffer, int offset, int size)
                {
-                       int nbytes;
-
+                       int nbytes = 0;
                        request.CheckIfAborted ();
 
                        try {
@@ -121,7 +108,8 @@ namespace System.Net
 
                        totalRead += nbytes;
                        if (nbytes == 0) {
-                               networkStream.Close ();
+                               networkStream = null;
+                               request.CloseDataConnection ();
                                request.SetTransferCompleted ();
                        }
 
@@ -167,7 +155,6 @@ namespace System.Net
                        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);
                }
 
@@ -244,27 +231,11 @@ namespace System.Net
                                return;
 
                        disposed = true;
-                       if (socket != null) {
-                               try {
-                                       if (socket.Poll (0, SelectMode.SelectRead)) {
-                                               byte [] bytes = new byte [2048];
-                                               int nbytes;
-                                               do {
-                                                       nbytes = socket.Receive (bytes);
-                                               } while (nbytes > 0 && socket.Poll (0, SelectMode.SelectRead));
-                                       }
-                               } catch {
-                                       // Ignore
-                               }
-
-                               try {
-                                       networkStream.Close ();
-                               } catch {
-                               }
-                               networkStream = null;
-                               socket = null;
+                       if (networkStream != null)  {
+                               request.CloseDataConnection ();
                                request.SetTransferCompleted ();
                                request = null;
+                               networkStream = null;
                        }
                }
 
@@ -278,5 +249,4 @@ namespace System.Net
        }
 }
 
-#endif