You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by gg...@apache.org on 2012/11/28 03:40:41 UTC
svn commit: r1414510 - in
/commons/proper/net/trunk/src/main/java/org/apache/commons/net: ./ bsd/
daytime/ finger/ ftp/ imap/ pop3/ smtp/ telnet/ util/
Author: ggregory
Date: Wed Nov 28 02:40:39 2012
New Revision: 1414510
URL: http://svn.apache.org/viewvc?rev=1414510&view=rev
Log:
Add a Charset field to the two root abstract socket classes that provide a common base implementation for socket-based subclasses. The default value is the platform encoding. Subclasses can now use this value instead of relying on APIs that do not specify an encoding. For example String#getBytes(Charset) instead of getBytes(). The behavior is unchanged but the FindBugs emits fewer warnings. Note that it is now easy for subclasses to specify an encoding consistently. If you search for "UTF-8", you find uses of the "UTF-8" encoding and of the platform encoding in the same class, which are likely bugs. These can now be fixed in a much easier and consistent manner.
Added:
commons/proper/net/trunk/src/main/java/org/apache/commons/net/util/Charsets.java (with props)
Modified:
commons/proper/net/trunk/src/main/java/org/apache/commons/net/DatagramSocketClient.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/SocketClient.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/bsd/RExecClient.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/daytime/DaytimeTCPClient.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/daytime/DaytimeUDPClient.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/finger/FingerClient.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPHTTPClient.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPListParseEngine.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/imap/AuthenticatingIMAPClient.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/pop3/ExtendedPOP3Client.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/pop3/POP3Client.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/smtp/AuthenticatingSMTPClient.java
commons/proper/net/trunk/src/main/java/org/apache/commons/net/telnet/Telnet.java
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/DatagramSocketClient.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/DatagramSocketClient.java?rev=1414510&r1=1414509&r2=1414510&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/DatagramSocketClient.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/DatagramSocketClient.java Wed Nov 28 02:40:39 2012
@@ -20,6 +20,7 @@ package org.apache.commons.net;
import java.net.DatagramSocket;
import java.net.InetAddress;
import java.net.SocketException;
+import java.nio.charset.Charset;
/***
* The DatagramSocketClient provides the basic operations that are required
@@ -54,6 +55,11 @@ public abstract class DatagramSocketClie
***/
private static final DatagramSocketFactory __DEFAULT_SOCKET_FACTORY =
new DefaultDatagramSocketFactory();
+
+ /**
+ * Charset to use for byte IO.
+ */
+ private Charset charset = Charset.defaultCharset();
/*** The timeout to use after opening a socket. ***/
protected int _timeout_;
@@ -274,4 +280,24 @@ public abstract class DatagramSocketClie
_socketFactory_ = factory;
}
}
+
+ /**
+ * Gets the charset.
+ *
+ * @return the charset.
+ * @since 3.3
+ */
+ public Charset getCharset() {
+ return charset;
+ }
+
+ /**
+ * Sets the charset.
+ *
+ * @param charset the charset.
+ * @since 3.3
+ */
+ public void setCharset(Charset charset) {
+ this.charset = charset;
+ }
}
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/SocketClient.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/SocketClient.java?rev=1414510&r1=1414509&r2=1414510&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/SocketClient.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/SocketClient.java Wed Nov 28 02:40:39 2012
@@ -26,6 +26,7 @@ import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.Socket;
import java.net.SocketException;
+import java.nio.charset.Charset;
import javax.net.ServerSocketFactory;
import javax.net.SocketFactory;
@@ -106,11 +107,17 @@ public abstract class SocketClient
/** The proxy to use when connecting. */
private Proxy connProxy;
+
+ /**
+ * Charset to use for byte IO.
+ */
+ private Charset charset = Charset.defaultCharset();
/**
* Default constructor for SocketClient. Initializes
* _socket_ to null, _timeout_ to 0, _defaultPort to 0,
- * _isConnected_ to false, and _socketFactory_ to a shared instance of
+ * _isConnected_ to false, charset to {@code Charset.defaultCharset()}
+ * and _socketFactory_ to a shared instance of
* {@link org.apache.commons.net.DefaultSocketFactory}.
*/
public SocketClient()
@@ -825,6 +832,26 @@ public abstract class SocketClient
return connProxy;
}
+ /**
+ * Gets the charset.
+ *
+ * @return the charset.
+ * @since 3.3
+ */
+ public Charset getCharset() {
+ return charset;
+ }
+
+ /**
+ * Sets the charset.
+ *
+ * @param charset the charset.
+ * @since 3.3
+ */
+ public void setCharset(Charset charset) {
+ this.charset = charset;
+ }
+
/*
* N.B. Fields cannot be pulled up into a super-class without breaking binary compatibility,
* so the abstract method is needed to pass the instance to the methods which were moved here.
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/bsd/RExecClient.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/bsd/RExecClient.java?rev=1414510&r1=1414509&r2=1414510&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/bsd/RExecClient.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/bsd/RExecClient.java Wed Nov 28 02:40:39 2012
@@ -212,11 +212,11 @@ public class RExecClient extends SocketC
_output_.write(NULL_CHAR);
}
- _output_.write(username.getBytes());
+ _output_.write(username.getBytes(this.getCharset()));
_output_.write(NULL_CHAR);
- _output_.write(password.getBytes());
+ _output_.write(password.getBytes(this.getCharset()));
_output_.write(NULL_CHAR);
- _output_.write(command.getBytes());
+ _output_.write(command.getBytes(this.getCharset()));
_output_.write(NULL_CHAR);
_output_.flush();
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/daytime/DaytimeTCPClient.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/daytime/DaytimeTCPClient.java?rev=1414510&r1=1414509&r2=1414510&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/daytime/DaytimeTCPClient.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/daytime/DaytimeTCPClient.java Wed Nov 28 02:40:39 2012
@@ -71,7 +71,7 @@ public final class DaytimeTCPClient exte
StringBuilder result = new StringBuilder(__buffer.length);
BufferedReader reader;
- reader = new BufferedReader(new InputStreamReader(_input_));
+ reader = new BufferedReader(new InputStreamReader(_input_, this.getCharset()));
while (true)
{
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/daytime/DaytimeUDPClient.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/daytime/DaytimeUDPClient.java?rev=1414510&r1=1414509&r2=1414510&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/daytime/DaytimeUDPClient.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/daytime/DaytimeUDPClient.java Wed Nov 28 02:40:39 2012
@@ -67,7 +67,7 @@ public final class DaytimeUDPClient exte
_socket_.send(sendPacket);
_socket_.receive(receivePacket);
- return new String(receivePacket.getData(), 0, receivePacket.getLength());
+ return new String(receivePacket.getData(), 0, receivePacket.getLength(), this.getCharset());
}
/** Same as <code>getTime(host, DaytimeUDPClient.DEFAULT_PORT);</code> */
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/finger/FingerClient.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/finger/FingerClient.java?rev=1414510&r1=1414509&r2=1414510&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/finger/FingerClient.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/finger/FingerClient.java Wed Nov 28 02:40:39 2012
@@ -24,6 +24,7 @@ import java.io.BufferedOutputStream;
import java.io.DataOutputStream;
import org.apache.commons.net.SocketClient;
+import org.apache.commons.net.util.Charsets;
/***
* The FingerClient class implements the client side of the Internet Finger
@@ -89,7 +90,7 @@ public class FingerClient extends Socket
input =
new BufferedReader(new InputStreamReader(getInputStream(longOutput,
- username)));
+ username), this.getCharset()));
try {
while (true)
@@ -167,8 +168,7 @@ public class FingerClient extends Socket
buffer.append(username);
buffer.append(SocketClient.NETASCII_EOL);
- byte[] encodedQuery =
- (encoding == null ? buffer.toString().getBytes() : buffer.toString().getBytes(encoding));
+ byte[] encodedQuery = buffer.toString().getBytes(Charsets.toCharset(encoding));
output = new DataOutputStream(new BufferedOutputStream(_output_, 1024));
output.write(encodedQuery, 0, encodedQuery.length);
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=1414510&r1=1414509&r2=1414510&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 Wed Nov 28 02:40:39 2012
@@ -154,7 +154,7 @@ public class FTPHTTPClient extends FTPCl
List<String> response = new ArrayList<String>();
BufferedReader reader = new BufferedReader(
- new InputStreamReader(input));
+ new InputStreamReader(input, this.getCharset()));
for (String line = reader.readLine(); line != null
&& line.length() > 0; line = reader.readLine()) {
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPListParseEngine.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPListParseEngine.java?rev=1414510&r1=1414509&r2=1414510&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPListParseEngine.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/ftp/FTPListParseEngine.java Wed Nov 28 02:40:39 2012
@@ -27,6 +27,8 @@ import java.util.LinkedList;
import java.util.List;
import java.util.ListIterator;
+import org.apache.commons.net.util.Charsets;
+
/**
* This class handles the entire process of parsing a listing of
@@ -120,15 +122,8 @@ public class FTPListParseEngine {
*/
private void readStream(InputStream stream, String encoding) throws IOException
{
- BufferedReader reader;
- if (encoding == null)
- {
- reader = new BufferedReader(new InputStreamReader(stream));
- }
- else
- {
- reader = new BufferedReader(new InputStreamReader(stream, encoding));
- }
+ BufferedReader reader = new BufferedReader(
+ new InputStreamReader(stream, Charsets.toCharset(encoding)));
String line = this.parser.readNextEntry(reader);
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/imap/AuthenticatingIMAPClient.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/imap/AuthenticatingIMAPClient.java?rev=1414510&r1=1414509&r2=1414510&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/imap/AuthenticatingIMAPClient.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/imap/AuthenticatingIMAPClient.java Wed Nov 28 02:40:39 2012
@@ -150,7 +150,7 @@ public class AuthenticatingIMAPClient ex
{
// the server sends an empty response ("+ "), so we don't have to read it.
int result = sendData(
- Base64.encodeBase64StringUnChunked(("\000" + username + "\000" + password).getBytes())
+ Base64.encodeBase64StringUnChunked(("\000" + username + "\000" + password).getBytes(this.getCharset()))
);
if (result == IMAPReply.OK)
{
@@ -164,11 +164,11 @@ public class AuthenticatingIMAPClient ex
byte[] serverChallenge = Base64.decodeBase64(getReplyString().substring(2).trim());
// get the Mac instance
Mac hmac_md5 = Mac.getInstance("HmacMD5");
- hmac_md5.init(new SecretKeySpec(password.getBytes(), "HmacMD5"));
+ hmac_md5.init(new SecretKeySpec(password.getBytes(this.getCharset()), "HmacMD5"));
// compute the result:
- byte[] hmacResult = _convertToHexString(hmac_md5.doFinal(serverChallenge)).getBytes();
+ byte[] hmacResult = _convertToHexString(hmac_md5.doFinal(serverChallenge)).getBytes(this.getCharset());
// join the byte arrays to form the reply
- byte[] usernameBytes = username.getBytes();
+ byte[] usernameBytes = username.getBytes(this.getCharset());
byte[] toEncode = new byte[usernameBytes.length + 1 /* the space */ + hmacResult.length];
System.arraycopy(usernameBytes, 0, toEncode, 0, usernameBytes.length);
toEncode[usernameBytes.length] = ' ';
@@ -186,11 +186,11 @@ public class AuthenticatingIMAPClient ex
// the server sends fixed responses (base64("Username") and
// base64("Password")), so we don't have to read them.
if (sendData(
- Base64.encodeBase64StringUnChunked(username.getBytes())) != IMAPReply.CONT)
+ Base64.encodeBase64StringUnChunked(username.getBytes(this.getCharset()))) != IMAPReply.CONT)
{
return false;
}
- int result = sendData(Base64.encodeBase64StringUnChunked(password.getBytes()));
+ int result = sendData(Base64.encodeBase64StringUnChunked(password.getBytes(this.getCharset())));
if (result == IMAPReply.OK)
{
setState(IMAP.IMAPState.AUTH_STATE);
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/pop3/ExtendedPOP3Client.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/pop3/ExtendedPOP3Client.java?rev=1414510&r1=1414509&r2=1414510&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/pop3/ExtendedPOP3Client.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/pop3/ExtendedPOP3Client.java Wed Nov 28 02:40:39 2012
@@ -77,19 +77,19 @@ public class ExtendedPOP3Client extends
// the server sends an empty response ("+ "), so we don't have to read it.
return sendCommand(
new String(
- Base64.encodeBase64(("\000" + username + "\000" + password).getBytes())
- )
+ Base64.encodeBase64(("\000" + username + "\000" + password).getBytes(this.getCharset())),
+ this.getCharset())
) == POP3Reply.OK;
case CRAM_MD5:
// get the CRAM challenge
byte[] serverChallenge = Base64.decodeBase64(getReplyString().substring(2).trim());
// get the Mac instance
Mac hmac_md5 = Mac.getInstance("HmacMD5");
- hmac_md5.init(new SecretKeySpec(password.getBytes(), "HmacMD5"));
+ hmac_md5.init(new SecretKeySpec(password.getBytes(this.getCharset()), "HmacMD5"));
// compute the result:
- byte[] hmacResult = _convertToHexString(hmac_md5.doFinal(serverChallenge)).getBytes();
+ byte[] hmacResult = _convertToHexString(hmac_md5.doFinal(serverChallenge)).getBytes(this.getCharset());
// join the byte arrays to form the reply
- byte[] usernameBytes = username.getBytes();
+ byte[] usernameBytes = username.getBytes(this.getCharset());
byte[] toEncode = new byte[usernameBytes.length + 1 /* the space */ + hmacResult.length];
System.arraycopy(usernameBytes, 0, toEncode, 0, usernameBytes.length);
toEncode[usernameBytes.length] = ' ';
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/pop3/POP3Client.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/pop3/POP3Client.java?rev=1414510&r1=1414509&r2=1414510&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/pop3/POP3Client.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/pop3/POP3Client.java Wed Nov 28 02:40:39 2012
@@ -214,7 +214,7 @@ public class POP3Client extends POP3
md5 = MessageDigest.getInstance("MD5");
timestamp += secret;
- digest = md5.digest(timestamp.getBytes());
+ digest = md5.digest(timestamp.getBytes(this.getCharset()));
digestBuffer = new StringBuilder(128);
for (i = 0; i < digest.length; i++) {
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/smtp/AuthenticatingSMTPClient.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/smtp/AuthenticatingSMTPClient.java?rev=1414510&r1=1414509&r2=1414510&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/smtp/AuthenticatingSMTPClient.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/smtp/AuthenticatingSMTPClient.java Wed Nov 28 02:40:39 2012
@@ -181,7 +181,7 @@ public class AuthenticatingSMTPClient ex
{
// the server sends an empty response ("334 "), so we don't have to read it.
return SMTPReply.isPositiveCompletion(sendCommand(
- Base64.encodeBase64StringUnChunked(("\000" + username + "\000" + password).getBytes())
+ Base64.encodeBase64StringUnChunked(("\000" + username + "\000" + password).getBytes(this.getCharset()))
));
}
else if (method.equals(AUTH_METHOD.CRAM_MD5))
@@ -190,11 +190,11 @@ public class AuthenticatingSMTPClient ex
byte[] serverChallenge = Base64.decodeBase64(getReplyString().substring(4).trim());
// get the Mac instance
Mac hmac_md5 = Mac.getInstance("HmacMD5");
- hmac_md5.init(new SecretKeySpec(password.getBytes(), "HmacMD5"));
+ hmac_md5.init(new SecretKeySpec(password.getBytes(this.getCharset()), "HmacMD5"));
// compute the result:
- byte[] hmacResult = _convertToHexString(hmac_md5.doFinal(serverChallenge)).getBytes();
+ byte[] hmacResult = _convertToHexString(hmac_md5.doFinal(serverChallenge)).getBytes(this.getCharset());
// join the byte arrays to form the reply
- byte[] usernameBytes = username.getBytes();
+ byte[] usernameBytes = username.getBytes(this.getCharset());
byte[] toEncode = new byte[usernameBytes.length + 1 /* the space */ + hmacResult.length];
System.arraycopy(usernameBytes, 0, toEncode, 0, usernameBytes.length);
toEncode[usernameBytes.length] = ' ';
@@ -208,16 +208,16 @@ public class AuthenticatingSMTPClient ex
// the server sends fixed responses (base64("Username") and
// base64("Password")), so we don't have to read them.
if (!SMTPReply.isPositiveIntermediate(sendCommand(
- Base64.encodeBase64StringUnChunked(username.getBytes())))) {
+ Base64.encodeBase64StringUnChunked(username.getBytes(this.getCharset()))))) {
return false;
}
return SMTPReply.isPositiveCompletion(sendCommand(
- Base64.encodeBase64StringUnChunked(password.getBytes())));
+ Base64.encodeBase64StringUnChunked(password.getBytes(this.getCharset()))));
}
else if (method.equals(AUTH_METHOD.XOAUTH))
{
return SMTPReply.isPositiveIntermediate(sendCommand(
- Base64.encodeBase64StringUnChunked(username.getBytes())
+ Base64.encodeBase64StringUnChunked(username.getBytes(this.getCharset()))
));
} else {
return false; // safety check
Modified: commons/proper/net/trunk/src/main/java/org/apache/commons/net/telnet/Telnet.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/telnet/Telnet.java?rev=1414510&r1=1414509&r2=1414510&view=diff
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/telnet/Telnet.java (original)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/telnet/Telnet.java Wed Nov 28 02:40:39 2012
@@ -745,7 +745,7 @@ class Telnet extends SocketClient
{
_output_.write(_COMMAND_SB);
_output_.write(_COMMAND_IS);
- _output_.write(terminalType.getBytes());
+ _output_.write(terminalType.getBytes(this.getCharset()));
_output_.write(_COMMAND_SE);
_output_.flush();
}
Added: commons/proper/net/trunk/src/main/java/org/apache/commons/net/util/Charsets.java
URL: http://svn.apache.org/viewvc/commons/proper/net/trunk/src/main/java/org/apache/commons/net/util/Charsets.java?rev=1414510&view=auto
==============================================================================
--- commons/proper/net/trunk/src/main/java/org/apache/commons/net/util/Charsets.java (added)
+++ commons/proper/net/trunk/src/main/java/org/apache/commons/net/util/Charsets.java Wed Nov 28 02:40:39 2012
@@ -0,0 +1,27 @@
+package org.apache.commons.net.util;
+
+import java.nio.charset.Charset;
+
+/**
+ * Helps dealing with Charsets.
+ *
+ * @since 3.3
+ */
+public class Charsets {
+
+ /**
+ * Returns a charset object for the given charset name.
+ *
+ * @param charsetName
+ * The name of the requested charset; may be a canonical name, an alias, or null. If null, return the
+ * default charset.
+ * @return A charset object for the named charset
+ */
+ public static Charset toCharset(String charsetName) {
+ return charsetName == null ? Charset.defaultCharset() : Charset.forName(charsetName);
+ }
+
+ public static Charset toCharset(String charsetName, String defaultCharsetName) {
+ return charsetName == null ? Charset.forName(defaultCharsetName) : Charset.forName(charsetName);
+ }
+}
Propchange: commons/proper/net/trunk/src/main/java/org/apache/commons/net/util/Charsets.java
------------------------------------------------------------------------------
svn:eol-style = native
Propchange: commons/proper/net/trunk/src/main/java/org/apache/commons/net/util/Charsets.java
------------------------------------------------------------------------------
svn:keywords = Id