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