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 QUIT command 26 */ 27 public class QuitCmdHandler implements CommandHandler { 28 29 /*** 30 * The name of the command handled by the command handler 31 */ 32 private final static String COMMAND_NAME = "QUIT"; 33 34 /*** 35 * handles QUIT command 36 * 37 * @see org.apache.james.smtpserver.CommandHandler#onCommand(SMTPSession) 38 */ 39 public void onCommand(SMTPSession session) { 40 doQUIT(session, session.getCommandArgument()); 41 42 } 43 44 45 /*** 46 * Handler method called upon receipt of a QUIT command. 47 * This method informs the client that the connection is 48 * closing. 49 * 50 * @param session SMTP session object 51 * @param argument the argument passed in with the command by the SMTP client 52 */ 53 private void doQUIT(SMTPSession session, String argument) { 54 55 String responseString = ""; 56 if ((argument == null) || (argument.length() == 0)) { 57 session.getResponseBuffer().append("221 "+DSNStatus.getStatus(DSNStatus.SUCCESS,DSNStatus.UNDEFINED_STATUS)+" ") 58 .append(session.getConfigurationData().getHelloName()) 59 .append(" Service closing transmission channel"); 60 responseString = session.clearResponseBuffer(); 61 } else { 62 responseString = "500 "+DSNStatus.getStatus(DSNStatus.PERMANENT,DSNStatus.DELIVERY_INVALID_ARG)+" Unexpected argument provided with QUIT command"; 63 } 64 session.writeResponse(responseString); 65 session.endSession(); 66 } 67 68 69 } 70 71 72