Add QuicheDataReader::ReadStringPiece8

This complements ReadStringPiece16 and will be used for CHLO parsing.

gfe-relnote: n/a, new unused code
PiperOrigin-RevId: 305970104
Change-Id: I4d4a17da254fa49ea469ff6be7c7a9d5cfa0347f
diff --git a/common/quiche_data_reader.cc b/common/quiche_data_reader.cc
index 3854651..f6b6fb5 100644
--- a/common/quiche_data_reader.cc
+++ b/common/quiche_data_reader.cc
@@ -85,6 +85,17 @@
   return ReadStringPiece(result, result_len);
 }
 
+bool QuicheDataReader::ReadStringPiece8(quiche::QuicheStringPiece* result) {
+  // Read resultant length.
+  uint8_t result_len;
+  if (!ReadUInt8(&result_len)) {
+    // OnFailure() already called.
+    return false;
+  }
+
+  return ReadStringPiece(result, result_len);
+}
+
 bool QuicheDataReader::ReadStringPiece(quiche::QuicheStringPiece* result,
                                        size_t size) {
   // Make sure that we have enough data to read.
diff --git a/common/quiche_data_reader.h b/common/quiche_data_reader.h
index c837172..bd67873 100644
--- a/common/quiche_data_reader.h
+++ b/common/quiche_data_reader.h
@@ -65,6 +65,15 @@
   // Returns true on success, false otherwise.
   bool ReadStringPiece16(quiche::QuicheStringPiece* result);
 
+  // Reads a string prefixed with 8-bit length into the given output parameter.
+  //
+  // NOTE: Does not copy but rather references strings in the underlying buffer.
+  // This should be kept in mind when handling memory management!
+  //
+  // Forwards the internal iterator on success.
+  // Returns true on success, false otherwise.
+  bool ReadStringPiece8(quiche::QuicheStringPiece* result);
+
   // Reads a given number of bytes into the given buffer. The buffer
   // must be of adequate size.
   // Forwards the internal iterator on success.