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 package org.apache.james.smtpserver;
21
22 import org.apache.james.util.mail.dsn.DSNStatus;
23
24 /***
25 * Handles RSET command
26 */
27 public class RsetCmdHandler implements CommandHandler {
28 /***
29 * The name of the command handled by the command handler
30 */
31 private final static String COMMAND_NAME = "RSET";
32
33
34
35
36
37
38 public void onCommand(SMTPSession session) {
39 doRSET(session, session.getCommandArgument());
40 }
41
42
43 /***
44 * Handler method called upon receipt of a RSET command.
45 * Resets message-specific, but not authenticated user, state.
46 *
47 * @param session SMTP session object
48 * @param argument the argument passed in with the command by the SMTP client
49 */
50 private void doRSET(SMTPSession session, String argument) {
51 String responseString = "";
52 if ((argument == null) || (argument.length() == 0)) {
53
54 Object currentHeloMode = session.getState().get(SMTPSession.CURRENT_HELO_MODE);
55 session.resetState();
56
57 if (currentHeloMode != null) {
58 session.getState().put(SMTPSession.CURRENT_HELO_MODE,currentHeloMode);
59 }
60 responseString = "250 "+DSNStatus.getStatus(DSNStatus.SUCCESS,DSNStatus.UNDEFINED_STATUS)+" OK";
61 } else {
62 responseString = "500 "+DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.DELIVERY_INVALID_ARG)+" Unexpected argument provided with RSET command";
63 }
64 session.writeResponse(responseString);
65 }
66
67
68
69 }