Author: norman
Date: Sat Sep 24 12:02:47 2011
New Revision: 1175162
URL: http://svn.apache.org/viewvc?rev=1175162&view=rev
Log:
LineHandler and ConnectHandler now return Response. See PROTOCOLS-34
Modified:
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/Response.java
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/AbstractCommandDispatcher.java
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/ConnectHandler.java
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/LineHandler.java
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/BasicChannelUpstreamHandler.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/DataLineFilter.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineMessageHookHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/ReceivedDataLineFilter.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/esmtp/MailSizeEsmtpExtension.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/fastfail/DNSRBLHandler.java
james/protocols/trunk/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/DNSRBLHandlerTest.java
Modified:
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/Response.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/Response.java?rev=1175162&r1=1175161&r2=1175162&view=diff
==============================================================================
---
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/Response.java
(original)
+++
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/Response.java
Sat Sep 24 12:02:47 2011
@@ -19,6 +19,7 @@
package org.apache.james.protocols.api;
+import java.util.Collections;
import java.util.List;
/**
@@ -27,6 +28,32 @@ import java.util.List;
*
*/
public interface Response {
+
+ /**
+ * Special {@link Response} implementation which will just disconnect the
client
+ */
+ public static final Response DISCONNECT = new Response() {
+
+ public String getRetCode() {
+ return "";
+ }
+
+ @SuppressWarnings("unchecked")
+ public List<CharSequence> getLines() {
+ return Collections.EMPTY_LIST;
+ }
+
+ public String getRawLine() {
+ return "";
+ }
+
+ public boolean isEndSession() {
+ return true;
+ }
+
+ };
+
+
/**
* Return return-code
* @return
Modified:
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/AbstractCommandDispatcher.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/AbstractCommandDispatcher.java?rev=1175162&r1=1175161&r2=1175162&view=diff
==============================================================================
---
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/AbstractCommandDispatcher.java
(original)
+++
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/AbstractCommandDispatcher.java
Sat Sep 24 12:02:47 2011
@@ -19,7 +19,7 @@
package org.apache.james.protocols.api.handler;
-import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.HashMap;
@@ -29,10 +29,7 @@ import java.util.List;
import java.util.Locale;
import org.apache.james.protocols.api.BaseRequest;
-import org.apache.james.protocols.api.FutureResponse;
-import org.apache.james.protocols.api.FutureResponse.ResponseListener;
import org.apache.james.protocols.api.ProtocolSession;
-import org.apache.james.protocols.api.Request;
import org.apache.james.protocols.api.Response;
@@ -49,6 +46,9 @@ public abstract class AbstractCommandDis
private HashMap<String, List<CommandHandler<Session>>> commandHandlerMap =
new HashMap<String, List<CommandHandler<Session>>>();
private List<CommandHandlerResultHandler<Response, Session>> rHandlers =
new ArrayList<CommandHandlerResultHandler<Response, Session>>();
+
+ private final Charset charset = Charset.forName(getLineDecodingCharset());
+
/**
* Add it to map (key as command name, value is an array list of
CommandHandlers)
*
@@ -128,76 +128,48 @@ public abstract class AbstractCommandDis
* (non-Javadoc)
* @see
org.apache.james.api.protocol.LineHandler#onLine(org.apache.james.api.protocol.ProtocolSession,
byte[])
*/
- public void onLine(final Session session, byte[] line) {
+ public Response onLine(final Session session, byte[] line) {
String curCommandName = null;
String curCommandArgument = null;
- String cmdString;
-
- try {
- cmdString = new String(line, getLineDecodingCharset()).trim();
- int spaceIndex = cmdString.indexOf(" ");
- if (spaceIndex > 0) {
- curCommandName = cmdString.substring(0, spaceIndex);
- curCommandArgument = cmdString.substring(spaceIndex + 1);
- } else {
- curCommandName = cmdString;
- }
- curCommandName = curCommandName.toUpperCase(Locale.US);
-
- if (session.getLogger().isDebugEnabled()) {
- session.getLogger().debug(getClass().getName()+" received: " +
cmdString);
- }
- List<CommandHandler<Session>> commandHandlers =
getCommandHandlers(curCommandName, session);
- // fetch the command handlers registered to the command
-
- BaseRequest request = new BaseRequest(curCommandName,
curCommandArgument);
- Iterator<CommandHandler<Session>> handlers =
commandHandlers.iterator();
- executeHandlers(handlers, session, request);
-
- } catch (UnsupportedEncodingException e) {
- // Should never happen
- session.getLogger().error("Unable to handle encoding" ,e );
+ String cmdString = new String(line, charset).trim();
+ int spaceIndex = cmdString.indexOf(" ");
+ if (spaceIndex > 0) {
+ curCommandName = cmdString.substring(0, spaceIndex);
+ curCommandArgument = cmdString.substring(spaceIndex + 1);
+ } else {
+ curCommandName = cmdString;
}
-
-
- }
+ curCommandName = curCommandName.toUpperCase(Locale.US);
- private void executeHandlers(final Iterator<CommandHandler<Session>>
handlers, final Session session, final Request request) {
- final CommandHandler<Session> cHandler = handlers.next();
-
-
- final long start = System.currentTimeMillis();
- Response response = cHandler.onCommand(session, request);
- if (response instanceof FutureResponse) {
- ((FutureResponse) response).addListener(new ResponseListener() {
-
- public void onResponse(Response response) {
- long executionTime = System.currentTimeMillis() - start;
- handleResponse(handlers, session, response, request,
cHandler, executionTime);
- }
- });
- } else {
- long executionTime = System.currentTimeMillis() - start;
- handleResponse(handlers, session, response, request, cHandler,
executionTime);
+ if (session.getLogger().isDebugEnabled()) {
+ session.getLogger().debug(getClass().getName() + " received: " +
cmdString);
}
- }
-
- private void handleResponse(Iterator<CommandHandler<Session>> handlers,
Session session, Response response, Request request, CommandHandler<Session>
cHandler, long executionTime) {
+ List<CommandHandler<Session>> commandHandlers =
getCommandHandlers(curCommandName, session);
+ // fetch the command handlers registered to the command
- // if the response is received, stop processing of command
- // handlers
- if (response != null) {
-
- // now process the result handlers
- for (int a = 0; a < rHandlers.size(); a++) {
- response = rHandlers.get(a).onResponse(session, response,
executionTime, (CommandHandler<Session>) cHandler);
+ BaseRequest request = new BaseRequest(curCommandName,
curCommandArgument);
+ Iterator<CommandHandler<Session>> handlers =
commandHandlers.iterator();
+ while (handlers.hasNext()) {
+ final long start = System.currentTimeMillis();
+ CommandHandler<Session> cHandler = handlers.next();
+ Response response = cHandler.onCommand(session, request);
+ if (response != null) {
+ long executionTime = System.currentTimeMillis() - start;
+
+ // now process the result handlers
+ for (int a = 0; a < rHandlers.size(); a++) {
+ response = rHandlers.get(a).onResponse(session, response,
executionTime, (CommandHandler<Session>) cHandler);
+ }
}
- session.writeResponse(response);
- } else {
- executeHandlers(handlers, session, request);
+ if (response != null) {
+ return response;
+ }
+
}
-
+ return null;
+
}
+
protected String getLineDecodingCharset() {
return "US-ASCII";
}
Modified:
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/ConnectHandler.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/ConnectHandler.java?rev=1175162&r1=1175161&r2=1175162&view=diff
==============================================================================
---
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/ConnectHandler.java
(original)
+++
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/ConnectHandler.java
Sat Sep 24 12:02:47 2011
@@ -22,6 +22,7 @@
package org.apache.james.protocols.api.handler;
import org.apache.james.protocols.api.ProtocolSession;
+import org.apache.james.protocols.api.Response;
/**
* Custom connect handlers must implement this interface
@@ -33,7 +34,10 @@ public interface ConnectHandler<Session
/**
* Handle connection and disconnect if true is returned
*
+ * @param session
+ * @return response or null
+ *
**/
- void onConnect(Session session);
+ Response onConnect(Session session);
}
Modified:
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/LineHandler.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/LineHandler.java?rev=1175162&r1=1175161&r2=1175162&view=diff
==============================================================================
---
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/LineHandler.java
(original)
+++
james/protocols/trunk/api/src/main/java/org/apache/james/protocols/api/handler/LineHandler.java
Sat Sep 24 12:02:47 2011
@@ -20,6 +20,7 @@
package org.apache.james.protocols.api.handler;
import org.apache.james.protocols.api.ProtocolSession;
+import org.apache.james.protocols.api.Response;
/**
* Implementations of this Interface will get called after a full line
(terminated with \r\n) was received.
@@ -34,7 +35,8 @@ public interface LineHandler<Session ext
*
* @param session not null
* @param line not null
+ * @return response or null
*/
- void onLine(Session session, byte[] line);
+ Response onLine(Session session, byte[] line);
}
Modified:
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/BasicChannelUpstreamHandler.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/BasicChannelUpstreamHandler.java?rev=1175162&r1=1175161&r2=1175162&view=diff
==============================================================================
---
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/BasicChannelUpstreamHandler.java
(original)
+++
james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/BasicChannelUpstreamHandler.java
Sat Sep 24 12:02:47 2011
@@ -95,12 +95,15 @@ public class BasicChannelUpstreamHandler
ConnectHandler cHandler = connectHandlers.get(i);
long start = System.currentTimeMillis();
- connectHandlers.get(i).onConnect(session);
+ Response response = connectHandlers.get(i).onConnect(session);
long executionTime = System.currentTimeMillis() - start;
for (int a = 0; a < resultHandlers.size(); a++) {
resultHandlers.get(a).onResponse(session, executionTime,
cHandler);
}
+ if (response != null) {
+ session.writeResponse(response);
+ }
}
}
@@ -148,12 +151,15 @@ public class BasicChannelUpstreamHandler
LineHandler lHandler= (LineHandler) lineHandlers.getLast();
long start = System.currentTimeMillis();
- lHandler.onLine(pSession,line);
+ Response response = lHandler.onLine(pSession,line);
long executionTime = System.currentTimeMillis() - start;
for (int i = 0; i < resultHandlers.size(); i++) {
resultHandlers.get(i).onResponse(pSession, executionTime,
lHandler);
}
+ if (response != null) {
+ pSession.writeResponse(response);
+ }
}
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=1175162&r1=1175161&r2=1175162&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
Sat Sep 24 12:02:47 2011
@@ -49,12 +49,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 SMTPResponse onLine(SMTPSession session, byte[] line) {
// Discard everything until the end of DATA session
if (line.length == 3 && line[0] == 46) {
session.popLineHandler();
}
+ return null;
}
}
@@ -72,8 +73,8 @@ 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) {
- filter.onLine(session, line, next);
+ public Response onLine(SMTPSession session, byte[] line) {
+ return filter.onLine(session, line, next);
}
}
Modified:
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineFilter.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineFilter.java?rev=1175162&r1=1175161&r2=1175162&view=diff
==============================================================================
---
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineFilter.java
(original)
+++
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineFilter.java
Sat Sep 24 12:02:47 2011
@@ -21,6 +21,7 @@
package org.apache.james.protocols.smtp.core;
+import org.apache.james.protocols.api.Response;
import org.apache.james.protocols.api.handler.LineHandler;
import org.apache.james.protocols.api.handler.ProtocolHandler;
import org.apache.james.protocols.smtp.SMTPSession;
@@ -38,5 +39,5 @@ public interface DataLineFilter extends
* @param line
* @param next
*/
- void onLine(SMTPSession session, byte[] line, LineHandler<SMTPSession>
next);
+ Response onLine(SMTPSession session, byte[] line, LineHandler<SMTPSession>
next);
}
\ No newline at end of file
Modified:
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineMessageHookHandler.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineMessageHookHandler.java?rev=1175162&r1=1175161&r2=1175162&view=diff
==============================================================================
---
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineMessageHookHandler.java
(original)
+++
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/DataLineMessageHookHandler.java
Sat Sep 24 12:02:47 2011
@@ -59,7 +59,7 @@ public class DataLineMessageHookHandler
* (non-Javadoc)
* @see
org.apache.james.smtpserver.protocol.core.DataLineFilter#onLine(org.apache.james.smtpserver.protocol.SMTPSession,
byte[], org.apache.james.api.protocol.LineHandler)
*/
- public void onLine(final SMTPSession session, byte[] line,
LineHandler<SMTPSession> next) {
+ public SMTPResponse onLine(final SMTPSession session, byte[] line,
LineHandler<SMTPSession> next) {
MailEnvelopeImpl env = (MailEnvelopeImpl)
session.getState().get(DataCmdHandler.MAILENV);
OutputStream out = env.getMessageOutputStream();
try {
@@ -80,8 +80,8 @@ public class DataLineMessageHookHandler
} else {
session.resetState();
}
- session.writeResponse(response);
-
+ return response;
+
// DotStuffing.
} else if (line[0] == 46 && line[1] == 46) {
out.write(line,1,line.length-1);
@@ -94,15 +94,16 @@ public class DataLineMessageHookHandler
}
out.flush();
} catch (IOException e) {
- SMTPResponse response;
- response = new
SMTPResponse(SMTPRetCode.LOCAL_ERROR,DSNStatus.getStatus(DSNStatus.TRANSIENT,
+ SMTPResponse response = new
SMTPResponse(SMTPRetCode.LOCAL_ERROR,DSNStatus.getStatus(DSNStatus.TRANSIENT,
DSNStatus.UNDEFINED_STATUS) + " Error processing
message: " + e.getMessage());
session.getLogger().error(
"Unknown error occurred while processing DATA.", e);
- session.writeResponse(response);
+
session.resetState();
+ return response;
}
+ return null;
}
Modified:
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/ReceivedDataLineFilter.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/ReceivedDataLineFilter.java?rev=1175162&r1=1175161&r2=1175162&view=diff
==============================================================================
---
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/ReceivedDataLineFilter.java
(original)
+++
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/ReceivedDataLineFilter.java
Sat Sep 24 12:02:47 2011
@@ -24,6 +24,7 @@ import java.util.Date;
import java.util.List;
import org.apache.james.protocols.api.handler.LineHandler;
+import org.apache.james.protocols.smtp.SMTPResponse;
import org.apache.james.protocols.smtp.SMTPSession;
import org.apache.mailet.base.RFC2822Headers;
import org.apache.mailet.base.RFC822DateFormat;
@@ -46,12 +47,12 @@ public class ReceivedDataLineFilter impl
* (non-Javadoc)
* @see
org.apache.james.smtpserver.protocol.core.DataLineFilter#onLine(org.apache.james.smtpserver.protocol.SMTPSession,
byte[], org.apache.james.api.protocol.LineHandler)
*/
- public void onLine(SMTPSession session, byte[] line,
LineHandler<SMTPSession> next) {
+ public SMTPResponse onLine(SMTPSession session, byte[] line,
LineHandler<SMTPSession> next) {
if (session.getState().containsKey(HEADERS_WRITTEN) == false) {
addNewReceivedMailHeaders(session, next);
session.getState().put(HEADERS_WRITTEN, true);
}
- next.onLine(session, line);
+ return (SMTPResponse) next.onLine(session, line);
}
private void addNewReceivedMailHeaders(SMTPSession session,
LineHandler<SMTPSession> next) {
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=1175162&r1=1175161&r2=1175162&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
Sat Sep 24 12:02:47 2011
@@ -22,6 +22,7 @@ package org.apache.james.protocols.smtp.
import java.util.Date;
+import org.apache.james.protocols.api.Response;
import org.apache.james.protocols.api.handler.ConnectHandler;
import org.apache.james.protocols.smtp.SMTPResponse;
import org.apache.james.protocols.smtp.SMTPRetCode;
@@ -41,7 +42,7 @@ public class WelcomeMessageHandler imple
/**
* @see
org.apache.james.smtpserver.protocol.ConnectHandler#onConnect(SMTPSession)
*/
- public void onConnect(SMTPSession session) {
+ public Response onConnect(SMTPSession session) {
String smtpGreeting = session.getSMTPGreeting();
SMTPResponse welcomeResponse;
@@ -59,7 +60,7 @@ public class WelcomeMessageHandler imple
} else {
welcomeResponse = new
SMTPResponse(SMTPRetCode.SERVICE_READY,smtpGreeting);
}
- session.writeResponse(welcomeResponse);
+ return welcomeResponse;
}
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=1175162&r1=1175161&r2=1175162&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
Sat Sep 24 12:02:47 2011
@@ -21,7 +21,7 @@
package org.apache.james.protocols.smtp.core.esmtp;
-import java.io.UnsupportedEncodingException;
+import java.nio.charset.Charset;
import java.util.ArrayList;
import java.util.Collection;
import java.util.LinkedList;
@@ -58,17 +58,11 @@ import org.apache.james.protocols.smtp.h
public class AuthCmdHandler
implements CommandHandler<SMTPSession>, EhloExtension, ExtensibleHandler,
MailParametersHook {
+ private final static Charset CHARSET = Charset.forName("US-ASCII");
private abstract class AbstractSMTPLineHandler implements
LineHandler<SMTPSession> {
- public void onLine(SMTPSession session, byte[] l) {
- SMTPResponse res;
- try {
- res = handleCommand(session, new String(l,"US-ASCII"));
- session.writeResponse(res);
- } catch (UnsupportedEncodingException e) {
- e.printStackTrace();
- }
-
+ public Response onLine(SMTPSession session, byte[] l) {
+ return handleCommand(session, new String(l, CHARSET));
}
Modified:
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/MailSizeEsmtpExtension.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/MailSizeEsmtpExtension.java?rev=1175162&r1=1175161&r2=1175162&view=diff
==============================================================================
---
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/MailSizeEsmtpExtension.java
(original)
+++
james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/core/esmtp/MailSizeEsmtpExtension.java
Sat Sep 24 12:02:47 2011
@@ -24,6 +24,7 @@ import java.util.List;
import org.apache.james.protocols.api.handler.LineHandler;
import org.apache.james.protocols.smtp.MailEnvelope;
+import org.apache.james.protocols.smtp.SMTPResponse;
import org.apache.james.protocols.smtp.SMTPRetCode;
import org.apache.james.protocols.smtp.SMTPSession;
import org.apache.james.protocols.smtp.core.DataLineFilter;
@@ -136,7 +137,7 @@ public class MailSizeEsmtpExtension impl
* (non-Javadoc)
* @see
org.apache.james.smtpserver.protocol.core.DataLineFilter#onLine(org.apache.james.smtpserver.protocol.SMTPSession,
byte[], org.apache.james.api.protocol.LineHandler)
*/
- public void onLine(SMTPSession session, byte[] line,
LineHandler<SMTPSession> next) {
+ public SMTPResponse onLine(SMTPSession session, byte[] line,
LineHandler<SMTPSession> next) {
Boolean failed = (Boolean) session.getState().get(MESG_FAILED);
// If we already defined we failed and sent a reply we should simply
// wait for a CRLF.CRLF to be sent by the client.
@@ -170,6 +171,7 @@ public class MailSizeEsmtpExtension impl
session.getState().put("CURRENT_SIZE", newSize);
}
}
+ return null;
}
/**
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=1175162&r1=1175161&r2=1175162&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
Sat Sep 24 12:02:47 2011
@@ -36,7 +36,7 @@ import org.apache.mailet.MailAddress;
/**
* Connect handler for DNSRBL processing
*/
-public class DNSRBLHandler implements ConnectHandler<SMTPSession>, RcptHook{
+public class DNSRBLHandler implements RcptHook{
/**
@@ -67,14 +67,6 @@ public class DNSRBLHandler implements C
/**
- * check if the remote Ip address is block listed
- *
- **/
- public void onConnect(SMTPSession session) {
- checkDNSRBL(session, session.getRemoteIPAddress());
- }
-
- /**
* Set the whitelist array
*
* @param whitelist The array which contains the whitelist
@@ -196,7 +188,8 @@ public class DNSRBLHandler implements C
* @see
org.apache.james.protocols.smtp.hook.RcptHook#doRcpt(org.apache.james.protocols.smtp.SMTPSession,
org.apache.mailet.MailAddress, org.apache.mailet.MailAddress)
*/
public HookResult doRcpt(SMTPSession session, MailAddress sender,
MailAddress rcpt) {
-
+ checkDNSRBL(session, session.getRemoteIPAddress());
+
if (!session.isRelayingAllowed()) {
String blocklisted = (String)
session.getConnectionState().get(RBL_BLOCKLISTED_MAIL_ATTRIBUTE_NAME);
Modified:
james/protocols/trunk/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/DNSRBLHandlerTest.java
URL:
http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/DNSRBLHandlerTest.java?rev=1175162&r1=1175161&r2=1175162&view=diff
==============================================================================
---
james/protocols/trunk/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/DNSRBLHandlerTest.java
(original)
+++
james/protocols/trunk/smtp/src/test/java/org/apache/james/protocols/smtp/core/fastfail/DNSRBLHandlerTest.java
Sat Sep 24 12:02:47 2011
@@ -155,7 +155,7 @@ public class DNSRBLHandlerTest extends T
rbl.setBlacklist(new String[] { "bl.spamcop.net." });
rbl.setGetDetail(true);
- rbl.onConnect(mockedSMTPSession);
+ rbl.doRcpt(mockedSMTPSession, null, new MailAddress("test@localhost"));
assertEquals("Details","Blocked - see
http://www.spamcop.net/bl.shtml?127.0.0.2",
mockedSMTPSession.getConnectionState().get(RBL_DETAIL_MAIL_ATTRIBUTE_NAME));
assertNotNull("Blocked",mockedSMTPSession.getConnectionState().get(RBL_BLOCKLISTED_MAIL_ATTRIBUTE_NAME));
@@ -169,7 +169,7 @@ public class DNSRBLHandlerTest extends T
rbl.setBlacklist(new String[] { "bl.spamcop.net." });
rbl.setGetDetail(false);
- rbl.onConnect(mockedSMTPSession);
+ rbl.doRcpt(mockedSMTPSession, null, new MailAddress("test@localhost"));
assertNull("No
details",mockedSMTPSession.getConnectionState().get(RBL_DETAIL_MAIL_ATTRIBUTE_NAME));
assertNotNull("Blocked",mockedSMTPSession.getConnectionState().get(RBL_BLOCKLISTED_MAIL_ATTRIBUTE_NAME));
}
@@ -184,7 +184,7 @@ public class DNSRBLHandlerTest extends T
rbl.setBlacklist(new String[] { "bl.spamcop.net." });
rbl.setGetDetail(true);
- rbl.onConnect(mockedSMTPSession);
+ rbl.doRcpt(mockedSMTPSession, null, new MailAddress("test@localhost"));
assertNull("No
details",mockedSMTPSession.getConnectionState().get(RBL_DETAIL_MAIL_ATTRIBUTE_NAME));
assertNull("Not
blocked",mockedSMTPSession.getConnectionState().get(RBL_BLOCKLISTED_MAIL_ATTRIBUTE_NAME));
}
@@ -200,7 +200,7 @@ public class DNSRBLHandlerTest extends T
rbl.setBlacklist(new String[] { "bl.spamcop.net." });
rbl.setGetDetail(true);
- rbl.onConnect(mockedSMTPSession);
+ rbl.doRcpt(mockedSMTPSession, null, new MailAddress("test@localhost"));
assertNull("No
details",mockedSMTPSession.getConnectionState().get(RBL_DETAIL_MAIL_ATTRIBUTE_NAME));
assertNull("Not
blocked",mockedSMTPSession.getConnectionState().get(RBL_BLOCKLISTED_MAIL_ATTRIBUTE_NAME));
}
@@ -216,7 +216,7 @@ public class DNSRBLHandlerTest extends T
rbl.setBlacklist(new String[] { "bl.spamcop.net." });
rbl.setGetDetail(true);
- rbl.onConnect(mockedSMTPSession);
+ rbl.doRcpt(mockedSMTPSession, null, new MailAddress("test@localhost"));
assertNull(mockedSMTPSession.getConnectionState().get(RBL_DETAIL_MAIL_ATTRIBUTE_NAME));
assertNotNull("Blocked",mockedSMTPSession.getConnectionState().get(RBL_BLOCKLISTED_MAIL_ATTRIBUTE_NAME));
}
@@ -232,7 +232,7 @@ public class DNSRBLHandlerTest extends T
rbl.setWhitelist(new String[] { "bl.spamcop.net." });
rbl.setGetDetail(true);
- rbl.onConnect(mockedSMTPSession);
+ rbl.doRcpt(mockedSMTPSession, null, new MailAddress("test@localhost"));
assertNull(mockedSMTPSession.getConnectionState().get(RBL_DETAIL_MAIL_ATTRIBUTE_NAME));
assertNull("Not
blocked",mockedSMTPSession.getConnectionState().get(RBL_BLOCKLISTED_MAIL_ATTRIBUTE_NAME));
}
---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]