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.filter;
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.dsn.DSNStatus;
29 import org.apache.james.smtpserver.CommandHandler;
30 import org.apache.james.smtpserver.SMTPSession;
31
32 /**
33 * Handles EHLO command
34 */
35 public class EhloFilterCmdHandler extends AbstractLogEnabled implements 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 * @param session SMTP session object
53 * @param argument the argument passed in with the command by the SMTP client
54 */
55 private void doEHLO(SMTPSession session, String argument) {
56 String responseString = null;
57
58 session.resetState();
59
60 if (argument == null) {
61 responseString = "501 "+DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.DELIVERY_INVALID_ARG)+" Domain address required: " + COMMAND_NAME;
62 session.writeResponse(responseString);
63
64 // After this filter match we should not call any other handler!
65 session.setStopHandlerProcessing(true);
66 } else {
67 // store provided name
68 session.getState().put(SMTPSession.CURRENT_HELO_NAME,argument);
69 }
70 }
71
72 /**
73 * @see org.apache.james.smtpserver.CommandHandler#getImplCommands()
74 */
75 public Collection getImplCommands() {
76 Collection implCommands = new ArrayList();
77 implCommands.add("EHLO");
78
79 return implCommands;
80 }
81
82 }