dfs 2003/08/25 22:43:56 Modified: net/src/java/org/apache/commons/net/ftp FTP.java net/src/java/org/apache/commons/net/nntp NNTP.java net/src/java/org/apache/commons/net/pop3 POP3.java net/src/java/org/apache/commons/net/smtp SMTP.java net/xdocs changes.xml Log: [EMAIL PROTECTED] reported failure of SMTP on OS/390 which has EBCDIC as the native character set. I changed the connection hooks (_connectAction_()) for the FTP, SMTP, POP3, and NNTP classes to force use of an 8-bit US-ASCII superset (ISO-8859-1) for protocol communication. This was necessary because InputStreamReader and OutputStreamWriter use the default client-side character set encoding. I don't know if this should be user-configurable or if the encodings should be fixed. Regardless, all JVMs are required to support US-ASCII and ISO-8859-1, so there shouldn't be a problem with using a fixed encoding. PR: 22656 Revision Changes Path 1.5 +8 -2 jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTP.java Index: FTP.java =================================================================== RCS file: /home/cvs/jakarta-commons/net/src/java/org/apache/commons/net/ftp/FTP.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- FTP.java 18 May 2003 04:03:16 -0000 1.4 +++ FTP.java 26 Aug 2003 05:43:55 -0000 1.5 @@ -244,6 +244,10 @@ ***/ public static final int COMPRESSED_TRANSFER_MODE = 12; + // We have to ensure that the protocol communication is in ASCII + // but we use ISO-8859-1 just in case 8-bit characters cross + // the wire. + private static final String __DEFAULT_ENCODING = "ISO-8859-1"; private static final String __modes = "ABILNTCFRPSBC"; private StringBuffer __commandBuffer; @@ -349,9 +353,11 @@ { super._connectAction_(); _controlInput = - new BufferedReader(new InputStreamReader(getInputStream())); + new BufferedReader(new InputStreamReader(getInputStream(), + __DEFAULT_ENCODING)); _controlOutput = - new BufferedWriter(new OutputStreamWriter(getOutputStream())); + new BufferedWriter(new OutputStreamWriter(getOutputStream(), + __DEFAULT_ENCODING)); __getReply(); // If we received code 120, we have to fetch completion reply. if (FTPReply.isPositivePreliminary(_replyCode)) 1.6 +9 -2 jakarta-commons/net/src/java/org/apache/commons/net/nntp/NNTP.java Index: NNTP.java =================================================================== RCS file: /home/cvs/jakarta-commons/net/src/java/org/apache/commons/net/nntp/NNTP.java,v retrieving revision 1.5 retrieving revision 1.6 diff -u -r1.5 -r1.6 --- NNTP.java 19 Apr 2003 20:49:13 -0000 1.5 +++ NNTP.java 26 Aug 2003 05:43:55 -0000 1.6 @@ -120,6 +120,11 @@ /*** The default NNTP port. Its value is 119 according to RFC 977. ***/ public static final int DEFAULT_PORT = 119; + // We have to ensure that the protocol communication is in ASCII + // but we use ISO-8859-1 just in case 8-bit characters cross + // the wire. + private static final String __DEFAULT_ENCODING = "ISO-8859-1"; + private StringBuffer __commandBuffer; boolean _isAllowedToPost; @@ -204,9 +209,11 @@ { super._connectAction_(); _reader_ = - new BufferedReader(new InputStreamReader(_input_)); + new BufferedReader(new InputStreamReader(_input_, + __DEFAULT_ENCODING)); _writer_ = - new BufferedWriter(new OutputStreamWriter(_output_)); + new BufferedWriter(new OutputStreamWriter(_output_, + __DEFAULT_ENCODING)); __getReply(); _isAllowedToPost = (_replyCode == NNTPReply.SERVER_READY_POSTING_ALLOWED); 1.4 +11 -2 jakarta-commons/net/src/java/org/apache/commons/net/pop3/POP3.java Index: POP3.java =================================================================== RCS file: /home/cvs/jakarta-commons/net/src/java/org/apache/commons/net/pop3/POP3.java,v retrieving revision 1.3 retrieving revision 1.4 diff -u -r1.3 -r1.4 --- POP3.java 26 Jan 2003 00:21:44 -0000 1.3 +++ POP3.java 26 Aug 2003 05:43:55 -0000 1.4 @@ -109,6 +109,11 @@ static final String _OK = "+OK"; static final String _ERROR = "-ERR"; + // We have to ensure that the protocol communication is in ASCII + // but we use ISO-8859-1 just in case 8-bit characters cross + // the wire. + private static final String __DEFAULT_ENCODING = "ISO-8859-1"; + private int __popState; private BufferedWriter __writer; private StringBuffer __commandBuffer; @@ -173,8 +178,12 @@ protected void _connectAction_() throws IOException { super._connectAction_(); - _reader = new BufferedReader(new InputStreamReader(_input_)); - __writer = new BufferedWriter(new OutputStreamWriter(_output_)); + _reader = + new BufferedReader(new InputStreamReader(_input_, + __DEFAULT_ENCODING)); + __writer = + new BufferedWriter(new OutputStreamWriter(_output_, + __DEFAULT_ENCODING)); __getReply(); setState(AUTHORIZATION_STATE); } 1.5 +17 -2 jakarta-commons/net/src/java/org/apache/commons/net/smtp/SMTP.java Index: SMTP.java =================================================================== RCS file: /home/cvs/jakarta-commons/net/src/java/org/apache/commons/net/smtp/SMTP.java,v retrieving revision 1.4 retrieving revision 1.5 diff -u -r1.4 -r1.5 --- SMTP.java 18 May 2003 04:03:17 -0000 1.4 +++ SMTP.java 26 Aug 2003 05:43:55 -0000 1.5 @@ -125,6 +125,11 @@ /*** The default SMTP port (25). ***/ public static final int DEFAULT_PORT = 25; + // We have to ensure that the protocol communication is in ASCII + // but we use ISO-8859-1 just in case 8-bit characters cross + // the wire. + private static final String __DEFAULT_ENCODING = "ISO-8859-1"; + private StringBuffer __commandBuffer; BufferedReader _reader; @@ -258,9 +263,11 @@ { super._connectAction_(); _reader = - new BufferedReader(new InputStreamReader(_input_)); + new BufferedReader(new InputStreamReader(_input_, + __DEFAULT_ENCODING)); _writer = - new BufferedWriter(new OutputStreamWriter(_output_)); + new BufferedWriter(new OutputStreamWriter(_output_, + __DEFAULT_ENCODING)); __getReply(); } @@ -781,3 +788,11 @@ } } + +/* Emacs configuration + * Local variables: ** + * mode: java ** + * c-basic-offset: 4 ** + * indent-tabs-mode: nil ** + * End: ** + */ 1.12 +12 -0 jakarta-commons/net/xdocs/changes.xml Index: changes.xml =================================================================== RCS file: /home/cvs/jakarta-commons/net/xdocs/changes.xml,v retrieving revision 1.11 retrieving revision 1.12 diff -u -r1.11 -r1.12 --- changes.xml 25 Aug 2003 22:29:49 -0000 1.11 +++ changes.xml 26 Aug 2003 05:43:56 -0000 1.12 @@ -16,6 +16,18 @@ </action> --> <action dev="dfs" type="fix"> + Changed connection hooks for FTP, SMTP, POP3, and NNTP classes + to force use of an 8-bit US-ASCII superset (ISO-8859-1) for + protocol communication. This was necessary because + InputStreamReader and OutputStreamWriter use the default + client-side character set encoding. [EMAIL PROTECTED] + reported failure of SMTP on OS/390 which has EBCDIC as the + native character set. + <pre> + drwxr-xr-x 1 usernameftp 512 Jan 29 23:32 prog + </pre> + </action> + <action dev="dfs" type="fix"> Applied variation of fix suggested by Matthieu Recouly <[EMAIL PROTECTED]> so that UnixFTPEntryParser may handle listings of the form
--------------------------------------------------------------------- To unsubscribe, e-mail: [EMAIL PROTECTED] For additional commands, e-mail: [EMAIL PROTECTED]