You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by se...@apache.org on 2011/03/08 17:56:40 UTC
svn commit: r1079436 - in /commons/proper/net/trunk/src: changes/changes.xml
main/java/org/apache/commons/net/ftp/FTPClient.java
Author: sebb
Date: Tue Mar 8 16:56:40 2011
New Revision: 1079436
URL: http://svn.apache.org/viewvc?rev=1079436&view=rev
Log:
NET-314 The FTP client should autodetect the control encoding.
Modified:
commons/proper/net/trunk/src/changes/changes.xml
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPClient.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=1079436&r1=1079435&r2=1079436&view=diff
==============================================================================
--- commons/proper/net/trunk/src/changes/changes.xml (original)
+++ commons/proper/net/trunk/src/changes/changes.xml Tue Mar 8 16:56:40 2011
@@ -57,6 +57,9 @@ The <action> type attribute can be add,u
<body>
<release version="3.0" date="TBA" description="TBA">
+ <action issue="NET-314" dev="sebb" type="add" due-to="Bogdan Drozdowski" due-to-email="bogdandr # op . pl">
+ The FTP client should autodetect the control encoding.
+ </action>
<action issue="NET-363" dev="sebb" type="fix" due-to="daniel damon">
Can't connect to a server behind firewall in passive mode.
</action>
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=1079436&r1=1079435&r2=1079436&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 Tue Mar 8 16:56:40 2011
@@ -18,10 +18,12 @@ package org.apache.commons.net.ftp;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
+import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
+import java.io.OutputStreamWriter;
import java.net.Inet6Address;
import java.net.InetAddress;
import java.net.ServerSocket;
@@ -353,6 +355,9 @@ implements Configurable
"(\\d{1,3},\\d{1,3},\\d{1,3},\\d{1,3}),(\\d{1,3}),(\\d{1,3})");
}
+ /** Controls the automatic server encoding detection (only UTF-8 supported). */
+ private boolean __autodetectEncoding = false;
+
private static class PropertiesSingleton {
static final Properties PROPERTIES;
@@ -719,6 +724,38 @@ implements Configurable
{
super._connectAction_();
__initDefaults();
+ // must be after super._connectAction_(), because otherwise we get an
+ // Exception claiming we're not connected
+ if ( __autodetectEncoding )
+ {
+ ArrayList<String> oldReplyLines = new ArrayList<String> (_replyLines);
+ int oldReplyCode = _replyCode;
+ if ( features() )
+ {
+ String[] features = getReplyStrings();
+ if ( features != null )
+ {
+ for ( int i = 0; i < features.length; i++ )
+ {
+ if ( features[i].trim().toUpperCase().equals("UTF8")
+ || features[i].trim().toUpperCase().equals("UTF-8") )
+ {
+ setControlEncoding("UTF-8");
+ _controlInput_ =
+ new BufferedReader(new InputStreamReader(_socket_.getInputStream(),
+ getControlEncoding()));
+ _controlOutput_ =
+ new BufferedWriter(new OutputStreamWriter(_socket_.getOutputStream(),
+ getControlEncoding()));
+ break;
+ }
+ }
+ }
+ }
+ // restore the original reply (server greeting)
+ _replyLines = new ArrayList<String> (oldReplyLines);
+ _replyCode = oldReplyCode;
+ }
}
@@ -3021,6 +3058,25 @@ implements Configurable
merged.addCopyStreamListener(__copyStreamListener);
return merged;
}
+
+ /**
+ * Enables or disables automatic server encoding detection (only UTF-8 supported).
+ * @param autodetect If true, automatic server encoding detection will be enabled.
+ */
+ public void setAutodetectUTF8(boolean autodetect)
+ {
+ __autodetectEncoding = autodetect;
+ }
+
+ /**
+ * Tells if automatic server encoding detection is enabled or disabled.
+ * @return true, if automatic server encoding detection is enabled.
+ */
+ public boolean getAutodetectUTF8()
+ {
+ return __autodetectEncoding;
+ }
+
}
/* Emacs configuration
@@ -3030,3 +3086,4 @@ implements Configurable
* indent-tabs-mode: nil **
* End: **
*/
+/* kate: indent-width 4; replace-tabs on; */