153295844df24dff0a1f59e1104795e640b54c2efchrismair/* 253295844df24dff0a1f59e1104795e640b54c2efchrismair * Copyright 2007 the original author or authors. 353295844df24dff0a1f59e1104795e640b54c2efchrismair * 453295844df24dff0a1f59e1104795e640b54c2efchrismair * Licensed under the Apache License, Version 2.0 (the "License"); 553295844df24dff0a1f59e1104795e640b54c2efchrismair * you may not use this file except in compliance with the License. 653295844df24dff0a1f59e1104795e640b54c2efchrismair * You may obtain a copy of the License at 753295844df24dff0a1f59e1104795e640b54c2efchrismair * 853295844df24dff0a1f59e1104795e640b54c2efchrismair * http://www.apache.org/licenses/LICENSE-2.0 953295844df24dff0a1f59e1104795e640b54c2efchrismair * 1053295844df24dff0a1f59e1104795e640b54c2efchrismair * Unless required by applicable law or agreed to in writing, software 1153295844df24dff0a1f59e1104795e640b54c2efchrismair * distributed under the License is distributed on an "AS IS" BASIS, 1253295844df24dff0a1f59e1104795e640b54c2efchrismair * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1353295844df24dff0a1f59e1104795e640b54c2efchrismair * See the License for the specific language governing permissions and 1453295844df24dff0a1f59e1104795e640b54c2efchrismair * limitations under the License. 1553295844df24dff0a1f59e1104795e640b54c2efchrismair */ 1653295844df24dff0a1f59e1104795e640b54c2efchrismairpackage org.mockftpserver.core.session; 1753295844df24dff0a1f59e1104795e640b54c2efchrismair 1853295844df24dff0a1f59e1104795e640b54c2efchrismairimport java.net.InetAddress; 1953295844df24dff0a1f59e1104795e640b54c2efchrismairimport java.util.Set; 2053295844df24dff0a1f59e1104795e640b54c2efchrismair 2153295844df24dff0a1f59e1104795e640b54c2efchrismair/** 2253295844df24dff0a1f59e1104795e640b54c2efchrismair * Represents an FTP session state and behavior 2353295844df24dff0a1f59e1104795e640b54c2efchrismair * 2453295844df24dff0a1f59e1104795e640b54c2efchrismair * @version $Revision$ - $Date$ 2553295844df24dff0a1f59e1104795e640b54c2efchrismair * 2653295844df24dff0a1f59e1104795e640b54c2efchrismair * @author Chris Mair 2753295844df24dff0a1f59e1104795e640b54c2efchrismair */ 2853295844df24dff0a1f59e1104795e640b54c2efchrismairpublic interface Session extends Runnable { 2953295844df24dff0a1f59e1104795e640b54c2efchrismair 3053295844df24dff0a1f59e1104795e640b54c2efchrismair /** 3153295844df24dff0a1f59e1104795e640b54c2efchrismair * Close the session, closing the underlying sockets 3253295844df24dff0a1f59e1104795e640b54c2efchrismair */ 3353295844df24dff0a1f59e1104795e640b54c2efchrismair public void close(); 3453295844df24dff0a1f59e1104795e640b54c2efchrismair 3553295844df24dff0a1f59e1104795e640b54c2efchrismair /** 3653295844df24dff0a1f59e1104795e640b54c2efchrismair * Send the specified reply code and text across the control connection. 3753295844df24dff0a1f59e1104795e640b54c2efchrismair * 3853295844df24dff0a1f59e1104795e640b54c2efchrismair * @param replyCode - the reply code 3953295844df24dff0a1f59e1104795e640b54c2efchrismair * @param replyText - the reply text to send; may be null 4053295844df24dff0a1f59e1104795e640b54c2efchrismair */ 4153295844df24dff0a1f59e1104795e640b54c2efchrismair public void sendReply(int replyCode, String replyText); 4253295844df24dff0a1f59e1104795e640b54c2efchrismair 4353295844df24dff0a1f59e1104795e640b54c2efchrismair /** 4453295844df24dff0a1f59e1104795e640b54c2efchrismair * Open the data connection, attaching to the predefined port number on the client 4553295844df24dff0a1f59e1104795e640b54c2efchrismair */ 4653295844df24dff0a1f59e1104795e640b54c2efchrismair public void openDataConnection(); 4753295844df24dff0a1f59e1104795e640b54c2efchrismair 4853295844df24dff0a1f59e1104795e640b54c2efchrismair /** 4953295844df24dff0a1f59e1104795e640b54c2efchrismair * Close the data connection 5053295844df24dff0a1f59e1104795e640b54c2efchrismair */ 5153295844df24dff0a1f59e1104795e640b54c2efchrismair public void closeDataConnection(); 5253295844df24dff0a1f59e1104795e640b54c2efchrismair 5353295844df24dff0a1f59e1104795e640b54c2efchrismair /** 5453295844df24dff0a1f59e1104795e640b54c2efchrismair * Switch to passive mode 5553295844df24dff0a1f59e1104795e640b54c2efchrismair * @return the local port to be connected to by clients for data transfers 5653295844df24dff0a1f59e1104795e640b54c2efchrismair */ 5753295844df24dff0a1f59e1104795e640b54c2efchrismair public int switchToPassiveMode(); 5853295844df24dff0a1f59e1104795e640b54c2efchrismair 5953295844df24dff0a1f59e1104795e640b54c2efchrismair /** 6053295844df24dff0a1f59e1104795e640b54c2efchrismair * Write the specified data using the data connection 6153295844df24dff0a1f59e1104795e640b54c2efchrismair * 6253295844df24dff0a1f59e1104795e640b54c2efchrismair * @param data - the data to write 6353295844df24dff0a1f59e1104795e640b54c2efchrismair * @param numBytes - the number of bytes from data to send 6453295844df24dff0a1f59e1104795e640b54c2efchrismair */ 6553295844df24dff0a1f59e1104795e640b54c2efchrismair public void sendData(byte[] data, int numBytes); 6653295844df24dff0a1f59e1104795e640b54c2efchrismair 6753295844df24dff0a1f59e1104795e640b54c2efchrismair /** 6853295844df24dff0a1f59e1104795e640b54c2efchrismair * Read data from the client across the data connection 6953295844df24dff0a1f59e1104795e640b54c2efchrismair * 7053295844df24dff0a1f59e1104795e640b54c2efchrismair * @return the data that was read 7153295844df24dff0a1f59e1104795e640b54c2efchrismair */ 7253295844df24dff0a1f59e1104795e640b54c2efchrismair public byte[] readData(); 7353295844df24dff0a1f59e1104795e640b54c2efchrismair 7453295844df24dff0a1f59e1104795e640b54c2efchrismair /** 7553295844df24dff0a1f59e1104795e640b54c2efchrismair * Return the InetAddress representing the client host for this session 7653295844df24dff0a1f59e1104795e640b54c2efchrismair * @return the client host 7753295844df24dff0a1f59e1104795e640b54c2efchrismair */ 7853295844df24dff0a1f59e1104795e640b54c2efchrismair public InetAddress getClientHost(); 7953295844df24dff0a1f59e1104795e640b54c2efchrismair 8053295844df24dff0a1f59e1104795e640b54c2efchrismair /** 8153295844df24dff0a1f59e1104795e640b54c2efchrismair * Return the InetAddress representing the server host for this session 8253295844df24dff0a1f59e1104795e640b54c2efchrismair * @return the server host 8353295844df24dff0a1f59e1104795e640b54c2efchrismair */ 8453295844df24dff0a1f59e1104795e640b54c2efchrismair public InetAddress getServerHost(); 8553295844df24dff0a1f59e1104795e640b54c2efchrismair 8653295844df24dff0a1f59e1104795e640b54c2efchrismair /** 8753295844df24dff0a1f59e1104795e640b54c2efchrismair * @param clientHost - the client host for the data connection 8853295844df24dff0a1f59e1104795e640b54c2efchrismair */ 8953295844df24dff0a1f59e1104795e640b54c2efchrismair public void setClientDataHost(InetAddress clientHost); 9053295844df24dff0a1f59e1104795e640b54c2efchrismair 9153295844df24dff0a1f59e1104795e640b54c2efchrismair /** 9253295844df24dff0a1f59e1104795e640b54c2efchrismair * @param clientDataPort - the port number on the client side for the data connection 9353295844df24dff0a1f59e1104795e640b54c2efchrismair */ 9453295844df24dff0a1f59e1104795e640b54c2efchrismair public void setClientDataPort(int clientDataPort); 9553295844df24dff0a1f59e1104795e640b54c2efchrismair 9653295844df24dff0a1f59e1104795e640b54c2efchrismair /** 9753295844df24dff0a1f59e1104795e640b54c2efchrismair * Return the attribute value for the specified name. Return null if no attribute value 9853295844df24dff0a1f59e1104795e640b54c2efchrismair * exists for that name or if the attribute value is null. 9953295844df24dff0a1f59e1104795e640b54c2efchrismair * @param name - the attribute name; may not be null 10053295844df24dff0a1f59e1104795e640b54c2efchrismair * @return the value of the attribute stored under name; may be null 10153295844df24dff0a1f59e1104795e640b54c2efchrismair * @throws AssertFailedException - if name is null 10253295844df24dff0a1f59e1104795e640b54c2efchrismair */ 10353295844df24dff0a1f59e1104795e640b54c2efchrismair public Object getAttribute(String name); 10453295844df24dff0a1f59e1104795e640b54c2efchrismair 10553295844df24dff0a1f59e1104795e640b54c2efchrismair /** 10653295844df24dff0a1f59e1104795e640b54c2efchrismair * Store the value under the specified attribute name. 10753295844df24dff0a1f59e1104795e640b54c2efchrismair * @param name - the attribute name; may not be null 10853295844df24dff0a1f59e1104795e640b54c2efchrismair * @param value - the attribute value; may be null 10953295844df24dff0a1f59e1104795e640b54c2efchrismair * @throws AssertFailedException - if name is null 11053295844df24dff0a1f59e1104795e640b54c2efchrismair */ 11153295844df24dff0a1f59e1104795e640b54c2efchrismair public void setAttribute(String name, Object value); 11253295844df24dff0a1f59e1104795e640b54c2efchrismair 11353295844df24dff0a1f59e1104795e640b54c2efchrismair /** 11453295844df24dff0a1f59e1104795e640b54c2efchrismair * Remove the attribute value for the specified name. Do nothing if no attribute 11553295844df24dff0a1f59e1104795e640b54c2efchrismair * value is stored for the specified name. 11653295844df24dff0a1f59e1104795e640b54c2efchrismair * @param name - the attribute name; may not be null 11753295844df24dff0a1f59e1104795e640b54c2efchrismair * @throws AssertFailedException - if name is null 11853295844df24dff0a1f59e1104795e640b54c2efchrismair */ 11953295844df24dff0a1f59e1104795e640b54c2efchrismair public void removeAttribute(String name); 12053295844df24dff0a1f59e1104795e640b54c2efchrismair 12153295844df24dff0a1f59e1104795e640b54c2efchrismair /** 12253295844df24dff0a1f59e1104795e640b54c2efchrismair * Return the Set of names under which attributes have been stored on this session. 12353295844df24dff0a1f59e1104795e640b54c2efchrismair * Returns an empty Set if no attribute values are stored. 12453295844df24dff0a1f59e1104795e640b54c2efchrismair * @return the Set of attribute names 12553295844df24dff0a1f59e1104795e640b54c2efchrismair */ 12653295844df24dff0a1f59e1104795e640b54c2efchrismair public Set getAttributeNames(); 12753295844df24dff0a1f59e1104795e640b54c2efchrismair 12853295844df24dff0a1f59e1104795e640b54c2efchrismair}