mina-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "amtlib.dll (JIRA)" <j...@apache.org>
Subject [jira] [Created] (FTPSERVER-465) A patch to control the charset in order to work around a bug of Windows Explorer in CJK environments
Date Mon, 26 Jan 2015 06:58:34 GMT
amtlib.dll created FTPSERVER-465:
------------------------------------

             Summary: A patch to control the charset in order to work around a bug of Windows
Explorer in CJK environments
                 Key: FTPSERVER-465
                 URL: https://issues.apache.org/jira/browse/FTPSERVER-465
             Project: FtpServer
          Issue Type: Improvement
          Components: Core
         Environment: any
            Reporter: amtlib.dll


Index: org/apache/ftpserver/impl/FtpServerContext.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- org/apache/ftpserver/impl/FtpServerContext.java	(revision )
+++ org/apache/ftpserver/impl/FtpServerContext.java	(revision )
@@ -19,6 +19,7 @@
 
 package org.apache.ftpserver.impl;
 
+import java.nio.charset.Charset;
 import java.util.Map;
 import java.util.concurrent.ThreadPoolExecutor;
 
@@ -70,4 +71,6 @@
      * @return the thread pool executor for this context.
      */
     ThreadPoolExecutor getThreadPoolExecutor();
+    
+    Charset getCharset();
 }
Index: org/apache/ftpserver/impl/IODataConnection.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- org/apache/ftpserver/impl/IODataConnection.java	(revision )
+++ org/apache/ftpserver/impl/IODataConnection.java	(revision )
@@ -27,6 +27,7 @@
 import java.io.OutputStreamWriter;
 import java.io.Writer;
 import java.net.Socket;
+import java.nio.charset.Charset;
 import java.util.zip.DeflaterOutputStream;
 import java.util.zip.InflaterInputStream;
 
@@ -171,18 +172,18 @@
      * org.apache.ftpserver.FtpDataConnection2#transferToClient(java.lang.String
      * )
      */
-    public final void transferToClient(FtpSession session, final String str)
+    public final void transferToClient(FtpSession session, final String str, final Charset
charset)
             throws IOException {
         OutputStream out = getDataOutputStream();
         Writer writer = null;
         try {
-            writer = new OutputStreamWriter(out, "UTF-8");
+            writer = new OutputStreamWriter(out, charset);
             writer.write(str);
 
             // update session
             if (session instanceof DefaultFtpSession) {
                 ((DefaultFtpSession) session).increaseWrittenDataBytes(str
-                        .getBytes("UTF-8").length);
+                        .getBytes(charset).length);
             }
         } finally {
             if (writer != null) {
Index: org/apache/ftpserver/impl/DefaultFtpServerContext.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- org/apache/ftpserver/impl/DefaultFtpServerContext.java	(revision )
+++ org/apache/ftpserver/impl/DefaultFtpServerContext.java	(revision )
@@ -19,6 +19,7 @@
 
 package org.apache.ftpserver.impl;
 
+import java.nio.charset.Charset;
 import java.util.ArrayList;
 import java.util.HashMap;
 import java.util.List;
@@ -278,5 +279,16 @@
             threadPoolExecutor = new OrderedThreadPoolExecutor(maxThreads);
         }
         return threadPoolExecutor;
+    }
+
+    private Charset charset = Charset.forName("UTF-8");
+
+    public void setCharset(Charset charset) {
+        this.charset = charset;
+    }
+
+    @Override
+    public Charset getCharset() {
+        return charset;
     }
 }
Index: org/apache/ftpserver/ftplet/DataConnection.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- org/apache/ftpserver/ftplet/DataConnection.java	(revision )
+++ org/apache/ftpserver/ftplet/DataConnection.java	(revision )
@@ -22,6 +22,7 @@
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
+import java.nio.charset.Charset;
 
 /**
  *
@@ -59,6 +60,6 @@
      *            The string to transfer
      * @throws IOException
      */
-    void transferToClient(FtpSession session, String str) throws IOException;
+    void transferToClient(FtpSession session, String str, Charset charset) throws IOException;
 
 }
\ No newline at end of file
Index: org/apache/ftpserver/command/impl/LIST.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- org/apache/ftpserver/command/impl/LIST.java	(revision )
+++ org/apache/ftpserver/command/impl/LIST.java	(revision )
@@ -126,7 +126,7 @@
             try {
                 dataConnection.transferToClient(session.getFtpletSession(), directoryLister.listFiles(
                         parsedArg, session.getFileSystemView(),
-                        LIST_FILE_FORMATER));
+                        LIST_FILE_FORMATER), context.getCharset());
             } catch (SocketException ex) {
                 LOG.debug("Socket exception during list transfer", ex);
                 failure = true;
Index: org/apache/ftpserver/command/impl/MLSD.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- org/apache/ftpserver/command/impl/MLSD.java	(revision )
+++ org/apache/ftpserver/command/impl/MLSD.java	(revision )
@@ -112,7 +112,7 @@
                         .getAttribute("MLST.types"));
 
                 dataConnection.transferToClient(session.getFtpletSession(), directoryLister.listFiles(
-                        parsedArg, session.getFileSystemView(), formater));
+                        parsedArg, session.getFileSystemView(), formater), context.getCharset());
             } catch (SocketException ex) {
                 LOG.debug("Socket exception during data transfer", ex);
                 failure = true;
Index: org/apache/ftpserver/command/impl/NLST.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- org/apache/ftpserver/command/impl/NLST.java	(revision )
+++ org/apache/ftpserver/command/impl/NLST.java	(revision )
@@ -121,7 +121,7 @@
                 }
 
                 dataConnection.transferToClient(session.getFtpletSession(), directoryLister.listFiles(
-                        parsedArg, session.getFileSystemView(), formater));
+                        parsedArg, session.getFileSystemView(), formater), context.getCharset());
             } catch (SocketException ex) {
                 LOG.debug("Socket exception during data transfer", ex);
                 failure = true;
Index: org/apache/ftpserver/command/impl/OPTS_UTF8.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- org/apache/ftpserver/command/impl/OPTS_UTF8.java	(revision )
+++ org/apache/ftpserver/command/impl/OPTS_UTF8.java	(revision )
@@ -20,6 +20,7 @@
 package org.apache.ftpserver.command.impl;
 
 import java.io.IOException;
+import java.nio.charset.Charset;
 
 import org.apache.ftpserver.command.AbstractCommand;
 import org.apache.ftpserver.ftplet.FtpException;
@@ -50,8 +51,7 @@
         // reset state
         session.resetState();
 
-        // send default message
         session.write(LocalizedFtpReply.translate(session, request, context,
-                FtpReply.REPLY_200_COMMAND_OKAY, "OPTS.UTF8", null));
+                context.getCharset().contains(Charset.forName("UTF-8")) ? FtpReply.REPLY_200_COMMAND_OKAY
: FtpReply.REPLY_502_COMMAND_NOT_IMPLEMENTED, "OPTS.UTF8", null));
     }
 }
Index: org/apache/ftpserver/listener/nio/NioListener.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- org/apache/ftpserver/listener/nio/NioListener.java	(revision )
+++ org/apache/ftpserver/listener/nio/NioListener.java	(revision )
@@ -146,7 +146,7 @@
             acceptor.getFilterChain().addLast("threadPool",
                     new ExecutorFilter(context.getThreadPoolExecutor()));
             acceptor.getFilterChain().addLast("codec",
-                    new ProtocolCodecFilter(new FtpServerProtocolCodecFactory()));
+                    new ProtocolCodecFilter(new FtpServerProtocolCodecFactory(context.getCharset())));
             acceptor.getFilterChain().addLast("mdcFilter2", mdcFilter);
             acceptor.getFilterChain().addLast("logger", new FtpLoggingFilter());
     
Index: org/apache/ftpserver/listener/nio/FtpResponseEncoder.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- org/apache/ftpserver/listener/nio/FtpResponseEncoder.java	(revision )
+++ org/apache/ftpserver/listener/nio/FtpResponseEncoder.java	(revision )
@@ -37,16 +37,19 @@
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
 public class FtpResponseEncoder extends ProtocolEncoderAdapter {
-    private static final CharsetEncoder ENCODER = Charset.forName("UTF-8")
-            .newEncoder();
+    private final CharsetEncoder encoder;
 
+    public FtpResponseEncoder(Charset charset) {
+        this.encoder = charset.newEncoder();
+    }
+
     public void encode(IoSession session, Object message,
             ProtocolEncoderOutput out) throws Exception {
         String value = message.toString();
 
         IoBuffer buf = IoBuffer.allocate(value.length()).setAutoExpand(true);
 
-        buf.putString(value, ENCODER);
+        buf.putString(value, encoder);
 
         buf.flip();
         out.write(buf);
Index: org/apache/ftpserver/listener/nio/FtpServerProtocolCodecFactory.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- org/apache/ftpserver/listener/nio/FtpServerProtocolCodecFactory.java	(revision )
+++ org/apache/ftpserver/listener/nio/FtpServerProtocolCodecFactory.java	(revision )
@@ -35,10 +35,14 @@
  * @author <a href="http://mina.apache.org">Apache MINA Project</a>
  */
 public class FtpServerProtocolCodecFactory implements ProtocolCodecFactory {
-    private ProtocolDecoder decoder = new TextLineDecoder(Charset
-            .forName("UTF-8"));
+    private ProtocolDecoder decoder;
 
-    private ProtocolEncoder encoder = new FtpResponseEncoder();
+    private ProtocolEncoder encoder;
+
+    public FtpServerProtocolCodecFactory(Charset charset) {
+        decoder = new TextLineDecoder(charset);
+        encoder = new FtpResponseEncoder(charset);
+    }
 
     public ProtocolDecoder getDecoder(IoSession session) throws Exception {
         return decoder;
Index: org/apache/ftpserver/FtpServerFactory.java
IDEA additional info:
Subsystem: com.intellij.openapi.diff.impl.patch.CharsetEP
<+>UTF-8
===================================================================
--- org/apache/ftpserver/FtpServerFactory.java	(revision )
+++ org/apache/ftpserver/FtpServerFactory.java	(revision )
@@ -19,6 +19,7 @@
 
 package org.apache.ftpserver;
 
+import java.nio.charset.Charset;
 import java.util.LinkedHashMap;
 import java.util.Map;
 
@@ -232,5 +233,13 @@
      */
     public void setConnectionConfig(final ConnectionConfig connectionConfig) {
         serverContext.setConnectionConfig(connectionConfig);
+    }
+
+    public void setCharset(Charset charset) {
+        serverContext.setCharset(charset);
+    }
+
+    public Charset getCharset() {
+        return serverContext.getCharset();
     }
 }
\ No newline at end of file




--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

Mime
View raw message