Author: norman Date: Sun Sep 25 16:06:40 2011 New Revision: 1175419 URL: http://svn.apache.org/viewvc?rev=1175419&view=rev Log: LineHandler and ConnectHandler now return Response. See PROTOCOLS-34
Added: james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/LMTPMultiResponse.java (with props) Modified: james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/DataLineLMTPMessageHookHandler.java james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java Modified: james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/DataLineLMTPMessageHookHandler.java URL: http://svn.apache.org/viewvc/james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/DataLineLMTPMessageHookHandler.java?rev=1175419&r1=1175418&r2=1175419&view=diff ============================================================================== --- james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/DataLineLMTPMessageHookHandler.java (original) +++ james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/DataLineLMTPMessageHookHandler.java Sun Sep 25 16:06:40 2011 @@ -91,12 +91,14 @@ public class DataLineLMTPMessageHookHand mimeMessageCopyOnWriteProxy = new MimeMessageCopyOnWriteProxy(mmiss); mail.setMessage(mimeMessageCopyOnWriteProxy); - deliverMail(session, mail); + Response response = deliverMail(session, mail); session.popLineHandler(); // do the clean up session.resetState(); + + return response; } catch (MessagingException e) { // TODO probably return a temporary problem @@ -128,7 +130,6 @@ public class DataLineLMTPMessageHookHand return response; } - // TODO: Fix me as we should better return the response all the time return null; } @@ -139,7 +140,9 @@ public class DataLineLMTPMessageHookHand * @param mail */ @SuppressWarnings("unchecked") - protected void deliverMail(SMTPSession session, Mail mail) { + protected LMTPMultiResponse deliverMail(SMTPSession session, Mail mail) { + LMTPMultiResponse mResponse = null; + Iterator<MailAddress> recipients = mail.getRecipients().iterator(); while (recipients.hasNext()) { MailAddress recipient = recipients.next(); @@ -177,8 +180,13 @@ public class DataLineLMTPMessageHookHand session.getLogger().info("Unexpected error handling DATA stream", e); response = new SMTPResponse(SMTPRetCode.LOCAL_ERROR, DSNStatus.getStatus(DSNStatus.TRANSIENT, DSNStatus.UNDEFINED_STATUS) + " Temporary error deliver message to " + recipient); } - session.writeResponse(response); + if (mResponse == null) { + mResponse = new LMTPMultiResponse(response); + } else { + mResponse.addResponse(response); + } } + return mResponse; } Added: james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/LMTPMultiResponse.java URL: http://svn.apache.org/viewvc/james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/LMTPMultiResponse.java?rev=1175419&view=auto ============================================================================== --- james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/LMTPMultiResponse.java (added) +++ james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/LMTPMultiResponse.java Sun Sep 25 16:06:40 2011 @@ -0,0 +1,79 @@ +/**************************************************************** + * Licensed to the Apache Software Foundation (ASF) under one * + * or more contributor license agreements. See the NOTICE file * + * distributed with this work for additional information * + * regarding copyright ownership. The ASF licenses this file * + * to you under the Apache License, Version 2.0 (the * + * "License"); you may not use this file except in compliance * + * with the License. You may obtain a copy of the License at * + * * + * http://www.apache.org/licenses/LICENSE-2.0 * + * * + * Unless required by applicable law or agreed to in writing, * + * software distributed under the License is distributed on an * + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * + * KIND, either express or implied. See the License for the * + * specific language governing permissions and limitations * + * under the License. * + ****************************************************************/ + +package org.apache.james.lmtpserver; + +import java.util.ArrayList; +import java.util.Iterator; +import java.util.List; + +import org.apache.james.protocols.api.Response; + +public class LMTPMultiResponse implements Response { + + private List<Response> responses = new ArrayList<Response>(); + + public LMTPMultiResponse(Response response) { + addResponse(response); + } + + public void addResponse(Response response) { + this.responses .add(response); + + } + + @Override + public String getRetCode() { + return responses.get(0).getRetCode(); + } + + @Override + public List<CharSequence> getLines() { + List<CharSequence> lines = new ArrayList<CharSequence>(); + for (Response response: responses) { + lines.addAll(response.getLines()); + } + return lines; + } + + @Override + public String getRawLine() { + StringBuilder sb = new StringBuilder(); + Iterator<Response> rIt = responses.iterator(); + while(rIt.hasNext()) { + Response response = rIt.next(); + sb.append(response.getRawLine()); + if (rIt.hasNext()) { + sb.append("\r\n"); + } + } + return sb.toString(); + } + + @Override + public boolean isEndSession() { + for (Response response: responses) { + if (response.isEndSession()) { + return true; + } + } + return false; + } + +} Propchange: james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/LMTPMultiResponse.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java URL: http://svn.apache.org/viewvc/james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java?rev=1175419&r1=1175418&r2=1175419&view=diff ============================================================================== --- james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java (original) +++ james/server/trunk/lmtpserver/src/main/java/org/apache/james/lmtpserver/netty/LMTPServer.java Sun Sep 25 16:06:40 2011 @@ -26,19 +26,19 @@ import org.apache.commons.configuration. import org.apache.commons.configuration.HierarchicalConfiguration; import org.apache.james.lmtpserver.CoreCmdHandlerLoader; import org.apache.james.lmtpserver.jmx.JMXHandlersLoader; +import org.apache.james.protocols.api.Response; import org.apache.james.protocols.api.handler.HandlersPackage; import org.apache.james.protocols.impl.ResponseEncoder; import org.apache.james.protocols.lib.netty.AbstractProtocolAsyncServer; import org.apache.james.protocols.smtp.SMTPConfiguration; import org.apache.james.protocols.smtp.SMTPProtocol; -import org.apache.james.protocols.smtp.SMTPResponse; import org.apache.james.smtpserver.netty.SMTPChannelUpstreamHandler; import org.jboss.netty.channel.ChannelUpstreamHandler; import org.jboss.netty.handler.codec.oneone.OneToOneEncoder; public class LMTPServer extends AbstractProtocolAsyncServer implements LMTPServerMBean { - private final static ResponseEncoder ENCODER = new ResponseEncoder(SMTPResponse.class, Charset.forName("US-ASCII")); + private final static ResponseEncoder ENCODER = new ResponseEncoder(Response.class, Charset.forName("US-ASCII")); /** * The maximum message size allowed by this SMTP server. The default value, --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org