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