You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2012/01/06 18:37:05 UTC

svn commit: r1228296 - in /james/protocols/trunk: api/src/main/java/org/apache/james/protocols/api/handler/CommandDispatcher.java netty/src/main/java/org/apache/james/protocols/netty/NettyProtocolTransport.java

Author: norman
Date: Fri Jan  6 17:37:05 2012
New Revision: 1228296

URL: http://svn.apache.org/viewvc?rev=1228296&view=rev
Log:
Add optimization for zero-copy when possible

Modified:
    james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/CommandDispatcher.java
    james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/NettyProtocolTransport.java

Modified: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/CommandDispatcher.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/CommandDispatcher.java?rev=1228296&r1=1228295&r2=1228296&view=diff
==============================================================================
--- james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/CommandDispatcher.java (original)
+++ james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/CommandDispatcher.java Fri Jan  6 17:37:05 2012
@@ -222,10 +222,6 @@ public class CommandDispatcher<Session e
         }
         curCommandName = curCommandName.toUpperCase(Locale.US);
 
-        if (session.getLogger().isDebugEnabled()) {
-            session.getLogger().debug(getClass().getName() + " received: " + cmdString);
-        }
-
         BaseRequest request = new BaseRequest(curCommandName, curCommandArgument);
         return request;
 

Modified: james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/NettyProtocolTransport.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/NettyProtocolTransport.java?rev=1228296&r1=1228295&r2=1228296&view=diff
==============================================================================
--- james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/NettyProtocolTransport.java (original)
+++ james/protocols/trunk/netty/src/main/java/org/apache/james/protocols/netty/NettyProtocolTransport.java Fri Jan  6 17:37:05 2012
@@ -19,17 +19,23 @@
 
 package org.apache.james.protocols.netty;
 
+import java.io.FileInputStream;
+import java.io.IOException;
 import java.io.InputStream;
 import java.net.InetSocketAddress;
+import java.nio.channels.FileChannel;
+import java.util.Iterator;
 
 import javax.net.ssl.SSLEngine;
 
 import org.apache.james.protocols.api.AbstractProtocolTransport;
+import org.apache.james.protocols.api.CombinedInputStream;
 import org.apache.james.protocols.api.ProtocolSession;
 import org.apache.james.protocols.api.handler.LineHandler;
 import org.jboss.netty.buffer.ChannelBuffers;
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.ChannelFutureListener;
+import org.jboss.netty.channel.DefaultFileRegion;
 import org.jboss.netty.handler.ssl.SslHandler;
 import org.jboss.netty.handler.stream.ChunkedStream;
 
@@ -135,6 +141,39 @@ public class NettyProtocolTransport exte
         if (startTLS) {
             prepareStartTLS();
         }
+        if (!isTLSStarted()) {
+            if (in instanceof FileInputStream) {
+                FileChannel fChannel = ((FileInputStream) in).getChannel();
+                try {
+                    channel.write(new DefaultFileRegion(fChannel, 0, fChannel.size(), true));
+
+                } catch (IOException e) {
+                    // We handle this later
+                    channel.write(new ChunkedStream(in));
+                }
+                return;
+
+            } else if (in instanceof CombinedInputStream) {
+                Iterator<InputStream> streams = ((CombinedInputStream) in).iterator();
+                while(streams.hasNext()) {
+                    InputStream pIn = streams.next();
+                    if (pIn instanceof FileInputStream) {
+                        FileChannel fChannel = ((FileInputStream) in).getChannel();
+                        try {
+                            channel.write(new DefaultFileRegion(fChannel, 0, fChannel.size(), true));
+                            return;
+
+                        } catch (IOException e) {
+                            // We handle this later
+                            channel.write(new ChunkedStream(in));
+                        }                    
+                    } else {
+                        channel.write(new ChunkedStream(in));
+                    }
+                }
+                return;
+            }
+        } 
         channel.write(new ChunkedStream(in));
     }
 



---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org