package org.limewire.net;
import java.net.Socket;
/**
* Defines the requirements for classes that forward incoming connections to
* {@link ConnectionAcceptor}s.
*/
public interface ConnectionDispatcher {
/**
* Retrieves the maximum size a word can have.
*/
public abstract int getMaximumWordSize();
/**
* Associates the given SocketAcceptor with the given words.
* If localOnly is true, non-local-host sockets will be closed
* when using the word. Otherwise, localhost sockets will be
* forbidden from using the word.
* If blocking is true, a new thread will be spawned when calling
* acceptor.acceptConnection.
*
* @param acceptor the SocketAcceptor to call acceptConnection on
* @param localOnly true if localhost connections are required, false if none allowed
* @param words the list of words to associate with this SocketAcceptor
*/
public abstract void addConnectionAcceptor(ConnectionAcceptor acceptor,
boolean localOnly, String... words);
/** Removes any ConnectionAcceptors from being associated with the given words. */
public abstract void removeConnectionAcceptor(String... words);
/** Determines if the word is valid for the understood protocols. */
public abstract boolean isValidProtocolWord(String word);
/**
* Dispatches this incoming connection to the appropriate manager, depending
* on the word that was read.
*
* @param word the word associated with this Socket
* @param client socket to use for dispatch
* @param newThread whether or not a new thread is necessary when dispatching
* to a blocking protocol.
*/
public abstract void dispatch(final String word, final Socket client,
boolean newThread);
}