177391c2a01ce1fed085906743cc240a4d58edd92chrismair/* 277391c2a01ce1fed085906743cc240a4d58edd92chrismair * Copyright 2007 the original author or authors. 377391c2a01ce1fed085906743cc240a4d58edd92chrismair * 477391c2a01ce1fed085906743cc240a4d58edd92chrismair * Licensed under the Apache License, Version 2.0 (the "License"); 577391c2a01ce1fed085906743cc240a4d58edd92chrismair * you may not use this file except in compliance with the License. 677391c2a01ce1fed085906743cc240a4d58edd92chrismair * You may obtain a copy of the License at 777391c2a01ce1fed085906743cc240a4d58edd92chrismair * 877391c2a01ce1fed085906743cc240a4d58edd92chrismair * http://www.apache.org/licenses/LICENSE-2.0 977391c2a01ce1fed085906743cc240a4d58edd92chrismair * 1077391c2a01ce1fed085906743cc240a4d58edd92chrismair * Unless required by applicable law or agreed to in writing, software 1177391c2a01ce1fed085906743cc240a4d58edd92chrismair * distributed under the License is distributed on an "AS IS" BASIS, 1277391c2a01ce1fed085906743cc240a4d58edd92chrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1377391c2a01ce1fed085906743cc240a4d58edd92chrismair * See the License for the specific language governing permissions and 1477391c2a01ce1fed085906743cc240a4d58edd92chrismair * limitations under the License. 1577391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 1677391c2a01ce1fed085906743cc240a4d58edd92chrismairpackage org.mockftpserver.core.session; 1777391c2a01ce1fed085906743cc240a4d58edd92chrismair 1877391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.net.InetAddress; 1977391c2a01ce1fed085906743cc240a4d58edd92chrismairimport java.util.Set; 2077391c2a01ce1fed085906743cc240a4d58edd92chrismair 2177391c2a01ce1fed085906743cc240a4d58edd92chrismair/** 2277391c2a01ce1fed085906743cc240a4d58edd92chrismair * Represents an FTP session state and behavior 2377391c2a01ce1fed085906743cc240a4d58edd92chrismair * 2477391c2a01ce1fed085906743cc240a4d58edd92chrismair * @version $Revision$ - $Date$ 2577391c2a01ce1fed085906743cc240a4d58edd92chrismair * 2677391c2a01ce1fed085906743cc240a4d58edd92chrismair * @author Chris Mair 2777391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 2877391c2a01ce1fed085906743cc240a4d58edd92chrismairpublic interface Session extends Runnable { 2977391c2a01ce1fed085906743cc240a4d58edd92chrismair 3077391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 3177391c2a01ce1fed085906743cc240a4d58edd92chrismair * Close the session, closing the underlying sockets 3277391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 3377391c2a01ce1fed085906743cc240a4d58edd92chrismair public void close(); 3477391c2a01ce1fed085906743cc240a4d58edd92chrismair 3577391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 3677391c2a01ce1fed085906743cc240a4d58edd92chrismair * Send the specified reply code and text across the control connection. 3777391c2a01ce1fed085906743cc240a4d58edd92chrismair * 3877391c2a01ce1fed085906743cc240a4d58edd92chrismair * @param replyCode - the reply code 3977391c2a01ce1fed085906743cc240a4d58edd92chrismair * @param replyText - the reply text to send; may be null 4077391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 4177391c2a01ce1fed085906743cc240a4d58edd92chrismair public void sendReply(int replyCode, String replyText); 4277391c2a01ce1fed085906743cc240a4d58edd92chrismair 4377391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 4477391c2a01ce1fed085906743cc240a4d58edd92chrismair * Open the data connection, attaching to the predefined port number on the client 4577391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 4677391c2a01ce1fed085906743cc240a4d58edd92chrismair public void openDataConnection(); 4777391c2a01ce1fed085906743cc240a4d58edd92chrismair 4877391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 4977391c2a01ce1fed085906743cc240a4d58edd92chrismair * Close the data connection 5077391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 5177391c2a01ce1fed085906743cc240a4d58edd92chrismair public void closeDataConnection(); 5277391c2a01ce1fed085906743cc240a4d58edd92chrismair 5377391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 5477391c2a01ce1fed085906743cc240a4d58edd92chrismair * Switch to passive mode 5577391c2a01ce1fed085906743cc240a4d58edd92chrismair * @return the local port to be connected to by clients for data transfers 5677391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 5777391c2a01ce1fed085906743cc240a4d58edd92chrismair public int switchToPassiveMode(); 5877391c2a01ce1fed085906743cc240a4d58edd92chrismair 5977391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 6077391c2a01ce1fed085906743cc240a4d58edd92chrismair * Write the specified data using the data connection 6177391c2a01ce1fed085906743cc240a4d58edd92chrismair * 6277391c2a01ce1fed085906743cc240a4d58edd92chrismair * @param data - the data to write 6377391c2a01ce1fed085906743cc240a4d58edd92chrismair * @param numBytes - the number of bytes from data to send 6477391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 6577391c2a01ce1fed085906743cc240a4d58edd92chrismair public void sendData(byte[] data, int numBytes); 6677391c2a01ce1fed085906743cc240a4d58edd92chrismair 6777391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 6877391c2a01ce1fed085906743cc240a4d58edd92chrismair * Read data from the client across the data connection 6977391c2a01ce1fed085906743cc240a4d58edd92chrismair * 7077391c2a01ce1fed085906743cc240a4d58edd92chrismair * @return the data that was read 7177391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 7277391c2a01ce1fed085906743cc240a4d58edd92chrismair public byte[] readData(); 7377391c2a01ce1fed085906743cc240a4d58edd92chrismair 7477391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 7577391c2a01ce1fed085906743cc240a4d58edd92chrismair * Return the InetAddress representing the client host for this session 7677391c2a01ce1fed085906743cc240a4d58edd92chrismair * @return the client host 7777391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 7877391c2a01ce1fed085906743cc240a4d58edd92chrismair public InetAddress getClientHost(); 7977391c2a01ce1fed085906743cc240a4d58edd92chrismair 8077391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 8177391c2a01ce1fed085906743cc240a4d58edd92chrismair * Return the InetAddress representing the server host for this session 8277391c2a01ce1fed085906743cc240a4d58edd92chrismair * @return the server host 8377391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 8477391c2a01ce1fed085906743cc240a4d58edd92chrismair public InetAddress getServerHost(); 8577391c2a01ce1fed085906743cc240a4d58edd92chrismair 8677391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 8777391c2a01ce1fed085906743cc240a4d58edd92chrismair * @param clientHost - the client host for the data connection 8877391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 8977391c2a01ce1fed085906743cc240a4d58edd92chrismair public void setClientDataHost(InetAddress clientHost); 9077391c2a01ce1fed085906743cc240a4d58edd92chrismair 9177391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 9277391c2a01ce1fed085906743cc240a4d58edd92chrismair * @param clientDataPort - the port number on the client side for the data connection 9377391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 9477391c2a01ce1fed085906743cc240a4d58edd92chrismair public void setClientDataPort(int clientDataPort); 9577391c2a01ce1fed085906743cc240a4d58edd92chrismair 9677391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 9777391c2a01ce1fed085906743cc240a4d58edd92chrismair * Return the attribute value for the specified name. Return null if no attribute value 9877391c2a01ce1fed085906743cc240a4d58edd92chrismair * exists for that name or if the attribute value is null. 9977391c2a01ce1fed085906743cc240a4d58edd92chrismair * @param name - the attribute name; may not be null 10077391c2a01ce1fed085906743cc240a4d58edd92chrismair * @return the value of the attribute stored under name; may be null 10177391c2a01ce1fed085906743cc240a4d58edd92chrismair * @throws AssertFailedException - if name is null 10277391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 10377391c2a01ce1fed085906743cc240a4d58edd92chrismair public Object getAttribute(String name); 10477391c2a01ce1fed085906743cc240a4d58edd92chrismair 10577391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 10677391c2a01ce1fed085906743cc240a4d58edd92chrismair * Store the value under the specified attribute name. 10777391c2a01ce1fed085906743cc240a4d58edd92chrismair * @param name - the attribute name; may not be null 10877391c2a01ce1fed085906743cc240a4d58edd92chrismair * @param value - the attribute value; may be null 10977391c2a01ce1fed085906743cc240a4d58edd92chrismair * @throws AssertFailedException - if name is null 11077391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 11177391c2a01ce1fed085906743cc240a4d58edd92chrismair public void setAttribute(String name, Object value); 11277391c2a01ce1fed085906743cc240a4d58edd92chrismair 11377391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 11477391c2a01ce1fed085906743cc240a4d58edd92chrismair * Remove the attribute value for the specified name. Do nothing if no attribute 11577391c2a01ce1fed085906743cc240a4d58edd92chrismair * value is stored for the specified name. 11677391c2a01ce1fed085906743cc240a4d58edd92chrismair * @param name - the attribute name; may not be null 11777391c2a01ce1fed085906743cc240a4d58edd92chrismair * @throws AssertFailedException - if name is null 11877391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 11977391c2a01ce1fed085906743cc240a4d58edd92chrismair public void removeAttribute(String name); 12077391c2a01ce1fed085906743cc240a4d58edd92chrismair 12177391c2a01ce1fed085906743cc240a4d58edd92chrismair /** 12277391c2a01ce1fed085906743cc240a4d58edd92chrismair * Return the Set of names under which attributes have been stored on this session. 12377391c2a01ce1fed085906743cc240a4d58edd92chrismair * Returns an empty Set if no attribute values are stored. 12477391c2a01ce1fed085906743cc240a4d58edd92chrismair * @return the Set of attribute names 12577391c2a01ce1fed085906743cc240a4d58edd92chrismair */ 12677391c2a01ce1fed085906743cc240a4d58edd92chrismair public Set getAttributeNames(); 12777391c2a01ce1fed085906743cc240a4d58edd92chrismair 12877391c2a01ce1fed085906743cc240a4d58edd92chrismair}