Index: net/spdy/spdy_frame_builder.cc |
diff --git a/net/spdy/spdy_frame_builder.cc b/net/spdy/spdy_frame_builder.cc |
index 73b9144c94b1549715aa8d3f38a712b64ee41fc7..9e779ff4594b3c708efe8ba52d7906d012a1dd17 100644 |
--- a/net/spdy/spdy_frame_builder.cc |
+++ b/net/spdy/spdy_frame_builder.cc |
@@ -62,19 +62,13 @@ bool SpdyFrameBuilder::WriteControlFrameHeader(const SpdyFramer& framer, |
uint8 flags) { |
DCHECK_GE(type, FIRST_CONTROL_TYPE); |
DCHECK_LE(type, LAST_CONTROL_TYPE); |
+ DCHECK_GT(4, framer.protocol_version()); |
bool success = true; |
- if (framer.protocol_version() < 4) { |
- FlagsAndLength flags_length = CreateFlagsAndLength( |
- flags, capacity_ - framer.GetControlFrameHeaderSize()); |
- success &= WriteUInt16(kControlFlagMask | framer.protocol_version()); |
- success &= WriteUInt16(type); |
- success &= WriteBytes(&flags_length, sizeof(flags_length)); |
- } else { |
- DCHECK_GT(1u<<16, capacity_); // Make sure length fits in 2B. |
- success &= WriteUInt16(capacity_); |
- success &= WriteUInt8(type); |
- success &= WriteUInt8(flags); |
- } |
+ FlagsAndLength flags_length = CreateFlagsAndLength( |
+ flags, capacity_ - framer.GetControlFrameHeaderSize()); |
+ success &= WriteUInt16(kControlFlagMask | framer.protocol_version()); |
+ success &= WriteUInt16(type); |
+ success &= WriteBytes(&flags_length, sizeof(flags_length)); |
DCHECK_EQ(framer.GetControlFrameHeaderSize(), length()); |
return success; |
} |
@@ -82,24 +76,37 @@ bool SpdyFrameBuilder::WriteControlFrameHeader(const SpdyFramer& framer, |
bool SpdyFrameBuilder::WriteDataFrameHeader(const SpdyFramer& framer, |
SpdyStreamId stream_id, |
SpdyDataFlags flags) { |
+ if (framer.protocol_version() >= 4) { |
+ return WriteFramePrefix(framer, DATA, flags, stream_id); |
+ } |
DCHECK_EQ(0u, stream_id & ~kStreamIdMask); |
bool success = true; |
- if (framer.protocol_version() < 4) { |
- success &= WriteUInt32(stream_id); |
- size_t length_field = capacity_ - framer.GetDataFrameMinimumSize(); |
- DCHECK_EQ(0u, length_field & ~static_cast<size_t>(kLengthMask)); |
- FlagsAndLength flags_length; |
- flags_length.length_ = htonl(length_field); |
- DCHECK_EQ(0, flags & ~kDataFlagsMask); |
- flags_length.flags_[0] = flags; |
- success &= WriteBytes(&flags_length, sizeof(flags_length)); |
- } else { |
- DCHECK_GT(1u<<16, capacity_); // Make sure length fits in 2B. |
- success &= WriteUInt16(capacity_); |
- success &= WriteUInt8(0); |
- success &= WriteUInt8(flags); |
- success &= WriteUInt32(stream_id); |
- } |
+ success &= WriteUInt32(stream_id); |
+ size_t length_field = capacity_ - framer.GetDataFrameMinimumSize(); |
+ DCHECK_EQ(0u, length_field & ~static_cast<size_t>(kLengthMask)); |
+ FlagsAndLength flags_length; |
+ flags_length.length_ = htonl(length_field); |
+ DCHECK_EQ(0, flags & ~kDataFlagsMask); |
+ flags_length.flags_[0] = flags; |
+ success &= WriteBytes(&flags_length, sizeof(flags_length)); |
+ DCHECK_EQ(framer.GetDataFrameMinimumSize(), length()); |
+ return success; |
+} |
+ |
+bool SpdyFrameBuilder::WriteFramePrefix(const SpdyFramer& framer, |
+ SpdyFrameType type, |
+ uint8 flags, |
+ SpdyStreamId stream_id) { |
+ DCHECK_LE(DATA, type); |
+ DCHECK_GE(LAST_CONTROL_TYPE, type); |
+ DCHECK_EQ(0u, stream_id & ~kStreamIdMask); |
+ DCHECK_LE(4, framer.protocol_version()); |
+ bool success = true; |
+ DCHECK_GT(1u<<16, capacity_); // Make sure length fits in 2B. |
+ success &= WriteUInt16(capacity_); |
+ success &= WriteUInt8(type); |
+ success &= WriteUInt8(flags); |
+ success &= WriteUInt32(stream_id); |
DCHECK_EQ(framer.GetDataFrameMinimumSize(), length()); |
return success; |
} |