Use QuicheDataReader instead of SpdyFrameReader everywhere. In order to do that, ReadUInt24() method needs to be copied from SpdyFrameReader to QuicheDataReader. PiperOrigin-RevId: 422809480
diff --git a/common/quiche_data_reader.cc b/common/quiche_data_reader.cc index f20c752..1f948f1 100644 --- a/common/quiche_data_reader.cc +++ b/common/quiche_data_reader.cc
@@ -9,6 +9,7 @@ #include "absl/strings/numbers.h" #include "absl/strings/str_cat.h" #include "absl/strings/string_view.h" +#include "common/platform/api/quiche_bug_tracker.h" #include "common/platform/api/quiche_logging.h" #include "common/quiche_endian.h" @@ -40,6 +41,21 @@ return true; } +bool QuicheDataReader::ReadUInt24(uint32_t* result) { + if (endianness_ != quiche::NETWORK_BYTE_ORDER) { + // TODO(b/214573190): Implement and test HOST_BYTE_ORDER case. + QUICHE_BUG(QuicheDataReader_ReadUInt24_NotImplemented); + return false; + } + + *result = 0; + if (!ReadBytes(reinterpret_cast<char*>(result) + 1, 3u)) { + return false; + } + *result = quiche::QuicheEndian::NetToHost32(*result); + return true; +} + bool QuicheDataReader::ReadUInt32(uint32_t* result) { if (!ReadBytes(result, sizeof(*result))) { return false;
diff --git a/common/quiche_data_reader.h b/common/quiche_data_reader.h index 833198d..ae8bbcf 100644 --- a/common/quiche_data_reader.h +++ b/common/quiche_data_reader.h
@@ -45,11 +45,12 @@ // Empty destructor. ~QuicheDataReader() {} - // Reads an 8/16/32/64-bit unsigned integer into the given output + // Reads an 8/16/24/32/64-bit unsigned integer into the given output // parameter. Forwards the internal iterator on success. Returns true on // success, false otherwise. bool ReadUInt8(uint8_t* result); bool ReadUInt16(uint16_t* result); + bool ReadUInt24(uint32_t* result); bool ReadUInt32(uint32_t* result); bool ReadUInt64(uint64_t* result);
diff --git a/http2/adapter/test_utils.cc b/http2/adapter/test_utils.cc index 210cb66..d56acda 100644 --- a/http2/adapter/test_utils.cc +++ b/http2/adapter/test_utils.cc
@@ -4,9 +4,8 @@ #include "absl/strings/str_format.h" #include "http2/adapter/http2_visitor_interface.h" -#include "common/quiche_endian.h" +#include "common/quiche_data_reader.h" #include "spdy/core/hpack/hpack_encoder.h" -#include "spdy/core/spdy_frame_reader.h" namespace http2 { namespace adapter { @@ -137,7 +136,7 @@ bool MatchAndExplain(absl::string_view s, testing::MatchResultListener* listener) const override { - spdy::SpdyFrameReader reader(s.data(), s.size()); + quiche::QuicheDataReader reader(s.data(), s.size()); for (TypeAndOptionalLength expected : expected_types_and_lengths_) { if (!MatchAndExplainOneFrame(expected.first, expected.second, &reader, @@ -146,8 +145,7 @@ } } if (!reader.IsDoneReading()) { - size_t bytes_remaining = s.size() - reader.GetBytesConsumed(); - *listener << "; " << bytes_remaining << " bytes left to read!"; + *listener << "; " << reader.BytesRemaining() << " bytes left to read!"; return false; } return true; @@ -155,7 +153,7 @@ bool MatchAndExplainOneFrame(spdy::SpdyFrameType expected_type, absl::optional<size_t> expected_length, - spdy::SpdyFrameReader* reader, + quiche::QuicheDataReader* reader, testing::MatchResultListener* listener) const { uint32_t payload_length; if (!reader->ReadUInt24(&payload_length)) {