A HTTP Connection.
This class provides the generic HTTP handling for
a connection to a HTTP server. An instance of HttpConnection
is normally created by a HttpListener and then given control
in order to run the protocol handling before and after passing
a request to the HttpServer of the HttpListener.
This class is not synchronized as it should only ever be known
to a single thread.
associateThread
protected void associateThread()
close
public void close()
throws IOException
Close the connection.
This method calls close on the input and output streams and
interrupts any thread in the handle method.
may be specialized to close sockets etc.
commit
protected void commit()
throws IOException
destroy
protected void destroy()
Destroy the connection.
called by handle when handleNext returns false.
disassociateThread
protected void disassociateThread()
firstWrite
protected void firstWrite()
throws IOException
Setup the reponse output stream.
Use the current state of the request and response, to set tranfer
parameters such as chunking and content length.
forceClose
public void forceClose()
Force the connection to not be persistent.
getConnection
public Object getConnection()
Get the underlying connection object.
This opaque object, most likely a socket. This is not used by
HttpConnection other than to make it available via getConnection().
getDefaultScheme
public String getDefaultScheme()
Get the listeners Default scheme.
Conveniance method equivalent to getListener().getDefaultProtocol().
getHttpServer
public HttpServer getHttpServer()
Get the listeners HttpServer .
Conveniance method equivalent to getListener().getHttpServer().
getHttpTunnel
public HttpTunnel getHttpTunnel()
- The HttpTunnel set for the connection or null.
getInputStream
public HttpInputStream getInputStream()
Get the connections InputStream.
- the connections InputStream
getListener
public HttpListener getListener()
Get the connections listener.
- HttpListener that created this Connection.
getObject
public Object getObject()
Get associated object.
Used by a particular HttpListener implementation to associate
private datastructures with the connection.
- An object associated with the connecton by setObject.
getOutputStream
public HttpOutputStream getOutputStream()
Get the connections OutputStream.
- the connections OutputStream
getRemoteAddr
public String getRemoteAddr()
Get the Remote address.
getRemoteHost
public String getRemoteHost()
Get the Remote address.
getRemoteInetAddress
public InetAddress getRemoteInetAddress()
Get the Remote address.
getRemotePort
public int getRemotePort()
Get the remote Port .
getRequest
public HttpRequest getRequest()
Get the request.
getResponse
public HttpResponse getResponse()
Get the response.
getServerAddr
public String getServerAddr()
Get the listeners HttpServer.
getServerName
public String getServerName()
Get the listeners HttpServer.
But if the name is 0.0.0.0, then the real interface address is used.
getServerPort
public int getServerPort()
Get the listeners Port .
Conveniance method equivalent to getListener().getPort().
handle
public final void handle()
Handle the connection.
Once the connection has been created, this method is called
to handle one or more requests that may be received on the
connection. The method only returns once all requests have been
handled, an error has been returned to the requestor or the
connection has been closed.
The handleNext() is called in a loop until it returns false.
handleNext
public boolean handleNext()
Handle next request off the connection.
The service(request,response) method is called by handle to
service each request received on the connection.
If the thread is a PoolThread, the thread is set as inactive
when waiting for a request.
If a HttpTunnel has been set on this connection, it's handle method is
called and when that completes, false is return from this method.
The Connection is set as a ThreadLocal of the calling thread and is
available via the getHttpConnection() method.
- true if the connection is still open and may provide
more requests.
isThrottled
public boolean isThrottled()
- True if this connections state has been altered due
to low resources.
outputNotify
public void outputNotify(OutputStream out,
int action,
Object ignoredData)
throws IOException
Output Notifications.
Trigger header and/or filters from output stream observations.
Also finalizes method of indicating response content length.
Called as a result of the connection subscribing for notifications
to the HttpOutputStream.
- outputNotify in interface OutputObserver
out
- The output stream observed.action
- The action.
readRequest
protected void readRequest()
throws IOException
recycle
protected void recycle()
Recycle the connection.
called by handle when handleNext returns true.
service
protected HttpContext service(HttpRequest request,
HttpResponse response)
throws HttpException,
IOException
Service a Request.
This implementation passes the request and response to the
service method of the HttpServer for this connections listener.
If no HttpServer has been associated, the 503 is returned.
This method may be specialized to implement other ways of
servicing a request.
request
- The requestresponse
- The response
- The HttpContext that completed handling of the request or null.
setHttpTunnel
public void setHttpTunnel(HttpTunnel tunnel)
Set a HttpTunnel for the connection.
A HTTP tunnel is used if the connection is to be taken over for
non-HTTP communications. An example of this is the CONNECT method
in proxy handling. If a HttpTunnel is set on a connection, then it's
handle method is called bu the next call to handleNext().
tunnel
- The HttpTunnel set for the connection or null.
setObject
public void setObject(Object o)
Set associated object.
Used by a particular HttpListener implementation to associate
private datastructures with the connection.
o
- An object associated with the connecton.
setThrottled
public void setThrottled(boolean throttled)
throttled
- True if this connections state has been altered due
to low resources.
statsRequestEnd
protected void statsRequestEnd()
statsRequestStart
protected void statsRequestStart()