rabbit.proxy
Class Connection

java.lang.Object
  extended by rabbit.proxy.Connection

public class Connection
extends Object

The base connection class for rabbit. This is the class that handle the http protocoll for proxies. For the technical overview of how connections and threads works see the file htdocs/technical_documentation/thread_handling_overview.txt

Author:
Robert Olofsson

Constructor Summary
Connection(ConnectionId id, SocketChannel channel, HttpProxy proxy, BufferHandler bufHandler)
          Create a new Connection
 
Method Summary
 void doError(int status, String message)
          Send an error (400 Bad Request) to the client.
 BufferHandler getBufferHandler()
           
 SocketChannel getChannel()
          Get the SocketChannel to the client
 boolean getChunking()
          Get the chunking option.
 ClientResourceHandler getClientResourceHandler()
           
 String getContentLength()
           
 Counter getCounter()
           
 String getDebugInfo()
           
 String getExtraInfo()
           
 HttpGenerator getHttpGenerator()
           
 ConnectionId getId()
           
 boolean getMayFilter()
          Get the state of the request.
 boolean getMeta()
          Get the state of this request.
 NioHandler getNioHandler()
           
 String getPassword()
          Get the name of the user that is currently authorized.
 HttpProxy getProxy()
           
 String getRequestLine()
          Get the request line of the request currently being handled
 String getRequestURI()
          Get the current request uri.
 String getRequestVersion()
          Get the http version that the client used.
 long getStarted()
          Get the time this connection was started.
 String getStatus()
           
 String getUserName()
          Get the name of the user that is currently authorized.
 void logAndClose(rabbit.proxy.RequestHandler rh)
          Log the current request and close/end this connection
 void logAndRestart()
          Log the current request and start to listen for a new request.
protected  boolean mustTunnel(rabbit.proxy.RequestHandler rh)
          Check if we must tunnel a request.
 void readRequest()
          Read a request.
 void sendAndClose(HttpHeader header)
          Send a request and then close this connection.
 void setChunking(boolean b)
          Set the chunking option.
 void setContentLength(String contentLength)
          Set the content length of the response.
 void setExtraInfo(String info)
          Set the extra info.
 void setKeepalive(boolean keepalive)
          Set keepalive to a new value.
 void setMayCache(boolean cacheAllowed)
          Specify if we may cache the response resource.
 void setMayFilter(boolean filterAllowed)
          Get the state of this request.
 void setMayUseCache(boolean useCache)
          Specify if the current resource may be served from our cache.
 void setMeta(boolean meta)
          Set the state of this request.
 void setMustRevalidate(boolean b)
           
 void setPassword(String password)
           
 void setStatusCode(String statusCode)
           
 void setUserName(String userName)
           
 boolean useFullURI()
           
 void webConnectionEstablished(rabbit.proxy.RequestHandler rh)
           
 void webConnectionSetupFailed(rabbit.proxy.RequestHandler rh, Exception cause)
           
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

Connection

public Connection(ConnectionId id,
                  SocketChannel channel,
                  HttpProxy proxy,
                  BufferHandler bufHandler)
Create a new Connection

Parameters:
id - the ConnectionId of this connection.
channel - the SocketChannel to the client.
proxy - the HttpProxy that this connection belongs to.
bufHandler - the BufferHandler to use for getting ByteBuffers.
Method Detail

getId

public ConnectionId getId()

readRequest

public void readRequest()
Read a request.


webConnectionSetupFailed

public void webConnectionSetupFailed(rabbit.proxy.RequestHandler rh,
                                     Exception cause)

mustTunnel

protected boolean mustTunnel(rabbit.proxy.RequestHandler rh)
Check if we must tunnel a request. Currently will only check if the Authorization starts with NTLM or Negotiate.

Parameters:
rh - the request handler.

webConnectionEstablished

public void webConnectionEstablished(rabbit.proxy.RequestHandler rh)

doError

public void doError(int status,
                    String message)
Send an error (400 Bad Request) to the client.

Parameters:
status - the status code of the error.
message - the error message to tell the client.

getChannel

public SocketChannel getChannel()
Get the SocketChannel to the client


getNioHandler

public NioHandler getNioHandler()

getProxy

public HttpProxy getProxy()

getBufferHandler

public BufferHandler getBufferHandler()

getCounter

public Counter getCounter()

setKeepalive

public void setKeepalive(boolean keepalive)
Set keepalive to a new value. Note that keepalive can only be promoted down.

Parameters:
keepalive - the new keepalive value.

getUserName

public String getUserName()
Get the name of the user that is currently authorized.

Returns:
a username, may be null if the user is not know/authorized

setUserName

public void setUserName(String userName)

getPassword

public String getPassword()
Get the name of the user that is currently authorized.

Returns:
a username, may be null if the user is not know/authorized

setPassword

public void setPassword(String password)

getRequestLine

public String getRequestLine()
Get the request line of the request currently being handled


getRequestURI

public String getRequestURI()
Get the current request uri. This will get the uri from the request header.


getDebugInfo

public String getDebugInfo()

getRequestVersion

public String getRequestVersion()
Get the http version that the client used. We modify the request header to hold HTTP/1.1 since that is what rabbit uses, but the real client may have sent a 1.0 header.


getStatus

public String getStatus()

getContentLength

public String getContentLength()

getClientResourceHandler

public ClientResourceHandler getClientResourceHandler()

getExtraInfo

public String getExtraInfo()

setExtraInfo

public void setExtraInfo(String info)
Set the extra info.

Parameters:
info - the new info.

getStarted

public long getStarted()
Get the time this connection was started.


setChunking

public void setChunking(boolean b)
Set the chunking option.

Parameters:
b - if true this connection should use chunking.

getChunking

public boolean getChunking()
Get the chunking option.

Returns:
if this connection is using chunking.

getMeta

public boolean getMeta()
Get the state of this request.

Returns:
true if this is a metapage request, false otherwise.

setMeta

public void setMeta(boolean meta)
Set the state of this request.

Parameters:
meta - true if this request is a metapage request, false otherwise.

setMayUseCache

public void setMayUseCache(boolean useCache)
Specify if the current resource may be served from our cache. This can only be promoted down..

Parameters:
useCache - true if we may use the cache for serving this request, false otherwise.

setMayCache

public void setMayCache(boolean cacheAllowed)
Specify if we may cache the response resource. This can only be promoted down.

Parameters:
cacheAllowed - true if we may cache the response, false otherwise.

setMayFilter

public void setMayFilter(boolean filterAllowed)
Get the state of this request. This can only be promoted down.

Parameters:
filterAllowed - true if we may filter the response, false otherwise.

getMayFilter

public boolean getMayFilter()
Get the state of the request.

Returns:
true if we may filter the response, false otherwise.

setMustRevalidate

public void setMustRevalidate(boolean b)

setContentLength

public void setContentLength(String contentLength)
Set the content length of the response.

Parameters:
contentLength - the new content length.

setStatusCode

public void setStatusCode(String statusCode)

useFullURI

public boolean useFullURI()

sendAndClose

public void sendAndClose(HttpHeader header)
Send a request and then close this connection.

Parameters:
header - the HttpHeader to send before closing down.

logAndClose

public void logAndClose(rabbit.proxy.RequestHandler rh)
Log the current request and close/end this connection


logAndRestart

public void logAndRestart()
Log the current request and start to listen for a new request.


getHttpGenerator

public HttpGenerator getHttpGenerator()