WebSocket00FrameDecoder Class — netty Architecture
Architecture documentation for the WebSocket00FrameDecoder class in WebSocket00FrameDecoder.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD a39accd9_2797_e36f_366c_ec1750db37ba["WebSocket00FrameDecoder"] e20ea68c_3fe1_09f6_fbf3_1fbc16f9492e["WebSocket00FrameDecoder.java"] a39accd9_2797_e36f_366c_ec1750db37ba -->|defined in| e20ea68c_3fe1_09f6_fbf3_1fbc16f9492e 0cde36ad_47dc_d98a_54ef_713dba290819["WebSocket00FrameDecoder()"] a39accd9_2797_e36f_366c_ec1750db37ba -->|method| 0cde36ad_47dc_d98a_54ef_713dba290819 7eff65d5_d988_e4f4_da3f_a6e657ac6b15["decode()"] a39accd9_2797_e36f_366c_ec1750db37ba -->|method| 7eff65d5_d988_e4f4_da3f_a6e657ac6b15 59424093_80a3_69f2_2461_8456fff65c41["WebSocketFrame()"] a39accd9_2797_e36f_366c_ec1750db37ba -->|method| 59424093_80a3_69f2_2461_8456fff65c41
Relationship Graph
Source Code
codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket00FrameDecoder.java lines 34–148
public class WebSocket00FrameDecoder extends ReplayingDecoder<Void> implements WebSocketFrameDecoder {
static final int DEFAULT_MAX_FRAME_SIZE = 16384;
private final long maxFrameSize;
private boolean receivedClosingHandshake;
public WebSocket00FrameDecoder() {
this(DEFAULT_MAX_FRAME_SIZE);
}
/**
* Creates a new instance of {@code WebSocketFrameDecoder} with the specified {@code maxFrameSize}. If the client
* sends a frame size larger than {@code maxFrameSize}, the channel will be closed.
*
* @param maxFrameSize
* the maximum frame size to decode
*/
public WebSocket00FrameDecoder(int maxFrameSize) {
this.maxFrameSize = maxFrameSize;
}
/**
* Creates a new instance of {@code WebSocketFrameDecoder} with the specified {@code maxFrameSize}. If the client
* sends a frame size larger than {@code maxFrameSize}, the channel will be closed.
*
* @param decoderConfig
* Frames decoder configuration.
*/
public WebSocket00FrameDecoder(WebSocketDecoderConfig decoderConfig) {
this.maxFrameSize = ObjectUtil.checkNotNull(decoderConfig, "decoderConfig").maxFramePayloadLength();
}
@Override
protected void decode(ChannelHandlerContext ctx, ByteBuf in, List<Object> out) throws Exception {
// Discard all data received if closing handshake was received before.
if (receivedClosingHandshake) {
in.skipBytes(actualReadableBytes());
return;
}
// Decode a frame otherwise.
byte type = in.readByte();
WebSocketFrame frame;
if ((type & 0x80) == 0x80) {
// If the MSB on type is set, decode the frame length
frame = decodeBinaryFrame(ctx, type, in);
} else {
// Decode a 0xff terminated UTF-8 string
frame = decodeTextFrame(ctx, in);
}
if (frame != null) {
out.add(frame);
}
}
private WebSocketFrame decodeBinaryFrame(ChannelHandlerContext ctx, byte type, ByteBuf buffer) {
long frameSize = 0;
int lengthFieldSize = 0;
byte b;
do {
b = buffer.readByte();
frameSize <<= 7;
frameSize |= b & 0x7f;
if (frameSize > maxFrameSize) {
throw new TooLongFrameException("frame length exceeds " + maxFrameSize + ": " + frameSize);
}
lengthFieldSize++;
if (lengthFieldSize > 8) {
// Perhaps a malicious peer?
throw new TooLongFrameException("frame length field size exceeds 8: " + lengthFieldSize);
}
} while ((b & 0x80) == 0x80);
if (type == (byte) 0xFF && frameSize == 0) {
receivedClosingHandshake = true;
return new CloseWebSocketFrame(true, 0, ctx.alloc().buffer(0));
}
ByteBuf payload = readBytes(ctx.alloc(), buffer, (int) frameSize);
return new BinaryWebSocketFrame(payload);
Defined In
Source
Frequently Asked Questions
What is the WebSocket00FrameDecoder class?
WebSocket00FrameDecoder is a class in the netty codebase, defined in codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket00FrameDecoder.java.
Where is WebSocket00FrameDecoder defined?
WebSocket00FrameDecoder is defined in codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket00FrameDecoder.java at line 34.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free