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