in tchannel-core/src/main/java/com/uber/tchannel/codecs/TFrameCodec.java [70:107]
public static ByteBuf encode(ByteBufAllocator allocator, TFrame frame) {
ByteBuf buffer = allocator.buffer(TFrame.FRAME_HEADER_LENGTH, TFrame.FRAME_HEADER_LENGTH);
final ByteBuf result;
boolean release = true;
try {
// size:2
buffer.writeShort(frame.size + TFrame.FRAME_HEADER_LENGTH);
// type:1
buffer.writeByte(frame.type);
// reserved:1
buffer.writeZero(1);
// id:4
buffer.writeInt((int) frame.id);
// reserved:8
buffer.writeZero(8);
// TODO: refactor
if (frame.payload instanceof CompositeByteBuf) {
CompositeByteBuf cbf = (CompositeByteBuf) frame.payload;
cbf.addComponent(0, buffer);
cbf.writerIndex(cbf.writerIndex() + TFrame.FRAME_HEADER_LENGTH);
result = cbf;
} else {
result = Unpooled.wrappedBuffer(buffer, frame.payload);
}
release = false;
} finally {
if (release) {
buffer.release();
}
}
return result;
}