Author: norman Date: Fri Sep 16 10:58:43 2011 New Revision: 1171502 URL: http://svn.apache.org/viewvc?rev=1171502&view=rev Log: Add simple SMTPServer by using netty. See PROTOCOLS-31
Added: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPConfigurationImpl.java (with props) james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/SimpleHook.java (with props) Modified: james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractChannelPipelineFactory.java james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSSLAwareChannelPipelineFactory.java james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPConfiguration.java james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPProtocolHandlerChain.java Modified: james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractChannelPipelineFactory.java URL: http://svn.apache.org/viewvc/james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractChannelPipelineFactory.java?rev=1171502&r1=1171501&r2=1171502&view=diff ============================================================================== --- james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractChannelPipelineFactory.java (original) +++ james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractChannelPipelineFactory.java Fri Sep 16 10:58:43 2011 @@ -30,6 +30,7 @@ import org.jboss.netty.handler.codec.fra import org.jboss.netty.handler.codec.oneone.OneToOneEncoder; import org.jboss.netty.handler.connection.ConnectionLimitUpstreamHandler; import org.jboss.netty.handler.connection.ConnectionPerIpLimitUpstreamHandler; +import org.jboss.netty.handler.execution.ExecutionHandler; import org.jboss.netty.handler.stream.ChunkedWriteHandler; import org.jboss.netty.util.HashedWheelTimer; @@ -46,14 +47,22 @@ public abstract class AbstractChannelPip private final HashedWheelTimer timer = new HashedWheelTimer(); private ChannelGroupHandler groupHandler; private int timeout; + private ExecutionHandler eHandler; public AbstractChannelPipelineFactory(int timeout, int maxConnections, int maxConnectsPerIp, ChannelGroup channels) { + this(timeout, maxConnections, maxConnectsPerIp, channels, null); + } + + public AbstractChannelPipelineFactory(int timeout, int maxConnections, int maxConnectsPerIp, ChannelGroup channels, ExecutionHandler eHandler) { connectionLimitHandler = new ConnectionLimitUpstreamHandler(maxConnections); connectionPerIpLimitHandler = new ConnectionPerIpLimitUpstreamHandler(maxConnectsPerIp); groupHandler = new ChannelGroupHandler(channels); this.timeout = timeout; + this.eHandler = eHandler; } + + /* * (non-Javadoc) * @see org.jboss.netty.channel.ChannelPipelineFactory#getPipeline() @@ -77,6 +86,10 @@ public abstract class AbstractChannelPip pipeline.addLast("streamer", new ChunkedWriteHandler()); pipeline.addLast("timeoutHandler", new TimeoutHandler(timer, timeout)); + if (eHandler != null) { + pipeline.addLast("executionHandler", eHandler); + } + pipeline.addLast("coreHandler", createHandler()); Modified: james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSSLAwareChannelPipelineFactory.java URL: http://svn.apache.org/viewvc/james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSSLAwareChannelPipelineFactory.java?rev=1171502&r1=1171501&r2=1171502&view=diff ============================================================================== --- james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSSLAwareChannelPipelineFactory.java (original) +++ james/protocols/trunk/impl/src/main/java/org/apache/james/protocols/impl/AbstractSSLAwareChannelPipelineFactory.java Fri Sep 16 10:58:43 2011 @@ -23,6 +23,7 @@ import javax.net.ssl.SSLEngine; import org.jboss.netty.channel.ChannelPipeline; import org.jboss.netty.channel.group.ChannelGroup; +import org.jboss.netty.handler.execution.ExecutionHandler; import org.jboss.netty.handler.ssl.SslHandler; /** @@ -36,13 +37,13 @@ public abstract class AbstractSSLAwareCh private String[] enabledCipherSuites = null; public AbstractSSLAwareChannelPipelineFactory(int timeout, - int maxConnections, int maxConnectsPerIp, ChannelGroup group) { - super(timeout, maxConnections, maxConnectsPerIp, group); + int maxConnections, int maxConnectsPerIp, ChannelGroup group, ExecutionHandler eHandler) { + super(timeout, maxConnections, maxConnectsPerIp, group, eHandler); } public AbstractSSLAwareChannelPipelineFactory(int timeout, - int maxConnections, int maxConnectsPerIp, ChannelGroup group, String[] enabledCipherSuites) { - this(timeout, maxConnections, maxConnectsPerIp, group); + int maxConnections, int maxConnectsPerIp, ChannelGroup group, String[] enabledCipherSuites, ExecutionHandler eHandler) { + this(timeout, maxConnections, maxConnectsPerIp, group, eHandler); // We need to copy the String array becuase of possible security issues. // See https://issues.apache.org/jira/browse/PROTOCOLS-18 Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPConfiguration.java URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPConfiguration.java?rev=1171502&r1=1171501&r2=1171502&view=diff ============================================================================== --- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPConfiguration.java (original) +++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPConfiguration.java Fri Sep 16 10:58:43 2011 @@ -41,6 +41,7 @@ public interface SMTPConfiguration { * * @return the reset length */ + @Deprecated int getResetLength(); /** Added: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPConfigurationImpl.java URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPConfigurationImpl.java?rev=1171502&view=auto ============================================================================== --- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPConfigurationImpl.java (added) +++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPConfigurationImpl.java Fri Sep 16 10:58:43 2011 @@ -0,0 +1,83 @@ +/**************************************************************** + * 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.protocols.smtp; + + +public class SMTPConfigurationImpl implements SMTPConfiguration{ + + public String helloName = "localhost"; + private long maxMessageSize = 0; + private boolean bracketsEnforcement = true; + private String greeting = "JAMES SMTP Protocols"; + private boolean enforceHeloEhlo = true; + + public String getHelloName() { + return helloName; + } + + public int getResetLength() { + return -1; + } + + public long getMaxMessageSize() { + return maxMessageSize; + } + + public boolean isRelayingAllowed(String remoteIP) { + return false; + } + + public boolean isAuthRequired(String remoteIP) { + return false; + } + + public void setHeloEhloEnforcement(boolean enforceHeloEhlo) { + this.enforceHeloEhlo = enforceHeloEhlo; + } + + + public boolean useHeloEhloEnforcement() { + return enforceHeloEhlo; + } + + public String getSMTPGreeting() { + return greeting; + } + + public void setSMTPGreeting(String greeting) { + this.greeting = greeting; + } + + + public boolean useAddressBracketsEnforcement() { + return bracketsEnforcement; + } + + public void setUseAddressBracketsEnforcement(boolean bracketsEnforcement) { + this.bracketsEnforcement = bracketsEnforcement; + } + + + public boolean isStartTLSSupported() { + return false; + } + +} Propchange: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPConfigurationImpl.java ------------------------------------------------------------------------------ svn:mime-type = text/plain Modified: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPProtocolHandlerChain.java URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPProtocolHandlerChain.java?rev=1171502&r1=1171501&r2=1171502&view=diff ============================================================================== --- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPProtocolHandlerChain.java (original) +++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/SMTPProtocolHandlerChain.java Fri Sep 16 10:58:43 2011 @@ -40,8 +40,11 @@ import org.apache.james.protocols.smtp.c import org.apache.james.protocols.smtp.core.SMTPCommandDispatcherLineHandler; import org.apache.james.protocols.smtp.core.VrfyCmdHandler; import org.apache.james.protocols.smtp.core.WelcomeMessageHandler; +import org.apache.james.protocols.smtp.core.esmtp.AuthCmdHandler; import org.apache.james.protocols.smtp.core.esmtp.EhloCmdHandler; import org.apache.james.protocols.smtp.core.esmtp.MailSizeEsmtpExtension; +import org.apache.james.protocols.smtp.core.esmtp.StartTlsCmdHandler; +import org.apache.james.protocols.smtp.hook.AuthHook; import org.apache.james.protocols.smtp.hook.Hook; import org.apache.james.protocols.smtp.hook.MessageHook; @@ -60,7 +63,8 @@ public class SMTPProtocolHandlerChain ex private final List<Object> defaultHandlers = new ArrayList<Object>(); private final List<Hook> hooks = new ArrayList<Hook>(); private final List<Object> handlers = new ArrayList<Object>(); - + private boolean authHandler = false; + public SMTPProtocolHandlerChain() throws WiringException { defaultHandlers.add(new SMTPCommandDispatcherLineHandler()); defaultHandlers.add(new ExpnCmdHandler()); @@ -79,7 +83,9 @@ public class SMTPProtocolHandlerChain ex defaultHandlers.add(new PostmasterAbuseRcptHook()); defaultHandlers.add(new ReceivedDataLineFilter()); defaultHandlers.add(new DataLineMessageHookHandler()); + defaultHandlers.add(new StartTlsCmdHandler()); copy(); + wireExtensibleHandlers(); } @@ -90,6 +96,10 @@ public class SMTPProtocolHandlerChain ex * @throws WiringException */ public final synchronized void addHook(Hook hook) throws WiringException { + if (hook instanceof AuthHook && !authHandler) { + defaultHandlers.add(new AuthCmdHandler()); + authHandler = true; + } addHook(hooks.size(), hook); } Added: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/SimpleHook.java URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/SimpleHook.java?rev=1171502&view=auto ============================================================================== --- james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/SimpleHook.java (added) +++ james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/SimpleHook.java Fri Sep 16 10:58:43 2011 @@ -0,0 +1,65 @@ +/**************************************************************** + * 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.protocols.smtp.hook; + +import org.apache.james.protocols.smtp.MailEnvelope; +import org.apache.james.protocols.smtp.SMTPSession; +import org.apache.mailet.MailAddress; + + +/** + * Simple {@link Hook} implementation which can be used as base class when writing simple {@link Hook}'s + * + * The SMTP-Server will just accept email with this {@link Hook} in place and discard it + * + */ +public class SimpleHook implements HeloHook, MailHook, RcptHook, MessageHook { + + /** + * Return {@link HookResult} with {@link HookReturnCode#OK} + */ + public HookResult onMessage(SMTPSession session, MailEnvelope mail) { + return new HookResult(HookReturnCode.OK); + } + + /** + * Return {@link HookResult} with {@link HookReturnCode#DECLINED} + */ + public HookResult doRcpt(SMTPSession session, MailAddress sender, MailAddress rcpt) { + return new HookResult(HookReturnCode.DECLINED); + + } + + /** + * Return {@link HookResult} with {@link HookReturnCode#DECLINED} + */ + public HookResult doMail(SMTPSession session, MailAddress sender) { + return new HookResult(HookReturnCode.DECLINED); + + } + + /** + * Return {@link HookResult} with {@link HookReturnCode#DECLINED} + */ + public HookResult doHelo(SMTPSession session, String helo) { + return new HookResult(HookReturnCode.DECLINED); + } + +} Propchange: james/protocols/trunk/smtp/src/main/java/org/apache/james/protocols/smtp/hook/SimpleHook.java ------------------------------------------------------------------------------ svn:mime-type = text/plain --------------------------------------------------------------------- To unsubscribe, e-mail: server-dev-unsubscr...@james.apache.org For additional commands, e-mail: server-dev-h...@james.apache.org