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

Reply via email to