Author: sebb
Date: Thu Jan  8 23:29:40 2015
New Revision: 1650420

URL: http://svn.apache.org/r1650420
Log:
NET-552 SocketTimeoutException connecting a FTP server via an HTTP Proxy

Modified:
    commons/proper/net/trunk/src/changes/changes.xml
    commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTP.java
    
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPClient.java
    
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPHTTPClient.java

Modified: commons/proper/net/trunk/src/changes/changes.xml
URL: 
http://svn.apache.org/viewvc/commons/proper/net/trunk/src/changes/changes.xml?rev=1650420&r1=1650419&r2=1650420&view=diff
==============================================================================
--- commons/proper/net/trunk/src/changes/changes.xml [utf-8] (original)
+++ commons/proper/net/trunk/src/changes/changes.xml [utf-8] Thu Jan  8 
23:29:40 2015
@@ -62,12 +62,15 @@ The <action> type attribute can be add,u
      -->
 
     <body>
-        <release version="3.4" date="2014-01-??" description="
+        <release version="3.4" date="2015-01-??" description="
 This is mainly a bug-fix release. See further details below.
   Notable additions:
   IMAPExportMbox (example app) allows IMAP folders to be exported into an mbox 
file.
   This is the inverse of the IMAPImportMbox example added previously
         ">
+            <action issue="NET-552" type="fix" dev="sebb" due-to="Quentin 
Devriendt">
+            SocketTimeoutException connecting a FTP server via an HTTP Proxy
+            </action>
             <action issue="NET-528" type="add" dev="sebb">
             FTPListParseEngine does not provide access to raw responses
             </action>

Modified: 
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTP.java
URL: 
http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTP.java?rev=1650420&r1=1650419&r2=1650420&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTP.java 
(original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTP.java 
Thu Jan  8 23:29:40 2015
@@ -21,6 +21,7 @@ import java.io.BufferedWriter;
 import java.io.IOException;
 import java.io.InputStreamReader;
 import java.io.OutputStreamWriter;
+import java.io.Reader;
 import java.net.Inet4Address;
 import java.net.Inet6Address;
 import java.net.InetAddress;
@@ -377,9 +378,18 @@ public class FTP extends SocketClient
     @Override
     protected void _connectAction_() throws IOException
     {
+        _connectAction_(null);
+    }
+
+
+    protected void _connectAction_(Reader socketIsReader) throws IOException {
         super._connectAction_(); // sets up _input_ and _output_
-        _controlInput_ =
-            new CRLFLineReader(new InputStreamReader(_input_, 
getControlEncoding()));
+        if(socketIsReader == null) {
+            _controlInput_ =
+                    new CRLFLineReader(new InputStreamReader(_input_, 
getControlEncoding()));
+        } else {
+            _controlInput_ = new CRLFLineReader(socketIsReader);
+        }
         _controlOutput_ =
             new BufferedWriter(new OutputStreamWriter(_output_, 
getControlEncoding()));
         if (connectTimeout > 0) { // NET-385

Modified: 
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPClient.java
URL: 
http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPClient.java?rev=1650420&r1=1650419&r2=1650420&view=diff
==============================================================================
--- 
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPClient.java
 (original)
+++ 
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPClient.java
 Thu Jan  8 23:29:40 2015
@@ -24,6 +24,7 @@ import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
 import java.io.OutputStreamWriter;
+import java.io.Reader;
 import java.net.Inet6Address;
 import java.net.InetAddress;
 import java.net.InetSocketAddress;
@@ -939,7 +940,14 @@ implements Configurable
     @Override
     protected void _connectAction_() throws IOException
     {
-        super._connectAction_(); // sets up _input_ and _output_
+        _connectAction_(null);
+    }
+
+
+    @Override
+    protected void _connectAction_(Reader socketIsReader) throws IOException
+    {
+       super._connectAction_(socketIsReader); // sets up _input_ and _output_
         __initDefaults();
         // must be after super._connectAction_(), because otherwise we get an
         // Exception claiming we're not connected

Modified: 
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPHTTPClient.java
URL: 
http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPHTTPClient.java?rev=1650420&r1=1650419&r2=1650420&view=diff
==============================================================================
--- 
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPHTTPClient.java
 (original)
+++ 
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPHTTPClient.java
 Thu Jan  8 23:29:40 2015
@@ -22,6 +22,7 @@ import java.io.IOException;
 import java.io.InputStream;
 import java.io.InputStreamReader;
 import java.io.OutputStream;
+import java.io.Reader;
 import java.io.UnsupportedEncodingException;
 import java.net.Inet6Address;
 import java.net.Socket;
@@ -131,18 +132,19 @@ public class FTPHTTPClient extends FTPCl
         _socket_ = new Socket(proxyHost, proxyPort);
         _input_ = _socket_.getInputStream();
         _output_ = _socket_.getOutputStream();
+        Reader socketIsReader;
         try {
-            tunnelHandshake(host, port, _input_, _output_);
+            socketIsReader = tunnelHandshake(host, port, _input_, _output_);
         }
         catch (Exception e) {
             IOException ioe = new IOException("Could not connect to " + host+ 
" using port " + port);
             ioe.initCause(e);
             throw ioe;
         }
-        super._connectAction_();
+        super._connectAction_(socketIsReader);
     }
 
-    private void tunnelHandshake(String host, int port, InputStream input, 
OutputStream output) throws IOException,
+    private BufferedReader tunnelHandshake(String host, int port, InputStream 
input, OutputStream output) throws IOException,
     UnsupportedEncodingException {
         final String connectString = "CONNECT "  + host + ":" + port  + " 
HTTP/1.1";
         final String hostString = "Host: " + host + ":" + port;
@@ -193,6 +195,7 @@ public class FTPHTTPClient extends FTPCl
             }
             throw new IOException(msg.toString());
         }
+        return reader;
     }
 }
 


Reply via email to