Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(76)

Unified Diff: net/spdy/spdy_frame_builder.cc

Issue 202403002: Land recent SPDY changes (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Sync and rebase. Back out commits included for trybot benefit, but separately landed upstream. Created 6 years, 9 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/spdy/spdy_frame_builder.h ('k') | net/spdy/spdy_frame_builder_test.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/spdy_frame_builder.cc
diff --git a/net/spdy/spdy_frame_builder.cc b/net/spdy/spdy_frame_builder.cc
index 5194c115daa1c5fd860cc73ec676bd7cef74dcfc..5b084126fd9a2f5487723db083d64407f11a6142 100644
--- a/net/spdy/spdy_frame_builder.cc
+++ b/net/spdy/spdy_frame_builder.cc
@@ -60,14 +60,15 @@ bool SpdyFrameBuilder::Seek(size_t length) {
bool SpdyFrameBuilder::WriteControlFrameHeader(const SpdyFramer& framer,
SpdyFrameType type,
uint8 flags) {
- DCHECK_GE(type, FIRST_CONTROL_TYPE);
- DCHECK_LE(type, LAST_CONTROL_TYPE);
DCHECK_GT(4, framer.protocol_version());
+ DCHECK_NE(-1,
+ SpdyConstants::SerializeFrameType(framer.protocol_version(), type));
bool success = true;
FlagsAndLength flags_length = CreateFlagsAndLength(
flags, capacity_ - framer.GetControlFrameHeaderSize());
success &= WriteUInt16(kControlFlagMask | framer.protocol_version());
- success &= WriteUInt16(type);
+ success &= WriteUInt16(
+ SpdyConstants::SerializeFrameType(framer.protocol_version(), type));
success &= WriteBytes(&flags_length, sizeof(flags_length));
DCHECK_EQ(framer.GetControlFrameHeaderSize(), length());
return success;
@@ -75,7 +76,7 @@ bool SpdyFrameBuilder::WriteControlFrameHeader(const SpdyFramer& framer,
bool SpdyFrameBuilder::WriteDataFrameHeader(const SpdyFramer& framer,
SpdyStreamId stream_id,
- SpdyDataFlags flags) {
+ uint8 flags) {
if (framer.protocol_version() >= 4) {
return WriteFramePrefix(framer, DATA, flags, stream_id);
}
@@ -97,16 +98,21 @@ bool SpdyFrameBuilder::WriteFramePrefix(const SpdyFramer& framer,
SpdyFrameType type,
uint8 flags,
SpdyStreamId stream_id) {
- DCHECK_LE(DATA, type);
- DCHECK_GE(LAST_CONTROL_TYPE, type);
+ DCHECK_NE(-1,
+ SpdyConstants::SerializeFrameType(framer.protocol_version(), type));
DCHECK_EQ(0u, stream_id & ~kStreamIdMask);
DCHECK_LE(4, framer.protocol_version());
bool success = true;
// Upstream DCHECK's that capacity_ is under the maximum frame size at this
// point. Chromium does not, because of the large additional zlib inflation
// factor we use. (Frame size is is still checked by OverwriteLength() below).
- success &= WriteUInt16(capacity_);
- success &= WriteUInt8(type);
+ if (type != DATA) {
+ success &= WriteUInt16(capacity_ - framer.GetControlFrameHeaderSize());
+ } else {
+ success &= WriteUInt16(capacity_ - framer.GetDataFrameMinimumSize());
+ }
+ success &= WriteUInt8(
+ SpdyConstants::SerializeFrameType(framer.protocol_version(), type));
success &= WriteUInt8(flags);
success &= WriteUInt32(stream_id);
DCHECK_EQ(framer.GetDataFrameMinimumSize(), length());
@@ -145,12 +151,8 @@ bool SpdyFrameBuilder::WriteBytes(const void* data, uint32 data_len) {
}
bool SpdyFrameBuilder::RewriteLength(const SpdyFramer& framer) {
- if (framer.protocol_version() < 4) {
- return OverwriteLength(framer,
- length_ - framer.GetControlFrameHeaderSize());
- } else {
- return OverwriteLength(framer, length_);
- }
+ return OverwriteLength(framer,
+ length_ - framer.GetControlFrameHeaderSize());
}
bool SpdyFrameBuilder::OverwriteLength(const SpdyFramer& framer,
@@ -182,6 +184,18 @@ bool SpdyFrameBuilder::OverwriteLength(const SpdyFramer& framer,
return success;
}
+bool SpdyFrameBuilder::OverwriteFlags(const SpdyFramer& framer,
+ uint8 flags) {
+ DCHECK_LE(SPDY4, framer.protocol_version());
+ bool success = false;
+ const size_t old_length = length_;
+ // Flags are the fourth octet in the frame prefix.
+ length_ = 3;
+ success = WriteUInt8(flags);
+ length_ = old_length;
+ return success;
+}
+
bool SpdyFrameBuilder::CanWrite(size_t length) const {
if (length > kLengthMask) {
DCHECK(false);
« no previous file with comments | « net/spdy/spdy_frame_builder.h ('k') | net/spdy/spdy_frame_builder_test.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698