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: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org