Package io.undertow.server
Class ServerConnection
java.lang.Object
io.undertow.util.AbstractAttachable
io.undertow.server.ServerConnection
- All Implemented Interfaces:
Attachable
,Closeable
,AutoCloseable
,Channel
,InterruptibleChannel
,org.xnio.channels.BoundChannel
,org.xnio.channels.CloseableChannel
,org.xnio.channels.Configurable
,org.xnio.channels.ConnectedChannel
- Direct Known Subclasses:
AbstractServerConnection
,Http2ServerConnection
public abstract class ServerConnection
extends AbstractAttachable
implements org.xnio.channels.ConnectedChannel
A server connection.
- Author:
- Stuart Douglas
-
Nested Class Summary
Nested Classes -
Field Summary
Fields inherited from interface org.xnio.channels.Configurable
EMPTY
-
Constructor Summary
Constructors -
Method Summary
Modifier and TypeMethodDescriptionabstract void
Adds a close listener, than will be invoked with the connection is closedabstract void
close()
protected abstract void
exchangeComplete
(HttpServerExchange exchange) Invoked when the exchange is complete.abstract org.xnio.Pool<ByteBuffer>
Deprecated.abstract int
abstract ByteBufferPool
abstract org.xnio.XnioIoThread
abstract SocketAddress
abstract <A extends SocketAddress>
AgetLocalAddress
(Class<A> type) abstract <T> T
getOption
(org.xnio.Option<T> option) abstract SocketAddress
Returns the actual address of the remote connection.abstract <A extends SocketAddress>
AgetPeerAddress
(Class<A> type) Returns the actual address of the remote connection.protected abstract org.xnio.conduits.ConduitStreamSinkChannel
protected abstract org.xnio.conduits.StreamSinkConduit
getSinkConduit
(HttpServerExchange exchange, org.xnio.conduits.StreamSinkConduit conduit) Gets the sink conduit that should be used for this request.protected abstract org.xnio.conduits.ConduitStreamSourceChannel
Gets the SSLSession of the underlying connection, or null if SSL is not in use.abstract SSLSessionInfo
Gets SSL information about the connection.abstract String
Returns a string representation describing the protocol used to transmit messages on this connection.abstract org.xnio.OptionMap
abstract org.xnio.XnioWorker
protected abstract boolean
abstract boolean
abstract boolean
isOpen()
boolean
abstract boolean
protected abstract boolean
protected abstract void
maxEntitySizeUpdated
(HttpServerExchange exchange) Callback that is invoked if the max entity size is updated.boolean
pushResource
(String path, HttpString method, HeaderMap requestHeaders) Attempts to push a resource if this connection supports server push.boolean
pushResource
(String path, HttpString method, HeaderMap requestHeaders, HttpHandler handler) Attempts to push a resource if this connection supports server push.abstract HttpServerExchange
sendOutOfBandResponse
(HttpServerExchange exchange) Sends an out of band response, such as a HTTP 100-continue response.protected abstract void
setConnectListener
(HttpUpgradeListener connectListener) abstract <T> T
setOption
(org.xnio.Option<T> option, T value) abstract void
setSslSessionInfo
(SSLSessionInfo sessionInfo) Sets the current SSL information.protected abstract void
setUpgradeListener
(HttpUpgradeListener upgradeListener) abstract boolean
supportsOption
(org.xnio.Option<?> option) abstract void
terminateRequestChannel
(HttpServerExchange exchange) Invoked when the exchange is complete, and there is still data in the request channel.protected abstract org.xnio.StreamConnection
Upgrade the connection, if allowedMethods inherited from class io.undertow.util.AbstractAttachable
addToAttachmentList, createAttachmentMap, getAttachment, getAttachmentList, putAttachment, removeAttachment
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
Methods inherited from interface org.xnio.channels.ConnectedChannel
getCloseSetter
-
Constructor Details
-
ServerConnection
public ServerConnection()
-
-
Method Details
-
getBufferPool
Deprecated.- Returns:
- The connections buffer pool
-
getByteBufferPool
- Returns:
- The connections buffer pool
-
getWorker
public abstract org.xnio.XnioWorker getWorker()- Specified by:
getWorker
in interfaceorg.xnio.channels.CloseableChannel
- Returns:
- The connections worker
-
getIoThread
public abstract org.xnio.XnioIoThread getIoThread()- Specified by:
getIoThread
in interfaceorg.xnio.channels.CloseableChannel
- Returns:
- The IO thread associated with the connection
-
sendOutOfBandResponse
Sends an out of band response, such as a HTTP 100-continue response. WARNING: do not attempt to write to the current exchange until the out of band exchange has been fully written. Doing so may have unexpected results. TODO: this needs more thought.- Parameters:
exchange
- The current exchange- Returns:
- The out of band exchange.
-
isContinueResponseSupported
public abstract boolean isContinueResponseSupported()- Returns:
true
if this connection supports sending a 100-continue response
-
terminateRequestChannel
Invoked when the exchange is complete, and there is still data in the request channel. Some implementations (such as SPDY and HTTP2) have more efficient ways to drain the request than simply reading all data (e.g. RST_STREAM). After this method is invoked the stream will be drained normally.- Parameters:
exchange
- The current exchange.
-
isOpen
public abstract boolean isOpen() -
supportsOption
public abstract boolean supportsOption(org.xnio.Option<?> option) - Specified by:
supportsOption
in interfaceorg.xnio.channels.Configurable
-
getOption
- Specified by:
getOption
in interfaceorg.xnio.channels.Configurable
- Throws:
IOException
-
setOption
public abstract <T> T setOption(org.xnio.Option<T> option, T value) throws IllegalArgumentException, IOException - Specified by:
setOption
in interfaceorg.xnio.channels.Configurable
- Throws:
IllegalArgumentException
IOException
-
close
- Specified by:
close
in interfaceAutoCloseable
- Specified by:
close
in interfaceChannel
- Specified by:
close
in interfaceCloseable
- Specified by:
close
in interfaceorg.xnio.channels.CloseableChannel
- Specified by:
close
in interfaceInterruptibleChannel
- Throws:
IOException
-
getSslSession
Gets the SSLSession of the underlying connection, or null if SSL is not in use. Note that for client cert authgetSslSessionInfo()
should be used instead, as it takes into account other information potentially provided by load balancers that terminate SSL- Returns:
- The SSLSession of the connection
-
getPeerAddress
Returns the actual address of the remote connection. This will not take things like X-Forwarded-for into account.- Specified by:
getPeerAddress
in interfaceorg.xnio.channels.ConnectedChannel
- Returns:
- The address of the remote peer
-
getPeerAddress
Returns the actual address of the remote connection. This will not take things like X-Forwarded-for into account.- Specified by:
getPeerAddress
in interfaceorg.xnio.channels.ConnectedChannel
- Type Parameters:
A
- The address type- Parameters:
type
- The type of address to return- Returns:
- The remote endpoint address
-
getLocalAddress
- Specified by:
getLocalAddress
in interfaceorg.xnio.channels.BoundChannel
-
getLocalAddress
- Specified by:
getLocalAddress
in interfaceorg.xnio.channels.BoundChannel
-
getUndertowOptions
public abstract org.xnio.OptionMap getUndertowOptions() -
getBufferSize
public abstract int getBufferSize() -
getSslSessionInfo
Gets SSL information about the connection. This could represent the actual client connection, or could be providing SSL information that was provided by a front end proxy.- Returns:
- SSL information about the connection
-
setSslSessionInfo
Sets the current SSL information. This can be used by handlers to setup SSL information that was provided by a front end proxy. If this is being set of a per request basis then you must ensure that it is either cleared by an exchange completion listener at the end of the request, or is always set for every request. Otherwise it is possible to SSL information to 'leak' between requests.- Parameters:
sessionInfo
- The ssl session information
-
addCloseListener
Adds a close listener, than will be invoked with the connection is closed- Parameters:
listener
- The close listener
-
upgradeChannel
protected abstract org.xnio.StreamConnection upgradeChannel()Upgrade the connection, if allowed- Returns:
- The StreamConnection that should be passed to the upgrade handler
-
getSinkChannel
protected abstract org.xnio.conduits.ConduitStreamSinkChannel getSinkChannel() -
getSourceChannel
protected abstract org.xnio.conduits.ConduitStreamSourceChannel getSourceChannel() -
getSinkConduit
protected abstract org.xnio.conduits.StreamSinkConduit getSinkConduit(HttpServerExchange exchange, org.xnio.conduits.StreamSinkConduit conduit) Gets the sink conduit that should be used for this request. This allows the connection to apply any per-request conduit wrapping that is required, without adding to the response wrappers array. There is no corresponding method for source conduits, as in general conduits can be directly inserted into the connection after the request has been read.- Returns:
- The source conduit
-
isUpgradeSupported
protected abstract boolean isUpgradeSupported()- Returns:
- true if this connection supports HTTP upgrade
-
isConnectSupported
protected abstract boolean isConnectSupported()- Returns:
true
if this connection supports the HTTP CONNECT verb
-
exchangeComplete
Invoked when the exchange is complete. -
setUpgradeListener
-
setConnectListener
-
maxEntitySizeUpdated
Callback that is invoked if the max entity size is updated.- Parameters:
exchange
- The current exchange
-
getTransportProtocol
Returns a string representation describing the protocol used to transmit messages on this connection.- Returns:
- the transport protocol
-
pushResource
Attempts to push a resource if this connection supports server push. Otherwise the request is ignored. Note that push is always done on a best effort basis, even if this method returns true it is possible that the remote endpoint will reset the stream- Parameters:
path
- The path of the resourcemethod
- The request methodrequestHeaders
- The request headers- Returns:
true
if the server attempted the push, false otherwise
-
pushResource
public boolean pushResource(String path, HttpString method, HeaderMap requestHeaders, HttpHandler handler) Attempts to push a resource if this connection supports server push. Otherwise the request is ignored. Note that push is always done on a best effort basis, even if this method returns true it is possible that the remote endpoint will reset the stream. TheHttpHandler
passed in will be used to generate the pushed response- Parameters:
path
- The path of the resourcemethod
- The request methodrequestHeaders
- The request headers- Returns:
true
if the server attempted the push, false otherwise
-
isPushSupported
public boolean isPushSupported() -
isRequestTrailerFieldsSupported
public abstract boolean isRequestTrailerFieldsSupported()
-