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}