encode() — netty Function Reference
Architecture documentation for the encode() function in WebSocket08FrameEncoder.java from the netty codebase.
Entity Profile
Dependency Diagram
graph TD 974912aa_4a22_65df_0611_a89a6b21c11d["encode()"] 5ff4696d_a24d_bdd9_df0c_04c894aaa3fa["WebSocket08FrameEncoder"] 974912aa_4a22_65df_0611_a89a6b21c11d -->|defined in| 5ff4696d_a24d_bdd9_df0c_04c894aaa3fa 9667bd30_86eb_265f_83fb_d15408b892e2["getOpCode()"] 974912aa_4a22_65df_0611_a89a6b21c11d -->|calls| 9667bd30_86eb_265f_83fb_d15408b892e2 e4efdb80_03dd_85a8_c76f_8f8b29711309["addBuffers()"] 974912aa_4a22_65df_0611_a89a6b21c11d -->|calls| e4efdb80_03dd_85a8_c76f_8f8b29711309 style 974912aa_4a22_65df_0611_a89a6b21c11d fill:#6366f1,stroke:#818cf8,color:#fff
Relationship Graph
Source Code
codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket08FrameEncoder.java lines 116–224
@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;
}
buf = ctx.alloc().buffer(size);
buf.writeByte(b0);
buf.writeByte(maskGenerator != null ? 0xFE : 126);
buf.writeByte(length >>> 8 & 0xFF);
buf.writeByte(length & 0xFF);
} else {
int size = 10 + maskLength;
if (maskGenerator != null) {
size += length;
}
buf = ctx.alloc().buffer(size);
buf.writeByte(b0);
buf.writeByte(maskGenerator != null ? 0xFF : 127);
buf.writeLong(length);
}
// Write payload
if (maskGenerator != null) {
int mask = maskGenerator.nextMask();
buf.writeInt(mask);
// If the mask is 0 we can skip all the XOR operations.
if (mask != 0) {
if (length > 0) {
ByteOrder srcOrder = data.order();
ByteOrder dstOrder = buf.order();
int i = data.readerIndex();
int end = data.writerIndex();
if (srcOrder == dstOrder) {
// Use the optimized path only when byte orders match.
// Avoid sign extension on widening primitive conversion
long longMask = mask & 0xFFFFFFFFL;
longMask |= longMask << 32;
// If the byte order of our buffers it little endian we have to bring our mask
// into the same format, because getInt() and writeInt() will use a reversed byte order
if (srcOrder == ByteOrder.LITTLE_ENDIAN) {
longMask = Long.reverseBytes(longMask);
}
for (int lim = end - 7; i < lim; i += 8) {
Domain
Subdomains
Defined In
Calls
Source
Frequently Asked Questions
What does encode() do?
encode() is a function in the netty codebase, defined in codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket08FrameEncoder.java.
Where is encode() defined?
encode() is defined in codec-http/src/main/java/io/netty/handler/codec/http/websocketx/WebSocket08FrameEncoder.java at line 116.
What does encode() call?
encode() calls 2 function(s): addBuffers, getOpCode.
Analyze Your Own Codebase
Get architecture documentation, dependency graphs, and domain analysis for your codebase in minutes.
Try Supermodel Free