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 voidAdds a close listener, than will be invoked with the connection is closedabstract voidclose()protected abstract voidexchangeComplete(HttpServerExchange exchange) Invoked when the exchange is complete.abstract org.xnio.Pool<ByteBuffer>Deprecated.abstract intabstract ByteBufferPoolfinal longgetId()abstract org.xnio.XnioIoThreadabstract SocketAddressabstract <A extends SocketAddress>
AgetLocalAddress(Class<A> type) abstract <T> TgetOption(org.xnio.Option<T> option) abstract SocketAddressReturns 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.ConduitStreamSinkChannelprotected abstract org.xnio.conduits.StreamSinkConduitgetSinkConduit(HttpServerExchange exchange, org.xnio.conduits.StreamSinkConduit conduit) Gets the sink conduit that should be used for this request.protected abstract org.xnio.conduits.ConduitStreamSourceChannelGets the SSLSession of the underlying connection, or null if SSL is not in use.abstract SSLSessionInfoGets SSL information about the connection.abstract StringReturns a string representation describing the protocol used to transmit messages on this connection.abstract org.xnio.OptionMapabstract org.xnio.XnioWorkerprotected abstract booleanabstract booleanabstract booleanisOpen()booleanabstract booleanprotected abstract booleanprotected abstract voidmaxEntitySizeUpdated(HttpServerExchange exchange) Callback that is invoked if the max entity size is updated.booleanpushResource(String path, HttpString method, HeaderMap requestHeaders) Attempts to push a resource if this connection supports server push.booleanpushResource(String path, HttpString method, HeaderMap requestHeaders, HttpHandler handler) Attempts to push a resource if this connection supports server push.abstract HttpServerExchangesendOutOfBandResponse(HttpServerExchange exchange) Sends an out of band response, such as a HTTP 100-continue response.protected abstract voidsetConnectListener(HttpUpgradeListener connectListener) abstract <T> TsetOption(org.xnio.Option<T> option, T value) abstract voidsetSslSessionInfo(SSLSessionInfo sessionInfo) Sets the current SSL information.protected abstract voidsetUpgradeListener(HttpUpgradeListener upgradeListener) abstract booleansupportsOption(org.xnio.Option<?> option) abstract voidterminateRequestChannel(HttpServerExchange exchange) Invoked when the exchange is complete, and there is still data in the request channel.protected abstract org.xnio.StreamConnectionUpgrade the connection, if allowedMethods inherited from class io.undertow.util.AbstractAttachable
addToAttachmentList, createAttachmentMap, getAttachment, getAttachmentList, putAttachment, removeAttachmentMethods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface org.xnio.channels.ConnectedChannel
getCloseSetter
-
Constructor Details
-
ServerConnection
public ServerConnection()
-
-
Method Details
-
getId
public final long getId() -
getProtocolRequestId
-
getBufferPool
Deprecated.- Returns:
- The connections buffer pool
-
getByteBufferPool
- Returns:
- The connections buffer pool
-
getWorker
public abstract org.xnio.XnioWorker getWorker()- Specified by:
getWorkerin interfaceorg.xnio.channels.CloseableChannel- Returns:
- The connections worker
-
getIoThread
public abstract org.xnio.XnioIoThread getIoThread()- Specified by:
getIoThreadin 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:
trueif 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:
supportsOptionin interfaceorg.xnio.channels.Configurable
-
getOption
- Specified by:
getOptionin interfaceorg.xnio.channels.Configurable- Throws:
IOException
-
setOption
public abstract <T> T setOption(org.xnio.Option<T> option, T value) throws IllegalArgumentException, IOException - Specified by:
setOptionin interfaceorg.xnio.channels.Configurable- Throws:
IllegalArgumentExceptionIOException
-
close
- Specified by:
closein interfaceAutoCloseable- Specified by:
closein interfaceChannel- Specified by:
closein interfaceCloseable- Specified by:
closein interfaceorg.xnio.channels.CloseableChannel- Specified by:
closein 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:
getPeerAddressin 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:
getPeerAddressin 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:
getLocalAddressin interfaceorg.xnio.channels.BoundChannel
-
getLocalAddress
- Specified by:
getLocalAddressin 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:
trueif 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:
trueif 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. TheHttpHandlerpassed in will be used to generate the pushed response- Parameters:
path- The path of the resourcemethod- The request methodrequestHeaders- The request headers- Returns:
trueif the server attempted the push, false otherwise
-
isPushSupported
public boolean isPushSupported() -
isRequestTrailerFieldsSupported
public abstract boolean isRequestTrailerFieldsSupported()
-