30 bool networkByteOrder)
31 : lengthFieldLength_(lengthFieldLength)
32 , maxFrameLength_(maxFrameLength)
33 , lengthFieldOffset_(lengthFieldOffset)
34 , lengthAdjustment_(lengthAdjustment)
35 , initialBytesToStrip_(initialBytesToStrip)
36 , networkByteOrder_(networkByteOrder)
37 , lengthFieldEndOffset_(lengthFieldOffset + lengthFieldLength) {
38 CHECK(maxFrameLength > 0);
39 CHECK(lengthFieldOffset <= maxFrameLength - lengthFieldLength);
44 std::unique_ptr<IOBuf>& result,
56 if (frameLength < lengthFieldEndOffset_) {
58 ctx->fireReadException(folly::make_exception_wrapper<std::runtime_error>(
65 ctx->fireReadException(folly::make_exception_wrapper<std::runtime_error>(
66 "Frame larger than " +
77 ctx->fireReadException(folly::make_exception_wrapper<std::runtime_error>(
78 "InitialBytesToSkip larger than frame"));
84 result = buf.
split(actualFrameLength);
89 IOBufQueue& buf,
int offset,
int length,
bool networkByteOrder) {
97 if (networkByteOrder) {
105 if (networkByteOrder) {
113 if (networkByteOrder) {
121 if (networkByteOrder) {
std::unique_ptr< folly::IOBuf > split(size_t n)
const folly::IOBuf * front() const
bool decode(Context *ctx, folly::IOBufQueue &buf, std::unique_ptr< folly::IOBuf > &result, size_t &) override
LengthFieldBasedFrameDecoder(uint32_t lengthFieldLength=4, uint32_t maxFrameLength=UINT_MAX, uint32_t lengthFieldOffset=0, int32_t lengthAdjustment=0, uint32_t initialBytesToStrip=4, bool networkByteOrder=true)
size_t chainLength() const
uint32_t initialBytesToStrip_
uint32_t lengthFieldEndOffset_
size_t trimStartAtMost(size_t amount)
uint32_t lengthFieldOffset_
InboundHandler< folly::IOBufQueue &, M >::Context Context
uint32_t lengthFieldLength_
uint64_t getUnadjustedFrameLength(folly::IOBufQueue &buf, int offset, int length, bool networkByteOrder)
void trimStart(size_t amount)
int32_t lengthAdjustment_