Class HttpServerUpgradeHandler
java.lang.Object
io.netty.channel.ChannelHandlerAdapter
io.netty.channel.ChannelInboundHandlerAdapter
io.netty.handler.codec.MessageToMessageDecoder<HttpObject>
io.netty.handler.codec.MessageAggregator<HttpObject, HttpMessage, HttpContent, FullHttpMessage>
io.netty.handler.codec.http.HttpObjectAggregator
io.netty.handler.codec.http.HttpServerUpgradeHandler
- All Implemented Interfaces:
ChannelHandler, ChannelInboundHandler
A server-side handler that receives HTTP requests and optionally performs a protocol switch if
the requested protocol is supported. Once an upgrade is performed, this handler removes itself
from the pipeline.
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic interfaceThe source codec that is used in the pipeline initially.static interfaceA codec that the source can be upgraded to.static interfaceCreates a newHttpServerUpgradeHandler.UpgradeCodecfor the requested protocol name.static final classUser event that is fired to notify about the completion of an HTTP upgrade to another protocol.Nested classes/interfaces inherited from interface ChannelHandler
ChannelHandler.SharableModifier and TypeInterfaceDescriptionstatic @interfaceIndicates that the same instance of the annotatedChannelHandlercan be added to one or moreChannelPipelines multiple times without a race condition. -
Constructor Summary
ConstructorsConstructorDescriptionHttpServerUpgradeHandler(HttpServerUpgradeHandler.SourceCodec sourceCodec, HttpServerUpgradeHandler.UpgradeCodecFactory upgradeCodecFactory) Constructs the upgrader with the supported codecs.HttpServerUpgradeHandler(HttpServerUpgradeHandler.SourceCodec sourceCodec, HttpServerUpgradeHandler.UpgradeCodecFactory upgradeCodecFactory, int maxContentLength) Constructs the upgrader with the supported codecs.HttpServerUpgradeHandler(HttpServerUpgradeHandler.SourceCodec sourceCodec, HttpServerUpgradeHandler.UpgradeCodecFactory upgradeCodecFactory, int maxContentLength, boolean validateHeaders) Constructs the upgrader with the supported codecs.HttpServerUpgradeHandler(HttpServerUpgradeHandler.SourceCodec sourceCodec, HttpServerUpgradeHandler.UpgradeCodecFactory upgradeCodecFactory, int maxContentLength, HttpHeadersFactory headersFactory, HttpHeadersFactory trailersFactory) Constructs the upgrader with the supported codecs.HttpServerUpgradeHandler(HttpServerUpgradeHandler.SourceCodec sourceCodec, HttpServerUpgradeHandler.UpgradeCodecFactory upgradeCodecFactory, int maxContentLength, HttpHeadersFactory headersFactory, HttpHeadersFactory trailersFactory, boolean removeAfterFirstRequest) Constructs the upgrader with the supported codecs. -
Method Summary
Modifier and TypeMethodDescriptionprotected FullHttpMessagebeginAggregation(HttpMessage start, ByteBuf content) Creates a new aggregated message from the specified start message and the specified content.protected voiddecode(ChannelHandlerContext ctx, HttpObject msg, List<Object> out) Decode from one message to an other.protected booleanDetermines whether the specified upgradeHttpRequestshould be handled by this handler or not.Methods inherited from class HttpObjectAggregator
aggregate, closeAfterContinueResponse, finishAggregation, handleOversizedMessage, ignoreContentAfterContinueResponse, isAggregated, isContentLengthInvalid, isContentMessage, isLastContentMessage, isStartMessage, newContinueResponseModifier and TypeMethodDescriptionprotected voidaggregate(FullHttpMessage aggregated, HttpContent content) Transfers the information provided by the specified content message to the specified aggregated message.protected booleanDetermine if the channel should be closed after the result ofMessageAggregator.newContinueResponse(Object, int, ChannelPipeline)is written.protected voidfinishAggregation(FullHttpMessage aggregated) Invoked when the specifiedaggregatedmessage is about to be passed to the next handler in the pipeline.protected voidhandleOversizedMessage(ChannelHandlerContext ctx, HttpMessage oversized) Invoked when an incoming request exceeds the maximum content length.protected booleanDetermine if all objects for the current request/response should be ignored or not.protected booleanisAggregated(HttpObject msg) Returnstrueif and only if the specified message is already aggregated.protected booleanisContentLengthInvalid(HttpMessage start, int maxContentLength) Determine if the messagestart's content length is known, and if it greater thanmaxContentLength.protected booleanReturnstrueif and only if the specified message is a content message.protected booleanReturnstrueif and only if the specified message is the last content message.protected booleanisStartMessage(HttpObject msg) Returnstrueif and only if the specified message is a start message.protected ObjectnewContinueResponse(HttpMessage start, int maxContentLength, ChannelPipeline pipeline) Returns the 'continue response' for the specified start message if necessary.Methods inherited from class MessageAggregator
acceptInboundMessage, channelInactive, channelReadComplete, ctx, handlerAdded, handlerRemoved, isHandlingOversizedMessage, maxContentLength, maxCumulationBufferComponents, releaseCurrentMessage, setMaxCumulationBufferComponentsModifier and TypeMethodDescriptionbooleanReturnstrueif the given message should be handled.voidCallsChannelHandlerContext.fireChannelInactive()to forward to the nextChannelInboundHandlerin theChannelPipeline.voidCallsChannelHandlerContext.fireChannelReadComplete()to forward to the nextChannelInboundHandlerin theChannelPipeline.protected final ChannelHandlerContextctx()voidDo nothing by default, sub-classes may override this method.voidDo nothing by default, sub-classes may override this method.final booleanDeprecated.This method will be removed in future releases.final intReturns the maximum allowed length of the aggregated message in bytes.final intReturns the maximum number of components in the cumulation buffer.protected final voidfinal voidsetMaxCumulationBufferComponents(int maxCumulationBufferComponents) Sets the maximum number of components in the cumulation buffer.Methods inherited from class MessageToMessageDecoder
channelReadModifier and TypeMethodDescriptionvoidchannelRead(ChannelHandlerContext ctx, Object msg) CallsChannelHandlerContext.fireChannelRead(Object)to forward to the nextChannelInboundHandlerin theChannelPipeline.Methods inherited from class ChannelInboundHandlerAdapter
channelActive, channelRegistered, channelUnregistered, channelWritabilityChanged, exceptionCaught, userEventTriggeredModifier and TypeMethodDescriptionvoidCallsChannelHandlerContext.fireChannelActive()to forward to the nextChannelInboundHandlerin theChannelPipeline.voidCallsChannelHandlerContext.fireChannelRegistered()to forward to the nextChannelInboundHandlerin theChannelPipeline.voidCallsChannelHandlerContext.fireChannelUnregistered()to forward to the nextChannelInboundHandlerin theChannelPipeline.voidCallsChannelHandlerContext.fireChannelWritabilityChanged()to forward to the nextChannelInboundHandlerin theChannelPipeline.voidexceptionCaught(ChannelHandlerContext ctx, Throwable cause) CallsChannelHandlerContext.fireExceptionCaught(Throwable)to forward to the nextChannelHandlerin theChannelPipeline.voiduserEventTriggered(ChannelHandlerContext ctx, Object evt) CallsChannelHandlerContext.fireUserEventTriggered(Object)to forward to the nextChannelInboundHandlerin theChannelPipeline.Methods inherited from class ChannelHandlerAdapter
ensureNotSharable, isSharableModifier and TypeMethodDescriptionprotected voidbooleanReturntrueif the implementation isChannelHandler.Sharableand so can be added to differentChannelPipelines.
-
Constructor Details
-
HttpServerUpgradeHandler
public HttpServerUpgradeHandler(HttpServerUpgradeHandler.SourceCodec sourceCodec, HttpServerUpgradeHandler.UpgradeCodecFactory upgradeCodecFactory) Constructs the upgrader with the supported codecs.The handler instantiated by this constructor will reject an upgrade request with non-empty content. It should not be a concern because an upgrade request is most likely a GET request. If you have a client that sends a non-GET upgrade request, please consider using
HttpServerUpgradeHandler(SourceCodec, UpgradeCodecFactory, int)to specify the maximum length of the content of an upgrade request.- Parameters:
sourceCodec- the codec that is being used initiallyupgradeCodecFactory- the factory that creates a new upgrade codec for one of the requested upgrade protocols
-
HttpServerUpgradeHandler
public HttpServerUpgradeHandler(HttpServerUpgradeHandler.SourceCodec sourceCodec, HttpServerUpgradeHandler.UpgradeCodecFactory upgradeCodecFactory, int maxContentLength) Constructs the upgrader with the supported codecs.- Parameters:
sourceCodec- the codec that is being used initiallyupgradeCodecFactory- the factory that creates a new upgrade codec for one of the requested upgrade protocolsmaxContentLength- the maximum length of the content of an upgrade request
-
HttpServerUpgradeHandler
public HttpServerUpgradeHandler(HttpServerUpgradeHandler.SourceCodec sourceCodec, HttpServerUpgradeHandler.UpgradeCodecFactory upgradeCodecFactory, int maxContentLength, boolean validateHeaders) Constructs the upgrader with the supported codecs.- Parameters:
sourceCodec- the codec that is being used initiallyupgradeCodecFactory- the factory that creates a new upgrade codec for one of the requested upgrade protocolsmaxContentLength- the maximum length of the content of an upgrade requestvalidateHeaders- validate the header names and values of the upgrade response.
-
HttpServerUpgradeHandler
public HttpServerUpgradeHandler(HttpServerUpgradeHandler.SourceCodec sourceCodec, HttpServerUpgradeHandler.UpgradeCodecFactory upgradeCodecFactory, int maxContentLength, HttpHeadersFactory headersFactory, HttpHeadersFactory trailersFactory) Constructs the upgrader with the supported codecs.- Parameters:
sourceCodec- the codec that is being used initiallyupgradeCodecFactory- the factory that creates a new upgrade codec for one of the requested upgrade protocolsmaxContentLength- the maximum length of the content of an upgrade requestheadersFactory- TheHttpHeadersFactoryto use for headers. The recommended default factory isDefaultHttpHeadersFactory.headersFactory().trailersFactory- TheHttpHeadersFactoryto use for trailers. The recommended default factory isDefaultHttpHeadersFactory.trailersFactory().
-
HttpServerUpgradeHandler
public HttpServerUpgradeHandler(HttpServerUpgradeHandler.SourceCodec sourceCodec, HttpServerUpgradeHandler.UpgradeCodecFactory upgradeCodecFactory, int maxContentLength, HttpHeadersFactory headersFactory, HttpHeadersFactory trailersFactory, boolean removeAfterFirstRequest) Constructs the upgrader with the supported codecs.- Parameters:
sourceCodec- the codec that is being used initiallyupgradeCodecFactory- the factory that creates a new upgrade codec for one of the requested upgrade protocolsmaxContentLength- the maximum length of the content of an upgrade requestheadersFactory- TheHttpHeadersFactoryto use for headers. The recommended default factory isDefaultHttpHeadersFactory.headersFactory().trailersFactory- TheHttpHeadersFactoryto use for trailers. The recommended default factory isDefaultHttpHeadersFactory.trailersFactory().removeAfterFirstRequest-trueif the handler should remove itself after the first request was processed (even if it was not an upgrade request),falseotherwise.
-
-
Method Details
-
decode
Description copied from class:MessageToMessageDecoderDecode from one message to an other. This method will be called for each written message that can be handled by this decoder.- Overrides:
decodein classMessageAggregator<HttpObject, HttpMessage, HttpContent, FullHttpMessage>- Parameters:
ctx- theChannelHandlerContextwhich thisMessageToMessageDecoderbelongs tomsg- the message to decode to an other oneout- theListto which decoded messages should be added- Throws:
Exception- is thrown if an error occurs
-
beginAggregation
Description copied from class:MessageAggregatorCreates a new aggregated message from the specified start message and the specified content. If the start message implementsByteBufHolder, its content is appended to the specifiedcontent. This aggregator will continue to append the received content to the specifiedcontent.- Overrides:
beginAggregationin classHttpObjectAggregator- Throws:
Exception
-
shouldHandleUpgradeRequest
Determines whether the specified upgradeHttpRequestshould be handled by this handler or not. This method will be invoked only when the request contains anUpgradeheader. It always returnstrueby default, which means any request with anUpgradeheader will be handled. You can override this method to ignore certainUpgradeheaders, for example:@Override protected boolean isUpgradeRequest(HttpRequest req) { // Do not handle WebSocket upgrades. return !req.headers().contains(HttpHeaderNames.UPGRADE, "websocket", false); }
-