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 Norman Maurer <no...@apache.org> on 2010/02/01 10:32:40 UTC

Re: 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

Sorry for the noise... My eclipse was stupid enough to not use svn cp :(

Bye,
Norman


2010/2/1  <no...@apache.org>:
> 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
>
>

---------------------------------------------------------------------
To unsubscribe, e-mail: server-dev-unsubscribe@james.apache.org
For additional commands, e-mail: server-dev-help@james.apache.org