org.mortbay.http
Class SocketListener

java.lang.Object
  extended by org.mortbay.util.ThreadPool
      extended by org.mortbay.util.ThreadedServer
          extended by org.mortbay.http.SocketListener
All Implemented Interfaces:
java.io.Serializable, HttpListener, LifeCycle
Direct Known Subclasses:
HostSocketListener, JsseListener, SslListener

public class SocketListener
extends ThreadedServer
implements HttpListener

Socket HTTP Listener. The behaviour of the listener can be controlled with the attributues of the ThreadedServer and ThreadPool from which it is derived. Specifically:

 MinThreads    - Minumum threads waiting to service requests.
 MaxThread     - Maximum thread that will service requests.
 MaxIdleTimeMs - Time for an idle thread to wait for a request or read.
 LowResourcePersistTimeMs - time in ms that connections will persist if listener is
                            low on resources. 
 

Version:
$Id: SocketListener.java,v 1.39 2006/02/27 13:03:50 gregwilkins Exp $
Author:
Greg Wilkins (gregw)
See Also:
Serialized Form

Nested Class Summary
 
Nested classes/interfaces inherited from class org.mortbay.util.ThreadPool
ThreadPool.PoolThread
 
Field Summary
 
Fields inherited from class org.mortbay.util.ThreadPool
__DAEMON, __PRIORITY
 
Fields inherited from interface org.mortbay.http.HttpListener
ATTRIBUTE
 
Constructor Summary
SocketListener()
           
SocketListener(InetAddrPort address)
           
 
Method Summary
protected  HttpConnection createConnection(java.net.Socket socket)
          Create an HttpConnection instance.
 void customizeRequest(HttpConnection connection, HttpRequest request)
          Customize the request from connection.
protected  void customizeRequest(java.net.Socket socket, HttpRequest request)
          Customize request from socket.
 int getBufferReserve()
          Get the size of the header reserve area.
 int getBufferSize()
          Get the size of the buffers used by connections from this listener.
 int getConfidentialPort()
          Get the protocol port to use for confidential redirections.
 java.lang.String getConfidentialScheme()
          Get the protocol scheme to use for confidential redirections.
 java.lang.String getDefaultScheme()
          Get the default scheme for requests.
 HttpHandler getHttpHandler()
          Get an optional HttpHandler for the listener.
 HttpServer getHttpServer()
          Get the HttpServer instance for this HttpListener.
 boolean getIdentifyListener()
           
 int getIntegralPort()
          Get the protocol port to use for integral redirections.
 java.lang.String getIntegralScheme()
          Get the protocol scheme to use for integral redirections.
 int getLowResourcePersistTimeMs()
           
 int getLowResources()
           
 void handleConnection(java.net.Socket socket)
          Handle Job.
 boolean isConfidential(HttpConnection connection)
          Get the confidential status of a connection.
 boolean isIntegral(HttpConnection connection)
          Get the integral status of a connection.
 boolean isLowOnResources()
          Get the lowOnResource state of the listener.
 boolean isOutOfResources()
          Get the outOfResource state of the listener.
 void persistConnection(HttpConnection connection)
          Persist the connection.
 void setBufferReserve(int size)
           
 void setBufferSize(int size)
           
 void setConfidentialPort(int confidentialPort)
           
 void setConfidentialScheme(java.lang.String confidentialScheme)
           
 void setDefaultScheme(java.lang.String scheme)
           
 void setHttpHandler(HttpHandler handler)
           
 void setHttpServer(HttpServer server)
          Set the HttpServer instance for this HttpListener.
 void setIdentifyListener(boolean identifyListener)
           
 void setIntegralPort(int integralPort)
           
 void setIntegralScheme(java.lang.String integralScheme)
           
 void setLowResourcePersistTimeMs(int ms)
          Set the low resource persistace time.
 void setLowResources(int lowResources)
           
 void start()
          Start the LifeCycle.
 void stop()
          Stop the ThreadPool.
 
Methods inherited from class org.mortbay.util.ThreadedServer
acceptSocket, acceptSocket, getAcceptorThreads, getAcceptQueueSize, getHost, getInetAddress, getInetAddrPort, getLingerTimeSecs, getMaxReadTimeMs, getPort, getServerSocket, getTcpNoDelay, handle, handleConnection, newServerSocket, open, setAcceptorThreads, setAcceptQueueSize, setHost, setInetAddress, setInetAddrPort, setLingerTimeSecs, setMaxReadTimeMs, setPort, setTcpNoDelay, stopJob, toString
 
Methods inherited from class org.mortbay.util.ThreadPool
getIdleThreads, getMaxIdleTimeMs, getMaxThreads, getMinThreads, getName, getPoolName, getThreads, getThreadsPriority, isDaemon, isStarted, join, run, setDaemon, setMaxIdleTimeMs, setMaxStopTimeMs, setMaxThreads, setMinThreads, setName, setPoolName, setThreadsPriority, shrink
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, wait, wait, wait
 
Methods inherited from interface org.mortbay.http.HttpListener
getHost, getPort, setHost, setPort
 
Methods inherited from interface org.mortbay.util.LifeCycle
isStarted
 

Constructor Detail

SocketListener

public SocketListener()

SocketListener

public SocketListener(InetAddrPort address)
Method Detail

getHttpServer

public HttpServer getHttpServer()
Description copied from interface: HttpListener
Get the HttpServer instance for this HttpListener.

Specified by:
getHttpServer in interface HttpListener
Returns:
The HttpServer instance this HttpListener has been added to, or null if the listener is not added to any HttpServer.

setHttpServer

public void setHttpServer(HttpServer server)
Description copied from interface: HttpListener
Set the HttpServer instance for this HttpListener. This method is called by the HttpServer.addListener method. It should not be called directly.

Specified by:
setHttpServer in interface HttpListener
Parameters:
server - The HttpServer instance this HttpListener has been added to.

getHttpHandler

public HttpHandler getHttpHandler()
Description copied from interface: HttpListener
Get an optional HttpHandler for the listener. If Set, then HttpConnection will pass requests from this listener to this handler with an empty context path, before passing the request to the HttpServer. This allows listener specific handling to be added or even a HttpContext (which is a HttpHandler) to be bound directly to HttpListener.

Specified by:
getHttpHandler in interface HttpListener

setHttpHandler

public void setHttpHandler(HttpHandler handler)

getBufferSize

public int getBufferSize()
Description copied from interface: HttpListener
Get the size of the buffers used by connections from this listener.

Specified by:
getBufferSize in interface HttpListener
Returns:
The default buffer size in bytes.

setBufferSize

public void setBufferSize(int size)

getBufferReserve

public int getBufferReserve()
Description copied from interface: HttpListener
Get the size of the header reserve area. Get the size of the header reserve area within the buffers used by connections from this listener. The header reserve is space reserved in the first buffer of a response to allow a HTTP header to be written in the same packet. The reserve should be large enough to avoid moving data to fit the header, but not too large as to waste memory.

Specified by:
getBufferReserve in interface HttpListener
Returns:
The default buffer reserve size in bytes.

setBufferReserve

public void setBufferReserve(int size)

getIdentifyListener

public boolean getIdentifyListener()

setIdentifyListener

public void setIdentifyListener(boolean identifyListener)
Parameters:
identifyListener - If true, the listener name is added to all requests as the org.mortbay.http.HttListener attribute

setDefaultScheme

public void setDefaultScheme(java.lang.String scheme)

getDefaultScheme

public java.lang.String getDefaultScheme()
Description copied from interface: HttpListener
Get the default scheme for requests. If a request is received from a HttpConnection created by this listener, that does not include a scheme in it's request URL, then this method is used to determine the protocol scheme most likely used to connect to this listener.

Specified by:
getDefaultScheme in interface HttpListener
Returns:
The protocol scheme name (eg "http" or "https").

getLowResources

public int getLowResources()
Returns:
Returns the lowResources threshold

setLowResources

public void setLowResources(int lowResources)
Parameters:
lowResources - The number of idle threads needed to not be in low resources state.

getLowResourcePersistTimeMs

public int getLowResourcePersistTimeMs()
Returns:
time in ms that connections will persist if listener is low on resources.

setLowResourcePersistTimeMs

public void setLowResourcePersistTimeMs(int ms)
Set the low resource persistace time. When the listener is low on resources, this timeout is used for idle persistent connections. It is desirable to have this set to a short period of time so that idle persistent connections do not consume resources on a busy server.

Parameters:
ms - time in ms that connections will persist if listener is low on resources.

start

public void start()
           throws java.lang.Exception
Description copied from interface: LifeCycle
Start the LifeCycle.

Specified by:
start in interface LifeCycle
Overrides:
start in class ThreadedServer
Throws:
java.lang.Exception - An arbitrary exception may be thrown.

stop

public void stop()
          throws java.lang.InterruptedException
Description copied from class: ThreadPool
Stop the ThreadPool. New jobs are no longer accepted,idle threads are interrupted and stopJob is called on active threads. The method then waits min(getMaxStopTimeMs(),getMaxIdleTimeMs()), for all jobs to stop, at which time killJob is called.

Specified by:
stop in interface LifeCycle
Overrides:
stop in class ThreadedServer
Throws:
java.lang.InterruptedException - Stopping a lifecycle is rarely atomic and may be interrupted by another thread. If this happens InterruptedException is throw and the component will be in an indeterminant state and should probably be discarded.

handleConnection

public void handleConnection(java.net.Socket socket)
                      throws java.io.IOException
Handle Job. Implementation of ThreadPool.handle(), calls handleConnection.

Overrides:
handleConnection in class ThreadedServer
Parameters:
socket - A Connection.
Throws:
java.io.IOException

createConnection

protected HttpConnection createConnection(java.net.Socket socket)
                                   throws java.io.IOException
Create an HttpConnection instance. This method can be used to override the connection instance.

Parameters:
socket - The underlying socket.
Throws:
java.io.IOException

customizeRequest

public void customizeRequest(HttpConnection connection,
                             HttpRequest request)
Customize the request from connection. This method extracts the socket from the connection and calls the customizeRequest(Socket,HttpRequest) method.

Specified by:
customizeRequest in interface HttpListener
Parameters:
request -
connection - The connection the request was received on, which must be a HttpConnection created by this listener.

customizeRequest

protected void customizeRequest(java.net.Socket socket,
                                HttpRequest request)
Customize request from socket. Derived versions of SocketListener may specialize this method to customize the request with attributes of the socket used (eg SSL session ids). This version resets the SoTimeout if it has been reduced due to low resources. Derived implementations should call super.customizeRequest(socket,request) unless persistConnection has also been overridden and not called.

Parameters:
request -

persistConnection

public void persistConnection(HttpConnection connection)
Persist the connection. This method is called by the HttpConnection in order to prepare a connection to be persisted. For this implementation, if the listener is low on resources, the connection read timeout is set to lowResourcePersistTimeMs. The customizeRequest method is used to reset this to the normal value after a request has been read.

Specified by:
persistConnection in interface HttpListener
Parameters:
connection - The HttpConnection to use.

isLowOnResources

public boolean isLowOnResources()
Get the lowOnResource state of the listener. A SocketListener is considered low on resources if the total number of the number of idle threads is less than the lowResource value (or minThreads if not set)

Specified by:
isLowOnResources in interface HttpListener
Returns:
True if low on idle threads.

isOutOfResources

public boolean isOutOfResources()
Get the outOfResource state of the listener. A SocketListener is considered out of resources if the total number of threads is maxThreads and the number of idle threads is zero.

Specified by:
isOutOfResources in interface HttpListener
Returns:
True if out of resources.

isIntegral

public boolean isIntegral(HttpConnection connection)
Description copied from interface: HttpListener
Get the integral status of a connection.

Specified by:
isIntegral in interface HttpListener
Parameters:
connection - The connection to test.
Returns:
True of the connection checks the integrity of the data. For most implementations this is true for https connections.

isConfidential

public boolean isConfidential(HttpConnection connection)
Description copied from interface: HttpListener
Get the confidential status of a connection.

Specified by:
isConfidential in interface HttpListener
Parameters:
connection - The connection to test.
Returns:
True of the connection checks the integrity of the data. For most implementations this is true for https connections.

getIntegralScheme

public java.lang.String getIntegralScheme()
Description copied from interface: HttpListener
Get the protocol scheme to use for integral redirections. If an INTEGRAL security constraint is not met for a request, the request is redirected to an integral port. This scheme return by this method is used for that redirection.

Specified by:
getIntegralScheme in interface HttpListener
Returns:
The integral scheme. For most implementations this is "https"

setIntegralScheme

public void setIntegralScheme(java.lang.String integralScheme)

getIntegralPort

public int getIntegralPort()
Description copied from interface: HttpListener
Get the protocol port to use for integral redirections. If an INTEGRAL security constraint is not met for a request, the request is redirected to an integral port. This port return by this method is used for that redirection.

Specified by:
getIntegralPort in interface HttpListener
Returns:
The integral port. For most implementations this is 443 for https

setIntegralPort

public void setIntegralPort(int integralPort)

getConfidentialScheme

public java.lang.String getConfidentialScheme()
Description copied from interface: HttpListener
Get the protocol scheme to use for confidential redirections. If an CONFIDENTIAL security constraint is not met for a request, the request is redirected to an confidential port. This scheme return by this method is used for that redirection.

Specified by:
getConfidentialScheme in interface HttpListener
Returns:
The confidential scheme. For most implementations this is "https"

setConfidentialScheme

public void setConfidentialScheme(java.lang.String confidentialScheme)

getConfidentialPort

public int getConfidentialPort()
Description copied from interface: HttpListener
Get the protocol port to use for confidential redirections. If an CONFIDENTIAL security constraint is not met for a request, the request is redirected to an confidential port. This port return by this method is used for that redirection.

Specified by:
getConfidentialPort in interface HttpListener
Returns:
The confidential port. For most implementations this is 443 for https

setConfidentialPort

public void setConfidentialPort(int confidentialPort)


Copyright © 2004 Mortbay Consulting Pty. Ltd. All Rights Reserved.