Package io.undertow.server
Class ServerConnection
- java.lang.Object
-
- io.undertow.util.AbstractAttachable
-
- io.undertow.server.ServerConnection
-
- All Implemented Interfaces:
Attachable,java.io.Closeable,java.lang.AutoCloseable,java.nio.channels.Channel,java.nio.channels.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 Modifier and Type Class Description static interfaceServerConnection.CloseListener
-
Constructor Summary
Constructors Constructor Description ServerConnection()
-
Method Summary
All Methods Instance Methods Abstract Methods Concrete Methods Deprecated Methods Modifier and Type Method Description abstract voidaddCloseListener(ServerConnection.CloseListener listener)Adds 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<java.nio.ByteBuffer>getBufferPool()Deprecated.abstract intgetBufferSize()abstract ByteBufferPoolgetByteBufferPool()longgetId()abstract org.xnio.XnioIoThreadgetIoThread()abstract java.net.SocketAddressgetLocalAddress()abstract <A extends java.net.SocketAddress>
AgetLocalAddress(java.lang.Class<A> type)abstract <T> TgetOption(org.xnio.Option<T> option)abstract java.net.SocketAddressgetPeerAddress()Returns the actual address of the remote connection.abstract <A extends java.net.SocketAddress>
AgetPeerAddress(java.lang.Class<A> type)Returns the actual address of the remote connection.java.lang.StringgetProtocolRequestId()protected abstract org.xnio.conduits.ConduitStreamSinkChannelgetSinkChannel()protected 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.ConduitStreamSourceChannelgetSourceChannel()javax.net.ssl.SSLSessiongetSslSession()Gets the SSLSession of the underlying connection, or null if SSL is not in use.abstract SSLSessionInfogetSslSessionInfo()Gets SSL information about the connection.abstract java.lang.StringgetTransportProtocol()Returns a string representation describing the protocol used to transmit messages on this connection.abstract org.xnio.OptionMapgetUndertowOptions()abstract org.xnio.XnioWorkergetWorker()protected abstract booleanisConnectSupported()abstract booleanisContinueResponseSupported()abstract booleanisOpen()booleanisPushSupported()abstract booleanisRequestTrailerFieldsSupported()protected abstract booleanisUpgradeSupported()protected abstract voidmaxEntitySizeUpdated(HttpServerExchange exchange)Callback that is invoked if the max entity size is updated.booleanpushResource(java.lang.String path, HttpString method, HeaderMap requestHeaders)Attempts to push a resource if this connection supports server push.booleanpushResource(java.lang.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.StreamConnectionupgradeChannel()Upgrade the connection, if allowed-
Methods inherited from class io.undertow.util.AbstractAttachable
addToAttachmentList, createAttachmentMap, getAttachment, getAttachmentList, putAttachment, removeAttachment
-
-
-
-
Method Detail
-
getId
public final long getId()
-
getProtocolRequestId
public java.lang.String getProtocolRequestId()
-
getBufferPool
@Deprecated public abstract org.xnio.Pool<java.nio.ByteBuffer> getBufferPool()
Deprecated.- Returns:
- The connections buffer pool
-
getByteBufferPool
public abstract ByteBufferPool 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
public abstract HttpServerExchange sendOutOfBandResponse(HttpServerExchange exchange)
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
public abstract void terminateRequestChannel(HttpServerExchange exchange)
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()
- Specified by:
isOpenin interfacejava.nio.channels.Channel- Returns:
- true if the connection is open
-
supportsOption
public abstract boolean supportsOption(org.xnio.Option<?> option)
- Specified by:
supportsOptionin interfaceorg.xnio.channels.Configurable
-
getOption
public abstract <T> T getOption(org.xnio.Option<T> option) throws java.io.IOException- Specified by:
getOptionin interfaceorg.xnio.channels.Configurable- Throws:
java.io.IOException
-
setOption
public abstract <T> T setOption(org.xnio.Option<T> option, T value) throws java.lang.IllegalArgumentException, java.io.IOException- Specified by:
setOptionin interfaceorg.xnio.channels.Configurable- Throws:
java.lang.IllegalArgumentExceptionjava.io.IOException
-
close
public abstract void close() throws java.io.IOException- Specified by:
closein interfacejava.lang.AutoCloseable- Specified by:
closein interfacejava.nio.channels.Channel- Specified by:
closein interfacejava.io.Closeable- Specified by:
closein interfaceorg.xnio.channels.CloseableChannel- Specified by:
closein interfacejava.nio.channels.InterruptibleChannel- Throws:
java.io.IOException
-
getSslSession
public javax.net.ssl.SSLSession 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
public abstract java.net.SocketAddress 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
public abstract <A extends java.net.SocketAddress> A getPeerAddress(java.lang.Class<A> type)
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
public abstract java.net.SocketAddress getLocalAddress()
- Specified by:
getLocalAddressin interfaceorg.xnio.channels.BoundChannel
-
getLocalAddress
public abstract <A extends java.net.SocketAddress> A getLocalAddress(java.lang.Class<A> type)
- Specified by:
getLocalAddressin interfaceorg.xnio.channels.BoundChannel
-
getUndertowOptions
public abstract org.xnio.OptionMap getUndertowOptions()
-
getBufferSize
public abstract int getBufferSize()
-
getSslSessionInfo
public abstract SSLSessionInfo 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
public abstract void setSslSessionInfo(SSLSessionInfo sessionInfo)
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
public abstract void addCloseListener(ServerConnection.CloseListener listener)
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
protected abstract void exchangeComplete(HttpServerExchange exchange)
Invoked when the exchange is complete.
-
setUpgradeListener
protected abstract void setUpgradeListener(HttpUpgradeListener upgradeListener)
-
setConnectListener
protected abstract void setConnectListener(HttpUpgradeListener connectListener)
-
maxEntitySizeUpdated
protected abstract void maxEntitySizeUpdated(HttpServerExchange exchange)
Callback that is invoked if the max entity size is updated.- Parameters:
exchange- The current exchange
-
getTransportProtocol
public abstract java.lang.String getTransportProtocol()
Returns a string representation describing the protocol used to transmit messages on this connection.- Returns:
- the transport protocol
-
pushResource
public boolean pushResource(java.lang.String path, HttpString method, HeaderMap requestHeaders)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(java.lang.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()
-
-