Author: norman
Date: Thu Sep 15 10:26:18 2011
New Revision: 1171031

URL: http://svn.apache.org/viewvc?rev=1171031&view=rev
Log:
Get rid of ChannelLocal. See PROTOCOL-29

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/AbstractSession.java
    
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/ChannelAttributeSupport.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=1171031&r1=1171030&r2=1171031&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
 Thu Sep 15 10:26:18 2011
@@ -30,7 +30,6 @@ import org.apache.james.protocols.api.Li
 import org.apache.james.protocols.api.ProtocolHandlerChain;
 import org.apache.james.protocols.api.ProtocolSession;
 import org.jboss.netty.buffer.ChannelBuffer;
-import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.ChannelHandlerContext;
 import org.jboss.netty.channel.ChannelStateEvent;
 import org.jboss.netty.channel.ChannelUpstreamHandler;
@@ -45,7 +44,7 @@ import org.jboss.netty.handler.codec.fra
  * 
  *
  */
-public abstract class AbstractChannelUpstreamHandler extends 
SimpleChannelUpstreamHandler implements ChannelAttributeSupport{
+public abstract class AbstractChannelUpstreamHandler extends 
SimpleChannelUpstreamHandler {
     
     private ProtocolHandlerChain chain;
 
@@ -56,7 +55,7 @@ public abstract class AbstractChannelUps
 
     @Override
     public void channelBound(ChannelHandlerContext ctx, ChannelStateEvent e) 
throws Exception {
-        attributes.set(ctx.getChannel(),createSession(ctx));
+        ctx.setAttachment(createSession(ctx));
         super.channelBound(ctx, e);
     }
 
@@ -70,7 +69,7 @@ public abstract class AbstractChannelUps
     public void channelConnected(ChannelHandlerContext ctx, ChannelStateEvent 
e) throws Exception {
         List<ConnectHandler> connectHandlers = 
chain.getHandlers(ConnectHandler.class);
         List<ConnectHandlerResultHandler> resultHandlers = 
chain.getHandlers(ConnectHandlerResultHandler.class);
-        ProtocolSession session = (ProtocolSession) 
attributes.get(ctx.getChannel());
+        ProtocolSession session = (ProtocolSession) ctx.getAttachment();
         session.getLogger().info("Connection established from " + 
session.getRemoteHost() + " (" + session.getRemoteIPAddress()+ ")");
         if (connectHandlers != null) {
             for (int i = 0; i < connectHandlers.size(); i++) {
@@ -97,7 +96,7 @@ public abstract class AbstractChannelUps
     @Override
     public void channelDisconnected(ChannelHandlerContext ctx, 
ChannelStateEvent e) throws Exception {
         List<DisconnectHandler> connectHandlers = 
chain.getHandlers(DisconnectHandler.class);
-        ProtocolSession session = (ProtocolSession) 
attributes.get(ctx.getChannel());
+        ProtocolSession session = (ProtocolSession) ctx.getAttachment();
         if (connectHandlers != null) {
             for (int i = 0; i < connectHandlers.size(); i++) {
                 connectHandlers.get(i).onDisconnect(session);
@@ -113,7 +112,7 @@ public abstract class AbstractChannelUps
     @SuppressWarnings("unchecked")
     @Override
     public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) 
throws Exception {
-        ProtocolSession pSession = (ProtocolSession) 
attributes.get(ctx.getChannel());
+        ProtocolSession pSession = (ProtocolSession) ctx.getAttachment();
         LinkedList<LineHandler> lineHandlers = 
chain.getHandlers(LineHandler.class);
         LinkedList<LineHandlerResultHandler> resultHandlers = 
chain.getHandlers(LineHandlerResultHandler.class);
 
@@ -149,11 +148,11 @@ public abstract class AbstractChannelUps
 
     @Override
     public void channelClosed(ChannelHandlerContext ctx, ChannelStateEvent e) 
throws Exception {
-        ProtocolSession session = (ProtocolSession) 
attributes.get(ctx.getChannel());
+        ProtocolSession session = (ProtocolSession) ctx.getAttachment();
         if (session != null) {
             session.getLogger().info("Connection closed for " + 
session.getRemoteHost() + " (" + session.getRemoteIPAddress()+ ")");
         }
-        cleanup(ctx.getChannel());
+        cleanup(ctx);
 
         super.channelClosed(ctx, e);
     }
@@ -162,7 +161,7 @@ public abstract class AbstractChannelUps
     @Override
     public void exceptionCaught(ChannelHandlerContext ctx, ExceptionEvent e) 
throws Exception {
         if ((e.getCause() instanceof TooLongFrameException) == false) {
-            cleanup(ctx.getChannel());
+            cleanup(ctx);
         }
     }
 
@@ -171,8 +170,8 @@ public abstract class AbstractChannelUps
      * 
      * @param channel
      */
-    protected void cleanup(Channel channel) {
-        ProtocolSession session = (ProtocolSession) attributes.remove(channel);
+    protected void cleanup(ChannelHandlerContext ctx) {
+        ProtocolSession session = (ProtocolSession) ctx.getAttachment();
         if (session != null) {
             session.resetState();
             session = null;

Modified: 
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSession.java
URL: 
http://svn.apache.org/viewvc/james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSession.java?rev=1171031&r1=1171030&r2=1171031&view=diff
==============================================================================
--- 
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSession.java
 (original)
+++ 
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSession.java
 Thu Sep 15 10:26:18 2011
@@ -19,11 +19,8 @@
 
 package org.apache.james.protocols.impl;
 
-import java.io.FileInputStream;
 import java.io.IOException;
-import java.io.InputStream;
 import java.net.InetSocketAddress;
-import java.nio.channels.FileChannel;
 
 import javax.net.ssl.SSLEngine;
 
@@ -32,12 +29,7 @@ import org.apache.james.protocols.api.TL
 import org.jboss.netty.channel.Channel;
 import org.jboss.netty.channel.ChannelFuture;
 import org.jboss.netty.channel.ChannelFutureListener;
-import org.jboss.netty.channel.ChannelHandlerContext;
-import org.jboss.netty.channel.DefaultFileRegion;
-import org.jboss.netty.channel.socket.nio.NioServerSocketChannelFactory;
 import org.jboss.netty.handler.ssl.SslHandler;
-import org.jboss.netty.handler.stream.ChunkedNioFile;
-import org.jboss.netty.handler.stream.ChunkedStream;
 import org.slf4j.Logger;
 
 /**
@@ -46,7 +38,7 @@ import org.slf4j.Logger;
  * 
  */
 public abstract class AbstractSession implements TLSSupportedSession {
-    protected ChannelHandlerContext handlerContext;
+    protected Channel channel;
     protected InetSocketAddress socketAddress;
     private Logger logger;
     private SessionLog pLog = null;
@@ -55,24 +47,18 @@ public abstract class AbstractSession im
     protected String user;
 
     private String id;
-       private boolean zeroCopy;
 
-    public AbstractSession(Logger logger, ChannelHandlerContext 
handlerContext, SSLEngine engine) {
-        this(logger, handlerContext, engine, true);
-    }
     
-    public AbstractSession(Logger logger, ChannelHandlerContext 
handlerContext, SSLEngine engine, boolean zeroCopy) {
-        this.handlerContext = handlerContext;
-        this.socketAddress = (InetSocketAddress) 
handlerContext.getChannel().getRemoteAddress();
+    public AbstractSession(Logger logger, Channel channel, SSLEngine engine) {
+        this.channel = channel;
+        this.socketAddress = (InetSocketAddress) channel.getRemoteAddress();
         this.logger = logger;
         this.engine = engine;
-        this.id = handlerContext.getChannel().getId() + "";
-        this.zeroCopy = zeroCopy;
-
+        this.id = channel.getId() + "";
     }
 
-    public AbstractSession(Logger logger, ChannelHandlerContext 
handlerContext) {
-        this(logger, handlerContext, null);
+    public AbstractSession(Logger logger, Channel channel) {
+        this(logger, channel, null);
     }
 
     /**
@@ -104,12 +90,12 @@ public abstract class AbstractSession im
     }
 
     /**
-     * Return underlying IoSession
+     * Return underlying {@link Channel}
      * 
      * @return session
      */
-    public ChannelHandlerContext getChannelHandlerContext() {
-        return handlerContext;
+    public Channel getChannel() {
+        return channel;
     }
 
     /**
@@ -125,7 +111,7 @@ public abstract class AbstractSession im
     public boolean isTLSStarted() {
         
         if (isStartTLSSupported()) {
-            return getChannelHandlerContext().getPipeline().get("sslHandler") 
!= null;
+            return channel.getPipeline().get("sslHandler") != null;
         }
         
         return false;
@@ -136,12 +122,12 @@ public abstract class AbstractSession im
      */
     public void startTLS() throws IOException {
         if (isStartTLSSupported() && isTLSStarted() == false) {
-            getChannelHandlerContext().getChannel().setReadable(false);
+            channel.setReadable(false);
             SslHandler filter = new SslHandler(engine);
             filter.getEngine().setUseClientMode(false);
             resetState();
-            getChannelHandlerContext().getPipeline().addFirst("sslHandler", 
filter);
-            getChannelHandlerContext().getChannel().setReadable(true);
+            channel.getPipeline().addFirst("sslHandler", filter);
+            channel.setReadable(true);
         }
         
     }
@@ -162,7 +148,6 @@ public abstract class AbstractSession im
      * @see 
org.apache.james.api.protocol.ProtocolSession#writeResponse(org.apache.james.api.protocol.Response)
      */
     public void writeResponse(final Response response) {
-       Channel channel = getChannelHandlerContext().getChannel();
         if (response != null && channel.isConnected()) {
            ChannelFuture cf = channel.write(response);
            if (response.isEndSession()) {
@@ -174,32 +159,6 @@ public abstract class AbstractSession im
 
     /*
      * (non-Javadoc)
-     * @see 
org.apache.james.protocols.api.ProtocolSession#writeStream(java.io.InputStream)
-     */
-    public void writeStream(InputStream stream) {
-        Channel channel = getChannelHandlerContext().getChannel();
-        if (stream != null && channel.isConnected()) {
-
-            if (stream instanceof FileInputStream  && channel.getFactory() 
instanceof NioServerSocketChannelFactory) {
-                FileChannel fc = ((FileInputStream) stream).getChannel();
-                try {
-                    if (zeroCopy) {
-                        channel.write(new DefaultFileRegion(fc, fc.position(), 
fc.size()));
-                    } else {
-                        channel.write(new ChunkedNioFile(fc, 8192));
-                    }
-                } catch (IOException e) {
-                    // Catch the exception and just pass it so we get the 
exception later
-                    channel.write(new ChunkedStream(stream));
-                }
-            } else {
-                channel.write(new ChunkedStream(stream));
-            }
-        }
-    }
-
-    /*
-     * (non-Javadoc)
      * @see org.apache.james.protocols.api.ProtocolSession#getSessionID()
      */
     public String getSessionID() {

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=1171031&r1=1171030&r2=1171031&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
 Thu Sep 15 10:26:18 2011
@@ -31,19 +31,18 @@ import org.jboss.netty.channel.SimpleCha
  *
  * @param <Session>
  */
-public class LineHandlerUpstreamHandler<Session extends ProtocolSession> 
extends SimpleChannelUpstreamHandler implements ChannelAttributeSupport{
+public class LineHandlerUpstreamHandler<Session extends ProtocolSession> 
extends SimpleChannelUpstreamHandler {
 
-    private LineHandler<Session> handler;
+    private final LineHandler<Session> handler;
+       private final Session session;
     
-    public LineHandlerUpstreamHandler(LineHandler<Session> handler) {
+    public LineHandlerUpstreamHandler(Session session, LineHandler<Session> 
handler) {
         this.handler = handler;
+        this.session = session;
     }
     
-    @SuppressWarnings("unchecked")
     @Override
-    public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) 
throws Exception {
-        Session pSession = (Session) attributes.get(ctx.getChannel());
-        
+    public void messageReceived(ChannelHandlerContext ctx, MessageEvent e) 
throws Exception {        
         ChannelBuffer buf = (ChannelBuffer) e.getMessage();      
         byte[] line;
         if (buf.hasArray()) {
@@ -54,7 +53,7 @@ public class LineHandlerUpstreamHandler<
             buf.getBytes(0, line);
         }
 
-        boolean disconnect = handler.onLine(pSession, line);
+        boolean disconnect = handler.onLine(session, line);
         if (disconnect) ctx.getChannel().disconnect();
         
     }



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

Reply via email to