14531116f8e675a208710e987bfe3b58faeb12db2chrismair/* 24531116f8e675a208710e987bfe3b58faeb12db2chrismair * Copyright 2007 the original author or authors. 34531116f8e675a208710e987bfe3b58faeb12db2chrismair * 44531116f8e675a208710e987bfe3b58faeb12db2chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 54531116f8e675a208710e987bfe3b58faeb12db2chrismair * you may not use this file except in compliance with the License. 64531116f8e675a208710e987bfe3b58faeb12db2chrismair * You may obtain a copy of the License at 74531116f8e675a208710e987bfe3b58faeb12db2chrismair * 84531116f8e675a208710e987bfe3b58faeb12db2chrismair * http://www.apache.org/licenses/LICENSE-2.0 94531116f8e675a208710e987bfe3b58faeb12db2chrismair * 104531116f8e675a208710e987bfe3b58faeb12db2chrismair * Unless required by applicable law or agreed to in writing, software 114531116f8e675a208710e987bfe3b58faeb12db2chrismair * distributed under the License is distributed on an "AS IS" BASIS, 124531116f8e675a208710e987bfe3b58faeb12db2chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 134531116f8e675a208710e987bfe3b58faeb12db2chrismair * See the License for the specific language governing permissions and 144531116f8e675a208710e987bfe3b58faeb12db2chrismair * limitations under the License. 154531116f8e675a208710e987bfe3b58faeb12db2chrismair */ 164531116f8e675a208710e987bfe3b58faeb12db2chrismairpackage org.mockftpserver.core.session; 174531116f8e675a208710e987bfe3b58faeb12db2chrismair 184531116f8e675a208710e987bfe3b58faeb12db2chrismairimport java.net.InetAddress; 194531116f8e675a208710e987bfe3b58faeb12db2chrismairimport java.util.Set; 204531116f8e675a208710e987bfe3b58faeb12db2chrismair 214531116f8e675a208710e987bfe3b58faeb12db2chrismair/** 224531116f8e675a208710e987bfe3b58faeb12db2chrismair * Represents an FTP session state and behavior 234531116f8e675a208710e987bfe3b58faeb12db2chrismair * 244531116f8e675a208710e987bfe3b58faeb12db2chrismair * @version $Revision$ - $Date$ 254531116f8e675a208710e987bfe3b58faeb12db2chrismair * 264531116f8e675a208710e987bfe3b58faeb12db2chrismair * @author Chris Mair 274531116f8e675a208710e987bfe3b58faeb12db2chrismair */ 284531116f8e675a208710e987bfe3b58faeb12db2chrismairpublic interface Session extends Runnable { 294531116f8e675a208710e987bfe3b58faeb12db2chrismair 304531116f8e675a208710e987bfe3b58faeb12db2chrismair /** 314531116f8e675a208710e987bfe3b58faeb12db2chrismair * Close the session, closing the underlying sockets 324531116f8e675a208710e987bfe3b58faeb12db2chrismair */ 334531116f8e675a208710e987bfe3b58faeb12db2chrismair public void close(); 344531116f8e675a208710e987bfe3b58faeb12db2chrismair 354531116f8e675a208710e987bfe3b58faeb12db2chrismair /** 364531116f8e675a208710e987bfe3b58faeb12db2chrismair * Send the specified reply code and text across the control connection. 374531116f8e675a208710e987bfe3b58faeb12db2chrismair * 384531116f8e675a208710e987bfe3b58faeb12db2chrismair * @param replyCode - the reply code 394531116f8e675a208710e987bfe3b58faeb12db2chrismair * @param replyText - the reply text to send; may be null 404531116f8e675a208710e987bfe3b58faeb12db2chrismair */ 414531116f8e675a208710e987bfe3b58faeb12db2chrismair public void sendReply(int replyCode, String replyText); 424531116f8e675a208710e987bfe3b58faeb12db2chrismair 434531116f8e675a208710e987bfe3b58faeb12db2chrismair /** 444531116f8e675a208710e987bfe3b58faeb12db2chrismair * Open the data connection, attaching to the predefined port number on the client 454531116f8e675a208710e987bfe3b58faeb12db2chrismair */ 464531116f8e675a208710e987bfe3b58faeb12db2chrismair public void openDataConnection(); 474531116f8e675a208710e987bfe3b58faeb12db2chrismair 484531116f8e675a208710e987bfe3b58faeb12db2chrismair /** 494531116f8e675a208710e987bfe3b58faeb12db2chrismair * Close the data connection 504531116f8e675a208710e987bfe3b58faeb12db2chrismair */ 514531116f8e675a208710e987bfe3b58faeb12db2chrismair public void closeDataConnection(); 524531116f8e675a208710e987bfe3b58faeb12db2chrismair 534531116f8e675a208710e987bfe3b58faeb12db2chrismair /** 544531116f8e675a208710e987bfe3b58faeb12db2chrismair * Switch to passive mode 554531116f8e675a208710e987bfe3b58faeb12db2chrismair * @return the local port to be connected to by clients for data transfers 564531116f8e675a208710e987bfe3b58faeb12db2chrismair */ 574531116f8e675a208710e987bfe3b58faeb12db2chrismair public int switchToPassiveMode(); 584531116f8e675a208710e987bfe3b58faeb12db2chrismair 594531116f8e675a208710e987bfe3b58faeb12db2chrismair /** 604531116f8e675a208710e987bfe3b58faeb12db2chrismair * Write the specified data using the data connection 614531116f8e675a208710e987bfe3b58faeb12db2chrismair * 624531116f8e675a208710e987bfe3b58faeb12db2chrismair * @param data - the data to write 634531116f8e675a208710e987bfe3b58faeb12db2chrismair * @param numBytes - the number of bytes from data to send 644531116f8e675a208710e987bfe3b58faeb12db2chrismair */ 654531116f8e675a208710e987bfe3b58faeb12db2chrismair public void sendData(byte[] data, int numBytes); 664531116f8e675a208710e987bfe3b58faeb12db2chrismair 674531116f8e675a208710e987bfe3b58faeb12db2chrismair /** 684531116f8e675a208710e987bfe3b58faeb12db2chrismair * Read data from the client across the data connection 694531116f8e675a208710e987bfe3b58faeb12db2chrismair * 704531116f8e675a208710e987bfe3b58faeb12db2chrismair * @return the data that was read 714531116f8e675a208710e987bfe3b58faeb12db2chrismair */ 724531116f8e675a208710e987bfe3b58faeb12db2chrismair public byte[] readData(); 734531116f8e675a208710e987bfe3b58faeb12db2chrismair 744531116f8e675a208710e987bfe3b58faeb12db2chrismair /** 754531116f8e675a208710e987bfe3b58faeb12db2chrismair * Return the InetAddress representing the client host for this session 764531116f8e675a208710e987bfe3b58faeb12db2chrismair * @return the client host 774531116f8e675a208710e987bfe3b58faeb12db2chrismair */ 784531116f8e675a208710e987bfe3b58faeb12db2chrismair public InetAddress getClientHost(); 794531116f8e675a208710e987bfe3b58faeb12db2chrismair 804531116f8e675a208710e987bfe3b58faeb12db2chrismair /** 814531116f8e675a208710e987bfe3b58faeb12db2chrismair * Return the InetAddress representing the server host for this session 824531116f8e675a208710e987bfe3b58faeb12db2chrismair * @return the server host 834531116f8e675a208710e987bfe3b58faeb12db2chrismair */ 844531116f8e675a208710e987bfe3b58faeb12db2chrismair public InetAddress getServerHost(); 854531116f8e675a208710e987bfe3b58faeb12db2chrismair 864531116f8e675a208710e987bfe3b58faeb12db2chrismair /** 874531116f8e675a208710e987bfe3b58faeb12db2chrismair * @param clientHost - the client host for the data connection 884531116f8e675a208710e987bfe3b58faeb12db2chrismair */ 894531116f8e675a208710e987bfe3b58faeb12db2chrismair public void setClientDataHost(InetAddress clientHost); 904531116f8e675a208710e987bfe3b58faeb12db2chrismair 914531116f8e675a208710e987bfe3b58faeb12db2chrismair /** 924531116f8e675a208710e987bfe3b58faeb12db2chrismair * @param clientDataPort - the port number on the client side for the data connection 934531116f8e675a208710e987bfe3b58faeb12db2chrismair */ 944531116f8e675a208710e987bfe3b58faeb12db2chrismair public void setClientDataPort(int clientDataPort); 954531116f8e675a208710e987bfe3b58faeb12db2chrismair 964531116f8e675a208710e987bfe3b58faeb12db2chrismair /** 974531116f8e675a208710e987bfe3b58faeb12db2chrismair * Return the attribute value for the specified name. Return null if no attribute value 984531116f8e675a208710e987bfe3b58faeb12db2chrismair * exists for that name or if the attribute value is null. 994531116f8e675a208710e987bfe3b58faeb12db2chrismair * @param name - the attribute name; may not be null 1004531116f8e675a208710e987bfe3b58faeb12db2chrismair * @return the value of the attribute stored under name; may be null 1014531116f8e675a208710e987bfe3b58faeb12db2chrismair * @throws AssertFailedException - if name is null 1024531116f8e675a208710e987bfe3b58faeb12db2chrismair */ 1034531116f8e675a208710e987bfe3b58faeb12db2chrismair public Object getAttribute(String name); 1044531116f8e675a208710e987bfe3b58faeb12db2chrismair 1054531116f8e675a208710e987bfe3b58faeb12db2chrismair /** 1064531116f8e675a208710e987bfe3b58faeb12db2chrismair * Store the value under the specified attribute name. 1074531116f8e675a208710e987bfe3b58faeb12db2chrismair * @param name - the attribute name; may not be null 1084531116f8e675a208710e987bfe3b58faeb12db2chrismair * @param value - the attribute value; may be null 1094531116f8e675a208710e987bfe3b58faeb12db2chrismair * @throws AssertFailedException - if name is null 1104531116f8e675a208710e987bfe3b58faeb12db2chrismair */ 1114531116f8e675a208710e987bfe3b58faeb12db2chrismair public void setAttribute(String name, Object value); 1124531116f8e675a208710e987bfe3b58faeb12db2chrismair 1134531116f8e675a208710e987bfe3b58faeb12db2chrismair /** 1144531116f8e675a208710e987bfe3b58faeb12db2chrismair * Remove the attribute value for the specified name. Do nothing if no attribute 1154531116f8e675a208710e987bfe3b58faeb12db2chrismair * value is stored for the specified name. 1164531116f8e675a208710e987bfe3b58faeb12db2chrismair * @param name - the attribute name; may not be null 1174531116f8e675a208710e987bfe3b58faeb12db2chrismair * @throws AssertFailedException - if name is null 1184531116f8e675a208710e987bfe3b58faeb12db2chrismair */ 1194531116f8e675a208710e987bfe3b58faeb12db2chrismair public void removeAttribute(String name); 1204531116f8e675a208710e987bfe3b58faeb12db2chrismair 1214531116f8e675a208710e987bfe3b58faeb12db2chrismair /** 1224531116f8e675a208710e987bfe3b58faeb12db2chrismair * Return the Set of names under which attributes have been stored on this session. 1234531116f8e675a208710e987bfe3b58faeb12db2chrismair * Returns an empty Set if no attribute values are stored. 1244531116f8e675a208710e987bfe3b58faeb12db2chrismair * @return the Set of attribute names 1254531116f8e675a208710e987bfe3b58faeb12db2chrismair */ 1264531116f8e675a208710e987bfe3b58faeb12db2chrismair public Set getAttributeNames(); 1274531116f8e675a208710e987bfe3b58faeb12db2chrismair 1284531116f8e675a208710e987bfe3b58faeb12db2chrismair}