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: [email protected]
For additional commands, e-mail: [email protected]