View Javadoc

1   /****************************************************************
2    * Licensed to the Apache Software Foundation (ASF) under one   *
3    * or more contributor license agreements.  See the NOTICE file *
4    * distributed with this work for additional information        *
5    * regarding copyright ownership.  The ASF licenses this file   *
6    * to you under the Apache License, Version 2.0 (the            *
7    * "License"); you may not use this file except in compliance   *
8    * with the License.  You may obtain a copy of the License at   *
9    *                                                              *
10   *   http://www.apache.org/licenses/LICENSE-2.0                 *
11   *                                                              *
12   * Unless required by applicable law or agreed to in writing,   *
13   * software distributed under the License is distributed on an  *
14   * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY       *
15   * KIND, either express or implied.  See the License for the    *
16   * specific language governing permissions and limitations      *
17   * under the License.                                           *
18   ****************************************************************/
19  
20  
21  
22  package org.apache.james.smtpserver.core;
23  
24  import java.util.ArrayList;
25  import java.util.Collection;
26  
27  import org.apache.avalon.framework.logger.AbstractLogEnabled;
28  import org.apache.james.smtpserver.CommandHandler;
29  import org.apache.james.smtpserver.SMTPSession;
30  
31  /**
32   * Handles EHLO command
33   */
34  public class EhloCmdHandler extends AbstractLogEnabled implements
35          CommandHandler {
36  
37      /**
38       * The name of the command handled by the command handler
39       */
40      private final static String COMMAND_NAME = "EHLO";
41  
42      /*
43       * processes EHLO command
44       *
45       * @see org.apache.james.smtpserver.CommandHandler#onCommand(SMTPSession)
46       **/
47      public void onCommand(SMTPSession session) {
48          doEHLO(session, session.getCommandArgument());
49      }
50  
51      /**
52       * Handler method called upon receipt of a EHLO command.
53       * Responds with a greeting and informs the client whether
54       * client authentication is required.
55       *
56       * @param session SMTP session object
57       * @param argument the argument passed in with the command by the SMTP client
58       */
59      private void doEHLO(SMTPSession session, String argument) {
60          StringBuffer responseBuffer = session.getResponseBuffer();
61  
62          session.getConnectionState().put(SMTPSession.CURRENT_HELO_MODE, COMMAND_NAME);
63  
64          ArrayList esmtpextensions = new ArrayList();
65  
66          esmtpextensions.add(new StringBuffer(session.getConfigurationData()
67                  .getHelloName()).append(" Hello ").append(argument)
68                  .append(" (").append(session.getRemoteHost()).append(" [")
69                  .append(session.getRemoteIPAddress()).append("])").toString());
70  
71          // Extension defined in RFC 1870
72          long maxMessageSize = session.getConfigurationData()
73                  .getMaxMessageSize();
74          if (maxMessageSize > 0) {
75              esmtpextensions.add("SIZE " + maxMessageSize);
76          }
77  
78          if (session.isAuthRequired()) {
79              esmtpextensions.add("AUTH LOGIN PLAIN");
80              esmtpextensions.add("AUTH=LOGIN PLAIN");
81          }
82  
83          esmtpextensions.add("PIPELINING");
84          esmtpextensions.add("ENHANCEDSTATUSCODES");
85          // see http://issues.apache.org/jira/browse/JAMES-419 
86          esmtpextensions.add("8BITMIME");
87  
88          // Iterator i = esmtpextensions.iterator();
89          for (int i = 0; i < esmtpextensions.size(); i++) {
90              if (i == esmtpextensions.size() - 1) {
91                  responseBuffer.append("250 ");
92                  responseBuffer.append((String) esmtpextensions.get(i));
93                  session.writeResponse(session.clearResponseBuffer());
94              } else {
95                  responseBuffer.append("250-");
96                  responseBuffer.append((String) esmtpextensions.get(i));
97                  session.writeResponse(session.clearResponseBuffer());
98              }
99          }
100 
101     }
102     
103     /**
104      * @see org.apache.james.smtpserver.CommandHandler#getImplCommands()
105      */
106     public Collection getImplCommands() {
107         Collection implCommands = new ArrayList();
108         implCommands.add("EHLO");
109         
110         return implCommands;
111     }
112 }