channelRead() — netty Function Reference
Architecture documentation for the channelRead() function in WebSocketServerProtocolHandshakeHandler.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD da9f8d7e_bece_8a5d_bade_9cfafa7bf590["channelRead()"] 7859e8c2_d3fe_97c8_edc5_e54ff6dd5668["WebSocketServerProtocolHandshakeHandler"] da9f8d7e_bece_8a5d_bade_9cfafa7bf590 -->|defined in| 7859e8c2_d3fe_97c8_edc5_e54ff6dd5668 cd048d62_9bdc_867a_c433_c9a6c433bed0["isWebSocketPath()"] da9f8d7e_bece_8a5d_bade_9cfafa7bf590 -->|calls| cd048d62_9bdc_867a_c433_c9a6c433bed0 8fbbb8f9_4fbe_de99_c718_f954c3700023["applyHandshakeTimeout()"] da9f8d7e_bece_8a5d_bade_9cfafa7bf590 -->|calls| 8fbbb8f9_4fbe_de99_c718_f954c3700023 style da9f8d7e_bece_8a5d_bade_9cfafa7bf590 fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandshakeHandler.java lines 57–111
@Override
public void channelRead(final ChannelHandlerContext ctx, Object msg) throws Exception {
final HttpObject httpObject = (HttpObject) msg;
if (httpObject instanceof HttpRequest) {
final HttpRequest req = (HttpRequest) httpObject;
isWebSocketPath = isWebSocketPath(req);
if (!isWebSocketPath) {
ctx.fireChannelRead(msg);
return;
}
try {
final WebSocketServerHandshaker handshaker = WebSocketServerHandshakerFactory.resolveHandshaker(
req,
getWebSocketLocation(ctx.pipeline(), req, serverConfig.websocketPath()),
serverConfig.subprotocols(), serverConfig.decoderConfig());
final ChannelPromise localHandshakePromise = handshakePromise;
if (handshaker == null) {
WebSocketServerHandshakerFactory.sendUnsupportedVersionResponse(ctx.channel());
} else {
// Ensure we set the handshaker and replace this handler before we
// trigger the actual handshake. Otherwise we may receive websocket bytes in this handler
// before we had a chance to replace it.
//
// See https://github.com/netty/netty/issues/9471.
WebSocketServerProtocolHandler.setHandshaker(ctx.channel(), handshaker);
ctx.pipeline().remove(this);
final ChannelFuture handshakeFuture = handshaker.handshake(ctx.channel(), req);
handshakeFuture.addListener(future -> {
if (!future.isSuccess()) {
localHandshakePromise.tryFailure(future.cause());
ctx.fireExceptionCaught(future.cause());
} else {
localHandshakePromise.trySuccess();
// Kept for compatibility
ctx.fireUserEventTriggered(
ServerHandshakeStateEvent.HANDSHAKE_COMPLETE);
ctx.fireUserEventTriggered(
new WebSocketServerProtocolHandler.HandshakeComplete(
req.uri(), req.headers(), handshaker.selectedSubprotocol()));
}
});
applyHandshakeTimeout();
}
} finally {
ReferenceCountUtil.release(req);
}
} else if (!isWebSocketPath) {
ctx.fireChannelRead(msg);
} else {
ReferenceCountUtil.release(msg);
}
}
Domain
Subdomains
Source
Frequently Asked Questions
What does channelRead() do?
channelRead() is a function in the netty codebase, defined in codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandshakeHandler.java.
Where is channelRead() defined?
channelRead() is defined in codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocketServerProtocolHandshakeHandler.java at line 57.
What does channelRead() call?
channelRead() calls 2 function(s): applyHandshakeTimeout, isWebSocketPath.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free