/*
* Copyright 2003-2006 Rick Knowles <winstone-devel at lists sourceforge net>
* Distributed under the terms of either:
* - the common development and distribution license (CDDL), v1.0; or
* - the GNU Lesser General Public License, v2.1 or later
*/
package winstone;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import java.net.Socket;
import java.net.SocketException;
/**
* Interface that defines the necessary methods for being a connection listener
* within winstone.
*
* @author <a href="mailto:rick_knowles@hotmail.com">Rick Knowles</a>
*/
public interface Listener {
/**
* Interrupts the listener thread. This will trigger a listener shutdown
* once the so timeout has passed.
*/
public void destroy();
/**
* After the listener is loaded and initialized, this starts the thread
*/
public boolean start();
/**
* Called by the request handler thread, because it needs specific setup
* code for this connection's protocol (ie construction of request/response
* objects, in/out streams, etc). The iAmFirst variable identifies whether or
* not this is the initial request on on this socket (ie a keep alive or
* a first-time accept)
*/
public void allocateRequestResponse(Socket socket, InputStream inSocket,
OutputStream outSocket, RequestHandlerThread handler,
boolean iAmFirst) throws SocketException, IOException;
/**
* Called by the request handler thread, because it needs specific shutdown
* code for this connection's protocol (ie releasing input/output streams,
* etc).
*/
public void deallocateRequestResponse(RequestHandlerThread handler,
WinstoneRequest req, WinstoneResponse rsp,
WinstoneInputStream inData, WinstoneOutputStream outData)
throws IOException;
/**
* Called by the request handler thread, because it needs specific shutdown
* code for this connection's protocol if the keep-alive period expires (ie
* closing sockets, etc).The iAmFirst variable identifies whether or
* not this is the initial request on on this socket (ie a keep alive or
* a first-time accept)
*/
public String parseURI(RequestHandlerThread handler, WinstoneRequest req,
WinstoneResponse rsp, WinstoneInputStream inData, Socket socket,
boolean iAmFirst) throws IOException;
/**
* Called by the request handler thread, because it needs specific shutdown
* code for this connection's protocol if the keep-alive period expires (ie
* closing sockets, etc).
*/
public void releaseSocket(Socket socket, InputStream inSocket,
OutputStream outSocket) throws IOException;
/**
* Tries to wait for extra requests on the same socket. If any are found
* before the timeout expires, it exits with a true, indicating a new
* request is waiting. If the timeout expires, return a false, instructing
* the handler thread to begin shutting down the socket and relase itself.
*/
public boolean processKeepAlive(WinstoneRequest request,
WinstoneResponse response, InputStream inSocket)
throws IOException, InterruptedException;
}