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/26 20:57:57 UTC

svn commit: r1039538 - in /james/protocols/trunk: api/src/main/java/org/apache/james/protocols/api/ impl/src/main/java/org/apache/james/protocols/impl/ smtp/src/main/java/org/apache/james/protocols/smtp/core/ smtp/src/main/java/org/apache/james/protoco...

Author: norman
Date: Fri Nov 26 19:57:57 2010
New Revision: 1039538

URL: http://svn.apache.org/viewvc?rev=1039538&view=rev
Log:
Allow to disconnect channel from LineHandler/ConnectHandler. See PROTOCOLS-13

Modified:
    james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractCommandDispatcher.java
    james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandler.java
    james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandler.java
    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
    james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataCmdHandler.java
    james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/WelcomeMessageHandler.java
    james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java
    james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/DNSRBLHandler.java

Modified: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractCommandDispatcher.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractCommandDispatcher.java?rev=1039538&r1=1039537&r2=1039538&view=diff
==============================================================================
--- james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractCommandDispatcher.java (original)
+++ james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/AbstractCommandDispatcher.java Fri Nov 26 19:57:57 2010
@@ -121,7 +121,7 @@ public abstract class AbstractCommandDis
      * (non-Javadoc)
      * @see org.apache.james.api.protocol.LineHandler#onLine(org.apache.james.api.protocol.ProtocolSession, byte[])
      */
-    public void onLine(Session session, byte[] line) {
+    public boolean onLine(Session session, byte[] line) {
         String curCommandName = null;
         String curCommandArgument = null;
         String cmdString;
@@ -162,7 +162,8 @@ public abstract class AbstractCommandDis
             // Should never happen
            session.getLogger().error("Unable to handle encoding" ,e );
         }
-
+        
+        return false;
        
     }
 

Modified: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandler.java?rev=1039538&r1=1039537&r2=1039538&view=diff
==============================================================================
--- james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandler.java (original)
+++ james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/ConnectHandler.java Fri Nov 26 19:57:57 2010
@@ -29,8 +29,10 @@ package org.apache.james.protocols.api;
  */
 public interface ConnectHandler<Session extends ProtocolSession> {
     /**
-     * Handle connection
+     * Handle connection and disconnect if true is returned
+     * 
+     * @return disconnect 
     **/
-    public void onConnect(Session session);
+    public boolean onConnect(Session session);
 
 }

Modified: james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandler.java?rev=1039538&r1=1039537&r2=1039538&view=diff
==============================================================================
--- james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandler.java (original)
+++ james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/LineHandler.java Fri Nov 26 19:57:57 2010
@@ -27,11 +27,13 @@ package org.apache.james.protocols.api;
 public interface LineHandler<Session extends ProtocolSession> {
      
     /**
-     * Processing the give line. The line includes the CRLF delimiter
+     * Processing the give line. The line includes the CRLF delimiter.
+     * If true is returned the connection is closed
      * 
      * @param session not null
      * @param line not null 
+     * @return disconnect
      */
-    public void onLine(Session session, byte[] line);
+    public boolean onLine(Session session, byte[] line);
     
 }

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=1039538&r1=1039537&r2=1039538&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 Fri Nov 26 19:57:57 2010
@@ -69,7 +69,11 @@ public abstract class AbstractChannelUps
 
         if (connectHandlers != null) {
             for (int i = 0; i < connectHandlers.size(); i++) {
-                connectHandlers.get(i).onConnect((ProtocolSession) attributes.get(ctx.getChannel()));
+                boolean disconnect = connectHandlers.get(i).onConnect((ProtocolSession) attributes.get(ctx.getChannel()));
+                if (disconnect)  {
+                    ctx.getChannel().disconnect();
+                    break;
+                }
             }
         }
         super.channelConnected(ctx, e);
@@ -100,7 +104,8 @@ public abstract class AbstractChannelUps
                 buf.getBytes(0, line);
             }
             
-            ((LineHandler) lineHandlers.getLast()).onLine(pSession,line);
+            boolean disconnect = ((LineHandler) lineHandlers.getLast()).onLine(pSession,line);
+            if (disconnect) ctx.getChannel().disconnect();
         }
         
         super.messageReceived(ctx, e);

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=1039538&r1=1039537&r2=1039538&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 Fri Nov 26 19:57:57 2010
@@ -54,8 +54,8 @@ public class LineHandlerUpstreamHandler<
             buf.getBytes(0, line);
         }
 
-        handler.onLine(pSession, line);
-
+        boolean disconnect = handler.onLine(pSession, line);
+        if (disconnect) ctx.getChannel().disconnect();
         
     }
 

Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataCmdHandler.java?rev=1039538&r1=1039537&r2=1039538&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataCmdHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataCmdHandler.java Fri Nov 26 19:57:57 2010
@@ -48,12 +48,13 @@ public class DataCmdHandler implements C
          * (non-Javadoc)
          * @see org.apache.james.api.protocol.LineHandler#onLine(org.apache.james.api.protocol.ProtocolSession, byte[])
          */
-        public void onLine(SMTPSession session, byte[] line) {
+        public boolean onLine(SMTPSession session, byte[] line) {
             
             // Discard everything until the end of DATA session
             if (line.length == 3 && line[0] == 46) {
                 session.popLineHandler();
             }
+            return false;
         }
     }
 
@@ -71,8 +72,9 @@ public class DataCmdHandler implements C
          * (non-Javadoc)
          * @see org.apache.james.api.protocol.LineHandler#onLine(org.apache.james.api.protocol.ProtocolSession, byte[])
          */
-        public void onLine(SMTPSession session, byte[] line) {
+        public boolean onLine(SMTPSession session, byte[] line) {
             filter.onLine(session, line, next);
+            return false;
         }
                 
     }

Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/WelcomeMessageHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/WelcomeMessageHandler.java?rev=1039538&r1=1039537&r2=1039538&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/WelcomeMessageHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/WelcomeMessageHandler.java Fri Nov 26 19:57:57 2010
@@ -41,7 +41,7 @@ public class WelcomeMessageHandler imple
     /**
      * @see org.apache.james.smtpserver.protocol.ConnectHandler#onConnect(SMTPSession)
      */
-    public void onConnect(SMTPSession session) {
+    public boolean onConnect(SMTPSession session) {
         String smtpGreeting = session.getSMTPGreeting();
 
         SMTPResponse welcomeResponse;
@@ -60,6 +60,8 @@ public class WelcomeMessageHandler imple
             welcomeResponse = new SMTPResponse(SMTPRetCode.SERVICE_READY,smtpGreeting);
         }
         session.writeResponse(welcomeResponse);
+        
+        return false;
     }
     
     protected String getProductName() {

Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java?rev=1039538&r1=1039537&r2=1039538&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/AuthCmdHandler.java Fri Nov 26 19:57:57 2010
@@ -60,7 +60,7 @@ public class AuthCmdHandler
 
     private abstract class AbstractSMTPLineHandler implements LineHandler<SMTPSession> {
 
-        public void onLine(SMTPSession session, byte[] l) {
+        public boolean onLine(SMTPSession session, byte[] l) {
             SMTPResponse res;
             try {
                 res = handleCommand(session, new String(l,"US-ASCII"));
@@ -68,6 +68,7 @@ public class AuthCmdHandler
             } catch (UnsupportedEncodingException e) {
                 e.printStackTrace();
             }
+            return false;
 
            
         }

Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/DNSRBLHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/DNSRBLHandler.java?rev=1039538&r1=1039537&r2=1039538&view=diff
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/DNSRBLHandler.java (original)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/DNSRBLHandler.java Fri Nov 26 19:57:57 2010
@@ -70,8 +70,9 @@ public class DNSRBLHandler implements  C
      * check if the remote Ip address is block listed
      *
     **/
-    public void onConnect(SMTPSession session) {
+    public boolean onConnect(SMTPSession session) {
         checkDNSRBL(session, session.getRemoteIPAddress());
+        return false;
     }
     
     /**



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