You are viewing a plain text version of this content. The canonical link for it is here.
Posted to server-dev@james.apache.org by no...@apache.org on 2010/02/01 10:29:58 UTC
svn commit: r905220 [1/4] - in /james/protocols/trunk: ./ smtp/ smtp/src/
smtp/src/main/ smtp/src/main/java/ smtp/src/main/java/org/
smtp/src/main/java/org/apache/ smtp/src/main/java/org/apache/james/
smtp/src/main/java/org/apache/james/dsn/ smtp/src/m...
Author: norman
Date: Mon Feb 1 09:29:55 2010
New Revision: 905220
URL: http://svn.apache.org/viewvc?rev=905220&view=rev
Log:
Copy over protocol specific stuff from server to own subproject
Added:
james/protocols/trunk/pom.xml
james/protocols/trunk/smtp/
james/protocols/trunk/smtp/pom.xml
james/protocols/trunk/smtp/src/
james/protocols/trunk/smtp/src/main/
james/protocols/trunk/smtp/src/main/java/
james/protocols/trunk/smtp/src/main/java/org/
james/protocols/trunk/smtp/src/main/java/org/apache/
james/protocols/trunk/smtp/src/main/java/org/apache/james/
james/protocols/trunk/smtp/src/main/java/org/apache/james/dsn/
james/protocols/trunk/smtp/src/main/java/org/apache/james/dsn/DSNStatus.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/DNSService.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/MailEnvelope.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/MailEnvelopeImpl.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPConfiguration.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPRequest.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPResponse.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPRetCode.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPServerMBean.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPSession.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/TemporaryResolutionException.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractAuthRequiredToRelayRcptHook.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractHookableCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractSenderAuthIdentifyVerificationRcptHook.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/AcceptRecipientIfRelayingIsAllowed.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/DataCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/DataLineFilter.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/DataLineMessageHookHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/ExpnCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/HeloCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/HelpCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/MailCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/NoopCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/PostmasterAbuseRcptHook.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/QuitCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/RcptCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/ReceivedDataLineFilter.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/RsetCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/SMTPCommandDispatcherLineHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/UnknownCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/VrfyCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/WelcomeMessageHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/AuthCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/EhloCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/EhloExtension.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/MailSizeEsmtpExtension.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/esmtp/StartTlsCmdHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/fastfail/
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/fastfail/AbstractGreylistHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/fastfail/AbstractValidRcptHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/fastfail/DNSRBLHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/fastfail/MaxRcptHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/fastfail/ResolvableEhloHeloHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/fastfail/ReverseEqualsEhloHeloHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/fastfail/SpamTrapHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/fastfail/SupressDuplicateRcptHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/fastfail/TarpitHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/fastfail/ValidSenderDomainHandler.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/hook/
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/hook/AuthHook.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/hook/HeloHook.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/hook/HookResult.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/hook/HookResultHook.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/hook/HookReturnCode.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/hook/MailHook.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/hook/MailParametersHook.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/hook/MessageHook.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/hook/QuitHook.java
james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/hook/RcptHook.java
james/protocols/trunk/smtp/src/test/
james/protocols/trunk/smtp/src/test/java/
james/protocols/trunk/smtp/src/test/java/org/
james/protocols/trunk/smtp/src/test/java/org/apache/
james/protocols/trunk/smtp/src/test/java/org/apache/james/
james/protocols/trunk/smtp/src/test/java/org/apache/james/smtpserver/
james/protocols/trunk/smtp/src/test/java/org/apache/james/smtpserver/protocol/
james/protocols/trunk/smtp/src/test/java/org/apache/james/smtpserver/protocol/BaseFakeDNSService.java
james/protocols/trunk/smtp/src/test/java/org/apache/james/smtpserver/protocol/BaseFakeSMTPSession.java
james/protocols/trunk/smtp/src/test/java/org/apache/james/smtpserver/protocol/core/
james/protocols/trunk/smtp/src/test/java/org/apache/james/smtpserver/protocol/core/fastfail/
james/protocols/trunk/smtp/src/test/java/org/apache/james/smtpserver/protocol/core/fastfail/DNSRBLHandlerTest.java
james/protocols/trunk/smtp/src/test/java/org/apache/james/smtpserver/protocol/core/fastfail/MaxRcptHandlerTest.java
james/protocols/trunk/smtp/src/test/java/org/apache/james/smtpserver/protocol/core/fastfail/MockLog.java
james/protocols/trunk/smtp/src/test/java/org/apache/james/smtpserver/protocol/core/fastfail/ResolvableEhloHeloHandlerTest.java
james/protocols/trunk/smtp/src/test/java/org/apache/james/smtpserver/protocol/core/fastfail/SpamTrapHandlerTest.java
james/protocols/trunk/smtp/src/test/java/org/apache/james/smtpserver/protocol/core/fastfail/TarpitHandlerTest.java
james/protocols/trunk/smtp/src/test/java/org/apache/james/smtpserver/protocol/core/fastfail/ValidSenderDomainHandlerTest.java
Added: james/protocols/trunk/pom.xml
URL: http://svn.apache.org/viewvc/james/protocols/trunk/pom.xml?rev=905220&view=auto
==============================================================================
--- james/protocols/trunk/pom.xml (added)
+++ james/protocols/trunk/pom.xml Mon Feb 1 09:29:55 2010
@@ -0,0 +1,248 @@
+<?xml version="1.0" encoding="ISO-8859-15"?>
+<!--
+ 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.
+-->
+<project>
+ <parent>
+ <artifactId>james-server-root</artifactId>
+ <groupId>org.apache.james</groupId>
+ <version>1.5</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.james</groupId>
+ <artifactId>james-protocols</artifactId>
+ <name>Apache JAMES Protocols</name>
+ <version>1.0-SNAPSHOT</version>
+ <description>JAMES Protocols</description>
+ <url>http://james.apache.org/protocols</url>
+ <inceptionYear>2010</inceptionYear>
+ <packaging>pom</packaging>
+ <modules>
+ <module>api</module>
+ <module>smtp</module>
+ </modules>
+ <ciManagement>
+ <system>hudson</system>
+ <url>http://hudson.zones.apache.org/hudson/view/James/job/james-protocols-trunk/</url>
+ <notifiers>
+ <notifier>
+ <type>mail</type>
+ </notifier>
+ </notifiers>
+ </ciManagement>
+ <scm>
+ <connection>scm:svn:http://svn.apache.org/repos/asf/james/protocols/trunk</connection>
+ <developerConnection>scm:svn:https://${maven.username}@svn.apache.org/repos/asf/james/protocols/trunk</developerConnection>
+ <url>http://svn.apache.org/viewcvs.cgi/james/protocols/trunk?root=Apache-SVN</url>
+ </scm>
+
+ <repositories>
+
+ <!-- needed for javamail -->
+ <repository>
+ <id>maven2-repository.dev.java.net</id>
+ <name>Java.net Repository for Maven</name>
+ <url>http://download.java.net/maven/2/</url>
+ <layout>default</layout>
+ </repository>
+
+
+ </repositories>
+
+ <build>
+ <plugins>
+ <plugin>
+ <artifactId>maven-compiler-plugin</artifactId>
+ <configuration>
+ <optimize>true</optimize>
+ <source>1.5</source>
+ <target>1.5</target>
+ </configuration>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-jar-plugin</artifactId>
+ <configuration>
+ <archive>
+ <manifest>
+ <addDefaultSpecificationEntries>true</addDefaultSpecificationEntries>
+ <addDefaultImplementationEntries>true</addDefaultImplementationEntries>
+ </manifest>
+ </archive>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jar-plugin</artifactId>
+ <executions>
+ <execution>
+ <goals>
+ <goal>test-jar</goal>
+ </goals>
+ </execution>
+ </executions>
+ </plugin>
+ </plugins>
+ </build>
+
+ <reporting>
+ <plugins>
+ <plugin>
+ <artifactId>maven-javadoc-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-jxr-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-pmd-plugin</artifactId>
+ <configuration>
+ <aggregate>true</aggregate>
+ <targetjdk>1.5</targetjdk>
+ <rulesets>
+ <ruleset>/rulesets/basic.xml</ruleset>
+ <ruleset>/rulesets/controversial.xml</ruleset>
+ </rulesets>
+ <format>xml</format>
+ <linkXref>true</linkXref>
+ <sourceEncoding>utf-8</sourceEncoding>
+ <minimumTokens>100</minimumTokens>
+ </configuration>
+ </plugin>
+ <plugin>
+ <artifactId>maven-site-plugin</artifactId>
+ </plugin>
+ <plugin>
+ <groupId>org.apache.maven.plugins</groupId>
+ <artifactId>maven-changes-plugin</artifactId>
+ <configuration>
+ <onlyCurrentVersion>true</onlyCurrentVersion>
+ <resolutionIds>Closed</resolutionIds>
+ <maxEntries>1000</maxEntries>
+ </configuration>
+ <reportSets>
+ <reportSet>
+ <reports>
+ <report>jira-report</report>
+ </reports>
+ </reportSet>
+ </reportSets>
+ </plugin>
+ </plugins>
+ </reporting>
+ <distributionManagement>
+ <site>
+ <id>server-trunk-website</id>
+ <url>scp://people.apache.org/www/james.apache.org/protocols/trunk/</url>
+ </site>
+ </distributionManagement>
+ <dependencyManagement>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.james.protocols</groupId>
+ <artifactId>api</artifactId>
+ <version>1.0-SNAPSHOT</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ <version>1.1</version>
+ <exclusions>
+ <exclusion>
+ <artifactId>logkit</artifactId>
+ <groupId>logkit</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>avalon-framework</artifactId>
+ <groupId>avalon-framework</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>log4j</artifactId>
+ <groupId>log4j</groupId>
+ </exclusion>
+ <exclusion>
+ <groupId>javax.servlet</groupId>
+ <artifactId>servlet-api</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>apache-mailet</artifactId>
+ <version>2.4</version>
+ <exclusions>
+ <exclusion>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>apache-mailet-base</artifactId>
+ <version>1.0</version>
+ <exclusions>
+ <exclusion>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ <version>1.4.3</version>
+ </dependency>
+ <dependency>
+ <groupId>javax.activation</groupId>
+ <artifactId>activation</artifactId>
+ <version>1.1.1</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ <version>1.4</version>
+ </dependency>
+ <dependency>
+ <groupId>commons-configuration</groupId>
+ <artifactId>commons-configuration</artifactId>
+ <version>1.5</version>
+ <exclusions>
+ <exclusion>
+ <artifactId>commons-digester</artifactId>
+ <groupId>commons-digester</groupId>
+ </exclusion>
+ <exclusion>
+ <artifactId>commons-beanutils-core</artifactId>
+ <groupId>commons-beanutils</groupId>
+ </exclusion>
+ </exclusions>
+ </dependency>
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <version>3.8.1</version>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+ </dependencyManagement>
+</project>
Added: james/protocols/trunk/smtp/pom.xml
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/pom.xml?rev=905220&view=auto
==============================================================================
--- james/protocols/trunk/smtp/pom.xml (added)
+++ james/protocols/trunk/smtp/pom.xml Mon Feb 1 09:29:55 2010
@@ -0,0 +1,66 @@
+<?xml version="1.0" encoding="ISO-8859-15"?>
+<!--
+ 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.
+-->
+<project>
+ <parent>
+ <artifactId>james-protocols</artifactId>
+ <groupId>org.apache.james</groupId>
+ <version>1.0-SNAPSHOT</version>
+ </parent>
+ <modelVersion>4.0.0</modelVersion>
+ <groupId>org.apache.james.protocols</groupId>
+ <artifactId>smtp</artifactId>
+ <name>Apache JAMES SMTP Protocol</name>
+ <dependencies>
+ <dependency>
+ <groupId>org.apache.james.protocols</groupId>
+ <artifactId>api</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-logging</groupId>
+ <artifactId>commons-logging</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-configuration</groupId>
+ <artifactId>commons-configuration</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>commons-codec</groupId>
+ <artifactId>commons-codec</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>apache-mailet-base</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>org.apache.james</groupId>
+ <artifactId>apache-mailet</artifactId>
+ </dependency>
+ <dependency>
+ <groupId>javax.mail</groupId>
+ <artifactId>mail</artifactId>
+ </dependency>
+
+ <dependency>
+ <groupId>junit</groupId>
+ <artifactId>junit</artifactId>
+ <scope>test</scope>
+ </dependency>
+ </dependencies>
+</project>
\ No newline at end of file
Added: james/protocols/trunk/smtp/src/main/java/org/apache/james/dsn/DSNStatus.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/dsn/DSNStatus.java?rev=905220&view=auto
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/dsn/DSNStatus.java (added)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/dsn/DSNStatus.java Mon Feb 1 09:29:55 2010
@@ -0,0 +1,349 @@
+/****************************************************************
+ * 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.dsn;
+
+
+/**
+ * Constants and getters for RFC 3463 Enhanced Mail System Status Codes
+ *
+ */
+public class DSNStatus {
+ // status code classes
+ /**
+ * Success
+ */
+ public static final int SUCCESS = 2;
+
+ /**
+ * Persistent Transient Failure
+ */
+ public static final int TRANSIENT = 4;
+
+ /**
+ * Permanent Failure
+ */
+ public static final int PERMANENT = 5;
+
+ // subjects and details
+
+ /**
+ * Other or Undefined Status
+ */
+ public static final int UNDEFINED = 0;
+
+ /**
+ * Other undefined status
+ */
+ public static final String UNDEFINED_STATUS = "0.0";
+
+ /**
+ * Addressing Status
+ */
+ public static final int ADDRESS = 1;
+
+ /**
+ * Other address status
+ */
+ public static final String ADDRESS_OTHER = "1.0";
+
+ /**
+ * Bad destination mailbox address
+ */
+ public static final String ADDRESS_MAILBOX = "1.1";
+
+ /**
+ * Bad destination system address
+ */
+ public static final String ADDRESS_SYSTEM = "1.2";
+
+ /**
+ * Bad destination mailbox address syntax
+ */
+ public static final String ADDRESS_SYNTAX = "1.3";
+
+ /**
+ * Destination mailbox address ambiguous
+ */
+ public static final String ADDRESS_AMBIGUOUS = "1.4";
+
+ /**
+ * Destination Address valid
+ */
+ public static final String ADDRESS_VALID = "1.5";
+
+ /**
+ * Destimation mailbox has moved, no forwarding address
+ */
+ public static final String ADDRESS_MOVED = "1.6";
+
+ /**
+ * Bad sender's mailbox address syntax
+ */
+ public static final String ADDRESS_SYNTAX_SENDER = "1.7";
+
+ /**
+ * Bad sender's system address
+ */
+ public static final String ADDRESS_SYSTEM_SENDER = "1.8";
+
+
+ /**
+ * Mailbox Status
+ */
+ public static final int MAILBOX = 2;
+
+ /**
+ * Other or Undefined Mailbox Status
+ */
+ public static final String MAILBOX_OTHER = "2.0";
+
+ /**
+ * Mailbox disabled, not accepting messages
+ */
+ public static final String MAILBOX_DISABLED = "2.1";
+
+ /**
+ * Mailbox full
+ */
+ public static final String MAILBOX_FULL = "2.2";
+
+ /**
+ * Message length exceeds administrative limit
+ */
+ public static final String MAILBOX_MSG_TOO_BIG = "2.3";
+
+ /**
+ * Mailing list expansion problem
+ */
+ public static final String MAILBOX_LIST_EXPANSION = "2.4";
+
+
+ /**
+ * Mail System Status
+ */
+ public static final int SYSTEM = 3;
+
+ /**
+ * Other or undefined mail system status
+ */
+ public static final String SYSTEM_OTHER = "3.0";
+
+ /**
+ * Mail system full
+ */
+ public static final String SYSTEM_FULL = "3.1";
+
+ /**
+ * System not accepting messages
+ */
+ public static final String SYSTEM_NOT_ACCEPTING = "3.2";
+
+ /**
+ * System not capable of selected features
+ */
+ public static final String SYSTEM_NOT_CAPABLE = "3.3";
+
+ /**
+ * Message too big for system
+ */
+ public static final String SYSTEM_MSG_TOO_BIG = "3.4";
+
+ /**
+ * System incorrectly configured
+ */
+ public static final String SYSTEM_CFG_ERROR = "3.5";
+
+
+ /**
+ * Network and Routing Status
+ */
+ public static final int NETWORK = 4;
+
+ /**
+ * Other or undefined network or routing status
+ */
+ public static final String NETWORK_OTHER = "4.0";
+
+ /**
+ * No answer form host
+ */
+ public static final String NETWORK_NO_ANSWER = "4.1";
+
+ /**
+ * Bad Connection
+ */
+ public static final String NETWORK_CONNECTION = "4.2";
+
+ /**
+ * Directory server failure
+ */
+ public static final String NETWORK_DIR_SERVER = "4.3";
+
+ /**
+ * Unable to route
+ */
+ public static final String NETWORK_ROUTE = "4.4";
+
+ /**
+ * Mail system congestion
+ */
+ public static final String NETWORK_CONGESTION = "4.5";
+
+ /**
+ * Routing loop detected
+ */
+ public static final String NETWORK_LOOP = "4.6";
+
+ /**
+ * Delivery time expired
+ */
+ public static final String NETWORK_EXPIRED = "4.7";
+
+
+ /**
+ * Mail Delivery Protocol Status
+ */
+ public static final int DELIVERY = 5;
+
+ /**
+ * Other or undefined (SMTP) protocol status
+ */
+ public static final String DELIVERY_OTHER = "5.0";
+
+ /**
+ * Invalid command
+ */
+ public static final String DELIVERY_INVALID_CMD = "5.1";
+
+ /**
+ * Syntax error
+ */
+ public static final String DELIVERY_SYNTAX = "5.2";
+
+ /**
+ * Too many recipients
+ */
+ public static final String DELIVERY_TOO_MANY_REC = "5.3";
+
+ /**
+ * Invalid command arguments
+ */
+ public static final String DELIVERY_INVALID_ARG = "5.4";
+
+ /**
+ * Wrong protocol version
+ */
+ public static final String DELIVERY_VERSION = "5.5";
+
+
+ /**
+ * Message Content or Media Status
+ */
+ public static final int CONTENT = 6;
+
+ /**
+ * Other or undefined media error
+ */
+ public static final String CONTENT_OTHER = "6.0";
+
+ /**
+ * Media not supported
+ */
+ public static final String CONTENT_UNSUPPORTED = "6.1";
+
+ /**
+ * Conversion required and prohibited
+ */
+ public static final String CONTENT_CONVERSION_NOT_ALLOWED = "6.2";
+
+ /**
+ * Conversion required, but not supported
+ */
+ public static final String CONTENT_CONVERSION_NOT_SUPPORTED = "6.3";
+
+ /**
+ * Conversion with loss performed
+ */
+ public static final String CONTENT_CONVERSION_LOSS = "6.4";
+
+ /**
+ * Conversion failed
+ */
+ public static final String CONTENT_CONVERSION_FAILED = "6.5";
+
+
+ /**
+ * Security or Policy Status
+ */
+ public static final int SECURITY = 7;
+
+ /**
+ * Other or undefined security status
+ */
+ public static final String SECURITY_OTHER = "7.0";
+
+ /**
+ * Delivery not authorized, message refused
+ */
+ public static final String SECURITY_AUTH = "7.1";
+
+ /**
+ * Mailing list expansion prohibited
+ */
+ public static final String SECURITY_LIST_EXP = "7.2";
+
+ /**
+ * Security conversion required, but not possible
+ */
+ public static final String SECURITY_CONVERSION = "7.3";
+
+ /**
+ * Security features not supported
+ */
+ public static final String SECURITY_UNSUPPORTED = "7.4";
+
+ /**
+ * Cryptographic failure
+ */
+ public static final String SECURITY_CRYPT_FAIL = "7.5";
+
+ /**
+ * Cryptographic algorithm not supported
+ */
+ public static final String SECURITY_CRYPT_ALGO = "7.6";
+
+ /**
+ * Message integrity failure
+ */
+ public static final String SECURITY_INTEGRITY = "7.7";
+
+
+ // get methods
+
+ public static String getStatus(int type, String detail) {
+ return type + "." + detail;
+ }
+
+ public static String getStatus(int type, int subject, int detail) {
+ return type + "." + subject + "." + detail;
+ }
+}
Added: james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/DNSService.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/DNSService.java?rev=905220&view=auto
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/DNSService.java (added)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/DNSService.java Mon Feb 1 09:29:55 2010
@@ -0,0 +1,107 @@
+/****************************************************************
+ * 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.smtpserver.protocol;
+
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+import java.util.Collection;
+import java.util.Iterator;
+
+import org.apache.mailet.HostAddress;
+
+
+/**
+ * Provides abstraction for DNS resolutions. The interface is Mail specific.
+ * It may be a good idea to make the interface more generic or expose
+ * commonly needed DNS methods.
+ *
+ */
+public interface DNSService {
+
+ /**
+ * The component role used by components implementing this service
+ */
+ String ROLE = "org.apache.james.smtpserver.protocol.DNSService";
+
+ /**
+ * <p>Return a prioritized unmodifiable list of host handling mail
+ * for the domain.</p>
+ *
+ * <p>First lookup MX hosts, then MX hosts of the CNAME adress, and
+ * if no server is found return the IP of the hostname</p>
+ *
+ * @param hostname domain name to look up
+ *
+ * @return a unmodifiable list of handling servers corresponding to
+ * this mail domain name
+ * @throws TemporaryResolutionException get thrown on temporary problems
+ */
+ Collection<String> findMXRecords(String hostname) throws TemporaryResolutionException;
+
+ /**
+ * Get a collection of DNS TXT Records
+ *
+ * @param hostname The hostname to check
+ * @return collection of strings representing TXT record values
+ */
+ Collection<String> findTXTRecords(String hostname);
+
+
+ /**
+ * Returns an Iterator over org.apache.mailet.HostAddress, a
+ * specialized subclass of javax.mail.URLName, which provides
+ * location information for servers that are specified as mail
+ * handlers for the given hostname. This is done using MX records,
+ * and the HostAddress instances are returned sorted by MX priority.
+ * If no host is found for domainName, the Iterator returned will be
+ * empty and the first call to hasNext() will return false. The
+ * Iterator is a nested iterator: the outer iteration is over the
+ * results of the MX record lookup, and the inner iteration is over
+ * potentially multiple A records for each MX record. DNS lookups
+ * are deferred until actually needed.
+ *
+ * @since v2.2.0a16-unstable
+ * @param domainName - the domain for which to find mail servers
+ * @return an Iterator over HostAddress instances, sorted by priority
+ * @throws TemporaryResolutionException get thrown on temporary problems
+ */
+ Iterator<HostAddress> getSMTPHostAddresses(String domainName) throws TemporaryResolutionException;
+
+ /**
+ * @see java.net.InetAddress#getAllByName(String)
+ */
+ public InetAddress[] getAllByName(String host) throws UnknownHostException;
+
+ /**
+ * @see java.net.InetAddress#getByName(String)
+ */
+ public InetAddress getByName(String host) throws UnknownHostException;
+
+ /**
+ * @see org.xbill.DNS.Address#getHostName(InetAddress)
+ */
+ public String getHostName(InetAddress addr);
+
+ /**
+ */
+ public InetAddress getLocalHost() throws UnknownHostException;
+}
Added: james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/MailEnvelope.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/MailEnvelope.java?rev=905220&view=auto
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/MailEnvelope.java (added)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/MailEnvelope.java Mon Feb 1 09:29:55 2010
@@ -0,0 +1,74 @@
+/****************************************************************
+ * 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.smtpserver.protocol;
+
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+
+import org.apache.mailet.MailAddress;
+
+/**
+ * The MailEnvelope of a SMTP-Transaction
+ *
+ *
+ */
+public interface MailEnvelope {
+
+ /**
+ * Return the size of the message. If the message is "empty" it will return -1
+ *
+ * @return size
+ */
+ public int getSize();
+
+ /**
+ * Return the recipients which where supplied in the RCPT TO: command
+ *
+ * @return recipients
+ */
+ public List<MailAddress> getRecipients();
+
+ /**
+ * Return the sender of the mail which was supplied int the MAIL FROM: command. If its a "null" sender,
+ * null will get returned
+ *
+ * @return sender
+ */
+ public MailAddress getSender();
+
+
+ /**
+ * Return the OutputStream of the message
+ *
+ * @return out
+ * @throws Exception
+ */
+ public OutputStream getMessageOutputStream() throws Exception;
+
+ /**
+ * Return the InputStream of the message
+ *
+ * @return in
+ * @throws Exception
+ */
+ public InputStream getMessageInputStream() throws Exception;
+}
Added: james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/MailEnvelopeImpl.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/MailEnvelopeImpl.java?rev=905220&view=auto
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/MailEnvelopeImpl.java (added)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/MailEnvelopeImpl.java Mon Feb 1 09:29:55 2010
@@ -0,0 +1,106 @@
+/****************************************************************
+ * 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.smtpserver.protocol;
+
+import java.io.ByteArrayInputStream;
+import java.io.ByteArrayOutputStream;
+import java.io.InputStream;
+import java.io.OutputStream;
+import java.util.List;
+
+import org.apache.mailet.MailAddress;
+
+/**
+ * MailEnvelope implementation which stores everything in memory
+ *
+ *
+ */
+public class MailEnvelopeImpl implements MailEnvelope{
+
+ private List<MailAddress> recipients;
+
+ private MailAddress sender;
+
+ private ByteArrayOutputStream outputStream;
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.smtpserver.protocol.MailEnvelope#getSize()
+ */
+ public int getSize() {
+ if (outputStream == null)
+ return -1;
+ return outputStream.size();
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.smtpserver.protocol.MailEnvelope#getRecipients()
+ */
+ public List<MailAddress> getRecipients() {
+ return recipients;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.smtpserver.protocol.MailEnvelope#getSender()
+ */
+ public MailAddress getSender() {
+ return sender;
+ }
+
+ /**
+ * Set the recipients of the mail
+ *
+ * @param recipientCollection
+ */
+ public void setRecipients(List<MailAddress> recipientCollection) {
+ this.recipients = recipientCollection;
+ }
+
+ /**
+ * Set the sender of the mail
+ *
+ * @param sender
+ */
+ public void setSender(MailAddress sender) {
+ this.sender = sender;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.smtpserver.protocol.MailEnvelope#getMessageOutputStream()
+ */
+ public OutputStream getMessageOutputStream() {
+ this.outputStream = new ByteArrayOutputStream(100000);
+ return outputStream;
+ }
+
+ /*
+ * (non-Javadoc)
+ * @see org.apache.james.smtpserver.protocol.MailEnvelope#getMessageInputStream()
+ */
+ public InputStream getMessageInputStream() {
+ return new ByteArrayInputStream(outputStream.toByteArray());
+ }
+}
+
+
Added: james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPConfiguration.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPConfiguration.java?rev=905220&view=auto
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPConfiguration.java (added)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPConfiguration.java Mon Feb 1 09:29:55 2010
@@ -0,0 +1,98 @@
+/****************************************************************
+ * 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.smtpserver.protocol;
+
+
+/**
+ * Provides a number of server-wide constant values to the
+ * SMTPHandlers
+ *
+ */
+public interface SMTPConfiguration {
+
+ /**
+ * Returns the service wide hello name
+ *
+ * @return the hello name
+ */
+ String getHelloName();
+
+ /**
+ * Returns the service wide reset length in bytes.
+ *
+ * @return the reset length
+ */
+ int getResetLength();
+
+ /**
+ * Returns the service wide maximum message size in bytes.
+ *
+ * @return the maximum message size
+ */
+ long getMaxMessageSize();
+
+ /**
+ * Returns whether relaying is allowed for the IP address passed.
+ *
+ * @param remoteIP the remote IP address in String form
+ * @return whether relaying is allowed
+ */
+ boolean isRelayingAllowed(String remoteIP);
+
+ /**
+ * Returns whether SMTP AUTH is active for this server, and
+ * necessary for the IP address passed.
+ *
+ * @param remoteIP the remote IP address in String form
+ * @return whether SMTP authentication is on
+ */
+ boolean isAuthRequired(String remoteIP);
+
+ /**
+ * Returns whether the remote server needs to send a HELO/EHLO
+ * of its senders.
+ *
+ * @return whether SMTP authentication is on
+ */
+ boolean useHeloEhloEnforcement();
+
+
+ /**
+ * Return the SMTPGreeting which should used.
+ *
+ * @return the SMTPGreeting
+ */
+ String getSMTPGreeting();
+
+ /**
+ * Return wheter the mailserver will accept addresses without brackets enclosed.
+ *
+ * @return true or false
+ */
+ boolean useAddressBracketsEnforcement();
+
+ /**
+ *
+ */
+ boolean isStartTLSSupported();
+
+}
Added: james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPRequest.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPRequest.java?rev=905220&view=auto
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPRequest.java (added)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPRequest.java Mon Feb 1 09:29:55 2010
@@ -0,0 +1,35 @@
+/****************************************************************
+ * 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.smtpserver.protocol;
+
+import org.apache.james.protocols.api.BaseRequest;
+
+/**
+ * SMTPRequest which contains a command and an optional argument
+ *
+ *
+ */
+public final class SMTPRequest extends BaseRequest {
+
+ public SMTPRequest(final String command, final String argument) {
+ super(command, argument);
+ }
+
+}
Added: james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPResponse.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPResponse.java?rev=905220&view=auto
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPResponse.java (added)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPResponse.java Mon Feb 1 09:29:55 2010
@@ -0,0 +1,142 @@
+/****************************************************************
+ * 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.smtpserver.protocol;
+
+import java.util.LinkedList;
+import java.util.List;
+
+import org.apache.james.protocols.api.RetCodeResponse;
+
+/**
+ * Contains an SMTP result
+ */
+public final class SMTPResponse implements RetCodeResponse {
+
+ private String retCode = null;
+ private List<CharSequence> lines = null;
+ private String rawLine = null;
+ private boolean endSession = false;
+
+ /**
+ * Construct a new SMTPResponse. The given code and description can not be null, if null an IllegalArgumentException
+ * get thrown
+ *
+ * @param code the returnCode
+ * @param description the description
+ */
+ public SMTPResponse(String code, CharSequence description) {
+ if (code == null) throw new IllegalArgumentException("SMTPResponse code can not be null");
+ if (description == null) new IllegalArgumentException("SMTPResponse description can not be null");
+
+ this.setRetCode(code);
+ this.appendLine(description);
+ this.rawLine = code + " " + description;
+ }
+
+ /**
+ * Construct a new SMTPResponse. The given rawLine need to be in format [SMTPResponseReturnCode SMTResponseDescription].
+ * If this is not the case an IllegalArgumentException get thrown.
+ *
+ * @param rawLine the raw SMTPResponse
+ */
+ public SMTPResponse(String rawLine) {
+ String args[] = rawLine.split(" ");
+ if (args != null && args.length > 1) {
+ this.setRetCode(args[0]);
+ this.appendLine(new StringBuilder(rawLine.substring(args[0].length()+1)));
+ } else {
+ throw new IllegalArgumentException("Invalid SMTPResponse format. Format should be [SMTPCode SMTPReply]");
+ }
+ this.rawLine = rawLine;
+ }
+
+ /**
+ * Append the responseLine to the SMTPResponse
+ *
+ * @param line the responseLine to append
+ */
+ public void appendLine(CharSequence line) {
+ if (lines == null) {
+ lines = new LinkedList<CharSequence>();
+ }
+ lines.add(line);
+ }
+
+ /**
+ * Return the SMTPCode
+ *
+ * @return the SMTPCode
+ */
+ public String getRetCode() {
+ return retCode;
+ }
+
+ /**
+ * Set the SMTPCode
+ *
+ * @param retCode the SMTPCode
+ */
+ public void setRetCode(String retCode) {
+ this.retCode = retCode;
+ }
+
+ /**
+ * Return a List of all responseLines stored in this SMTPResponse
+ *
+ * @return all responseLines
+ */
+ public List<CharSequence> getLines() {
+ return lines;
+ }
+
+ /**
+ * Return the raw representation of the Stored SMTPResponse
+ *
+ * @return rawLine the raw SMTPResponse
+ */
+ public String getRawLine() {
+ return rawLine;
+ }
+
+ /**
+ * Return true if the session is ended
+ *
+ * @return true if session is ended
+ */
+ public boolean isEndSession() {
+ return endSession;
+ }
+
+ /**
+ * Set to true to end the session
+ *
+ * @param endSession
+ */
+ public void setEndSession(boolean endSession) {
+ this.endSession = endSession;
+ }
+
+ /**
+ * @see java.lang.Object#toString()
+ */
+ public String toString() {
+ return getRetCode() + " " + getLines();
+ }
+}
Added: james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPRetCode.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPRetCode.java?rev=905220&view=auto
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPRetCode.java (added)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPRetCode.java Mon Feb 1 09:29:55 2010
@@ -0,0 +1,178 @@
+/****************************************************************
+ * 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.smtpserver.protocol;
+
+/**
+ * Result code defined in RFC 2821
+ */
+public class SMTPRetCode {
+ /** System status, or system help reply */
+ public static final String SYSTEM_STATUS = "211";
+
+ /**
+ * Help message (Information on how to use the receiver or the meaning of a
+ * particular non-standard command; this reply is useful only to the human
+ * user)
+ */
+ public static final String HELP_MESSAGE = "214";
+
+ /** <domain> Service ready */
+ public static final String SERVICE_READY = "220";
+
+ /** <domain> Service closing transmission channel */
+ public static final String SYSTEM_QUIT = "221";
+
+ /** Auth ok */
+ public static final String AUTH_OK = "235";
+
+ /** Requested mail action okay, completed */
+ public static final String MAIL_OK = "250";
+
+ /**
+ * 251 User not local; will forward to <forward-path> (See section 3.4)
+ */
+ public static final String MAIL_FORWARDING = "251";
+
+ /**
+ * Cannot VRFY user, but will accept message and attempt delivery (See
+ * section 3.5.3)
+ */
+ public static final String MAIL_UNDEFINDED = "252";
+
+ public static final String AUTH_READY = "334";
+
+ /** Start mail input; end with <CRLF>.<CRLF> */
+ public static final String DATA_READY = "354";
+
+ /**
+ * <domain> Service not available, closing transmission channel (This may be
+ * a reply to any command if the service knows it must shut down)
+ */
+ public static final String SERVICE_NOT_AVAILABLE = "421";
+
+ /**
+ * This response to the AUTH command indicates that the user needs to
+ * transition to the selected authentication mechanism. This typically done
+ * by authenticating once using the PLAIN authentication mechanism.
+ */
+ public static final String AUTH_PASSWORD_TRANSITION_ERROR = "432";
+
+ /**
+ * Requested mail action not taken: mailbox unavailable (e.g., mailbox busy)
+ */
+ public static final String MAILBOX_TEMP_UNAVAILABLE = "450";
+
+ /**
+ * Requested action aborted: local error in processing
+ */
+ public static final String LOCAL_ERROR = "451";
+
+ /**
+ * Requested action not taken: insufficient system storage
+ */
+ public static final String SYSTEM_STORAGE_ERROR = "452";
+
+ /**
+ * This response to the AUTH command indicates that the authentication
+ * failed due to a temporary server failure.
+ */
+ public static final String AUTH_TEMPORARY_ERROR = "454";
+
+ /**
+ * Syntax error, command unrecognized (This may include errors such as
+ * command line too long)
+ */
+ public static final String SYNTAX_ERROR_COMMAND_UNRECOGNIZED = "500";
+
+ /**
+ * Syntax error in parameters or arguments
+ */
+ public static final String SYNTAX_ERROR_ARGUMENTS = "501";
+
+ /**
+ * Command not implemented (see section 4.2.4)
+ */
+ public static final String UNIMPLEMENTED_COMMAND = "502";
+
+ /**
+ * Bad sequence of commands
+ */
+ public static final String BAD_SEQUENCE = "503";
+
+ /**
+ * Command parameter not implemented
+ */
+ public static final String PARAMETER_NOT_IMPLEMENTED = "504";
+
+ /**
+ * This response may be returned by any command other than AUTH, EHLO, HELO,
+ * NOOP, RSET, or QUIT. It indicates that server policy requires
+ * authentication in order to perform the requested action.
+ */
+ public static final String AUTH_REQUIRED = "530";
+
+ /**
+ * Auth failed
+ */
+ public static final String AUTH_FAILED = "535";
+
+ /**
+ * This response to the AUTH command indicates that the selected
+ * authentication mechanism is weaker than server policy permits for that
+ * user.
+ */
+ public static final String AUTH_MECHANISM_WEAK = "534";
+
+ /**
+ * This response to the AUTH command indicates that the selected
+ * authentication mechanism may only be used when the underlying SMTP
+ * connection is encrypted.
+ */
+ public static final String AUTH_ENCRYPTION_REQUIRED = "538";
+
+ /**
+ * Requested action not taken: mailbox unavailable (e.g., mailbox not found,
+ * no access, or command rejected for policy reasons)
+ */
+ public static final String MAILBOX_PERM_UNAVAILABLE = "550";
+
+ /**
+ * User not local; please try <forward-path> (See section 3.4)
+ */
+ public static final String USER_NOT_LOCAL = "551";
+
+ /**
+ * Requested mail action aborted: exceeded storage allocation
+ */
+ public static final String QUOTA_EXCEEDED = "552";
+
+ /**
+ * Requested action not taken: mailbox name not allowed (e.g., mailbox
+ * syntax incorrect)
+ */
+ public static final String SYNTAX_ERROR_MAILBOX = "553";
+
+ /**
+ * Transaction failed (Or, in the case of a connection-opening response,
+ * "No SMTP service here")
+ */
+ public static final String TRANSACTION_FAILED = "554";
+
+}
Added: james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPServerMBean.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPServerMBean.java?rev=905220&view=auto
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPServerMBean.java (added)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPServerMBean.java Mon Feb 1 09:29:55 2010
@@ -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.smtpserver.protocol;
+
+/**
+ * An interface to expose James management functionality through JMX.
+ *
+ * @phoenix:mx-topic name="SMTPServer"
+ */
+public interface SMTPServerMBean {
+ /**
+ * @phoenix:mx-attribute
+ * @phoenix:mx-description Returns flag indicating it this service is enabled
+ * @phoenix:mx-isWriteable no
+ *
+ * @return boolean The enabled flag
+ */
+ public boolean isEnabled();
+
+ /**
+ * @phoenix:mx-attribute
+ * @phoenix:mx-description Returns the port that the service is bound to
+ * @phoenix:mx-isWriteable no
+ *
+ * @return int The port number
+ */
+ public int getPort();
+
+ /**
+ * @phoenix:mx-attribute
+ * @phoenix:mx-description Returns the address if the network interface the socket is bound to
+ * @phoenix:mx-isWriteable no
+ *
+ * @return String The network interface name
+ */
+ public String getNetworkInterface();
+
+ /**
+ * @phoenix:mx-attribute
+ * @phoenix:mx-description Returns the server socket type, plain or SSL
+ * @phoenix:mx-isWriteable no
+ *
+ * @return String The scoekt type, plain or SSL
+ */
+ public String getSocketType();
+}
Added: james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPSession.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPSession.java?rev=905220&view=auto
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPSession.java (added)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/SMTPSession.java Mon Feb 1 09:29:55 2010
@@ -0,0 +1,144 @@
+/****************************************************************
+ * 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.smtpserver.protocol;
+
+import java.util.Map;
+
+import org.apache.james.protocols.api.LineHandler;
+import org.apache.james.protocols.api.TLSSupportedSession;
+
+
+/**
+ * All the handlers access this interface to communicate with
+ * SMTPHandler object
+ */
+
+public interface SMTPSession extends TLSSupportedSession{
+
+ // Keys used to store/lookup data in the internal state hash map
+ /** Sender's email address */
+ public final static String SENDER = "SENDER_ADDRESS";
+ /** The message recipients */
+ public final static String RCPT_LIST = "RCPT_LIST";
+ /** HELO or EHLO */
+ public final static String CURRENT_HELO_MODE = "CURRENT_HELO_MODE";
+ public final static String CURRENT_HELO_NAME = "CURRENT_HELO_NAME";
+ /** the Session state */
+ public final static String SESSION_STATE_MAP = "SESSION_STATE_MAP";
+
+ /**
+ * Returns the service wide hello name
+ *
+ * @return the hello name
+ */
+ String getHelloName();
+
+ /**
+ * Returns whether the remote server needs to send a HELO/EHLO
+ * of its senders.
+ *
+ * @return whether SMTP authentication is on
+ */
+ boolean useHeloEhloEnforcement();
+
+ /**
+ * Return the SMTPGreeting which should used.
+ *
+ * @return the SMTPGreeting
+ */
+ String getSMTPGreeting();
+
+ /**
+ * Returns the service wide maximum message size in bytes.
+ *
+ * @return the maximum message size
+ */
+ long getMaxMessageSize();
+
+ /**
+ * Return wheter the mailserver will accept addresses without brackets enclosed.
+ *
+ * @return true or false
+ */
+ boolean useAddressBracketsEnforcement();
+
+ /**
+ * Returns whether Relaying is allowed or not
+ *
+ * @return the relaying status
+ */
+ boolean isRelayingAllowed();
+
+ /**
+ * Set if reallying is allowed
+ *
+ * @param relayingAllowed
+ */
+ void setRelayingAllowed(boolean relayingAllowed);
+
+ /**
+ * Returns whether Authentication is required or not
+ *
+ * @return authentication required or not
+ */
+ boolean isAuthSupported();
+
+
+ /**
+ * Returns the SMTP session id
+ *
+ * @return SMTP session id
+ */
+ String getSessionID();
+
+ /**
+ * Returns the recipient count
+ *
+ * @return recipient count
+ */
+ int getRcptCount();
+
+ /**
+ * Returns Map that consists of the state of the SMTPSession per connection
+ *
+ * @return map of the current SMTPSession state per connection
+ */
+ Map<String,Object> getConnectionState();
+
+ /**
+ * Put a new line handler in the chain
+ * @param overrideCommandHandler
+ */
+ void pushLineHandler(LineHandler<SMTPSession> overrideCommandHandler);
+
+ /**
+ * Pop the last command handler
+ */
+ void popLineHandler();
+
+ /**
+ * Sleep for the given ms
+ *
+ * @param ms the time to sleep in milliseconds
+ */
+ void sleep(long ms);
+
+}
+
Added: james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/TemporaryResolutionException.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/TemporaryResolutionException.java?rev=905220&view=auto
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/TemporaryResolutionException.java (added)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/TemporaryResolutionException.java Mon Feb 1 09:29:55 2010
@@ -0,0 +1,37 @@
+/****************************************************************
+ * 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.smtpserver.protocol;
+
+import java.io.IOException;
+
+@SuppressWarnings("serial")
+public class TemporaryResolutionException extends IOException {
+
+ public TemporaryResolutionException() {
+ super();
+ }
+
+ public TemporaryResolutionException(String message) {
+ super(message);
+ }
+}
Added: james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractAuthRequiredToRelayRcptHook.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractAuthRequiredToRelayRcptHook.java?rev=905220&view=auto
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractAuthRequiredToRelayRcptHook.java (added)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractAuthRequiredToRelayRcptHook.java Mon Feb 1 09:29:55 2010
@@ -0,0 +1,75 @@
+/****************************************************************
+ * 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.smtpserver.protocol.core;
+
+import org.apache.james.dsn.DSNStatus;
+import org.apache.james.smtpserver.protocol.SMTPRetCode;
+import org.apache.james.smtpserver.protocol.SMTPSession;
+import org.apache.james.smtpserver.protocol.hook.HookResult;
+import org.apache.james.smtpserver.protocol.hook.HookReturnCode;
+import org.apache.james.smtpserver.protocol.hook.RcptHook;
+import org.apache.mailet.MailAddress;
+
+/**
+ * Handler which check for authenticated users
+ */
+public abstract class AbstractAuthRequiredToRelayRcptHook implements RcptHook {
+
+
+ /**
+ * @see org.apache.james.smtpserver.protocol.hook.RcptHook#doRcpt(org.apache.james.smtpserver.protocol.SMTPSession,
+ * org.apache.mailet.MailAddress, org.apache.mailet.MailAddress)
+ */
+ public HookResult doRcpt(SMTPSession session, MailAddress sender,
+ MailAddress rcpt) {
+ if (!session.isRelayingAllowed()) {
+ String toDomain = rcpt.getDomain();
+ if (isLocalDomain(toDomain) == false) {
+ if (session.isAuthSupported()) {
+ return new HookResult(HookReturnCode.DENY,
+ SMTPRetCode.AUTH_REQUIRED, DSNStatus.getStatus(
+ DSNStatus.PERMANENT,
+ DSNStatus.SECURITY_AUTH)
+ + " Authentication Required");
+ } else {
+ return new HookResult(
+ HookReturnCode.DENY,
+ // sendmail returns 554 (SMTPRetCode.TRANSACTION_FAILED).
+ // it is not clear in RFC wether it is better to use 550 or 554.
+ SMTPRetCode.MAILBOX_PERM_UNAVAILABLE,
+ DSNStatus.getStatus(DSNStatus.PERMANENT,
+ DSNStatus.SECURITY_AUTH)
+ + " Requested action not taken: relaying denied");
+ }
+ }
+
+ }
+ return new HookResult(HookReturnCode.DECLINED);
+ }
+
+
+ /**
+ * Return true if the given domain is a local domain for this server
+ *
+ * @param domain
+ * @return isLocal
+ */
+ protected abstract boolean isLocalDomain(String domain);
+
+}
Added: james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractHookableCmdHandler.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractHookableCmdHandler.java?rev=905220&view=auto
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractHookableCmdHandler.java (added)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractHookableCmdHandler.java Mon Feb 1 09:29:55 2010
@@ -0,0 +1,223 @@
+/****************************************************************
+ * 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.smtpserver.protocol.core;
+
+import java.util.ArrayList;
+import java.util.List;
+
+import org.apache.james.protocols.api.CommandHandler;
+import org.apache.james.protocols.api.ExtensibleHandler;
+import org.apache.james.protocols.api.Request;
+import org.apache.james.protocols.api.Response;
+import org.apache.james.smtpserver.protocol.SMTPResponse;
+import org.apache.james.smtpserver.protocol.SMTPRetCode;
+import org.apache.james.smtpserver.protocol.SMTPSession;
+import org.apache.james.smtpserver.protocol.hook.HookResult;
+import org.apache.james.smtpserver.protocol.hook.HookResultHook;
+import org.apache.james.smtpserver.protocol.hook.HookReturnCode;
+
+/**
+ * Abstract class which Handle hook-aware CommanHandler.
+ *
+ */
+public abstract class AbstractHookableCmdHandler<Hook> implements CommandHandler<SMTPSession>, ExtensibleHandler {
+
+
+ private List<Hook> hooks;
+ private List<HookResultHook> rHooks;
+
+ /**
+ * Handle command processing
+ *
+ * @see org.apache.james.smtpserver.protocol.CommandHandler#onCommand(org.apache.james.smtpserver.protocol.SMTPSession,
+ * java.lang.String, java.lang.String)
+ */
+ public Response onCommand(SMTPSession session, Request request) {
+ String command = request.getCommand();
+ String parameters = request.getArgument();
+ SMTPResponse response = doFilterChecks(session, command, parameters);
+
+ if (response == null) {
+
+ response = processHooks(session, command, parameters);
+ if (response == null) {
+ return doCoreCmd(session, command, parameters);
+ } else {
+ return response;
+ }
+ } else {
+ return response;
+ }
+
+ }
+
+ /**
+ * Process all hooks for the given command
+ *
+ * @param session
+ * the SMTPSession object
+ * @param command
+ * the command
+ * @param parameters
+ * the paramaters
+ * @return SMTPResponse
+ */
+ private SMTPResponse processHooks(SMTPSession session, String command,
+ String parameters) {
+ List<Hook> hooks = getHooks();
+ if (hooks != null) {
+ int count = hooks.size();
+ for (int i = 0; i < count; i++) {
+ Hook rawHook = hooks.get(i);
+ session.getLogger().debug("executing hook " + rawHook.getClass().getName());
+ HookResult hRes = callHook(rawHook, session, parameters);
+ if (rHooks != null) {
+ for (int i2 = 0; i2 < rHooks.size(); i2++) {
+ Object rHook = rHooks.get(i2);
+ session.getLogger().debug("executing hook " + rHook);
+ hRes = ((HookResultHook) rHook).onHookResult(session, hRes, rawHook);
+ }
+ }
+ SMTPResponse res = calcDefaultSMTPResponse(hRes);
+ if (res != null) {
+ return res;
+ }
+ }
+ }
+ return null;
+ }
+
+ /**
+ * Must be implemented by hookable cmd handlers to make the effective call to an hook.
+ *
+ * @param rawHook the hook
+ * @param session the session
+ * @param parameters the parameters
+ * @return the HookResult, will be calculated using HookResultToSMTPResponse.
+ */
+ protected abstract HookResult callHook(Hook rawHook, SMTPSession session, String parameters);
+
+ /**
+ * Convert the HookResult to SMTPResponse using default values. Should be override for using own values
+ *
+ * @param result HookResult
+ * @return SMTPResponse
+ */
+ public static SMTPResponse calcDefaultSMTPResponse(HookResult result) {
+ if (result != null) {
+ int rCode = result.getResult();
+ String smtpRetCode = result.getSmtpRetCode();
+ String smtpDesc = result.getSmtpDescription();
+
+ if (rCode == HookReturnCode.DENY) {
+ if (smtpRetCode == null)
+ smtpRetCode = SMTPRetCode.TRANSACTION_FAILED;
+ if (smtpDesc == null)
+ smtpDesc = "Email rejected";
+
+ return new SMTPResponse(smtpRetCode, smtpDesc);
+ } else if (rCode == HookReturnCode.DENYSOFT) {
+ if (smtpRetCode == null)
+ smtpRetCode = SMTPRetCode.LOCAL_ERROR;
+ if (smtpDesc == null)
+ smtpDesc = "Temporary problem. Please try again later";
+
+ return new SMTPResponse(smtpRetCode, smtpDesc);
+ } else if (rCode == HookReturnCode.OK) {
+ if (smtpRetCode == null)
+ smtpRetCode = SMTPRetCode.MAIL_OK;
+ if (smtpDesc == null)
+ smtpDesc = "Command accepted";
+
+ return new SMTPResponse(smtpRetCode, smtpDesc);
+ } else {
+ // Return null as default
+ return null;
+ }
+ } else {
+ return null;
+ }
+ }
+
+ /**
+ * Execute Syntax checks and return a SMTPResponse if a syntax error was
+ * detected, otherwise null.
+ *
+ * @param session
+ * @param command
+ * @param parameters
+ * @return
+ */
+ protected abstract SMTPResponse doFilterChecks(SMTPSession session,
+ String command, String parameters);
+
+ /**
+ * Execute the core commandHandling.
+ *
+ * @param session
+ * @param command
+ * @param parameters
+ * @return
+ */
+ protected abstract SMTPResponse doCoreCmd(SMTPSession session,
+ String command, String parameters);
+
+
+ /**
+ * @see org.apache.james.api.protocol.ExtensibleHandler#getMarkerInterfaces()
+ */
+ public List<Class<?>> getMarkerInterfaces() {
+ List<Class<?>> classes = new ArrayList<Class<?>>(2);
+ classes.add(getHookInterface());
+ classes.add(HookResultHook.class);
+ return classes;
+ }
+
+ /**
+ * Return the interface which hooks need to implement to hook in
+ *
+ * @return interface
+ */
+ protected abstract Class<Hook> getHookInterface();
+
+ /**
+ * @see org.apache.james.api.protocol.ExtensibleHandler#wireExtensions(java.lang.Class,
+ * java.util.List)
+ */
+ @SuppressWarnings("unchecked")
+ public void wireExtensions(Class interfaceName, List extension) {
+ if (getHookInterface().equals(interfaceName)) {
+ this.hooks = extension;
+ } else if (HookResultHook.class.equals(interfaceName)) {
+ this.rHooks = extension;
+ }
+
+ }
+
+ /**
+ * Return a list which holds all hooks for the cmdHandler
+ *
+ * @return
+ */
+ protected List<Hook> getHooks() {
+ return hooks;
+ }
+
+}
Added: james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractSenderAuthIdentifyVerificationRcptHook.java
URL: http://svn.apache.org/viewvc/james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractSenderAuthIdentifyVerificationRcptHook.java?rev=905220&view=auto
==============================================================================
--- james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractSenderAuthIdentifyVerificationRcptHook.java (added)
+++ james/protocols/trunk/smtp/src/main/java/org/apache/james/smtpserver/protocol/core/AbstractSenderAuthIdentifyVerificationRcptHook.java Mon Feb 1 09:29:55 2010
@@ -0,0 +1,68 @@
+/****************************************************************
+ * 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.smtpserver.protocol.core;
+
+import java.util.Locale;
+
+import org.apache.james.dsn.DSNStatus;
+import org.apache.james.smtpserver.protocol.SMTPRetCode;
+import org.apache.james.smtpserver.protocol.SMTPSession;
+import org.apache.james.smtpserver.protocol.hook.HookResult;
+import org.apache.james.smtpserver.protocol.hook.HookReturnCode;
+import org.apache.james.smtpserver.protocol.hook.RcptHook;
+import org.apache.mailet.MailAddress;
+
+/**
+ * Handler which check if the authenticated user is incorrect or correct
+ */
+public abstract class AbstractSenderAuthIdentifyVerificationRcptHook implements RcptHook {
+ /**
+ * @see org.apache.james.smtpserver.protocol.hook.RcptHook#doRcpt(org.apache.james.smtpserver.protocol.SMTPSession,
+ * org.apache.mailet.MailAddress, org.apache.mailet.MailAddress)
+ */
+ public HookResult doRcpt(SMTPSession session, MailAddress sender,
+ MailAddress rcpt) {
+ if (session.getUser() != null) {
+ String authUser = (session.getUser()).toLowerCase(Locale.US);
+ MailAddress senderAddress = (MailAddress) session.getState().get(
+ SMTPSession.SENDER);
+
+ if ((senderAddress == null)
+ || (!authUser.equals(senderAddress.getLocalPart()))
+ || (!isLocalDomain(senderAddress.getDomain()))) {
+ return new HookResult(HookReturnCode.DENY,
+ SMTPRetCode.BAD_SEQUENCE,
+ DSNStatus.getStatus(DSNStatus.PERMANENT,
+ DSNStatus.SECURITY_AUTH)
+ + " Incorrect Authentication for Specified Email Address");
+ }
+ }
+ return new HookResult(HookReturnCode.DECLINED);
+ }
+
+
+ /**
+ * Return true if the given domain is a local domain for this server
+ *
+ * @param domain
+ * @return isLocal
+ */
+ protected abstract boolean isLocalDomain(String domain);
+
+}
---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org