From 4159b02753d0c0091e92520cca704225b849d8df Mon Sep 17 00:00:00 2001 From: Gregory Tsipenyuk Date: Tue, 15 Dec 2020 13:50:55 -0500 Subject: [PATCH] Properly handle the "compression" flag: - Fix compression enable flag in the inbound peer - Fix compression algorithm fetching in protocol message --- src/ripple/overlay/impl/PeerImp.cpp | 5 +++-- src/ripple/overlay/impl/ProtocolMessage.h | 11 +++++++++-- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/src/ripple/overlay/impl/PeerImp.cpp b/src/ripple/overlay/impl/PeerImp.cpp index 7a2834dd4..edf024ca9 100644 --- a/src/ripple/overlay/impl/PeerImp.cpp +++ b/src/ripple/overlay/impl/PeerImp.cpp @@ -100,8 +100,9 @@ PeerImp::PeerImp( , request_(std::move(request)) , headers_(request_) , compressionEnabled_( - headers_["X-Offer-Compression"] == "lz4" ? Compressed::On - : Compressed::Off) + headers_["X-Offer-Compression"] == "lz4" && app_.config().COMPRESSION + ? Compressed::On + : Compressed::Off) { } diff --git a/src/ripple/overlay/impl/ProtocolMessage.h b/src/ripple/overlay/impl/ProtocolMessage.h index f5114a245..0d28ebd7c 100644 --- a/src/ripple/overlay/impl/ProtocolMessage.h +++ b/src/ripple/overlay/impl/ProtocolMessage.h @@ -141,7 +141,11 @@ parseMessageHeader( MessageHeader hdr; auto iter = buffersBegin(bufs); - // Check valid header + // Check valid header compressed message: + // - 4 bits are the compression algorithm, 1st bit is always set to 1 + // - 2 bits are always set to 0 + // - 26 bits are the payload size + // - 32 bits are the uncompressed data size if (*iter & 0x80) { hdr.header_size = headerBytesCompressed; @@ -159,7 +163,7 @@ parseMessageHeader( return boost::none; } - hdr.algorithm = static_cast(*iter); + hdr.algorithm = static_cast(*iter & 0xF0); if (hdr.algorithm != compression::Algorithm::LZ4) { @@ -184,6 +188,9 @@ parseMessageHeader( return hdr; } + // Check valid header uncompressed message: + // - 6 bits are set to 0 + // - 26 bits are the payload size if ((*iter & 0xFC) == 0) { hdr.header_size = headerBytes;