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; 23 24 25 import org.apache.james.util.watchdog.Watchdog; 26 import org.apache.mailet.Mail; 27 28 import java.io.IOException; 29 import java.io.InputStream; 30 import java.util.Map; 31 32 /** 33 * All the handlers access this interface to communicate with 34 * SMTPHandler object 35 */ 36 37 public interface SMTPSession { 38 39 // Keys used to store/lookup data in the internal state hash map 40 public final static String MESG_FAILED = "MESG_FAILED"; // Message failed flag 41 public final static String SENDER = "SENDER_ADDRESS"; // Sender's email address 42 public final static String RCPT_LIST = "RCPT_LIST"; // The message recipients 43 public final static String CURRENT_HELO_MODE = "CURRENT_HELO_MODE"; // HELO or EHLO 44 public final static String CURRENT_HELO_NAME = "CURRENT_HELO_NAME"; 45 public static final Object CURRENT_RECIPIENT = "CURRENT_RECIPIENT"; // Current recipient 46 47 /** 48 * Writes response string to the client 49 * 50 * @param respString String that needs to send to the client 51 */ 52 void writeResponse(String respString); 53 54 /** 55 * Reads a line of characters off the command line. 56 * 57 * @return the trimmed input line 58 * @throws IOException if an exception is generated reading in the input characters 59 */ 60 String readCommandLine() throws IOException; 61 62 63 /** 64 * Returns ResponseBuffer, this optimizes the unecessary creation of resources 65 * by each handler object 66 * 67 * @return responseBuffer 68 */ 69 StringBuffer getResponseBuffer(); 70 71 /** 72 * Clears the response buffer, returning the String of characters in the buffer. 73 * 74 * @return the data in the response buffer 75 */ 76 String clearResponseBuffer(); 77 78 /** 79 * Returns Inputstream for handling messages and commands 80 * 81 * @return InputStream object 82 */ 83 InputStream getInputStream(); 84 85 /** 86 * Returns currently process command name 87 * 88 * @return current command name 89 */ 90 String getCommandName(); 91 92 /** 93 * Returns currently process command argument 94 * 95 * @return current command argument 96 */ 97 String getCommandArgument(); 98 99 /** 100 * Returns Mail object for message handlers to process 101 * 102 * @return Mail object 103 */ 104 Mail getMail(); 105 106 /** 107 * Sets the MailImpl object for further processing 108 * 109 * @param mail MailImpl object 110 */ 111 void setMail(Mail mail); 112 113 /** 114 * Returns host name of the client 115 * 116 * @return hostname of the client 117 */ 118 String getRemoteHost(); 119 120 /** 121 * Returns host ip address of the client 122 * 123 * @return host ip address of the client 124 */ 125 String getRemoteIPAddress(); 126 127 /** 128 * this makes the message to be dropped inprotocol 129 * 130 */ 131 void abortMessage(); 132 133 /** 134 * this makes the session to close 135 * 136 */ 137 void endSession(); 138 139 /** 140 * Returns the session status 141 * 142 * @return if the session is open or closed 143 */ 144 boolean isSessionEnded(); 145 146 /** 147 * Returns Map that consists of the state of the SMTPSession per mail 148 * 149 * @return map of the current SMTPSession state per mail 150 */ 151 Map getState(); 152 153 /** 154 * Resets message-specific, but not authenticated user, state. 155 * 156 */ 157 void resetState(); 158 159 /** 160 * Returns SMTPHandler service wide configuration 161 * 162 * @return SMTPHandlerConfigurationData 163 */ 164 SMTPHandlerConfigurationData getConfigurationData(); 165 166 /** 167 * Returns whether Relaying is allowed or not 168 * 169 * @return the relaying status 170 */ 171 boolean isRelayingAllowed(); 172 173 /** 174 * Set if reallying is allowed 175 * 176 * @param relayingAllowed 177 */ 178 void setRelayingAllowed(boolean relayingAllowed); 179 180 /** 181 * Returns whether Authentication is required or not 182 * 183 * @return authentication required or not 184 */ 185 boolean isAuthRequired(); 186 187 /** 188 * Returns whether remote server needs to send HELO/EHLO 189 * 190 * @return HELO/EHLO required or not 191 */ 192 boolean useHeloEhloEnforcement(); 193 194 /** 195 * Returns the user name associated with this SMTP interaction. 196 * 197 * @return the user name 198 */ 199 String getUser(); 200 201 /** 202 * Sets the user name associated with this SMTP interaction. 203 * 204 * @param user the user name 205 */ 206 void setUser(String user); 207 208 /** 209 * Returns Watchdog object used for handling timeout 210 * 211 * @return Watchdog object 212 */ 213 Watchdog getWatchdog(); 214 215 /** 216 * Returns the SMTP session id 217 * 218 * @return SMTP session id 219 */ 220 String getSessionID(); 221 222 /** 223 * Returns the recipient count 224 * 225 * @return recipient count 226 */ 227 int getRcptCount(); 228 229 /** 230 * Set to true if the handlerprocessing should be stopped 231 * 232 * @param b true or false 233 */ 234 void setStopHandlerProcessing(boolean b); 235 236 /** 237 * Return if handlerprocessing should be stopped 238 * 239 * @return true or false 240 */ 241 boolean getStopHandlerProcessing(); 242 243 244 /** 245 * Reset the Connection state 246 */ 247 void resetConnectionState(); 248 249 /** 250 * Returns Map that consists of the state of the SMTPSession per connection 251 * 252 * @return map of the current SMTPSession state per connection 253 */ 254 Map getConnectionState(); 255 256 } 257