Class HttpChannel
- All Implemented Interfaces:
Runnable
,HttpOutput.Interceptor
The state machine that processes a request/response cycle interpreting the HTTP and Servlet semantic.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interface
Listener forHttpChannel
events.static class
Deprecated. -
Constructor Summary
ConstructorsConstructorDescriptionHttpChannel
(ContextHandler contextHandler, ConnectionMetaData connectionMetaData) -
Method Summary
Modifier and TypeMethodDescriptionvoid
If a write or similar operation to this channel fails, then this method should be called.boolean
addListener
(HttpChannel.Listener listener) Deprecated.protected void
commit
(MetaData.Response info) void
protected boolean
eof()
Mark the channel's input as EOF.protected void
boolean
failAllContent
(Throwable failure) Fail all content that is currently stored within the channel.boolean
Fail the channel's input.long
long
Get the idle timeout.Return the local name of the connected channel.int
Return the Local Port of the connected channel.long
Get the number of requests handled by this connection.Get return the HttpConfiguration server authority override.getState()
Deprecated.boolean
handle()
protected void
handleException
(Throwable failure) Sends an error 500, performing a special logic to detect whether the request is suspended, to avoid concurrent writes from the application.boolean
boolean
boolean
boolean
boolean
boolean
boolean
boolean
Notify the channel that content is needed.protected HttpInput
protected HttpOutput
void
onBadMessage
(BadMessageException failure) void
void
void
onRequest
(ContextHandler.CoreContextRequest coreRequest) Produce aHttpInput.Content
object with data currently stored within the channel.void
recycle()
boolean
removeListener
(HttpChannel.Listener listener) Deprecated.void
Reset the buffers.void
run()
void
send102Processing
(HttpFields headers) void
send103EarlyHints
(HttpFields headers) boolean
sendErrorOrAbort
(String message) boolean
sendResponse
(MetaData.Response info, ByteBuffer content, boolean complete) protected boolean
sendResponse
(MetaData.Response response, ByteBuffer content, boolean complete, Callback callback) void
void
setIdleTimeout
(long timeoutMs) Set the idle timeout.toString()
protected Throwable
Unwrap failure causes to find target classvoid
write
(ByteBuffer content, boolean complete, Callback callback) Non-Blocking write, committing the response if needed.
-
Constructor Details
-
HttpChannel
-
-
Method Details
-
getContextHandler
-
isSendError
public boolean isSendError() -
newHttpInput
-
getConnectionMetaData
-
needContent
public boolean needContent()Notify the channel that content is needed. If some content is immediately available, true is returned andproduceContent()
has to be called and will return a non-null object. If no content is immediately available, an attempt to produce content must be made; if new content has been produced, true is returned; otherwiseHttpInput.onContentProducible()
is called once some content arrives andproduceContent()
can be called without returningnull
. If a failure happens, thenHttpInput.onContentProducible()
will be called and an error content will return the error on the next call toproduceContent()
.- Returns:
- true if content is immediately available.
-
produceContent
Produce aHttpInput.Content
object with data currently stored within the channel. The produced content can be special (meaning callingHttpInput.Content.isSpecial()
returns true) if the channel reached a special state, like EOF or an error. Once a special content has been returned, all subsequent calls to this method will always return a special content of the same kind andneedContent()
will always return true. The returned content is "raw", i.e.: not decoded.- Returns:
- a
HttpInput.Content
object if one is immediately available without blocking, null otherwise.
-
failAllContent
Fail all content that is currently stored within the channel.- Parameters:
failure
- the failure to fail the content with.- Returns:
- true if EOF was reached while failing all content, false otherwise.
-
failed
Fail the channel's input.- Parameters:
failure
- the failure.- Returns:
- true if the channel needs to be rescheduled.
-
eof
protected boolean eof()Mark the channel's input as EOF.- Returns:
- true if the channel needs to be rescheduled.
-
newHttpOutput
-
getState
-
addListener
Deprecated.Add a transient Listener to the HttpChannel.Listeners added by this method will only be notified if the HttpChannel has been constructed with an instance of
HttpChannel.TransientListeners
as anAbstractConnector
provided listenerTransient listeners are removed after every request cycle
- Parameters:
listener
- the listener to add- Returns:
- true if the listener was added.
-
removeListener
Deprecated. -
getTransientListeners
Deprecated. -
getBytesWritten
public long getBytesWritten() -
getRequests
public long getRequests()Get the number of requests handled by this connection.- Returns:
- the number of requests handled by this connection
-
getConnector
-
getCommittedMetaData
-
getIdleTimeout
public long getIdleTimeout()Get the idle timeout.This is implemented as a call to
EndPoint.getIdleTimeout()
, but may be overridden by channels that have timeouts different from their connections.- Returns:
- the idle timeout (in milliseconds)
-
setIdleTimeout
public void setIdleTimeout(long timeoutMs) Set the idle timeout.This is implemented as a call to
EndPoint.setIdleTimeout(long)
, but may be overridden by channels that have timeouts different from their connections.- Parameters:
timeoutMs
- the idle timeout in milliseconds
-
getByteBufferPool
-
getHttpConfiguration
-
getServer
-
getCoreRequest
-
getRequest
-
getCoreResponse
-
getResponse
-
getConnection
-
getEndPoint
-
getLocalName
Return the local name of the connected channel.
This is the host name after the connector is bound and the connection is accepted.
Value can be overridden by
HttpConfiguration.setLocalAddress(SocketAddress)
.Note: some connectors are not based on IP networking, and default behavior here will result in a null return. Use
HttpConfiguration.setLocalAddress(SocketAddress)
to set the value to an acceptable host name.- Returns:
- the local name, or null
-
getLocalPort
public int getLocalPort()Return the Local Port of the connected channel.
This is the port the connector is bound to and is accepting connections on.
Value can be overridden by
HttpConfiguration.setLocalAddress(SocketAddress)
.Note: some connectors are not based on IP networking, and default behavior here will result in a value of 0 returned. Use
HttpConfiguration.setLocalAddress(SocketAddress)
to set the value to an acceptable port.- Returns:
- the local port, or 0 if unspecified
-
getLocalAddress
-
getRemoteAddress
-
getServerAuthority
Get return the HttpConfiguration server authority override.- Returns:
- return the HttpConfiguration server authority override
-
send102Processing
- Throws:
IOException
-
send103EarlyHints
- Throws:
IOException
-
recycle
public void recycle() -
run
public void run() -
handle
public boolean handle()- Returns:
- True if the channel is ready to continue handling (ie it is not suspended)
-
ensureConsumeAllOrNotPersistent
public void ensureConsumeAllOrNotPersistent() -
sendErrorOrAbort
- Parameters:
message
- the error message.- Returns:
- true if we have sent an error, false if we have aborted.
-
handleException
Sends an error 500, performing a special logic to detect whether the request is suspended, to avoid concurrent writes from the application.
It may happen that the application suspends, and then throws an exception, while an application spawned thread writes the response content; in such case, we attempt to commit the error directly bypassing the
ErrorHandler
mechanisms and the response OutputStream.- Parameters:
failure
- the Throwable that caused the problem
-
unwrap
Unwrap failure causes to find target class- Parameters:
failure
- The throwable to have its causes unwrappedtargets
- Exception classes that we should not unwrap- Returns:
- A target throwable or null
-
sendResponseAndComplete
public void sendResponseAndComplete() -
toString
-
onRequest
-
onProcess
-
onCompleted
public void onCompleted() -
onBadMessage
-
sendResponse
protected boolean sendResponse(MetaData.Response response, ByteBuffer content, boolean complete, Callback callback) -
sendResponse
public boolean sendResponse(MetaData.Response info, ByteBuffer content, boolean complete) throws IOException - Throws:
IOException
-
commit
-
isCommitted
public boolean isCommitted() -
isRequestCompleted
public boolean isRequestCompleted()- Returns:
- True if the request lifecycle is completed
-
isResponseCompleted
public boolean isResponseCompleted()- Returns:
- True if the response is completely written.
-
isPersistent
public boolean isPersistent() -
write
Non-Blocking write, committing the response if needed.
Called as last link in HttpOutput.Filter chain- Specified by:
write
in interfaceHttpOutput.Interceptor
- Parameters:
content
- the content buffer to writecomplete
- whether the content is complete for the responsecallback
- Callback when complete or failed
-
resetBuffer
public void resetBuffer()Description copied from interface:HttpOutput.Interceptor
Reset the buffers.If the Interceptor contains buffers then reset them.
- Specified by:
resetBuffer
in interfaceHttpOutput.Interceptor
-
getNextInterceptor
- Specified by:
getNextInterceptor
in interfaceHttpOutput.Interceptor
- Returns:
- The next Interceptor in the chain or null if this is the last Interceptor in the chain.
-
execute
-
getScheduler
-
isUseOutputDirectByteBuffers
public boolean isUseOutputDirectByteBuffers() -
abort
If a write or similar operation to this channel fails, then this method should be called.- Parameters:
failure
- the failure that caused the abort.
-
isTunnellingSupported
public boolean isTunnellingSupported() -
getTunnellingEndPoint
-