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

Unified Diff: net/spdy/spdy_framer.cc

Issue 2544813002: Remove enum SpdyMajorVersion. (Closed)
Patch Set: Merge comment changes from 140661724. Created 4 years 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_framer.h ('k') | net/spdy/spdy_framer_decoder_adapter.cc » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/spdy_framer.cc
diff --git a/net/spdy/spdy_framer.cc b/net/spdy/spdy_framer.cc
index a884aaa65c114c6dbd5e1591508199b9a9a0eb35..975b453beb4665bad0a5dd3bb08e1753b7135943 100644
--- a/net/spdy/spdy_framer.cc
+++ b/net/spdy/spdy_framer.cc
@@ -116,8 +116,7 @@ const size_t SpdyFramer::kControlFrameBufferSize = 19;
} while (false)
#endif
-SettingsFlagsAndId SettingsFlagsAndId::FromWireFormat(SpdyMajorVersion version,
- uint32_t wire) {
+SettingsFlagsAndId SettingsFlagsAndId::FromWireFormat(uint32_t wire) {
return SettingsFlagsAndId(base::NetToHost32(wire) >> 24,
base::NetToHost32(wire) & 0x00ffffff);
}
@@ -127,7 +126,7 @@ SettingsFlagsAndId::SettingsFlagsAndId(uint8_t flags, uint32_t id)
SPDY_BUG_IF(id > (1u << 24)) << "HTTP2 setting ID too large: " << id;
}
-uint32_t SettingsFlagsAndId::GetWireFormat(SpdyMajorVersion version) const {
+uint32_t SettingsFlagsAndId::GetWireFormat() const {
return base::HostToNet32(id_ & 0x00ffffff) | base::HostToNet32(flags_ << 24);
}
@@ -142,18 +141,15 @@ bool SpdyFramerVisitorInterface::OnRstStreamFrameData(
return true;
}
-SpdyFramer::SpdyFramer(SpdyMajorVersion version,
- SpdyFramer::DecoderAdapterFactoryFn adapter_factory)
+SpdyFramer::SpdyFramer(SpdyFramer::DecoderAdapterFactoryFn adapter_factory)
: current_frame_buffer_(kControlFrameBufferSize),
expect_continuation_(0),
visitor_(NULL),
debug_visitor_(NULL),
header_handler_(nullptr),
- protocol_version_(version),
enable_compression_(true),
probable_http_response_(false),
end_stream_when_done_(false) {
- DCHECK(protocol_version_ == HTTP2);
// TODO(bnc): The way kMaxControlFrameSize is currently interpreted, it
// includes the frame header, whereas kSpdyInitialFrameSizeLimit does not.
// Therefore this assertion is unnecessarily strict.
@@ -161,13 +157,12 @@ SpdyFramer::SpdyFramer(SpdyMajorVersion version,
"Our send limit should be at most our receive limit");
Reset();
- if (version == HTTP2 && adapter_factory != nullptr) {
+ if (adapter_factory != nullptr) {
decoder_adapter_ = adapter_factory(this);
}
}
-SpdyFramer::SpdyFramer(SpdyMajorVersion version)
- : SpdyFramer(version, &DecoderAdapterFactory) {}
+SpdyFramer::SpdyFramer() : SpdyFramer(&DecoderAdapterFactory) {}
SpdyFramer::~SpdyFramer() {
}
@@ -235,12 +230,12 @@ SpdyFramer::SpdyState SpdyFramer::state() const {
}
size_t SpdyFramer::GetDataFrameMinimumSize() const {
- return SpdyConstants::GetDataFrameMinimumSize(protocol_version_);
+ return SpdyConstants::kDataFrameMinimumSize;
}
// Size, in bytes, of the control frame header.
size_t SpdyFramer::GetFrameHeaderSize() const {
- return SpdyConstants::GetFrameHeaderSize(protocol_version_);
+ return SpdyConstants::kFrameHeaderSize;
}
// TODO(jamessynge): Rename this to GetRstStreamSize as the frame is fixed size.
@@ -284,14 +279,12 @@ size_t SpdyFramer::GetWindowUpdateSize() const {
}
size_t SpdyFramer::GetBlockedSize() const {
- DCHECK_EQ(HTTP2, protocol_version_);
// Size, in bytes, of a BLOCKED frame.
// The BLOCKED frame has no payload beyond the control frame header.
return GetFrameHeaderSize();
}
size_t SpdyFramer::GetPushPromiseMinimumSize() const {
- DCHECK_EQ(HTTP2, protocol_version_);
// Size, in bytes, of a PUSH_PROMISE frame, sans the embedded header block.
// Calculated as frame prefix + 4 (promised stream id)
return GetFrameHeaderSize() + 4;
@@ -323,21 +316,12 @@ size_t SpdyFramer::GetFrameMinimumSize() const {
}
size_t SpdyFramer::GetFrameMaximumSize() const {
- if (protocol_version_ == HTTP2) {
- return send_frame_size_limit_ +
- SpdyConstants::GetFrameHeaderSize(protocol_version_);
- } else {
- return SpdyConstants::GetMaxFrameSizeLimit(protocol_version_);
- }
+ return send_frame_size_limit_ + SpdyConstants::kFrameHeaderSize;
}
size_t SpdyFramer::GetDataFrameMaximumPayload() const {
- if (protocol_version_ == HTTP2) {
- return std::min(kMaxDataPayloadSendSize,
- GetFrameMaximumSize() - GetDataFrameMinimumSize());
- } else {
- return GetFrameMaximumSize() - GetDataFrameMinimumSize();
- }
+ return std::min(kMaxDataPayloadSendSize,
+ GetFrameMaximumSize() - GetDataFrameMinimumSize());
}
const char* SpdyFramer::StateToString(int state) {
@@ -557,8 +541,7 @@ size_t SpdyFramer::ProcessInput(const char* data, size_t len) {
}
case SPDY_CONTROL_FRAME_HEADER_BLOCK: {
- int bytes_read = ProcessControlFrameHeaderBlock(
- data, len, protocol_version_ == HTTP2);
+ int bytes_read = ProcessControlFrameHeaderBlock(data, len);
len -= bytes_read;
data += bytes_read;
break;
@@ -666,8 +649,8 @@ void SpdyFramer::SpdySettingsScratch::Reset() {
SpdyFrameType SpdyFramer::ValidateFrameHeader(bool is_control_frame,
int frame_type_field,
size_t payload_length_field) {
- if (!SpdyConstants::IsValidFrameType(protocol_version_, frame_type_field)) {
- // In HTTP2 we ignore unknown frame types for extensibility, as long as
+ if (!SpdyConstants::IsValidFrameType(frame_type_field)) {
+ // We ignore unknown frame types for extensibility, as long as
// the rest of the control frame header is valid.
// We rely on the visitor to check validity of current_frame_stream_id_.
bool valid_stream =
@@ -693,35 +676,31 @@ SpdyFrameType SpdyFramer::ValidateFrameHeader(bool is_control_frame,
return DATA;
}
- SpdyFrameType frame_type =
- SpdyConstants::ParseFrameType(protocol_version_, frame_type_field);
+ SpdyFrameType frame_type = SpdyConstants::ParseFrameType(frame_type_field);
- if (protocol_version_ == HTTP2) {
- if (!SpdyConstants::IsValidHTTP2FrameStreamId(current_frame_stream_id_,
- frame_type)) {
- DLOG(ERROR) << "The framer received an invalid streamID of "
- << current_frame_stream_id_ << " for a frame of type "
- << FrameTypeToString(frame_type);
- set_error(SPDY_INVALID_STREAM_ID);
- return frame_type;
- }
+ if (!SpdyConstants::IsValidHTTP2FrameStreamId(current_frame_stream_id_,
+ frame_type)) {
+ DLOG(ERROR) << "The framer received an invalid streamID of "
+ << current_frame_stream_id_ << " for a frame of type "
+ << FrameTypeToString(frame_type);
+ set_error(SPDY_INVALID_STREAM_ID);
+ return frame_type;
+ }
- // Ensure that we see a CONTINUATION frame iff we expect to.
- if ((frame_type == CONTINUATION) != (expect_continuation_ != 0)) {
- if (expect_continuation_ != 0) {
- DLOG(ERROR) << "The framer was expecting to receive a CONTINUATION "
- << "frame, but instead received a frame of type "
- << FrameTypeToString(frame_type);
- } else {
- DLOG(ERROR) << "The framer received an unexpected CONTINUATION frame.";
- }
- set_error(SPDY_UNEXPECTED_FRAME);
- return frame_type;
+ // Ensure that we see a CONTINUATION frame iff we expect to.
+ if ((frame_type == CONTINUATION) != (expect_continuation_ != 0)) {
+ if (expect_continuation_ != 0) {
+ DLOG(ERROR) << "The framer was expecting to receive a CONTINUATION "
+ << "frame, but instead received a frame of type "
+ << FrameTypeToString(frame_type);
+ } else {
+ DLOG(ERROR) << "The framer received an unexpected CONTINUATION frame.";
}
+ set_error(SPDY_UNEXPECTED_FRAME);
+ return frame_type;
}
- if (protocol_version_ == HTTP2 &&
- payload_length_field > recv_frame_size_limit_) {
+ if (payload_length_field > recv_frame_size_limit_) {
set_error(SPDY_OVERSIZED_PAYLOAD);
}
@@ -750,8 +729,7 @@ size_t SpdyFramer::ProcessCommonHeader(const char* data, size_t len) {
current_frame_buffer_.len());
bool is_control_frame = false;
- int control_frame_type_field =
- SpdyConstants::DataFrameType(protocol_version_);
+ int control_frame_type_field = SpdyConstants::kDataFrameType;
// ProcessControlFrameHeader() will set current_frame_type_ to the
// correct value if this is a valid control frame.
current_frame_type_ = DATA;
@@ -765,8 +743,7 @@ size_t SpdyFramer::ProcessCommonHeader(const char* data, size_t len) {
// We check control_frame_type_field's validity in
// ProcessControlFrameHeader().
control_frame_type_field = control_frame_type_field_uint8;
- is_control_frame = control_frame_type_field !=
- SpdyConstants::SerializeFrameType(protocol_version_, DATA);
+ is_control_frame = control_frame_type_field != SpdyConstants::kDataFrameType;
current_frame_length_ = length_field + GetFrameHeaderSize();
@@ -853,12 +830,10 @@ void SpdyFramer::ProcessControlFrameHeader(int control_frame_type_field) {
DLOG(WARNING) << "Invalid length for SETTINGS frame: "
<< current_frame_length_;
set_error(SPDY_INVALID_CONTROL_FRAME_SIZE);
- } else if (protocol_version_ == HTTP2 &&
- current_frame_flags_ & SETTINGS_FLAG_ACK &&
+ } else if (current_frame_flags_ & SETTINGS_FLAG_ACK &&
current_frame_length_ > GetSettingsMinimumSize()) {
set_error(SPDY_INVALID_CONTROL_FRAME_SIZE);
- } else if (protocol_version_ == HTTP2 &&
- current_frame_flags_ & ~SETTINGS_FLAG_ACK) {
+ } else if (current_frame_flags_ & ~SETTINGS_FLAG_ACK) {
VLOG(1) << "Undefined frame flags for SETTINGS frame: " << hex
<< static_cast<int>(current_frame_flags_);
current_frame_flags_ &= SETTINGS_FLAG_ACK;
@@ -869,8 +844,7 @@ void SpdyFramer::ProcessControlFrameHeader(int control_frame_type_field) {
if (current_frame_length_ != GetPingSize()) {
set_error(SPDY_INVALID_CONTROL_FRAME_SIZE);
} else {
- if (protocol_version_ == HTTP2 &&
- current_frame_flags_ & ~PING_FLAG_ACK) {
+ if (current_frame_flags_ & ~PING_FLAG_ACK) {
VLOG(1) << "Undefined frame flags for PING frame: " << hex
<< static_cast<int>(current_frame_flags_);
current_frame_flags_ &= PING_FLAG_ACK;
@@ -881,8 +855,7 @@ void SpdyFramer::ProcessControlFrameHeader(int control_frame_type_field) {
{
// For HTTP/2, optional opaque data may be appended to the
// GOAWAY frame, thus there is only a minimal length restriction.
- if (protocol_version_ == HTTP2 &&
- current_frame_length_ < GetGoAwayMinimumSize()) {
+ if (current_frame_length_ < GetGoAwayMinimumSize()) {
set_error(SPDY_INVALID_CONTROL_FRAME);
} else if (current_frame_flags_ != 0) {
VLOG(1) << "Undefined frame flags for GOAWAY frame: " << hex
@@ -894,18 +867,16 @@ void SpdyFramer::ProcessControlFrameHeader(int control_frame_type_field) {
case HEADERS:
{
size_t min_size = GetHeadersMinimumSize();
- if (protocol_version_ == HTTP2 &&
- (current_frame_flags_ & HEADERS_FLAG_PRIORITY)) {
+ if (current_frame_flags_ & HEADERS_FLAG_PRIORITY) {
min_size += 4;
}
if (current_frame_length_ < min_size) {
// TODO(mlavan): check here for HEADERS with no payload?
// (not allowed in HTTP2)
set_error(SPDY_INVALID_CONTROL_FRAME);
- } else if (protocol_version_ == HTTP2 &&
- current_frame_flags_ &
- ~(CONTROL_FLAG_FIN | HEADERS_FLAG_PRIORITY |
- HEADERS_FLAG_END_HEADERS | HEADERS_FLAG_PADDED)) {
+ } else if (current_frame_flags_ &
+ ~(CONTROL_FLAG_FIN | HEADERS_FLAG_PRIORITY |
+ HEADERS_FLAG_END_HEADERS | HEADERS_FLAG_PADDED)) {
VLOG(1) << "Undefined frame flags for HEADERS frame: " << hex
<< static_cast<int>(current_frame_flags_);
current_frame_flags_ &=
@@ -935,10 +906,8 @@ void SpdyFramer::ProcessControlFrameHeader(int control_frame_type_field) {
case PUSH_PROMISE:
if (current_frame_length_ < GetPushPromiseMinimumSize()) {
set_error(SPDY_INVALID_CONTROL_FRAME);
- } else if (protocol_version_ == HTTP2 &&
- current_frame_flags_ &
- ~(PUSH_PROMISE_FLAG_END_PUSH_PROMISE |
- HEADERS_FLAG_PADDED)) {
+ } else if (current_frame_flags_ &
+ ~(PUSH_PROMISE_FLAG_END_PUSH_PROMISE | HEADERS_FLAG_PADDED)) {
VLOG(1) << "Undefined frame flags for PUSH_PROMISE frame: " << hex
<< static_cast<int>(current_frame_flags_);
current_frame_flags_ &=
@@ -1010,21 +979,17 @@ void SpdyFramer::ProcessControlFrameHeader(int control_frame_type_field) {
break;
case HEADERS:
frame_size_without_variable_data = GetHeadersMinimumSize();
- if (protocol_version_ == HTTP2) {
- if (current_frame_flags_ & HEADERS_FLAG_PADDED) {
- frame_size_without_variable_data += kPadLengthFieldSize;
- }
- if (current_frame_flags_ & HEADERS_FLAG_PRIORITY) {
+ if (current_frame_flags_ & HEADERS_FLAG_PADDED) {
+ frame_size_without_variable_data += kPadLengthFieldSize;
+ }
+ if (current_frame_flags_ & HEADERS_FLAG_PRIORITY) {
frame_size_without_variable_data +=
- kPriorityDependencyPayloadSize +
- kPriorityWeightPayloadSize;
- }
+ kPriorityDependencyPayloadSize + kPriorityWeightPayloadSize;
}
break;
case PUSH_PROMISE:
frame_size_without_variable_data = GetPushPromiseMinimumSize();
- if (protocol_version_ == HTTP2 &&
- current_frame_flags_ & PUSH_PROMISE_FLAG_PADDED) {
+ if (current_frame_flags_ & PUSH_PROMISE_FLAG_PADDED) {
frame_size_without_variable_data += kPadLengthFieldSize;
}
break;
@@ -1079,7 +1044,6 @@ size_t SpdyFramer::UpdateCurrentFrameBuffer(const char** data, size_t* len,
}
size_t SpdyFramer::GetSerializedLength(
- const SpdyMajorVersion spdy_version,
const SpdyHeaderBlock* headers) {
const size_t num_name_value_pairs_size = sizeof(uint32_t);
const size_t length_of_name_size = num_name_value_pairs_size;
@@ -1120,14 +1084,12 @@ size_t SpdyFramer::ProcessControlFrameBeforeHeaderBlock(const char* data,
set_error(SPDY_INVALID_CONTROL_FRAME);
return original_len - len;
}
- if (protocol_version_ == HTTP2 &&
- !(current_frame_flags_ & HEADERS_FLAG_END_HEADERS) &&
+ if (!(current_frame_flags_ & HEADERS_FLAG_END_HEADERS) &&
current_frame_type_ == HEADERS) {
expect_continuation_ = current_frame_stream_id_;
end_stream_when_done_ = current_frame_flags_ & CONTROL_FLAG_FIN;
}
- if (protocol_version_ == HTTP2 &&
- current_frame_flags_ & HEADERS_FLAG_PADDED) {
+ if (current_frame_flags_ & HEADERS_FLAG_PADDED) {
uint8_t pad_payload_len = 0;
DCHECK_EQ(remaining_padding_payload_length_, 0u);
successful_read = reader.ReadUInt8(&pad_payload_len);
@@ -1139,7 +1101,7 @@ size_t SpdyFramer::ProcessControlFrameBeforeHeaderBlock(const char* data,
int weight = 0;
uint32_t parent_stream_id = 0;
bool exclusive = false;
- if (protocol_version_ == HTTP2 && has_priority) {
+ if (has_priority) {
uint32_t stream_dependency;
successful_read = reader.ReadUInt32(&stream_dependency);
DCHECK(successful_read);
@@ -1170,14 +1132,12 @@ size_t SpdyFramer::ProcessControlFrameBeforeHeaderBlock(const char* data,
break;
case PUSH_PROMISE:
{
- DCHECK_EQ(HTTP2, protocol_version_);
if (current_frame_stream_id_ == 0) {
set_error(SPDY_INVALID_CONTROL_FRAME);
return original_len - len;
}
bool successful_read = true;
- if (protocol_version_ == HTTP2 &&
- current_frame_flags_ & PUSH_PROMISE_FLAG_PADDED) {
+ if (current_frame_flags_ & PUSH_PROMISE_FLAG_PADDED) {
DCHECK_EQ(remaining_padding_payload_length_, 0u);
uint8_t pad_payload_len = 0;
successful_read = reader.ReadUInt8(&pad_payload_len);
@@ -1261,8 +1221,7 @@ size_t SpdyFramer::ProcessControlFrameBeforeHeaderBlock(const char* data,
// visitor or decompresses and then passes directly to the visitor, via
// IncrementallyDeliverControlFrameHeaderData()
size_t SpdyFramer::ProcessControlFrameHeaderBlock(const char* data,
- size_t data_len,
- bool is_hpack_header_block) {
+ size_t data_len) {
DCHECK_EQ(SPDY_CONTROL_FRAME_HEADER_BLOCK, state_);
bool processed_successfully = true;
@@ -1278,16 +1237,10 @@ size_t SpdyFramer::ProcessControlFrameHeaderBlock(const char* data,
size_t process_bytes = std::min(
data_len, remaining_data_length_ - remaining_padding_payload_length_);
- if (is_hpack_header_block) {
- if (!GetHpackDecoder()->HandleControlFrameHeadersData(data,
- process_bytes)) {
- // TODO(jgraettinger): Finer-grained HPACK error codes.
- set_error(SPDY_DECOMPRESS_FAILURE);
- processed_successfully = false;
- }
- } else if (process_bytes > 0) {
- processed_successfully = IncrementallyDeliverControlFrameHeaderData(
- current_frame_stream_id_, data, process_bytes);
+ if (!GetHpackDecoder()->HandleControlFrameHeadersData(data, process_bytes)) {
+ // TODO(jgraettinger): Finer-grained HPACK error codes.
+ set_error(SPDY_DECOMPRESS_FAILURE);
+ processed_successfully = false;
}
remaining_data_length_ -= process_bytes;
@@ -1295,23 +1248,16 @@ size_t SpdyFramer::ProcessControlFrameHeaderBlock(const char* data,
if (remaining_data_length_ == remaining_padding_payload_length_ &&
processed_successfully) {
if (expect_continuation_ == 0) {
- if (is_hpack_header_block) {
- size_t compressed_len = 0;
- if (GetHpackDecoder()->HandleControlFrameHeadersComplete(
- &compressed_len)) {
- visitor_->OnHeaderFrameEnd(current_frame_stream_id_, true);
- if (state_ == SPDY_ERROR) {
- return data_len;
- }
- } else {
- set_error(SPDY_DECOMPRESS_FAILURE);
- processed_successfully = false;
- }
- } else {
+ size_t compressed_len = 0;
+ if (GetHpackDecoder()->HandleControlFrameHeadersComplete(
+ &compressed_len)) {
visitor_->OnHeaderFrameEnd(current_frame_stream_id_, true);
if (state_ == SPDY_ERROR) {
return data_len;
}
+ } else {
+ set_error(SPDY_DECOMPRESS_FAILURE);
+ processed_successfully = false;
}
}
if (processed_successfully) {
@@ -1340,8 +1286,7 @@ size_t SpdyFramer::ProcessSettingsFrameHeader(const char* data, size_t len) {
remaining_data_length_ -= bytes_read;
}
if (remaining_control_header_ == 0) {
- if (protocol_version_ == HTTP2 &&
- current_frame_flags_ & SETTINGS_FLAG_ACK) {
+ if (current_frame_flags_ & SETTINGS_FLAG_ACK) {
visitor_->OnSettingsAck();
CHANGE_STATE(SPDY_FRAME_COMPLETE);
} else {
@@ -1417,12 +1362,12 @@ bool SpdyFramer::ProcessSetting(const char* data) {
value = base::NetToHost32(*(reinterpret_cast<const uint32_t*>(data + 2)));
// Validate id.
- if (!SpdyConstants::IsValidSettingId(protocol_version_, id_field)) {
+ if (!SpdyConstants::IsValidSettingId(id_field)) {
DLOG(WARNING) << "Unknown SETTINGS ID: " << id_field;
- // In HTTP2 we ignore unknown settings for extensibility.
+ // Ignore unknown settings for extensibility.
return true;
}
- id = SpdyConstants::ParseSettingId(protocol_version_, id_field);
+ id = SpdyConstants::ParseSettingId(id_field);
// Validation succeeded. Pass on to visitor.
visitor_->OnSetting(id, flags, value);
@@ -1443,8 +1388,7 @@ size_t SpdyFramer::ProcessControlFramePayload(const char* data, size_t len) {
switch (current_frame_type_) {
case PING: {
SpdyPingId id = 0;
- bool is_ack = protocol_version_ == HTTP2 &&
- (current_frame_flags_ & PING_FLAG_ACK);
+ bool is_ack = current_frame_flags_ & PING_FLAG_ACK;
bool successful_read = true;
successful_read = reader.ReadUInt64(&id);
DCHECK(successful_read);
@@ -1463,13 +1407,11 @@ size_t SpdyFramer::ProcessControlFramePayload(const char* data, size_t len) {
}
break;
case BLOCKED: {
- DCHECK_EQ(HTTP2, protocol_version_);
DCHECK(reader.IsDoneReading());
visitor_->OnBlocked(current_frame_stream_id_);
}
break;
case PRIORITY: {
- DCHECK_EQ(HTTP2, protocol_version_);
uint32_t stream_dependency;
uint32_t parent_stream_id;
bool exclusive;
@@ -1531,15 +1473,12 @@ size_t SpdyFramer::ProcessGoAwayFramePayload(const char* data, size_t len) {
uint32_t status_raw = GOAWAY_OK;
successful_read = reader.ReadUInt32(&status_raw);
DCHECK(successful_read);
- if (SpdyConstants::IsValidGoAwayStatus(protocol_version_, status_raw)) {
- status =
- SpdyConstants::ParseGoAwayStatus(protocol_version_, status_raw);
+ if (SpdyConstants::IsValidGoAwayStatus(status_raw)) {
+ status = SpdyConstants::ParseGoAwayStatus(status_raw);
} else {
- if (protocol_version_ == HTTP2) {
- // Treat unrecognized status codes as INTERNAL_ERROR as
- // recommended by the HTTP/2 spec.
- status = GOAWAY_INTERNAL_ERROR;
- }
+ // Treat unrecognized status codes as INTERNAL_ERROR as
+ // recommended by the HTTP/2 spec.
+ status = GOAWAY_INTERNAL_ERROR;
}
// Finished parsing the GOAWAY header, call frame handler.
visitor_->OnGoAway(current_frame_stream_id_, status);
@@ -1592,16 +1531,12 @@ size_t SpdyFramer::ProcessRstStreamFramePayload(const char* data, size_t len) {
uint32_t status_raw = status;
bool successful_read = reader.ReadUInt32(&status_raw);
DCHECK(successful_read);
- if (SpdyConstants::IsValidRstStreamStatus(protocol_version_,
- status_raw)) {
- status =
- SpdyConstants::ParseRstStreamStatus(protocol_version_, status_raw);
+ if (SpdyConstants::IsValidRstStreamStatus(status_raw)) {
+ status = SpdyConstants::ParseRstStreamStatus(status_raw);
} else {
- if (protocol_version_ == HTTP2) {
- // Treat unrecognized status codes as INTERNAL_ERROR as
- // recommended by the HTTP/2 spec.
- status = RST_STREAM_INTERNAL_ERROR;
- }
+ // Treat unrecognized status codes as INTERNAL_ERROR as
+ // recommended by the HTTP/2 spec.
+ status = RST_STREAM_INTERNAL_ERROR;
}
// Finished parsing the RST_STREAM header, call frame handler.
visitor_->OnRstStream(current_frame_stream_id_, status);
@@ -1795,7 +1730,7 @@ bool SpdyFramer::ParseHeaderBlockInBuffer(const char* header_data,
const char* begin = temp.data();
const char* end = begin;
std::advance(end, temp.size());
- if (protocol_version_ == HTTP2 && std::any_of(begin, end, isupper)) {
+ if (std::any_of(begin, end, isupper)) {
DVLOG(1) << "Malformed header: Header name " << temp
<< " contains upper-case characters.";
return false;
@@ -1867,7 +1802,7 @@ SpdySerializedFrame SpdyFramer::SpdyHeaderFrameIterator::NextFrame() {
// use GetSerializedLength() for an apples-to-apples comparision of
// compression performance between HPACK and SPDY w/ deflate.
size_t debug_payload_len =
- framer_->GetSerializedLength(HTTP2, &headers_ir_->header_block());
+ framer_->GetSerializedLength(&headers_ir_->header_block());
framer_->debug_visitor_->OnSendCompressedFrame(headers_ir_->stream_id(),
HEADERS, debug_payload_len,
debug_total_size_);
@@ -1901,7 +1836,7 @@ SpdySerializedFrame SpdyFramer::SerializeData(const SpdyDataIR& data_ir) const {
const size_t size_with_padding = num_padding_fields + data_ir.data_len() +
data_ir.padding_payload_len() +
GetDataFrameMinimumSize();
- SpdyFrameBuilder builder(size_with_padding, protocol_version_);
+ SpdyFrameBuilder builder(size_with_padding);
builder.BeginNewFrame(*this, DATA, flags, data_ir.stream_id());
if (data_ir.padded()) {
builder.WriteUInt8(data_ir.padding_payload_len() & 0xff);
@@ -1924,25 +1859,19 @@ SpdySerializedFrame SpdyFramer::SerializeDataFrameHeaderWithPaddingLengthField(
size_t frame_size = GetDataFrameMinimumSize();
size_t num_padding_fields = 0;
- if (protocol_version_ == HTTP2) {
- if (data_ir.padded()) {
- flags |= DATA_FLAG_PADDED;
- ++num_padding_fields;
- }
+ if (data_ir.padded()) {
+ flags |= DATA_FLAG_PADDED;
+ ++num_padding_fields;
frame_size += num_padding_fields;
}
- SpdyFrameBuilder builder(frame_size, protocol_version_);
+ SpdyFrameBuilder builder(frame_size);
builder.BeginNewFrame(*this, DATA, flags, data_ir.stream_id());
- if (protocol_version_ == HTTP2) {
- if (data_ir.padded()) {
- builder.WriteUInt8(data_ir.padding_payload_len() & 0xff);
- }
- builder.OverwriteLength(*this, num_padding_fields + data_ir.data_len() +
- data_ir.padding_payload_len());
- } else {
- builder.OverwriteLength(*this, data_ir.data_len());
+ if (data_ir.padded()) {
+ builder.WriteUInt8(data_ir.padding_payload_len() & 0xff);
}
+ builder.OverwriteLength(*this, num_padding_fields + data_ir.data_len() +
+ data_ir.padding_payload_len());
DCHECK_EQ(frame_size, builder.length());
return builder.take();
}
@@ -1955,12 +1884,12 @@ SpdySerializedFrame SpdyFramer::SerializeRstStream(
// commented but left in place to simplify future patching.
// Compute the output buffer size, taking opaque data into account.
size_t expected_length = GetRstStreamMinimumSize();
- SpdyFrameBuilder builder(expected_length, protocol_version_);
+ SpdyFrameBuilder builder(expected_length);
builder.BeginNewFrame(*this, RST_STREAM, 0, rst_stream.stream_id());
- builder.WriteUInt32(SpdyConstants::SerializeRstStreamStatus(
- protocol_version_, rst_stream.status()));
+ builder.WriteUInt32(
+ SpdyConstants::SerializeRstStreamStatus(rst_stream.status()));
DCHECK_EQ(expected_length, builder.length());
return builder.take();
@@ -1979,11 +1908,11 @@ SpdySerializedFrame SpdyFramer::SerializeSettings(
// Size, in bytes, of this SETTINGS frame.
const size_t size = GetSettingsMinimumSize() +
(values->size() * setting_size);
- SpdyFrameBuilder builder(size, protocol_version_);
+ SpdyFrameBuilder builder(size);
builder.BeginNewFrame(*this, SETTINGS, flags, 0);
// If this is an ACK, payload should be empty.
- if (protocol_version_ == HTTP2 && settings.is_ack()) {
+ if (settings.is_ack()) {
return builder.take();
}
@@ -1991,8 +1920,7 @@ SpdySerializedFrame SpdyFramer::SerializeSettings(
for (SpdySettingsIR::ValueMap::const_iterator it = values->begin();
it != values->end();
++it) {
- int setting_id =
- SpdyConstants::SerializeSettingId(protocol_version_, it->first);
+ int setting_id = SpdyConstants::SerializeSettingId(it->first);
DCHECK_GE(setting_id, 0);
builder.WriteUInt16(static_cast<uint16_t>(setting_id));
builder.WriteUInt32(it->second.value);
@@ -2002,7 +1930,7 @@ SpdySerializedFrame SpdyFramer::SerializeSettings(
}
SpdySerializedFrame SpdyFramer::SerializePing(const SpdyPingIR& ping) const {
- SpdyFrameBuilder builder(GetPingSize(), protocol_version_);
+ SpdyFrameBuilder builder(GetPingSize());
uint8_t flags = 0;
if (ping.is_ack()) {
flags |= PING_FLAG_ACK;
@@ -2017,10 +1945,8 @@ SpdySerializedFrame SpdyFramer::SerializeGoAway(
const SpdyGoAwayIR& goaway) const {
// Compute the output buffer size, take opaque data into account.
size_t expected_length = GetGoAwayMinimumSize();
- if (protocol_version_ == HTTP2) {
- expected_length += goaway.description().size();
- }
- SpdyFrameBuilder builder(expected_length, protocol_version_);
+ expected_length += goaway.description().size();
+ SpdyFrameBuilder builder(expected_length);
// Serialize the GOAWAY frame.
builder.BeginNewFrame(*this, GOAWAY, 0, 0);
@@ -2029,11 +1955,10 @@ SpdySerializedFrame SpdyFramer::SerializeGoAway(
builder.WriteUInt32(goaway.last_good_stream_id());
// GOAWAY frames also specify the error status code.
- builder.WriteUInt32(
- SpdyConstants::SerializeGoAwayStatus(protocol_version_, goaway.status()));
+ builder.WriteUInt32(SpdyConstants::SerializeGoAwayStatus(goaway.status()));
- // In HTTP2, GOAWAY frames may also specify opaque data.
- if ((protocol_version_ == HTTP2) && (goaway.description().size() > 0)) {
+ // GOAWAY frames may also specify opaque data.
+ if (!goaway.description().empty()) {
builder.WriteBytes(goaway.description().data(),
goaway.description().size());
}
@@ -2047,22 +1972,20 @@ SpdySerializedFrame SpdyFramer::SerializeHeaders(const SpdyHeadersIR& headers) {
if (headers.fin()) {
flags |= CONTROL_FLAG_FIN;
}
- if (protocol_version_ == HTTP2) {
- // This will get overwritten if we overflow into a CONTINUATION frame.
- flags |= HEADERS_FLAG_END_HEADERS;
- if (headers.has_priority()) {
- flags |= HEADERS_FLAG_PRIORITY;
- }
- if (headers.padded()) {
- flags |= HEADERS_FLAG_PADDED;
- }
+ // This will get overwritten if we overflow into a CONTINUATION frame.
+ flags |= HEADERS_FLAG_END_HEADERS;
+ if (headers.has_priority()) {
+ flags |= HEADERS_FLAG_PRIORITY;
+ }
+ if (headers.padded()) {
+ flags |= HEADERS_FLAG_PADDED;
}
// The size of this frame, including padding (if there is any) and
// variable-length header block.
size_t size = GetHeadersMinimumSize();
- if (protocol_version_ == HTTP2 && headers.padded()) {
+ if (headers.padded()) {
size += kPadLengthFieldSize;
size += headers.padding_payload_len();
}
@@ -2087,7 +2010,7 @@ SpdySerializedFrame SpdyFramer::SerializeHeaders(const SpdyHeadersIR& headers) {
flags &= ~HEADERS_FLAG_END_HEADERS;
}
- SpdyFrameBuilder builder(size, protocol_version_);
+ SpdyFrameBuilder builder(size);
builder.BeginNewFrame(*this, HEADERS, flags, headers.stream_id());
DCHECK_EQ(GetHeadersMinimumSize(), builder.length());
@@ -2109,8 +2032,7 @@ SpdySerializedFrame SpdyFramer::SerializeHeaders(const SpdyHeadersIR& headers) {
// HTTP2 uses HPACK for header compression. However, continue to
// use GetSerializedLength() for an apples-to-apples comparision of
// compression performance between HPACK and SPDY w/ deflate.
- const size_t payload_len =
- GetSerializedLength(protocol_version_, &(headers.header_block()));
+ const size_t payload_len = GetSerializedLength(&(headers.header_block()));
debug_visitor_->OnSendCompressedFrame(headers.stream_id(),
HEADERS,
payload_len,
@@ -2122,7 +2044,7 @@ SpdySerializedFrame SpdyFramer::SerializeHeaders(const SpdyHeadersIR& headers) {
SpdySerializedFrame SpdyFramer::SerializeWindowUpdate(
const SpdyWindowUpdateIR& window_update) const {
- SpdyFrameBuilder builder(GetWindowUpdateSize(), protocol_version_);
+ SpdyFrameBuilder builder(GetWindowUpdateSize());
builder.BeginNewFrame(*this, WINDOW_UPDATE, kNoFlags,
window_update.stream_id());
builder.WriteUInt32(window_update.delta());
@@ -2132,15 +2054,13 @@ SpdySerializedFrame SpdyFramer::SerializeWindowUpdate(
SpdySerializedFrame SpdyFramer::SerializeBlocked(
const SpdyBlockedIR& blocked) const {
- DCHECK_EQ(HTTP2, protocol_version_);
- SpdyFrameBuilder builder(GetBlockedSize(), protocol_version_);
+ SpdyFrameBuilder builder(GetBlockedSize());
builder.BeginNewFrame(*this, BLOCKED, kNoFlags, blocked.stream_id());
return builder.take();
}
SpdySerializedFrame SpdyFramer::SerializePushPromise(
const SpdyPushPromiseIR& push_promise) {
- DCHECK_EQ(HTTP2, protocol_version_);
uint8_t flags = 0;
// This will get overwritten if we overflow into a CONTINUATION frame.
flags |= PUSH_PROMISE_FLAG_END_PUSH_PROMISE;
@@ -2168,7 +2088,7 @@ SpdySerializedFrame SpdyFramer::SerializePushPromise(
flags &= ~PUSH_PROMISE_FLAG_END_PUSH_PROMISE;
}
- SpdyFrameBuilder builder(size, protocol_version_);
+ SpdyFrameBuilder builder(size);
builder.BeginNewFrame(*this,
PUSH_PROMISE,
flags,
@@ -2197,7 +2117,7 @@ SpdySerializedFrame SpdyFramer::SerializePushPromise(
// use GetSerializedLength() for an apples-to-apples comparision of
// compression performance between HPACK and SPDY w/ deflate.
const size_t payload_len =
- GetSerializedLength(protocol_version_, &(push_promise.header_block()));
+ GetSerializedLength(&(push_promise.header_block()));
debug_visitor_->OnSendCompressedFrame(push_promise.stream_id(),
PUSH_PROMISE,
payload_len,
@@ -2210,10 +2130,8 @@ SpdySerializedFrame SpdyFramer::SerializePushPromise(
SpdySerializedFrame SpdyFramer::SerializeHeadersGivenEncoding(
const SpdyHeadersIR& headers,
const string& encoding) const {
- DCHECK_EQ(HTTP2, protocol_version_);
-
size_t frame_size = GetHeaderFrameSizeSansBlock(headers) + encoding.size();
- SpdyFrameBuilder builder(frame_size, protocol_version_);
+ SpdyFrameBuilder builder(frame_size);
builder.BeginNewFrame(*this, HEADERS, SerializeHeaderFrameFlags(headers),
headers.stream_id());
DCHECK_EQ(GetFrameHeaderSize(), builder.length());
@@ -2241,11 +2159,9 @@ SpdySerializedFrame SpdyFramer::SerializeHeadersGivenEncoding(
SpdySerializedFrame SpdyFramer::SerializeContinuation(
const SpdyContinuationIR& continuation) const {
- DCHECK_EQ(HTTP2, protocol_version_);
-
const string& encoding = continuation.encoding();
size_t frame_size = GetContinuationMinimumSize() + encoding.size();
- SpdyFrameBuilder builder(frame_size, protocol_version_);
+ SpdyFrameBuilder builder(frame_size);
uint8_t flags = continuation.end_headers() ? HEADERS_FLAG_END_HEADERS : 0;
builder.BeginNewFrame(*this, CONTINUATION, flags, continuation.stream_id());
DCHECK_EQ(GetFrameHeaderSize(), builder.length());
@@ -2255,15 +2171,13 @@ SpdySerializedFrame SpdyFramer::SerializeContinuation(
}
SpdySerializedFrame SpdyFramer::SerializeAltSvc(const SpdyAltSvcIR& altsvc_ir) {
- DCHECK_EQ(HTTP2, protocol_version_);
-
size_t size = GetAltSvcMinimumSize();
size += altsvc_ir.origin().length();
string value = SpdyAltSvcWireFormat::SerializeHeaderFieldValue(
altsvc_ir.altsvc_vector());
size += value.length();
- SpdyFrameBuilder builder(size, protocol_version_);
+ SpdyFrameBuilder builder(size);
builder.BeginNewFrame(*this, ALTSVC, kNoFlags, altsvc_ir.stream_id());
builder.WriteUInt16(altsvc_ir.origin().length());
@@ -2275,10 +2189,9 @@ SpdySerializedFrame SpdyFramer::SerializeAltSvc(const SpdyAltSvcIR& altsvc_ir) {
SpdySerializedFrame SpdyFramer::SerializePriority(
const SpdyPriorityIR& priority) const {
- DCHECK_EQ(HTTP2, protocol_version_);
size_t size = GetPrioritySize();
- SpdyFrameBuilder builder(size, protocol_version_);
+ SpdyFrameBuilder builder(size);
builder.BeginNewFrame(*this, PRIORITY, kNoFlags, priority.stream_id());
builder.WriteUInt32(PackStreamDependencyValues(priority.exclusive(),
@@ -2350,7 +2263,6 @@ SpdySerializedFrame SpdyFramer::SerializeFrame(const SpdyFrameIR& frame) {
}
size_t SpdyFramer::GetNumberRequiredContinuationFrames(size_t size) {
- DCHECK_EQ(HTTP2, protocol_version_);
DCHECK_GT(size, kMaxControlFrameSize);
size_t overflow = size - kMaxControlFrameSize;
size_t payload_size = kMaxControlFrameSize - GetContinuationMinimumSize();
@@ -2444,7 +2356,6 @@ void SpdyFramer::WritePayloadWithContinuation(SpdyFrameBuilder* builder,
}
HpackEncoder* SpdyFramer::GetHpackEncoder() {
- DCHECK_EQ(HTTP2, protocol_version_);
if (hpack_encoder_.get() == nullptr) {
hpack_encoder_.reset(new HpackEncoder(ObtainHpackHuffmanTable()));
}
@@ -2452,7 +2363,6 @@ HpackEncoder* SpdyFramer::GetHpackEncoder() {
}
HpackDecoderInterface* SpdyFramer::GetHpackDecoder() {
- DCHECK_EQ(HTTP2, protocol_version_);
if (hpack_decoder_.get() == nullptr) {
hpack_decoder_.reset(new HpackDecoder());
}
« no previous file with comments | « net/spdy/spdy_framer.h ('k') | net/spdy/spdy_framer_decoder_adapter.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698