winstone
Class HttpListener

java.lang.Object
  extended by winstone.HttpListener
All Implemented Interfaces:
java.lang.Runnable, Listener
Direct Known Subclasses:
HttpsListener

public class HttpListener
extends java.lang.Object
implements Listener, java.lang.Runnable

Implements the main listener daemon thread. This is the class that gets launched by the command line, and owns the server socket, etc. Note that this class is also used as the base class for the HTTPS listener.

Version:
$Id: HttpListener.java,v 1.15 2007/05/01 04:39:49 rickknowles Exp $
Author:
Rick Knowles

Field Summary
protected static int BACKLOG_COUNT
           
protected static int CONNECTION_TIMEOUT
           
protected static boolean DEFAULT_HNL
           
protected  boolean doHostnameLookups
           
protected  HostGroup hostGroup
           
protected  boolean interrupted
           
protected static int KEEP_ALIVE_SLEEP
           
protected static int KEEP_ALIVE_SLEEP_MAX
           
protected static int KEEP_ALIVE_TIMEOUT
           
protected  java.lang.String listenAddress
           
protected static int LISTENER_TIMEOUT
           
protected  int listenPort
           
protected  ObjectPool objectPool
           
 
Constructor Summary
protected HttpListener()
           
  HttpListener(java.util.Map args, ObjectPool objectPool, HostGroup hostGroup)
          Constructor
 
Method Summary
 void allocateRequestResponse(java.net.Socket socket, java.io.InputStream inSocket, java.io.OutputStream outSocket, RequestHandlerThread handler, boolean iAmFirst)
          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).
 void deallocateRequestResponse(RequestHandlerThread handler, WinstoneRequest req, WinstoneResponse rsp, WinstoneInputStream inData, WinstoneOutputStream outData)
          Called by the request handler thread, because it needs specific shutdown code for this connection's protocol (ie releasing input/output streams, etc).
 void destroy()
          Interrupts the listener thread.
protected  java.lang.String getConnectorName()
          The name to use when getting properties - this is just so that we can override for the SSL connector.
protected  java.lang.String getConnectorScheme()
           
protected  int getDefaultPort()
          The default port to use - this is just so that we can override for the SSL connector.
protected  java.net.ServerSocket getServerSocket()
          Gets a server socket - this is mostly for the purpose of allowing an override in the SSL connector.
 void parseHeaders(WinstoneRequest req, WinstoneInputStream inData)
          Parse the incoming stream into a list of headers (stopping at the first blank line), then call the parseHeaders(req, list) method on that list.
protected  void parseSocketInfo(java.net.Socket socket, WinstoneRequest req)
           
 java.lang.String parseURI(RequestHandlerThread handler, WinstoneRequest req, WinstoneResponse rsp, WinstoneInputStream inData, java.net.Socket socket, boolean iAmFirst)
          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)
 boolean processKeepAlive(WinstoneRequest request, WinstoneResponse response, java.io.InputStream inSocket)
          Tries to wait for extra requests on the same socket.
 void releaseSocket(java.net.Socket socket, java.io.InputStream inSocket, java.io.OutputStream outSocket)
          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).
 void run()
          The main run method.
 boolean start()
          After the listener is loaded and initialized, this starts the thread
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Field Detail

LISTENER_TIMEOUT

protected static int LISTENER_TIMEOUT

CONNECTION_TIMEOUT

protected static int CONNECTION_TIMEOUT

BACKLOG_COUNT

protected static int BACKLOG_COUNT

DEFAULT_HNL

protected static boolean DEFAULT_HNL

KEEP_ALIVE_TIMEOUT

protected static int KEEP_ALIVE_TIMEOUT

KEEP_ALIVE_SLEEP

protected static int KEEP_ALIVE_SLEEP

KEEP_ALIVE_SLEEP_MAX

protected static int KEEP_ALIVE_SLEEP_MAX

hostGroup

protected HostGroup hostGroup

objectPool

protected ObjectPool objectPool

doHostnameLookups

protected boolean doHostnameLookups

listenPort

protected int listenPort

listenAddress

protected java.lang.String listenAddress

interrupted

protected boolean interrupted
Constructor Detail

HttpListener

protected HttpListener()

HttpListener

public HttpListener(java.util.Map args,
                    ObjectPool objectPool,
                    HostGroup hostGroup)
Constructor

Method Detail

start

public boolean start()
              throws java.io.IOException
Description copied from interface: Listener
After the listener is loaded and initialized, this starts the thread

Specified by:
start in interface Listener
Throws:
java.io.IOException

getDefaultPort

protected int getDefaultPort()
The default port to use - this is just so that we can override for the SSL connector.


getConnectorName

protected java.lang.String getConnectorName()
The name to use when getting properties - this is just so that we can override for the SSL connector.


getConnectorScheme

protected java.lang.String getConnectorScheme()

getServerSocket

protected java.net.ServerSocket getServerSocket()
                                         throws java.io.IOException
Gets a server socket - this is mostly for the purpose of allowing an override in the SSL connector.

Throws:
java.io.IOException

run

public void run()
The main run method. This continually listens for incoming connections, and allocates any that it finds to a request handler thread, before going back to listen again.

Specified by:
run in interface java.lang.Runnable

destroy

public void destroy()
Interrupts the listener thread. This will trigger a listener shutdown once the so timeout has passed.

Specified by:
destroy in interface Listener

allocateRequestResponse

public void allocateRequestResponse(java.net.Socket socket,
                                    java.io.InputStream inSocket,
                                    java.io.OutputStream outSocket,
                                    RequestHandlerThread handler,
                                    boolean iAmFirst)
                             throws java.net.SocketException,
                                    java.io.IOException
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). This implementation parses incoming AJP13 packets, and builds an outputstream that is capable of writing back the response in AJP13 packets.

Specified by:
allocateRequestResponse in interface Listener
Throws:
java.net.SocketException
java.io.IOException

deallocateRequestResponse

public void deallocateRequestResponse(RequestHandlerThread handler,
                                      WinstoneRequest req,
                                      WinstoneResponse rsp,
                                      WinstoneInputStream inData,
                                      WinstoneOutputStream outData)
Called by the request handler thread, because it needs specific shutdown code for this connection's protocol (ie releasing input/output streams, etc).

Specified by:
deallocateRequestResponse in interface Listener

parseURI

public java.lang.String parseURI(RequestHandlerThread handler,
                                 WinstoneRequest req,
                                 WinstoneResponse rsp,
                                 WinstoneInputStream inData,
                                 java.net.Socket socket,
                                 boolean iAmFirst)
                          throws java.io.IOException
Description copied from interface: Listener
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)

Specified by:
parseURI in interface Listener
Throws:
java.io.IOException

releaseSocket

public void releaseSocket(java.net.Socket socket,
                          java.io.InputStream inSocket,
                          java.io.OutputStream outSocket)
                   throws java.io.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). This implementation simply shuts down the socket and streams.

Specified by:
releaseSocket in interface Listener
Throws:
java.io.IOException

parseSocketInfo

protected void parseSocketInfo(java.net.Socket socket,
                               WinstoneRequest req)
                        throws java.io.IOException
Throws:
java.io.IOException

processKeepAlive

public boolean processKeepAlive(WinstoneRequest request,
                                WinstoneResponse response,
                                java.io.InputStream inSocket)
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 protocol does not support keep-alives, or the request instructed us to close the connection, or the timeout expires, return a false, instructing the handler thread to begin shutting down the socket and relase itself.

Specified by:
processKeepAlive in interface Listener

parseHeaders

public void parseHeaders(WinstoneRequest req,
                         WinstoneInputStream inData)
                  throws java.io.IOException
Parse the incoming stream into a list of headers (stopping at the first blank line), then call the parseHeaders(req, list) method on that list.

Throws:
java.io.IOException


Copyright © 2013. All Rights Reserved.