| Index: net/spdy/spdy_frame_reader.cc
|
| diff --git a/net/spdy/spdy_frame_reader.cc b/net/spdy/spdy_frame_reader.cc
|
| index 57bf9ebb4682a5b62ee56ee65b100352c3431b64..3765c69420e5262adbdc7f717c096dfb41bfabc3 100644
|
| --- a/net/spdy/spdy_frame_reader.cc
|
| +++ b/net/spdy/spdy_frame_reader.cc
|
| @@ -6,6 +6,7 @@
|
|
|
| #include "base/sys_byteorder.h"
|
| #include "net/spdy/spdy_frame_reader.h"
|
| +#include "net/spdy/spdy_protocol.h"
|
|
|
| namespace net {
|
|
|
| @@ -15,6 +16,22 @@ SpdyFrameReader::SpdyFrameReader(const char* data, const size_t len)
|
| ofs_(0) {
|
| }
|
|
|
| +bool SpdyFrameReader::ReadUInt8(uint8* result) {
|
| + // Make sure that we have the whole uint8.
|
| + if (!CanRead(1)) {
|
| + OnFailure();
|
| + return false;
|
| + }
|
| +
|
| + // Read into result.
|
| + *result = *reinterpret_cast<const uint8*>(data_ + ofs_);
|
| +
|
| + // Iterate.
|
| + ofs_ += 1;
|
| +
|
| + return true;
|
| +}
|
| +
|
| bool SpdyFrameReader::ReadUInt16(uint16* result) {
|
| // Make sure that we have the whole uint16.
|
| if (!CanRead(2)) {
|
| @@ -47,6 +64,17 @@ bool SpdyFrameReader::ReadUInt32(uint32* result) {
|
| return true;
|
| }
|
|
|
| +bool SpdyFrameReader::ReadUInt31(uint32* result) {
|
| + bool success = ReadUInt32(result);
|
| +
|
| + // Zero out highest-order bit.
|
| + if (success) {
|
| + *result &= kStreamIdMask;
|
| + }
|
| +
|
| + return success;
|
| +}
|
| +
|
| bool SpdyFrameReader::ReadStringPiece16(base::StringPiece* result) {
|
| // Read resultant length.
|
| uint16 result_len;
|
| @@ -109,6 +137,18 @@ bool SpdyFrameReader::ReadBytes(void* result, size_t size) {
|
| return true;
|
| }
|
|
|
| +bool SpdyFrameReader::Seek(size_t size) {
|
| + if (!CanRead(size)) {
|
| + OnFailure();
|
| + return false;
|
| + }
|
| +
|
| + // Iterate.
|
| + ofs_ += size;
|
| +
|
| + return true;
|
| +}
|
| +
|
| bool SpdyFrameReader::IsDoneReading() const {
|
| return len_ == ofs_;
|
| }
|
|
|