public class HttpConnection extends AbstractConnection implements Runnable, HttpTransport, WriteFlusher.Listener, Connection.UpgradeFrom, Connection.UpgradeTo
A Connection
that handles the HTTP protocol.
Connection.Listener, Connection.UpgradeFrom, Connection.UpgradeTo
Modifier and Type | Field and Description |
---|---|
static HttpField |
CONNECTION_CLOSE |
static String |
UPGRADE_CONNECTION_ATTRIBUTE |
Constructor and Description |
---|
HttpConnection(HttpConfiguration config,
Connector connector,
EndPoint endPoint,
HttpCompliance compliance,
boolean recordComplianceViolations) |
Modifier and Type | Method and Description |
---|---|
void |
abort(Throwable failure)
Aborts this transport.
|
void |
asyncReadFillInterested() |
void |
blockingReadFailure(Throwable e) |
void |
blockingReadFillInterested() |
long |
getBytesIn() |
long |
getBytesOut() |
Connector |
getConnector() |
static HttpConnection |
getCurrentConnection()
Get the current connection that this thread is dispatched to.
|
HttpGenerator |
getGenerator() |
HttpChannel |
getHttpChannel() |
HttpConfiguration |
getHttpConfiguration() |
long |
getMessagesIn() |
long |
getMessagesOut() |
HttpParser |
getParser() |
ByteBuffer |
getRequestBuffer() |
Server |
getServer() |
boolean |
isOptimizedForDirectBuffers()
Is the underlying transport optimized for DirectBuffer usage
|
boolean |
isPushSupported() |
boolean |
isRecordHttpComplianceViolations() |
boolean |
isRequestBufferEmpty() |
void |
onClose()
Callback method invoked when this connection is closed.
|
void |
onCompleted()
Called to indicated the end of the current request/response cycle (which may be
some time after the last content is sent).
|
void |
onFillable()
Callback method invoked when the endpoint is ready to be read.
|
void |
onFlushed(long bytes)
Invoked when a
WriteFlusher flushed bytes in a non-blocking way,
as part of a - possibly larger - write. |
void |
onOpen()
Callback method invoked when this connection is opened.
|
ByteBuffer |
onUpgradeFrom()
Takes the input buffer from the connection on upgrade.
|
void |
onUpgradeTo(ByteBuffer buffer)
Callback method invoked when this connection is upgraded.
|
void |
push(MetaData.Request request) |
void |
run() |
void |
send(MetaData.Response info,
boolean head,
ByteBuffer content,
boolean lastContent,
Callback callback)
Asynchronous call to send a response (or part) over the transport
|
String |
toConnectionString() |
addListener, close, fillInterested, getCreatedTimeStamp, getEndPoint, getInputBufferSize, isFillInterested, onIdleExpired, removeListener, setInputBufferSize, toString, tryFillInterested, tryFillInterested
public static final HttpField CONNECTION_CLOSE
public static final String UPGRADE_CONNECTION_ATTRIBUTE
public HttpConnection(HttpConfiguration config, Connector connector, EndPoint endPoint, HttpCompliance compliance, boolean recordComplianceViolations)
public static HttpConnection getCurrentConnection()
for a more general way to access the HttpConnection
public HttpConfiguration getHttpConfiguration()
public boolean isRecordHttpComplianceViolations()
public Server getServer()
public Connector getConnector()
public HttpChannel getHttpChannel()
public HttpParser getParser()
public HttpGenerator getGenerator()
public boolean isOptimizedForDirectBuffers()
HttpTransport
isOptimizedForDirectBuffers
in interface HttpTransport
public long getMessagesIn()
getMessagesIn
in interface Connection
getMessagesIn
in class AbstractConnection
public long getMessagesOut()
getMessagesOut
in interface Connection
getMessagesOut
in class AbstractConnection
public ByteBuffer onUpgradeFrom()
Connection.UpgradeFrom
Takes the input buffer from the connection on upgrade.
This method is used to take any unconsumed input from a connection during an upgrade.
onUpgradeFrom
in interface Connection.UpgradeFrom
public void onUpgradeTo(ByteBuffer buffer)
Connection.UpgradeTo
Callback method invoked when this connection is upgraded.
This must be called before Connection.onOpen()
.
onUpgradeTo
in interface Connection.UpgradeTo
buffer
- An optional buffer that can contain prefilled data. Typically this
results from an upgrade of one protocol to the other where the old connection has buffered
data destined for the new connection. The new connection must take ownership of the buffer
and is responsible for returning it to the buffer poolpublic void onFlushed(long bytes) throws IOException
WriteFlusher.Listener
Invoked when a WriteFlusher
flushed bytes in a non-blocking way,
as part of a - possibly larger - write.
This method may be invoked multiple times, for example when writing a large buffer: a first flush of bytes, then the connection became TCP congested, and a subsequent flush of bytes when the connection became writable again.
This method is never invoked concurrently, but may be invoked by different threads, so implementations may not rely on thread-local variables.
Implementations may throw an IOException
to signal that the write
should fail, for example if the implementation enforces a minimum data rate.
onFlushed
in interface WriteFlusher.Listener
bytes
- the number of bytes flushedIOException
- if the write should failpublic ByteBuffer getRequestBuffer()
public boolean isRequestBufferEmpty()
public void onFillable()
AbstractConnection
Callback method invoked when the endpoint is ready to be read.
onFillable
in class AbstractConnection
AbstractConnection.fillInterested()
public void onCompleted()
HttpTransport
onCompleted
in interface HttpTransport
public void onOpen()
Connection
Callback method invoked when this connection is opened.
Creators of the connection implementation are responsible for calling this method.
onOpen
in interface Connection
onOpen
in class AbstractConnection
public void onClose()
Connection
Callback method invoked when this connection is closed.
Creators of the connection implementation are responsible for calling this method.
onClose
in interface Connection
onClose
in class AbstractConnection
public void send(MetaData.Response info, boolean head, ByteBuffer content, boolean lastContent, Callback callback)
HttpTransport
send
in interface HttpTransport
info
- The header info to send, or null if just sending more data.
The first call to send for a response must have a non null info.head
- True if the response if for a HEAD request (and the data should not be sent).content
- A buffer of content to be sent.lastContent
- True if the content is the last content for the current response.callback
- The Callback instance that success or failure of the send is notified onpublic void abort(Throwable failure)
HttpTransport
This method should terminate the transport in a way that can indicate an abnormal response to the client, for example by abruptly close the connection.
This method is called when an error response needs to be sent,
but the response is already committed, or when a write failure
is detected. If abort is called, HttpTransport.onCompleted()
is not
called
abort
in interface HttpTransport
failure
- the failure that caused the abort.public boolean isPushSupported()
isPushSupported
in interface HttpTransport
public void push(MetaData.Request request)
push
in interface HttpTransport
request
- A request to use as the basis for generating a pushed response.public void asyncReadFillInterested()
public void blockingReadFillInterested()
public void blockingReadFailure(Throwable e)
public long getBytesIn()
getBytesIn
in interface Connection
getBytesIn
in class AbstractConnection
public long getBytesOut()
getBytesOut
in interface Connection
getBytesOut
in class AbstractConnection
public String toConnectionString()
toConnectionString
in class AbstractConnection
Copyright © 2010 - 2020 Adobe. All Rights Reserved