WebSocket08FrameEncoder Class — netty Architecture
Architecture documentation for the WebSocket08FrameEncoder class in WebSocket08FrameEncoder.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 5ff4696d_a24d_bdd9_df0c_04c894aaa3fa["WebSocket08FrameEncoder"] 284b35c3_d8e1_41b2_a9b5_60d5c66143e6["WebSocket08FrameEncoder.java"] 5ff4696d_a24d_bdd9_df0c_04c894aaa3fa -->|defined in| 284b35c3_d8e1_41b2_a9b5_60d5c66143e6 de8b21e3_c8e3_4e06_a4f0_371fe68ee3e4["WebSocket08FrameEncoder()"] 5ff4696d_a24d_bdd9_df0c_04c894aaa3fa -->|method| de8b21e3_c8e3_4e06_a4f0_371fe68ee3e4 974912aa_4a22_65df_0611_a89a6b21c11d["encode()"] 5ff4696d_a24d_bdd9_df0c_04c894aaa3fa -->|method| 974912aa_4a22_65df_0611_a89a6b21c11d 9667bd30_86eb_265f_83fb_d15408b892e2["getOpCode()"] 5ff4696d_a24d_bdd9_df0c_04c894aaa3fa -->|method| 9667bd30_86eb_265f_83fb_d15408b892e2 e4efdb80_03dd_85a8_c76f_8f8b29711309["addBuffers()"] 5ff4696d_a24d_bdd9_df0c_04c894aaa3fa -->|method| e4efdb80_03dd_85a8_c76f_8f8b29711309
Relationship Graph
Source Code
codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket08FrameEncoder.java lines 72–261
public class WebSocket08FrameEncoder extends MessageToMessageEncoder<WebSocketFrame> implements WebSocketFrameEncoder {
private static final InternalLogger logger = InternalLoggerFactory.getInstance(WebSocket08FrameEncoder.class);
private static final byte OPCODE_CONT = 0x0;
private static final byte OPCODE_TEXT = 0x1;
private static final byte OPCODE_BINARY = 0x2;
private static final byte OPCODE_CLOSE = 0x8;
private static final byte OPCODE_PING = 0x9;
private static final byte OPCODE_PONG = 0xA;
/**
* The size threshold for gathering writes. Non-Masked messages bigger than this size will be sent fragmented as
* a header and a content ByteBuf whereas messages smaller than the size will be merged into a single buffer and
* sent at once.<br>
* Masked messages will always be sent at once.
*/
private static final int GATHERING_WRITE_THRESHOLD = 1024;
private final WebSocketFrameMaskGenerator maskGenerator;
/**
* Constructor
*
* @param maskPayload
* Web socket clients must set this to true to mask payload. Server implementations must set this to
* false.
*/
public WebSocket08FrameEncoder(boolean maskPayload) {
this(maskPayload ? RandomWebSocketFrameMaskGenerator.INSTANCE : null);
}
/**
* Constructor
*
* @param maskGenerator
* Web socket clients must set this to {@code non null} to mask payload.
* Server implementations must set this to {@code null}.
*/
public WebSocket08FrameEncoder(WebSocketFrameMaskGenerator maskGenerator) {
super(WebSocketFrame.class);
this.maskGenerator = maskGenerator;
}
@Override
protected void encode(ChannelHandlerContext ctx, WebSocketFrame msg, List<Object> out) throws Exception {
final ByteBuf data = msg.content();
byte opcode = getOpCode(msg);
int length = data.readableBytes();
if (logger.isTraceEnabled()) {
logger.trace("Encoding WebSocket Frame opCode={} length={}", opcode, length);
}
int b0 = 0;
if (msg.isFinalFragment()) {
b0 |= 1 << 7;
}
b0 |= (msg.rsv() & 0x07) << 4;
b0 |= opcode & 0x7F;
if (opcode == OPCODE_PING && length > 125) {
throw new TooLongFrameException("invalid payload for PING (payload length must be <= 125, was " + length);
}
boolean release = true;
ByteBuf buf = null;
try {
int maskLength = maskGenerator != null ? 4 : 0;
if (length <= 125) {
int size = 2 + maskLength + length;
buf = ctx.alloc().buffer(size);
buf.writeByte(b0);
byte b = (byte) (maskGenerator != null ? 0x80 | length : length);
buf.writeByte(b);
} else if (length <= 0xFFFF) {
int size = 4 + maskLength;
if (maskGenerator != null || length <= GATHERING_WRITE_THRESHOLD) {
size += length;
Defined In
Source
Frequently Asked Questions
What is the WebSocket08FrameEncoder class?
WebSocket08FrameEncoder is a class in the netty codebase, defined in codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket08FrameEncoder.java.
Where is WebSocket08FrameEncoder defined?
WebSocket08FrameEncoder is defined in codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket08FrameEncoder.java at line 72.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free