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 2010/11/08 15:30:00 UTC

svn commit: r1032583 - in /james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl: AbstractChannelUpstreamHandler.java LineHandlerUpstreamHandler.java

Author: norman
Date: Mon Nov  8 14:29:59 2010
New Revision: 1032583

URL: http://svn.apache.org/viewvc?rev=1032583&view=rev
Log:
Only copy ChannelBuffer to byte array if needed (PROTOCOLS-7)

Modified:
    james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractChannelUpstreamHandler.java
    james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/LineHandlerUpstreamHandler.java

Modified: james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractChannelUpstreamHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractChannelUpstreamHandler.java?rev=1032583&r1=1032582&r2=1032583&view=diff
==============================================================================
--- james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractChannelUpstreamHandler.java (original)
+++ james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractChannelUpstreamHandler.java Mon Nov  8 14:29:59 2010
@@ -85,14 +85,21 @@ public abstract class AbstractChannelUps
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) throws Exception {
         ProtocolSession pSession = (ProtocolSession) attributes.get(ctx.getChannel());
         LinkedList<LineHandler> lineHandlers = chain.getHandlers(LineHandler.class);
-        
-        ChannelBuffer buf = (ChannelBuffer) e.getMessage();      
-        byte[] line = new byte[buf.capacity()];
-        buf.getBytes(0, line);
+      
         
         if (lineHandlers.size() > 0) {
+        
+            ChannelBuffer buf = (ChannelBuffer) e.getMessage();      
+            byte[] line;
+            
+            if (buf.hasArray()) {
+                line = buf.array();
+            } else {
+                // copy the ChannelBuffer to a byte array to process the LineHandler
+                line = new byte[buf.capacity()];
+                buf.getBytes(0, line);
+            }
             
-            // Maybe it would be better to use the ByteBuffer here
             ((LineHandler) lineHandlers.getLast()).onLine(pSession,line);
         }
         

Modified: james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/LineHandlerUpstreamHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/LineHandlerUpstreamHandler.java?rev=1032583&r1=1032582&r2=1032583&view=diff
==============================================================================
--- james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/LineHandlerUpstreamHandler.java (original)
+++ james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/LineHandlerUpstreamHandler.java Mon Nov  8 14:29:59 2010
@@ -45,10 +45,14 @@ public class LineHandlerUpstreamHandler<
         Session pSession = (Session) attributes.get(ctx.getChannel());
         
         ChannelBuffer buf = (ChannelBuffer) e.getMessage();      
-
-        // copy the ChannelBuffer to a byte array to process the LineHandler
-        byte[] line = new byte[buf.capacity()];
-        buf.getBytes(0, line);
+        byte[] line;
+        if (buf.hasArray()) {
+            line = buf.array();
+        } else {
+            // copy the ChannelBuffer to a byte array to process the LineHandler
+            line = new byte[buf.capacity()];
+            buf.getBytes(0, line);
+        }
 
         handler.onLine(pSession, line);
 



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