Package org.apache.http.impl.nio
Class NHttpConnectionBase
- java.lang.Object
-
- org.apache.http.impl.nio.NHttpConnectionBase
-
- All Implemented Interfaces:
java.io.Closeable
,java.lang.AutoCloseable
,HttpConnection
,HttpInetConnection
,IOControl
,NHttpConnection
,SessionBufferStatus
,SocketAccessor
- Direct Known Subclasses:
DefaultNHttpClientConnection
,DefaultNHttpServerConnection
public class NHttpConnectionBase extends java.lang.Object implements NHttpConnection, HttpInetConnection, SessionBufferStatus, SocketAccessor
This class serves as a base for allNHttpConnection
implementations and provides functionality common to both client and server HTTP connections.- Since:
- 4.0
-
-
Field Summary
Fields Modifier and Type Field Description protected HttpConnectionMetricsImpl
connMetrics
private MessageConstraints
constraints
protected ContentDecoder
contentDecoder
protected ContentEncoder
contentEncoder
protected HttpContext
context
private int
fragmentSizeHint
protected boolean
hasBufferedInput
protected boolean
hasBufferedOutput
protected SessionInputBufferImpl
inbuf
protected ContentLengthStrategy
incomingContentStrategy
protected HttpTransportMetricsImpl
inTransportMetrics
protected SessionOutputBufferImpl
outbuf
protected ContentLengthStrategy
outgoingContentStrategy
protected HttpTransportMetricsImpl
outTransportMetrics
protected java.net.SocketAddress
remote
protected HttpRequest
request
protected HttpResponse
response
protected IOSession
session
protected int
status
-
Fields inherited from interface org.apache.http.nio.NHttpConnection
ACTIVE, CLOSED, CLOSING
-
-
Constructor Summary
Constructors Modifier Constructor Description protected
NHttpConnectionBase(IOSession session, int bufferSize, int fragmentSizeHint, ByteBufferAllocator allocator, java.nio.charset.CharsetDecoder charDecoder, java.nio.charset.CharsetEncoder charEncoder, MessageConstraints constraints, ContentLengthStrategy incomingContentStrategy, ContentLengthStrategy outgoingContentStrategy)
Creates new instance NHttpConnectionBase given the underlying I/O session.protected
NHttpConnectionBase(IOSession session, int bufferSize, int fragmentSizeHint, ByteBufferAllocator allocator, java.nio.charset.CharsetDecoder charDecoder, java.nio.charset.CharsetEncoder charEncoder, ContentLengthStrategy incomingContentStrategy, ContentLengthStrategy outgoingContentStrategy)
Creates new instance NHttpConnectionBase given the underlying I/O session.NHttpConnectionBase(IOSession session, ByteBufferAllocator allocator, HttpParams params)
-
Method Summary
All Methods Instance Methods Concrete Methods Deprecated Methods Modifier and Type Method Description protected void
assertNotClosed()
Assets if the connection is still open.protected void
bind(IOSession session)
Binds the connection to a differentIOSession
.void
close()
Closes this connection gracefully.protected HttpConnectionMetricsImpl
createConnectionMetrics(HttpTransportMetrics inTransportMetric, HttpTransportMetrics outTransportMetric)
Deprecated.(4.3) use decorator to add additional metrics.protected ContentDecoder
createContentDecoder(long len, java.nio.channels.ReadableByteChannel channel, SessionInputBuffer buffer, HttpTransportMetricsImpl metrics)
Factory method forContentDecoder
instances.protected ContentEncoder
createContentEncoder(long len, java.nio.channels.WritableByteChannel channel, SessionOutputBuffer buffer, HttpTransportMetricsImpl metrics)
Factory method forContentEncoder
instances.protected ContentLengthStrategy
createIncomingContentStrategy()
Deprecated.(4.3) use constructor.protected ContentLengthStrategy
createOutgoingContentStrategy()
Deprecated.(4.3) use constructor.protected HttpTransportMetricsImpl
createTransportMetrics()
Deprecated.(4.3) no longer used.HttpContext
getContext()
Returns an HTTP execution context associated with this connection.HttpRequest
getHttpRequest()
Returns the current HTTP request if one is being received / transmitted.HttpResponse
getHttpResponse()
Returns the current HTTP response if one is being received / transmitted.java.net.InetAddress
getLocalAddress()
int
getLocalPort()
HttpConnectionMetrics
getMetrics()
Returns a collection of connection metrics.java.net.InetAddress
getRemoteAddress()
int
getRemotePort()
java.net.Socket
getSocket()
Return the underlying socketint
getSocketTimeout()
Returns the socket timeout value.int
getStatus()
Returns status of the connection:boolean
hasBufferedInput()
Determines if the session input buffer contains data.boolean
hasBufferedOutput()
Determines if the session output buffer contains data.boolean
isOpen()
Checks if this connection is open.boolean
isStale()
Checks whether this connection has gone down.protected HttpEntity
prepareDecoder(HttpMessage message)
Initializes a specificContentDecoder
implementation based on the properties of the givenHttpMessage
and generates an instance ofHttpEntity
matching the properties of the content decoder.protected void
prepareEncoder(HttpMessage message)
Initializes a specificContentEncoder
implementation based on the properties of the givenHttpMessage
.void
requestInput()
Requests event notifications to be triggered when the underlying channel is ready for input operations.void
requestOutput()
Requests event notifications to be triggered when the underlying channel is ready for output operations.private void
setSession(IOSession session)
void
setSocketTimeout(int timeout)
Sets the socket timeout value.void
shutdown()
Force-closes this connection.void
suspendInput()
Suspends event notifications about the underlying channel being ready for input operations.void
suspendOutput()
Suspends event notifications about the underlying channel being ready for output operations.java.lang.String
toString()
-
-
-
Field Detail
-
incomingContentStrategy
protected final ContentLengthStrategy incomingContentStrategy
-
outgoingContentStrategy
protected final ContentLengthStrategy outgoingContentStrategy
-
inbuf
protected final SessionInputBufferImpl inbuf
-
outbuf
protected final SessionOutputBufferImpl outbuf
-
fragmentSizeHint
private final int fragmentSizeHint
-
constraints
private final MessageConstraints constraints
-
inTransportMetrics
protected final HttpTransportMetricsImpl inTransportMetrics
-
outTransportMetrics
protected final HttpTransportMetricsImpl outTransportMetrics
-
connMetrics
protected final HttpConnectionMetricsImpl connMetrics
-
context
protected HttpContext context
-
session
protected IOSession session
-
remote
protected java.net.SocketAddress remote
-
contentDecoder
protected volatile ContentDecoder contentDecoder
-
hasBufferedInput
protected volatile boolean hasBufferedInput
-
contentEncoder
protected volatile ContentEncoder contentEncoder
-
hasBufferedOutput
protected volatile boolean hasBufferedOutput
-
request
protected volatile HttpRequest request
-
response
protected volatile HttpResponse response
-
status
protected volatile int status
-
-
Constructor Detail
-
NHttpConnectionBase
@Deprecated public NHttpConnectionBase(IOSession session, ByteBufferAllocator allocator, HttpParams params)
Deprecated.Creates a new instance of this class given the underlying I/O session.- Parameters:
session
- the underlying I/O session.allocator
- byte buffer allocator.params
- HTTP parameters.
-
NHttpConnectionBase
protected NHttpConnectionBase(IOSession session, int bufferSize, int fragmentSizeHint, ByteBufferAllocator allocator, java.nio.charset.CharsetDecoder charDecoder, java.nio.charset.CharsetEncoder charEncoder, MessageConstraints constraints, ContentLengthStrategy incomingContentStrategy, ContentLengthStrategy outgoingContentStrategy)
Creates new instance NHttpConnectionBase given the underlying I/O session.- Parameters:
session
- the underlying I/O session.bufferSize
- buffer size. Must be a positive number.fragmentSizeHint
- fragment size hint.allocator
- memory allocator. Ifnull
HeapByteBufferAllocator.INSTANCE
will be used.charDecoder
- decoder to be used for decoding HTTP protocol elements. Ifnull
simple type cast will be used for byte to char conversion.charEncoder
- encoder to be used for encoding HTTP protocol elements. Ifnull
simple type cast will be used for char to byte conversion.constraints
- Message constraints. Ifnull
MessageConstraints.DEFAULT
will be used.incomingContentStrategy
- incoming content length strategy. Ifnull
LaxContentLengthStrategy.INSTANCE
will be used.outgoingContentStrategy
- outgoing content length strategy. Ifnull
StrictContentLengthStrategy.INSTANCE
will be used.- Since:
- 4.4
-
NHttpConnectionBase
protected NHttpConnectionBase(IOSession session, int bufferSize, int fragmentSizeHint, ByteBufferAllocator allocator, java.nio.charset.CharsetDecoder charDecoder, java.nio.charset.CharsetEncoder charEncoder, ContentLengthStrategy incomingContentStrategy, ContentLengthStrategy outgoingContentStrategy)
Creates new instance NHttpConnectionBase given the underlying I/O session.- Parameters:
session
- the underlying I/O session.bufferSize
- buffer size. Must be a positive number.fragmentSizeHint
- fragment size hint.allocator
- memory allocator. Ifnull
HeapByteBufferAllocator.INSTANCE
will be used.charDecoder
- decoder to be used for decoding HTTP protocol elements. Ifnull
simple type cast will be used for byte to char conversion.charEncoder
- encoder to be used for encoding HTTP protocol elements. Ifnull
simple type cast will be used for char to byte conversion.incomingContentStrategy
- incoming content length strategy. Ifnull
LaxContentLengthStrategy.INSTANCE
will be used.outgoingContentStrategy
- outgoing content length strategy. Ifnull
StrictContentLengthStrategy.INSTANCE
will be used.- Since:
- 4.3
-
-
Method Detail
-
setSession
private void setSession(IOSession session)
-
bind
protected void bind(IOSession session)
Binds the connection to a differentIOSession
. This may be necessary when the underlying I/O session gets upgraded with SSL/TLS encryption.- Since:
- 4.2
-
createIncomingContentStrategy
@Deprecated protected ContentLengthStrategy createIncomingContentStrategy()
Deprecated.(4.3) use constructor.- Since:
- 4.2
-
createOutgoingContentStrategy
@Deprecated protected ContentLengthStrategy createOutgoingContentStrategy()
Deprecated.(4.3) use constructor.- Since:
- 4.2
-
createTransportMetrics
@Deprecated protected HttpTransportMetricsImpl createTransportMetrics()
Deprecated.(4.3) no longer used.- Since:
- 4.1
-
createConnectionMetrics
@Deprecated protected HttpConnectionMetricsImpl createConnectionMetrics(HttpTransportMetrics inTransportMetric, HttpTransportMetrics outTransportMetric)
Deprecated.(4.3) use decorator to add additional metrics.- Since:
- 4.1
-
getStatus
public int getStatus()
Description copied from interface:NHttpConnection
Returns status of the connection:NHttpConnection.ACTIVE
: connection is active.NHttpConnection.CLOSING
: connection is being closed.NHttpConnection.CLOSED
: connection has been closed.- Specified by:
getStatus
in interfaceNHttpConnection
- Returns:
- connection status.
-
getContext
public HttpContext getContext()
Description copied from interface:NHttpConnection
Returns an HTTP execution context associated with this connection.- Specified by:
getContext
in interfaceNHttpConnection
- Returns:
- HTTP context
-
getHttpRequest
public HttpRequest getHttpRequest()
Description copied from interface:NHttpConnection
Returns the current HTTP request if one is being received / transmitted. Otherwise returnsnull
.- Specified by:
getHttpRequest
in interfaceNHttpConnection
- Returns:
- HTTP request, if available,
null
otherwise.
-
getHttpResponse
public HttpResponse getHttpResponse()
Description copied from interface:NHttpConnection
Returns the current HTTP response if one is being received / transmitted. Otherwise returnsnull
.- Specified by:
getHttpResponse
in interfaceNHttpConnection
- Returns:
- HTTP response, if available,
null
otherwise.
-
requestInput
public void requestInput()
Description copied from interface:IOControl
Requests event notifications to be triggered when the underlying channel is ready for input operations.- Specified by:
requestInput
in interfaceIOControl
-
requestOutput
public void requestOutput()
Description copied from interface:IOControl
Requests event notifications to be triggered when the underlying channel is ready for output operations.- Specified by:
requestOutput
in interfaceIOControl
-
suspendInput
public void suspendInput()
Description copied from interface:IOControl
Suspends event notifications about the underlying channel being ready for input operations.- Specified by:
suspendInput
in interfaceIOControl
-
suspendOutput
public void suspendOutput()
Description copied from interface:IOControl
Suspends event notifications about the underlying channel being ready for output operations.- Specified by:
suspendOutput
in interfaceIOControl
-
prepareDecoder
protected HttpEntity prepareDecoder(HttpMessage message) throws HttpException
Initializes a specificContentDecoder
implementation based on the properties of the givenHttpMessage
and generates an instance ofHttpEntity
matching the properties of the content decoder.- Parameters:
message
- the HTTP message.- Returns:
- HTTP entity.
- Throws:
HttpException
- in case of an HTTP protocol violation.
-
createContentDecoder
protected ContentDecoder createContentDecoder(long len, java.nio.channels.ReadableByteChannel channel, SessionInputBuffer buffer, HttpTransportMetricsImpl metrics)
Factory method forContentDecoder
instances.- Parameters:
len
- content length, if known,ContentLengthStrategy.CHUNKED
orContentLengthStrategy.IDENTITY
, if unknown.channel
- the session channel.buffer
- the session buffer.metrics
- transport metrics.- Returns:
- content decoder.
- Since:
- 4.1
-
prepareEncoder
protected void prepareEncoder(HttpMessage message) throws HttpException
Initializes a specificContentEncoder
implementation based on the properties of the givenHttpMessage
.- Parameters:
message
- the HTTP message.- Throws:
HttpException
- in case of an HTTP protocol violation.
-
createContentEncoder
protected ContentEncoder createContentEncoder(long len, java.nio.channels.WritableByteChannel channel, SessionOutputBuffer buffer, HttpTransportMetricsImpl metrics)
Factory method forContentEncoder
instances.- Parameters:
len
- content length, if known,ContentLengthStrategy.CHUNKED
orContentLengthStrategy.IDENTITY
, if unknown.channel
- the session channel.buffer
- the session buffer.metrics
- transport metrics.- Returns:
- content encoder.
- Since:
- 4.1
-
hasBufferedInput
public boolean hasBufferedInput()
Description copied from interface:SessionBufferStatus
Determines if the session input buffer contains data.- Specified by:
hasBufferedInput
in interfaceSessionBufferStatus
- Returns:
true
if the session input buffer contains data,false
otherwise.
-
hasBufferedOutput
public boolean hasBufferedOutput()
Description copied from interface:SessionBufferStatus
Determines if the session output buffer contains data.- Specified by:
hasBufferedOutput
in interfaceSessionBufferStatus
- Returns:
true
if the session output buffer contains data,false
otherwise.
-
assertNotClosed
protected void assertNotClosed() throws ConnectionClosedException
Assets if the connection is still open.- Throws:
ConnectionClosedException
- in case the connection has already been closed.
-
close
public void close() throws java.io.IOException
Description copied from interface:HttpConnection
Closes this connection gracefully. This method will attempt to flush the internal output buffer prior to closing the underlying socket. This method MUST NOT be called from a different thread to force shutdown of the connection. Useshutdown
instead.- Specified by:
close
in interfacejava.lang.AutoCloseable
- Specified by:
close
in interfacejava.io.Closeable
- Specified by:
close
in interfaceHttpConnection
- Throws:
java.io.IOException
-
isOpen
public boolean isOpen()
Description copied from interface:HttpConnection
Checks if this connection is open.- Specified by:
isOpen
in interfaceHttpConnection
- Returns:
- true if it is open, false if it is closed.
-
isStale
public boolean isStale()
Description copied from interface:HttpConnection
Checks whether this connection has gone down. Network connections may get closed during some time of inactivity for several reasons. The next time a read is attempted on such a connection it will throw an IOException. This method tries to alleviate this inconvenience by trying to find out if a connection is still usable. Implementations may do that by attempting a read with a very small timeout. Thus this method may block for a small amount of time before returning a result. It is therefore an expensive operation.- Specified by:
isStale
in interfaceHttpConnection
- Returns:
true
if attempts to use this connection are likely to succeed, orfalse
if they are likely to fail and this connection should be closed
-
getLocalAddress
public java.net.InetAddress getLocalAddress()
- Specified by:
getLocalAddress
in interfaceHttpInetConnection
-
getLocalPort
public int getLocalPort()
- Specified by:
getLocalPort
in interfaceHttpInetConnection
-
getRemoteAddress
public java.net.InetAddress getRemoteAddress()
- Specified by:
getRemoteAddress
in interfaceHttpInetConnection
-
getRemotePort
public int getRemotePort()
- Specified by:
getRemotePort
in interfaceHttpInetConnection
-
setSocketTimeout
public void setSocketTimeout(int timeout)
Description copied from interface:HttpConnection
Sets the socket timeout value.- Specified by:
setSocketTimeout
in interfaceHttpConnection
- Parameters:
timeout
- timeout value in milliseconds
-
getSocketTimeout
public int getSocketTimeout()
Description copied from interface:HttpConnection
Returns the socket timeout value.- Specified by:
getSocketTimeout
in interfaceHttpConnection
- Returns:
- positive value in milliseconds if a timeout is set,
0
if timeout is disabled or-1
if timeout is undefined.
-
shutdown
public void shutdown() throws java.io.IOException
Description copied from interface:HttpConnection
Force-closes this connection. This is the only method of a connection which may be called from a different thread to terminate the connection. This method will not attempt to flush the transmitter's internal buffer prior to closing the underlying socket.- Specified by:
shutdown
in interfaceHttpConnection
- Specified by:
shutdown
in interfaceIOControl
- Throws:
java.io.IOException
- in an error occurs
-
getMetrics
public HttpConnectionMetrics getMetrics()
Description copied from interface:HttpConnection
Returns a collection of connection metrics.- Specified by:
getMetrics
in interfaceHttpConnection
- Returns:
- HttpConnectionMetrics
-
toString
public java.lang.String toString()
- Overrides:
toString
in classjava.lang.Object
-
getSocket
public java.net.Socket getSocket()
Description copied from interface:SocketAccessor
Return the underlying socket- Specified by:
getSocket
in interfaceSocketAccessor
- Returns:
- - the underlying Socket, may be
null
.
-
-