Index: net/spdy/spdy_framer.cc |
diff --git a/net/spdy/spdy_framer.cc b/net/spdy/spdy_framer.cc |
index a20d1ead1f83b1c433bddd0ce9ffe2b2a29db05b..dfb76441f8cb572dfad62d88c782c2b62b9e5914 100644 |
--- a/net/spdy/spdy_framer.cc |
+++ b/net/spdy/spdy_framer.cc |
@@ -32,9 +32,10 @@ uLong CalculateDictionaryId(const char* dictionary, |
struct DictionaryIds { |
DictionaryIds() |
- : v2_dictionary_id(CalculateDictionaryId(kV2Dictionary, kV2DictionarySize)), |
- v3_dictionary_id(CalculateDictionaryId(kV3Dictionary, kV3DictionarySize)) |
- {} |
+ : v2_dictionary_id( |
+ CalculateDictionaryId(kV2Dictionary, kV2DictionarySize)), |
+ v3_dictionary_id( |
+ CalculateDictionaryId(kV3Dictionary, kV3DictionarySize)) {} |
const uLong v2_dictionary_id; |
const uLong v3_dictionary_id; |
}; |
@@ -56,28 +57,27 @@ const size_t SpdyFramer::kHeaderDataChunkMaxSize = 1024; |
const size_t SpdyFramer::kControlFrameBufferSize = 18; |
#ifdef DEBUG_SPDY_STATE_CHANGES |
-#define CHANGE_STATE(newstate) \ |
- do { \ |
- DVLOG(1) << "Changing state from: " \ |
- << StateToString(state_) \ |
- << " to " << StateToString(newstate) << "\n"; \ |
- DCHECK(state_ != SPDY_ERROR); \ |
- DCHECK_EQ(previous_state_, state_); \ |
- previous_state_ = state_; \ |
- state_ = newstate; \ |
+#define CHANGE_STATE(newstate) \ |
+ do { \ |
+ DVLOG(1) << "Changing state from: " << StateToString(state_) << " to " \ |
+ << StateToString(newstate) << "\n"; \ |
+ DCHECK(state_ != SPDY_ERROR); \ |
+ DCHECK_EQ(previous_state_, state_); \ |
+ previous_state_ = state_; \ |
+ state_ = newstate; \ |
} while (false) |
#else |
-#define CHANGE_STATE(newstate) \ |
- do { \ |
- DCHECK(state_ != SPDY_ERROR); \ |
- DCHECK_EQ(previous_state_, state_); \ |
- previous_state_ = state_; \ |
- state_ = newstate; \ |
+#define CHANGE_STATE(newstate) \ |
+ do { \ |
+ DCHECK(state_ != SPDY_ERROR); \ |
+ DCHECK_EQ(previous_state_, state_); \ |
+ previous_state_ = state_; \ |
+ state_ = newstate; \ |
} while (false) |
#endif |
-SettingsFlagsAndId SettingsFlagsAndId::FromWireFormat( |
- SpdyMajorVersion version, uint32 wire) { |
+SettingsFlagsAndId SettingsFlagsAndId::FromWireFormat(SpdyMajorVersion version, |
+ uint32 wire) { |
if (version < SPDY3) { |
ConvertFlagsAndIdForSpdy2(&wire); |
} |
@@ -89,8 +89,7 @@ SettingsFlagsAndId::SettingsFlagsAndId(uint8 flags, uint32 id) |
LOG_IF(DFATAL, id > (1u << 24)) << "SPDY setting ID too large: " << id; |
} |
-uint32 SettingsFlagsAndId::GetWireFormat(SpdyMajorVersion version) |
- const { |
+uint32 SettingsFlagsAndId::GetWireFormat(SpdyMajorVersion version) const { |
uint32 wire = htonl(id_ & 0x00ffffff) | htonl(flags_ << 24); |
if (version < SPDY3) { |
ConvertFlagsAndIdForSpdy2(&wire); |
@@ -104,9 +103,9 @@ uint32 SettingsFlagsAndId::GetWireFormat(SpdyMajorVersion version) |
// This method is also bidirectional (can be used to translate SPDY 2 to SPDY 3 |
// as well as vice versa). |
void SettingsFlagsAndId::ConvertFlagsAndIdForSpdy2(uint32* val) { |
- uint8* wire_array = reinterpret_cast<uint8*>(val); |
- std::swap(wire_array[0], wire_array[3]); |
- std::swap(wire_array[1], wire_array[2]); |
+ uint8* wire_array = reinterpret_cast<uint8*>(val); |
+ std::swap(wire_array[0], wire_array[3]); |
+ std::swap(wire_array[1], wire_array[2]); |
} |
bool SpdyFramerVisitorInterface::OnGoAwayFrameData(const char* goaway_data, |
@@ -258,7 +257,7 @@ size_t SpdyFramer::GetGoAwayMinimumSize() const { |
return size; |
} |
-size_t SpdyFramer::GetHeadersMinimumSize() const { |
+size_t SpdyFramer::GetHeadersMinimumSize() const { |
// Size, in bytes, of a HEADERS frame not including the variable-length |
// name-value block. |
size_t size = GetControlFrameHeaderSize(); |
@@ -303,7 +302,7 @@ size_t SpdyFramer::GetPushPromiseMinimumSize() const { |
return GetControlFrameHeaderSize() + 4; |
} |
-size_t SpdyFramer::GetContinuationMinimumSize() const { |
+size_t SpdyFramer::GetContinuationMinimumSize() const { |
// Size, in bytes, of a CONTINUATION frame not including the variable-length |
// headers fragments. |
return GetControlFrameHeaderSize(); |
@@ -585,10 +584,9 @@ size_t SpdyFramer::ProcessInput(const char* data, size_t len) { |
goto bottom; |
} |
} while (state_ != previous_state_); |
- bottom: |
+bottom: |
DCHECK(len == 0 || state_ == SPDY_ERROR); |
- if (current_frame_buffer_length_ == 0 && |
- remaining_data_length_ == 0 && |
+ if (current_frame_buffer_length_ == 0 && remaining_data_length_ == 0 && |
remaining_control_header_ == 0) { |
DCHECK(state_ == SPDY_RESET || state_ == SPDY_ERROR) |
<< "State: " << StateToString(state_); |
@@ -618,9 +616,8 @@ size_t SpdyFramer::ProcessCommonHeader(const char* data, size_t len) { |
// Using a scoped_ptr here since we may need to create a new SpdyFrameReader |
// when processing DATA frames below. |
- scoped_ptr<SpdyFrameReader> reader( |
- new SpdyFrameReader(current_frame_buffer_.get(), |
- current_frame_buffer_length_)); |
+ scoped_ptr<SpdyFrameReader> reader(new SpdyFrameReader( |
+ current_frame_buffer_.get(), current_frame_buffer_length_)); |
uint16 version = 0; |
bool is_control_frame = false; |
@@ -641,9 +638,8 @@ size_t SpdyFramer::ProcessCommonHeader(const char* data, size_t len) { |
version > SpdyConstants::SerializeMajorVersion(SPDY_MAX_VERSION) || |
SpdyConstants::ParseMajorVersion(version) != protocol_version()) { |
// Version does not match the version the framer was initialized with. |
- DVLOG(1) << "Unsupported SPDY version " |
- << version |
- << " (expected " << protocol_version() << ")"; |
+ DVLOG(1) << "Unsupported SPDY version " << version << " (expected " |
+ << protocol_version() << ")"; |
set_error(SPDY_UNSUPPORTED_VERSION); |
return 0; |
} else { |
@@ -697,8 +693,9 @@ size_t SpdyFramer::ProcessCommonHeader(const char* data, size_t len) { |
// Before we accept a DATA frame, we need to make sure we're not in the |
// middle of processing a header block. |
- const bool is_continuation_frame = (control_frame_type_field == |
- SpdyConstants::SerializeFrameType(protocol_version(), CONTINUATION)); |
+ const bool is_continuation_frame = |
+ (control_frame_type_field == |
+ SpdyConstants::SerializeFrameType(protocol_version(), CONTINUATION)); |
if ((expect_continuation_ != 0) != is_continuation_frame) { |
if (expect_continuation_ != 0) { |
DLOG(ERROR) << "The framer was expecting to receive a CONTINUATION " |
@@ -743,7 +740,7 @@ size_t SpdyFramer::ProcessCommonHeader(const char* data, size_t len) { |
uint8 valid_data_flags = 0; |
if (protocol_version() > SPDY3) { |
valid_data_flags = DATA_FLAG_FIN | DATA_FLAG_END_SEGMENT | |
- DATA_FLAG_PAD_LOW | DATA_FLAG_PAD_HIGH; |
+ DATA_FLAG_PAD_LOW | DATA_FLAG_PAD_HIGH; |
} else { |
valid_data_flags = DATA_FLAG_FIN; |
} |
@@ -759,8 +756,7 @@ size_t SpdyFramer::ProcessCommonHeader(const char* data, size_t len) { |
} else { |
// Empty data frame. |
if (current_frame_flags_ & DATA_FLAG_FIN) { |
- visitor_->OnStreamFrameData( |
- current_frame_stream_id_, NULL, 0, true); |
+ visitor_->OnStreamFrameData(current_frame_stream_id_, NULL, 0, true); |
} |
CHANGE_STATE(SPDY_AUTO_RESET); |
} |
@@ -835,22 +831,22 @@ void SpdyFramer::ProcessControlFrameHeader(uint16 control_frame_type_field) { |
set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS); |
} |
break; |
- case SETTINGS: |
- { |
+ case SETTINGS: { |
// Make sure that we have an integral number of 8-byte key/value pairs, |
// plus a 4-byte length field in SPDY3 and below. |
size_t values_prefix_size = (protocol_version() <= SPDY3 ? 4 : 0); |
// Size of each key/value pair in bytes. |
size_t setting_size = (protocol_version() <= SPDY3 ? 8 : 5); |
if (current_frame_length_ < GetSettingsMinimumSize() || |
- (current_frame_length_ - GetControlFrameHeaderSize()) |
- % setting_size != values_prefix_size) { |
+ (current_frame_length_ - GetControlFrameHeaderSize()) % |
+ setting_size != |
+ values_prefix_size) { |
DLOG(WARNING) << "Invalid length for SETTINGS frame: " |
<< current_frame_length_; |
set_error(SPDY_INVALID_CONTROL_FRAME); |
} else if (protocol_version() <= SPDY3 && |
current_frame_flags_ & |
- ~SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS) { |
+ ~SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS) { |
set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS); |
} else if (protocol_version() > SPDY3 && |
current_frame_flags_ & ~SETTINGS_FLAG_ACK) { |
@@ -870,41 +866,39 @@ void SpdyFramer::ProcessControlFrameHeader(uint16 control_frame_type_field) { |
set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS); |
} |
break; |
- case GOAWAY: |
- { |
- // For SPDY version < 4, there are only mandatory fields and the header |
- // has a fixed length. For SPDY version >= 4, optional opaque data may |
- // be appended to the GOAWAY frame, thus there is only a minimal length |
- // restriction. |
- if ((current_frame_length_ != GetGoAwayMinimumSize() && |
- protocol_version() <= SPDY3) || |
- (current_frame_length_ < GetGoAwayMinimumSize() && |
- protocol_version() > SPDY3)) { |
- set_error(SPDY_INVALID_CONTROL_FRAME); |
- } else if (current_frame_flags_ != 0) { |
- set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS); |
- } |
- break; |
- } |
- case HEADERS: |
- { |
- size_t min_size = GetHeadersMinimumSize(); |
- if (protocol_version() > SPDY3 && |
- (current_frame_flags_ & HEADERS_FLAG_PRIORITY)) { |
- min_size += 4; |
- } |
- if (current_frame_length_ < min_size) { |
- set_error(SPDY_INVALID_CONTROL_FRAME); |
- } else if (protocol_version() <= SPDY3 && |
- current_frame_flags_ & ~CONTROL_FLAG_FIN) { |
- set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS); |
- } else if (protocol_version() > SPDY3 && current_frame_flags_ & |
- ~(CONTROL_FLAG_FIN | HEADERS_FLAG_PRIORITY | |
- HEADERS_FLAG_END_HEADERS)) { |
- set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS); |
- } |
+ case GOAWAY: { |
+ // For SPDY version < 4, there are only mandatory fields and the header |
+ // has a fixed length. For SPDY version >= 4, optional opaque data may |
+ // be appended to the GOAWAY frame, thus there is only a minimal length |
+ // restriction. |
+ if ((current_frame_length_ != GetGoAwayMinimumSize() && |
+ protocol_version() <= SPDY3) || |
+ (current_frame_length_ < GetGoAwayMinimumSize() && |
+ protocol_version() > SPDY3)) { |
+ set_error(SPDY_INVALID_CONTROL_FRAME); |
+ } else if (current_frame_flags_ != 0) { |
+ set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS); |
} |
break; |
+ } |
+ case HEADERS: { |
+ size_t min_size = GetHeadersMinimumSize(); |
+ if (protocol_version() > SPDY3 && |
+ (current_frame_flags_ & HEADERS_FLAG_PRIORITY)) { |
+ min_size += 4; |
+ } |
+ if (current_frame_length_ < min_size) { |
+ set_error(SPDY_INVALID_CONTROL_FRAME); |
+ } else if (protocol_version() <= SPDY3 && |
+ current_frame_flags_ & ~CONTROL_FLAG_FIN) { |
+ set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS); |
+ } else if (protocol_version() > SPDY3 && |
+ current_frame_flags_ & |
+ ~(CONTROL_FLAG_FIN | HEADERS_FLAG_PRIORITY | |
+ HEADERS_FLAG_END_HEADERS)) { |
+ set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS); |
+ } |
+ } break; |
case WINDOW_UPDATE: |
if (current_frame_length_ != GetWindowUpdateSize()) { |
set_error(SPDY_INVALID_CONTROL_FRAME); |
@@ -924,8 +918,8 @@ void SpdyFramer::ProcessControlFrameHeader(uint16 control_frame_type_field) { |
set_error(SPDY_INVALID_CONTROL_FRAME); |
} else if (protocol_version() <= SPDY3 && current_frame_flags_ != 0) { |
set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS); |
- } else if (protocol_version() > SPDY3 && current_frame_flags_ & |
- ~PUSH_PROMISE_FLAG_END_PUSH_PROMISE) { |
+ } else if (protocol_version() > SPDY3 && |
+ current_frame_flags_ & ~PUSH_PROMISE_FLAG_END_PUSH_PROMISE) { |
set_error(SPDY_INVALID_CONTROL_FRAME_FLAGS); |
} |
break; |
@@ -1021,8 +1015,8 @@ void SpdyFramer::ProcessControlFrameHeader(uint16 control_frame_type_field) { |
// block. The start of the header block varies with the control type. |
DCHECK_GE(frame_size_without_variable_data, |
static_cast<int32>(current_frame_buffer_length_)); |
- remaining_control_header_ = frame_size_without_variable_data - |
- current_frame_buffer_length_; |
+ remaining_control_header_ = |
+ frame_size_without_variable_data - current_frame_buffer_length_; |
CHANGE_STATE(SPDY_CONTROL_FRAME_BEFORE_HEADER_BLOCK); |
return; |
@@ -1031,7 +1025,8 @@ void SpdyFramer::ProcessControlFrameHeader(uint16 control_frame_type_field) { |
CHANGE_STATE(SPDY_CONTROL_FRAME_PAYLOAD); |
} |
-size_t SpdyFramer::UpdateCurrentFrameBuffer(const char** data, size_t* len, |
+size_t SpdyFramer::UpdateCurrentFrameBuffer(const char** data, |
+ size_t* len, |
size_t max_bytes) { |
size_t bytes_to_read = std::min(*len, max_bytes); |
if (bytes_to_read > 0) { |
@@ -1047,11 +1042,10 @@ size_t SpdyFramer::UpdateCurrentFrameBuffer(const char** data, size_t* len, |
return bytes_to_read; |
} |
-size_t SpdyFramer::GetSerializedLength( |
- const SpdyMajorVersion spdy_version, |
- const SpdyHeaderBlock* headers) { |
- const size_t num_name_value_pairs_size |
- = (spdy_version < SPDY3) ? sizeof(uint16) : sizeof(uint32); |
+size_t SpdyFramer::GetSerializedLength(const SpdyMajorVersion spdy_version, |
+ const SpdyHeaderBlock* headers) { |
+ const size_t num_name_value_pairs_size = |
+ (spdy_version < SPDY3) ? sizeof(uint16) : sizeof(uint32); |
const size_t length_of_name_size = num_name_value_pairs_size; |
const size_t length_of_value_size = num_name_value_pairs_size; |
@@ -1117,8 +1111,7 @@ static void WriteZ(const base::StringPiece& data, |
// If we are switching from standard to non-standard data then we need to end |
// the current Huffman context to avoid it leaking between them. |
- if (out->clas == kZStandardData && |
- clas != kZStandardData) { |
+ if (out->clas == kZStandardData && clas != kZStandardData) { |
out->avail_in = 0; |
rv = deflate(out, Z_PARTIAL_FLUSH); |
DCHECK_EQ(Z_OK, rv); |
@@ -1224,19 +1217,13 @@ void SpdyFramer::WriteHeaderBlockToZ(const SpdyHeaderBlock* headers, |
} |
WriteZ(cookie, kZCookieData, z); |
} |
- } else if (it->first == "accept" || |
- it->first == "accept-charset" || |
+ } else if (it->first == "accept" || it->first == "accept-charset" || |
it->first == "accept-encoding" || |
- it->first == "accept-language" || |
- it->first == "host" || |
- it->first == "version" || |
- it->first == "method" || |
- it->first == "scheme" || |
- it->first == ":host" || |
- it->first == ":version" || |
- it->first == ":method" || |
- it->first == ":scheme" || |
- it->first == "user-agent") { |
+ it->first == "accept-language" || it->first == "host" || |
+ it->first == "version" || it->first == "method" || |
+ it->first == "scheme" || it->first == ":host" || |
+ it->first == ":version" || it->first == ":method" || |
+ it->first == ":scheme" || it->first == "user-agent") { |
WriteLengthZ(it->second.size(), length_length, kZStandardData, z); |
WriteZ(it->second, kZStandardData, z); |
} else { |
@@ -1260,8 +1247,8 @@ size_t SpdyFramer::ProcessControlFrameBeforeHeaderBlock(const char* data, |
const size_t original_len = len; |
if (remaining_control_header_ > 0) { |
- size_t bytes_read = UpdateCurrentFrameBuffer(&data, &len, |
- remaining_control_header_); |
+ size_t bytes_read = |
+ UpdateCurrentFrameBuffer(&data, &len, remaining_control_header_); |
remaining_control_header_ -= bytes_read; |
remaining_data_length_ -= bytes_read; |
} |
@@ -1272,47 +1259,45 @@ size_t SpdyFramer::ProcessControlFrameBeforeHeaderBlock(const char* data, |
reader.Seek(GetControlFrameHeaderSize()); // Seek past frame header. |
switch (current_frame_type_) { |
- case SYN_STREAM: |
- { |
- DCHECK_GE(SPDY3, protocol_version()); |
- bool successful_read = true; |
- successful_read = reader.ReadUInt31(¤t_frame_stream_id_); |
- DCHECK(successful_read); |
- if (current_frame_stream_id_ == 0) { |
- set_error(SPDY_INVALID_CONTROL_FRAME); |
- break; |
- } |
+ case SYN_STREAM: { |
+ DCHECK_GE(SPDY3, protocol_version()); |
+ bool successful_read = true; |
+ successful_read = reader.ReadUInt31(¤t_frame_stream_id_); |
+ DCHECK(successful_read); |
+ if (current_frame_stream_id_ == 0) { |
+ set_error(SPDY_INVALID_CONTROL_FRAME); |
+ break; |
+ } |
- SpdyStreamId associated_to_stream_id = kInvalidStream; |
- successful_read = reader.ReadUInt31(&associated_to_stream_id); |
- DCHECK(successful_read); |
+ SpdyStreamId associated_to_stream_id = kInvalidStream; |
+ successful_read = reader.ReadUInt31(&associated_to_stream_id); |
+ DCHECK(successful_read); |
- SpdyPriority priority = 0; |
- successful_read = reader.ReadUInt8(&priority); |
- DCHECK(successful_read); |
- if (protocol_version() <= SPDY2) { |
- priority = priority >> 6; |
- } else { |
- priority = priority >> 5; |
- } |
+ SpdyPriority priority = 0; |
+ successful_read = reader.ReadUInt8(&priority); |
+ DCHECK(successful_read); |
+ if (protocol_version() <= SPDY2) { |
+ priority = priority >> 6; |
+ } else { |
+ priority = priority >> 5; |
+ } |
- // Seek past unused byte; used to be credential slot in SPDY 3. |
- reader.Seek(1); |
+ // Seek past unused byte; used to be credential slot in SPDY 3. |
+ reader.Seek(1); |
- DCHECK(reader.IsDoneReading()); |
- if (debug_visitor_) { |
- debug_visitor_->OnReceiveCompressedFrame( |
- current_frame_stream_id_, |
- current_frame_type_, |
- current_frame_length_); |
- } |
- visitor_->OnSynStream( |
- current_frame_stream_id_, |
- associated_to_stream_id, |
- priority, |
- (current_frame_flags_ & CONTROL_FLAG_FIN) != 0, |
- (current_frame_flags_ & CONTROL_FLAG_UNIDIRECTIONAL) != 0); |
+ DCHECK(reader.IsDoneReading()); |
+ if (debug_visitor_) { |
+ debug_visitor_->OnReceiveCompressedFrame(current_frame_stream_id_, |
+ current_frame_type_, |
+ current_frame_length_); |
} |
+ visitor_->OnSynStream( |
+ current_frame_stream_id_, |
+ associated_to_stream_id, |
+ priority, |
+ (current_frame_flags_ & CONTROL_FLAG_FIN) != 0, |
+ (current_frame_flags_ & CONTROL_FLAG_UNIDIRECTIONAL) != 0); |
+ } |
CHANGE_STATE(SPDY_CONTROL_FRAME_HEADER_BLOCK); |
break; |
case SETTINGS: |
@@ -1321,7 +1306,8 @@ size_t SpdyFramer::ProcessControlFrameBeforeHeaderBlock(const char* data, |
visitor_->OnSettingsAck(); |
CHANGE_STATE(SPDY_AUTO_RESET); |
} else { |
- visitor_->OnSettings(current_frame_flags_ & |
+ visitor_->OnSettings( |
+ current_frame_flags_ & |
SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS); |
CHANGE_STATE(SPDY_SETTINGS_FRAME_PAYLOAD); |
} |
@@ -1347,8 +1333,8 @@ size_t SpdyFramer::ProcessControlFrameBeforeHeaderBlock(const char* data, |
reader.Seek(2); |
} |
if (protocol_version() > SPDY3 && |
- !(current_frame_flags_ & HEADERS_FLAG_END_HEADERS) && |
- current_frame_type_ == HEADERS) { |
+ !(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; |
} |
@@ -1367,88 +1353,80 @@ size_t SpdyFramer::ProcessControlFrameBeforeHeaderBlock(const char* data, |
reported_type = SYN_STREAM; |
} |
debug_visitor_->OnReceiveCompressedFrame( |
- current_frame_stream_id_, |
- reported_type, |
- current_frame_length_); |
+ current_frame_stream_id_, reported_type, current_frame_length_); |
} |
if (current_frame_type_ == SYN_REPLY) { |
visitor_->OnSynReply( |
current_frame_stream_id_, |
(current_frame_flags_ & CONTROL_FLAG_FIN) != 0); |
} else if (protocol_version() > SPDY3 && |
- current_frame_flags_ & HEADERS_FLAG_PRIORITY) { |
+ current_frame_flags_ & HEADERS_FLAG_PRIORITY) { |
// SPDY 4+ is missing SYN_STREAM. Simulate it so that API changes |
// can be made independent of wire changes. |
- visitor_->OnSynStream( |
- current_frame_stream_id_, |
- 0, // associated_to_stream_id |
- priority, |
- current_frame_flags_ & CONTROL_FLAG_FIN, |
- false); // unidirectional |
+ visitor_->OnSynStream(current_frame_stream_id_, |
+ 0, // associated_to_stream_id |
+ priority, |
+ current_frame_flags_ & CONTROL_FLAG_FIN, |
+ false); // unidirectional |
} else { |
- visitor_->OnHeaders( |
- current_frame_stream_id_, |
- (current_frame_flags_ & CONTROL_FLAG_FIN) != 0, |
- expect_continuation_ == 0); |
+ visitor_->OnHeaders(current_frame_stream_id_, |
+ (current_frame_flags_ & CONTROL_FLAG_FIN) != 0, |
+ expect_continuation_ == 0); |
} |
} |
CHANGE_STATE(SPDY_CONTROL_FRAME_HEADER_BLOCK); |
break; |
- case PUSH_PROMISE: |
- { |
- DCHECK_LT(SPDY3, protocol_version()); |
- if (current_frame_stream_id_ == 0) { |
- set_error(SPDY_INVALID_CONTROL_FRAME); |
- break; |
- } |
- SpdyStreamId promised_stream_id = kInvalidStream; |
- bool successful_read = reader.ReadUInt31(&promised_stream_id); |
- DCHECK(successful_read); |
- DCHECK(reader.IsDoneReading()); |
- if (promised_stream_id == 0) { |
- set_error(SPDY_INVALID_CONTROL_FRAME); |
- break; |
- } |
- if (!(current_frame_flags_ & PUSH_PROMISE_FLAG_END_PUSH_PROMISE)) { |
- expect_continuation_ = current_frame_stream_id_; |
- } |
- if (debug_visitor_) { |
- debug_visitor_->OnReceiveCompressedFrame( |
- current_frame_stream_id_, |
- current_frame_type_, |
- current_frame_length_); |
- } |
- visitor_->OnPushPromise(current_frame_stream_id_, |
- promised_stream_id, |
- (current_frame_flags_ & |
- PUSH_PROMISE_FLAG_END_PUSH_PROMISE) != 0); |
+ case PUSH_PROMISE: { |
+ DCHECK_LT(SPDY3, protocol_version()); |
+ if (current_frame_stream_id_ == 0) { |
+ set_error(SPDY_INVALID_CONTROL_FRAME); |
+ break; |
+ } |
+ SpdyStreamId promised_stream_id = kInvalidStream; |
+ bool successful_read = reader.ReadUInt31(&promised_stream_id); |
+ DCHECK(successful_read); |
+ DCHECK(reader.IsDoneReading()); |
+ if (promised_stream_id == 0) { |
+ set_error(SPDY_INVALID_CONTROL_FRAME); |
+ break; |
+ } |
+ if (!(current_frame_flags_ & PUSH_PROMISE_FLAG_END_PUSH_PROMISE)) { |
+ expect_continuation_ = current_frame_stream_id_; |
} |
+ if (debug_visitor_) { |
+ debug_visitor_->OnReceiveCompressedFrame(current_frame_stream_id_, |
+ current_frame_type_, |
+ current_frame_length_); |
+ } |
+ visitor_->OnPushPromise( |
+ current_frame_stream_id_, |
+ promised_stream_id, |
+ (current_frame_flags_ & PUSH_PROMISE_FLAG_END_PUSH_PROMISE) != 0); |
+ } |
CHANGE_STATE(SPDY_CONTROL_FRAME_HEADER_BLOCK); |
break; |
- case CONTINUATION: |
- { |
- // Check to make sure the stream id of the current frame is |
- // the same as that of the preceding frame. |
- // If we're at this point we should already know that |
- // expect_continuation_ != 0, so this doubles as a check |
- // that current_frame_stream_id != 0. |
- if (current_frame_stream_id_ != expect_continuation_) { |
- set_error(SPDY_INVALID_CONTROL_FRAME); |
- break; |
- } |
- if (current_frame_flags_ & HEADERS_FLAG_END_HEADERS) { |
- expect_continuation_ = 0; |
- } |
- if (debug_visitor_) { |
- debug_visitor_->OnReceiveCompressedFrame( |
- current_frame_stream_id_, |
- current_frame_type_, |
- current_frame_length_); |
- } |
- visitor_->OnContinuation(current_frame_stream_id_, |
- (current_frame_flags_ & |
- HEADERS_FLAG_END_HEADERS) != 0); |
+ case CONTINUATION: { |
+ // Check to make sure the stream id of the current frame is |
+ // the same as that of the preceding frame. |
+ // If we're at this point we should already know that |
+ // expect_continuation_ != 0, so this doubles as a check |
+ // that current_frame_stream_id != 0. |
+ if (current_frame_stream_id_ != expect_continuation_) { |
+ set_error(SPDY_INVALID_CONTROL_FRAME); |
+ break; |
+ } |
+ if (current_frame_flags_ & HEADERS_FLAG_END_HEADERS) { |
+ expect_continuation_ = 0; |
} |
+ if (debug_visitor_) { |
+ debug_visitor_->OnReceiveCompressedFrame(current_frame_stream_id_, |
+ current_frame_type_, |
+ current_frame_length_); |
+ } |
+ visitor_->OnContinuation( |
+ current_frame_stream_id_, |
+ (current_frame_flags_ & HEADERS_FLAG_END_HEADERS) != 0); |
+ } |
CHANGE_STATE(SPDY_CONTROL_FRAME_HEADER_BLOCK); |
break; |
default: |
@@ -1468,18 +1446,15 @@ size_t SpdyFramer::ProcessControlFrameHeaderBlock(const char* data, |
DCHECK_EQ(SPDY_CONTROL_FRAME_HEADER_BLOCK, state_); |
bool processed_successfully = true; |
- if (current_frame_type_ != SYN_STREAM && |
- current_frame_type_ != SYN_REPLY && |
- current_frame_type_ != HEADERS && |
- current_frame_type_ != PUSH_PROMISE && |
+ if (current_frame_type_ != SYN_STREAM && current_frame_type_ != SYN_REPLY && |
+ current_frame_type_ != HEADERS && current_frame_type_ != PUSH_PROMISE && |
current_frame_type_ != CONTINUATION) { |
LOG(DFATAL) << "Unhandled frame type in ProcessControlFrameHeaderBlock."; |
} |
size_t process_bytes = std::min(data_len, remaining_data_length_); |
if (is_hpack_header_block) { |
- if (!hpack_decoder_.HandleControlFrameHeadersData(current_frame_stream_id_, |
- data, |
- process_bytes)) { |
+ if (!hpack_decoder_.HandleControlFrameHeadersData( |
+ current_frame_stream_id_, data, process_bytes)) { |
// TODO(jgraettinger): Finer-grained HPACK error codes. |
set_error(SPDY_DECOMPRESS_FAILURE); |
processed_successfully = false; |
@@ -1500,7 +1475,7 @@ size_t SpdyFramer::ProcessControlFrameHeaderBlock(const char* data, |
if (expect_continuation_ == 0) { |
if (is_hpack_header_block) { |
if (!hpack_decoder_.HandleControlFrameHeadersComplete( |
- current_frame_stream_id_)) { |
+ current_frame_stream_id_)) { |
set_error(SPDY_DECOMPRESS_FAILURE); |
processed_successfully = false; |
} else { |
@@ -1601,9 +1576,8 @@ void SpdyFramer::DeliverHpackBlockAsSpdy3Block() { |
ProcessControlFrameHeaderBlock(NULL, 0, false); |
return; |
} |
- SpdyFrameBuilder builder( |
- GetSerializedLength(protocol_version(), &block), |
- SPDY3); |
+ SpdyFrameBuilder builder(GetSerializedLength(protocol_version(), &block), |
+ SPDY3); |
SerializeNameValueBlockWithoutCompression(&builder, block); |
scoped_ptr<SpdyFrame> frame(builder.take()); |
@@ -1622,8 +1596,8 @@ bool SpdyFramer::ProcessSetting(const char* data) { |
// Maintain behavior of old SPDY 2 bug with byte ordering of flags/id. |
if (protocol_version() <= SPDY3) { |
const uint32 id_and_flags_wire = *(reinterpret_cast<const uint32*>(data)); |
- SettingsFlagsAndId id_and_flags = |
- SettingsFlagsAndId::FromWireFormat(protocol_version(), id_and_flags_wire); |
+ SettingsFlagsAndId id_and_flags = SettingsFlagsAndId::FromWireFormat( |
+ protocol_version(), id_and_flags_wire); |
id_field = id_and_flags.id(); |
flags = id_and_flags.flags(); |
value = ntohl(*(reinterpret_cast<const uint32*>(data + 4))); |
@@ -1666,8 +1640,8 @@ bool SpdyFramer::ProcessSetting(const char* data) { |
size_t SpdyFramer::ProcessControlFramePayload(const char* data, size_t len) { |
size_t original_len = len; |
- size_t bytes_read = UpdateCurrentFrameBuffer(&data, &len, |
- remaining_data_length_); |
+ size_t bytes_read = |
+ UpdateCurrentFrameBuffer(&data, &len, remaining_data_length_); |
remaining_data_length_ -= bytes_read; |
if (remaining_data_length_ == 0) { |
SpdyFrameReader reader(current_frame_buffer_.get(), |
@@ -1677,42 +1651,38 @@ size_t SpdyFramer::ProcessControlFramePayload(const char* data, size_t len) { |
// Use frame-specific handlers. |
switch (current_frame_type_) { |
case PING: { |
- SpdyPingId id = 0; |
- bool is_ack = protocol_version() > SPDY3 && |
- (current_frame_flags_ & PING_FLAG_ACK); |
- bool successful_read = true; |
- if (protocol_version() <= SPDY3) { |
- uint32 id32 = 0; |
- successful_read = reader.ReadUInt32(&id32); |
- id = id32; |
- } else { |
- successful_read = reader.ReadUInt64(&id); |
- } |
- DCHECK(successful_read); |
- DCHECK(reader.IsDoneReading()); |
- visitor_->OnPing(id, is_ack); |
+ SpdyPingId id = 0; |
+ bool is_ack = protocol_version() > SPDY3 && |
+ (current_frame_flags_ & PING_FLAG_ACK); |
+ bool successful_read = true; |
+ if (protocol_version() <= SPDY3) { |
+ uint32 id32 = 0; |
+ successful_read = reader.ReadUInt32(&id32); |
+ id = id32; |
+ } else { |
+ successful_read = reader.ReadUInt64(&id); |
} |
- break; |
+ DCHECK(successful_read); |
+ DCHECK(reader.IsDoneReading()); |
+ visitor_->OnPing(id, is_ack); |
+ } break; |
case WINDOW_UPDATE: { |
- uint32 delta_window_size = 0; |
- bool successful_read = true; |
- if (protocol_version() <= SPDY3) { |
- successful_read = reader.ReadUInt31(¤t_frame_stream_id_); |
- DCHECK(successful_read); |
- } |
- successful_read = reader.ReadUInt32(&delta_window_size); |
+ uint32 delta_window_size = 0; |
+ bool successful_read = true; |
+ if (protocol_version() <= SPDY3) { |
+ successful_read = reader.ReadUInt31(¤t_frame_stream_id_); |
DCHECK(successful_read); |
- DCHECK(reader.IsDoneReading()); |
- visitor_->OnWindowUpdate(current_frame_stream_id_, |
- delta_window_size); |
} |
- break; |
+ successful_read = reader.ReadUInt32(&delta_window_size); |
+ DCHECK(successful_read); |
+ DCHECK(reader.IsDoneReading()); |
+ visitor_->OnWindowUpdate(current_frame_stream_id_, delta_window_size); |
+ } break; |
case BLOCKED: { |
- DCHECK_LT(SPDY3, protocol_version()); |
- DCHECK(reader.IsDoneReading()); |
- visitor_->OnBlocked(current_frame_stream_id_); |
- } |
- break; |
+ DCHECK_LT(SPDY3, protocol_version()); |
+ DCHECK(reader.IsDoneReading()); |
+ visitor_->OnBlocked(current_frame_stream_id_); |
+ } break; |
default: |
// Unreachable. |
LOG(FATAL) << "Unhandled control frame " << current_frame_type_; |
@@ -1758,8 +1728,8 @@ size_t SpdyFramer::ProcessGoAwayFramePayload(const char* data, size_t len) { |
DCHECK(successful_read); |
if (SpdyConstants::IsValidGoAwayStatus(protocol_version(), |
status_raw)) { |
- status = SpdyConstants::ParseGoAwayStatus(protocol_version(), |
- status_raw); |
+ status = |
+ SpdyConstants::ParseGoAwayStatus(protocol_version(), status_raw); |
} else { |
DCHECK(false); |
// Throw an error for SPDY4+, keep liberal behavior |
@@ -1974,8 +1944,8 @@ size_t SpdyFramer::ProcessIgnoredControlFramePayload(/*const char* data,*/ |
} |
size_t SpdyFramer::ParseHeaderBlockInBuffer(const char* header_data, |
- size_t header_length, |
- SpdyHeaderBlock* block) const { |
+ size_t header_length, |
+ SpdyHeaderBlock* block) const { |
SpdyFrameReader reader(header_data, header_length); |
// Read number of headers. |
@@ -2000,7 +1970,7 @@ size_t SpdyFramer::ParseHeaderBlockInBuffer(const char* header_data, |
// Read header name. |
if ((protocol_version() <= SPDY2) ? !reader.ReadStringPiece16(&temp) |
- : !reader.ReadStringPiece32(&temp)) { |
+ : !reader.ReadStringPiece32(&temp)) { |
DVLOG(1) << "Unable to read header name (" << index + 1 << " of " |
<< num_headers << ")."; |
return 0; |
@@ -2009,7 +1979,7 @@ size_t SpdyFramer::ParseHeaderBlockInBuffer(const char* header_data, |
// Read header value. |
if ((protocol_version() <= SPDY2) ? !reader.ReadStringPiece16(&temp) |
- : !reader.ReadStringPiece32(&temp)) { |
+ : !reader.ReadStringPiece32(&temp)) { |
DVLOG(1) << "Unable to read header value (" << index + 1 << " of " |
<< num_headers << ")."; |
return 0; |
@@ -2047,9 +2017,9 @@ SpdySerializedFrame* SpdyFramer::SerializeData( |
++num_padding_fields; |
} |
- const size_t size_with_padding = num_padding_fields + |
- data_ir.data().length() + data_ir.padding_payload_len() + |
- GetDataFrameMinimumSize(); |
+ const size_t size_with_padding = |
+ num_padding_fields + data_ir.data().length() + |
+ data_ir.padding_payload_len() + GetDataFrameMinimumSize(); |
SpdyFrameBuilder builder(size_with_padding, protocol_version()); |
builder.WriteDataFrameHeader(*this, data_ir.stream_id(), flags); |
if (data_ir.pad_high()) { |
@@ -2105,8 +2075,9 @@ SpdySerializedFrame* SpdyFramer::SerializeDataFrameHeaderWithPaddingLengthField( |
if (data_ir.pad_low()) { |
builder.WriteUInt8(data_ir.padding_payload_len() & 0xff); |
} |
- builder.OverwriteLength(*this, num_padding_fields + |
- data_ir.data().length() + data_ir.padding_payload_len()); |
+ builder.OverwriteLength(*this, |
+ num_padding_fields + data_ir.data().length() + |
+ data_ir.padding_payload_len()); |
} else { |
builder.OverwriteLength(*this, data_ir.data().length()); |
} |
@@ -2144,8 +2115,8 @@ SpdySerializedFrame* SpdyFramer::SerializeSynStream( |
string hpack_encoding; |
if (protocol_version() > SPDY3) { |
if (enable_compression_) { |
- hpack_encoder_.EncodeHeaderSet( |
- syn_stream.name_value_block(), &hpack_encoding); |
+ hpack_encoder_.EncodeHeaderSet(syn_stream.name_value_block(), |
+ &hpack_encoding); |
} else { |
hpack_encoder_.EncodeHeaderSetWithoutCompression( |
syn_stream.name_value_block(), &hpack_encoding); |
@@ -2163,10 +2134,7 @@ SpdySerializedFrame* SpdyFramer::SerializeSynStream( |
builder.WriteUInt8(priority << ((protocol_version() <= SPDY2) ? 6 : 5)); |
builder.WriteUInt8(0); // Unused byte where credential slot used to be. |
} else { |
- builder.BeginNewFrame(*this, |
- HEADERS, |
- flags, |
- syn_stream.stream_id()); |
+ builder.BeginNewFrame(*this, HEADERS, flags, syn_stream.stream_id()); |
builder.WriteUInt32(priority); |
} |
DCHECK_EQ(GetSynStreamMinimumSize(), builder.length()); |
@@ -2177,15 +2145,14 @@ SpdySerializedFrame* SpdyFramer::SerializeSynStream( |
} |
if (debug_visitor_) { |
- const size_t payload_len = protocol_version() > SPDY3 ? |
- hpack_encoding.size() : |
- GetSerializedLength(protocol_version(), |
- &(syn_stream.name_value_block())); |
+ const size_t payload_len = |
+ protocol_version() > SPDY3 |
+ ? hpack_encoding.size() |
+ : GetSerializedLength(protocol_version(), |
+ &(syn_stream.name_value_block())); |
// SPDY 4 reports this compression as a SYN_STREAM compression. |
- debug_visitor_->OnSendCompressedFrame(syn_stream.stream_id(), |
- SYN_STREAM, |
- payload_len, |
- builder.length()); |
+ debug_visitor_->OnSendCompressedFrame( |
+ syn_stream.stream_id(), SYN_STREAM, payload_len, builder.length()); |
} |
return builder.take(); |
@@ -2209,8 +2176,8 @@ SpdySerializedFrame* SpdyFramer::SerializeSynReply( |
string hpack_encoding; |
if (protocol_version() > SPDY3) { |
if (enable_compression_) { |
- hpack_encoder_.EncodeHeaderSet( |
- syn_reply.name_value_block(), &hpack_encoding); |
+ hpack_encoder_.EncodeHeaderSet(syn_reply.name_value_block(), |
+ &hpack_encoding); |
} else { |
hpack_encoder_.EncodeHeaderSetWithoutCompression( |
syn_reply.name_value_block(), &hpack_encoding); |
@@ -2225,10 +2192,7 @@ SpdySerializedFrame* SpdyFramer::SerializeSynReply( |
builder.WriteControlFrameHeader(*this, SYN_REPLY, flags); |
builder.WriteUInt32(syn_reply.stream_id()); |
} else { |
- builder.BeginNewFrame(*this, |
- HEADERS, |
- flags, |
- syn_reply.stream_id()); |
+ builder.BeginNewFrame(*this, HEADERS, flags, syn_reply.stream_id()); |
} |
if (protocol_version() < SPDY3) { |
builder.WriteUInt16(0); // Unused. |
@@ -2241,14 +2205,13 @@ SpdySerializedFrame* SpdyFramer::SerializeSynReply( |
} |
if (debug_visitor_) { |
- const size_t payload_len = protocol_version() > SPDY3 ? |
- hpack_encoding.size() : |
- GetSerializedLength(protocol_version(), |
- &(syn_reply.name_value_block())); |
- debug_visitor_->OnSendCompressedFrame(syn_reply.stream_id(), |
- SYN_REPLY, |
- payload_len, |
- builder.length()); |
+ const size_t payload_len = |
+ protocol_version() > SPDY3 |
+ ? hpack_encoding.size() |
+ : GetSerializedLength(protocol_version(), |
+ &(syn_reply.name_value_block())); |
+ debug_visitor_->OnSendCompressedFrame( |
+ syn_reply.stream_id(), SYN_REPLY, payload_len, builder.length()); |
} |
return builder.take(); |
@@ -2304,8 +2267,8 @@ SpdySerializedFrame* SpdyFramer::SerializeSettings( |
size_t setting_size = (protocol_version() <= SPDY3 ? 8 : 5); |
// Size, in bytes, of this SETTINGS frame. |
- const size_t size = GetSettingsMinimumSize() + |
- (values->size() * setting_size); |
+ const size_t size = |
+ GetSettingsMinimumSize() + (values->size() * setting_size); |
SpdyFrameBuilder builder(size, protocol_version()); |
if (protocol_version() <= SPDY3) { |
builder.WriteControlFrameHeader(*this, SETTINGS, flags); |
@@ -2339,8 +2302,8 @@ SpdySerializedFrame* SpdyFramer::SerializeSettings( |
uint32 id_and_flags_wire = flags_and_id.GetWireFormat(protocol_version()); |
builder.WriteBytes(&id_and_flags_wire, 4); |
} else { |
- builder.WriteUInt8(SpdyConstants::SerializeSettingId(protocol_version(), |
- it->first)); |
+ builder.WriteUInt8( |
+ SpdyConstants::SerializeSettingId(protocol_version(), it->first)); |
} |
builder.WriteUInt32(it->second.value); |
} |
@@ -2367,7 +2330,6 @@ SpdySerializedFrame* SpdyFramer::SerializePing(const SpdyPingIR& ping) const { |
SpdySerializedFrame* SpdyFramer::SerializeGoAway( |
const SpdyGoAwayIR& goaway) const { |
- |
// Compute the output buffer size, take opaque data into account. |
uint16 expected_length = GetGoAwayMinimumSize(); |
if (protocol_version() > SPDY3) { |
@@ -2433,8 +2395,8 @@ SpdySerializedFrame* SpdyFramer::SerializeHeaders( |
string hpack_encoding; |
if (protocol_version() > SPDY3) { |
if (enable_compression_) { |
- hpack_encoder_.EncodeHeaderSet( |
- headers.name_value_block(), &hpack_encoding); |
+ hpack_encoder_.EncodeHeaderSet(headers.name_value_block(), |
+ &hpack_encoding); |
} else { |
hpack_encoder_.EncodeHeaderSetWithoutCompression( |
headers.name_value_block(), &hpack_encoding); |
@@ -2454,10 +2416,7 @@ SpdySerializedFrame* SpdyFramer::SerializeHeaders( |
builder.WriteControlFrameHeader(*this, HEADERS, flags); |
builder.WriteUInt32(headers.stream_id()); |
} else { |
- builder.BeginNewFrame(*this, |
- HEADERS, |
- flags, |
- headers.stream_id()); |
+ builder.BeginNewFrame(*this, HEADERS, flags, headers.stream_id()); |
if (headers.has_priority()) { |
builder.WriteUInt32(priority); |
} |
@@ -2468,23 +2427,20 @@ SpdySerializedFrame* SpdyFramer::SerializeHeaders( |
DCHECK_EQ(GetHeadersMinimumSize(), builder.length()); |
if (protocol_version() > SPDY3) { |
- WritePayloadWithContinuation(&builder, |
- hpack_encoding, |
- headers.stream_id(), |
- HEADERS); |
+ WritePayloadWithContinuation( |
+ &builder, hpack_encoding, headers.stream_id(), HEADERS); |
} else { |
SerializeNameValueBlock(&builder, headers); |
} |
if (debug_visitor_) { |
- const size_t payload_len = protocol_version() > SPDY3 ? |
- hpack_encoding.size() : |
- GetSerializedLength(protocol_version(), |
- &(headers.name_value_block())); |
- debug_visitor_->OnSendCompressedFrame(headers.stream_id(), |
- HEADERS, |
- payload_len, |
- builder.length()); |
+ const size_t payload_len = |
+ protocol_version() > SPDY3 |
+ ? hpack_encoding.size() |
+ : GetSerializedLength(protocol_version(), |
+ &(headers.name_value_block())); |
+ debug_visitor_->OnSendCompressedFrame( |
+ headers.stream_id(), HEADERS, payload_len, builder.length()); |
} |
return builder.take(); |
@@ -2497,10 +2453,8 @@ SpdySerializedFrame* SpdyFramer::SerializeWindowUpdate( |
builder.WriteControlFrameHeader(*this, WINDOW_UPDATE, kNoFlags); |
builder.WriteUInt32(window_update.stream_id()); |
} else { |
- builder.BeginNewFrame(*this, |
- WINDOW_UPDATE, |
- kNoFlags, |
- window_update.stream_id()); |
+ builder.BeginNewFrame( |
+ *this, WINDOW_UPDATE, kNoFlags, window_update.stream_id()); |
} |
builder.WriteUInt32(window_update.delta()); |
DCHECK_EQ(GetWindowUpdateSize(), builder.length()); |
@@ -2530,8 +2484,8 @@ SpdyFrame* SpdyFramer::SerializePushPromise( |
string hpack_encoding; |
if (protocol_version() > SPDY3) { |
if (enable_compression_) { |
- hpack_encoder_.EncodeHeaderSet( |
- push_promise.name_value_block(), &hpack_encoding); |
+ hpack_encoder_.EncodeHeaderSet(push_promise.name_value_block(), |
+ &hpack_encoding); |
} else { |
hpack_encoder_.EncodeHeaderSetWithoutCompression( |
push_promise.name_value_block(), &hpack_encoding); |
@@ -2547,29 +2501,25 @@ SpdyFrame* SpdyFramer::SerializePushPromise( |
} |
SpdyFrameBuilder builder(size, protocol_version()); |
- builder.BeginNewFrame(*this, |
- PUSH_PROMISE, |
- flags, |
- push_promise.stream_id()); |
+ builder.BeginNewFrame(*this, PUSH_PROMISE, flags, push_promise.stream_id()); |
builder.WriteUInt32(push_promise.promised_stream_id()); |
DCHECK_EQ(GetPushPromiseMinimumSize(), builder.length()); |
if (protocol_version() > SPDY3) { |
- WritePayloadWithContinuation(&builder, |
- hpack_encoding, |
- push_promise.stream_id(), |
- PUSH_PROMISE); |
+ WritePayloadWithContinuation( |
+ &builder, hpack_encoding, push_promise.stream_id(), PUSH_PROMISE); |
} else { |
SerializeNameValueBlock(&builder, push_promise); |
} |
if (debug_visitor_) { |
- const size_t payload_len = protocol_version() > SPDY3 ? |
- hpack_encoding.size() : |
- GetSerializedLength(protocol_version(), |
- &(push_promise.name_value_block())); |
- debug_visitor_->OnSendCompressedFrame(push_promise.stream_id(), |
- PUSH_PROMISE, payload_len, builder.length()); |
+ const size_t payload_len = |
+ protocol_version() > SPDY3 |
+ ? hpack_encoding.size() |
+ : GetSerializedLength(protocol_version(), |
+ &(push_promise.name_value_block())); |
+ debug_visitor_->OnSendCompressedFrame( |
+ push_promise.stream_id(), PUSH_PROMISE, payload_len, builder.length()); |
} |
return builder.take(); |
@@ -2590,8 +2540,8 @@ SpdyFrame* SpdyFramer::SerializeContinuation( |
size_t size = GetContinuationMinimumSize(); |
string hpack_encoding; |
if (enable_compression_) { |
- hpack_encoder_.EncodeHeaderSet( |
- continuation.name_value_block(), &hpack_encoding); |
+ hpack_encoder_.EncodeHeaderSet(continuation.name_value_block(), |
+ &hpack_encoding); |
} else { |
hpack_encoder_.EncodeHeaderSetWithoutCompression( |
continuation.name_value_block(), &hpack_encoding); |
@@ -2599,16 +2549,15 @@ SpdyFrame* SpdyFramer::SerializeContinuation( |
size += hpack_encoding.size(); |
SpdyFrameBuilder builder(size, protocol_version()); |
- builder.BeginNewFrame(*this, CONTINUATION, flags, |
- continuation.stream_id()); |
+ builder.BeginNewFrame(*this, CONTINUATION, flags, continuation.stream_id()); |
DCHECK_EQ(GetContinuationMinimumSize(), builder.length()); |
builder.WriteBytes(&hpack_encoding[0], hpack_encoding.size()); |
if (debug_visitor_) { |
const size_t payload_len = hpack_encoding.size(); |
- debug_visitor_->OnSendCompressedFrame(continuation.stream_id(), |
- CONTINUATION, payload_len, builder.length()); |
+ debug_visitor_->OnSendCompressedFrame( |
+ continuation.stream_id(), CONTINUATION, payload_len, builder.length()); |
} |
return builder.take(); |
@@ -2679,7 +2628,7 @@ SpdySerializedFrame* SpdyFramer::SerializeFrame(const SpdyFrameIR& frame) { |
size_t SpdyFramer::GetSerializedLength(const SpdyHeaderBlock& headers) { |
CHECK_GE(SPDY3, protocol_version()); |
const size_t uncompressed_length = |
- GetSerializedLength(protocol_version(), &headers); |
+ GetSerializedLength(protocol_version(), &headers); |
if (!enable_compression_) { |
return uncompressed_length; |
} |
@@ -2703,53 +2652,49 @@ void SpdyFramer::WritePayloadWithContinuation(SpdyFrameBuilder* builder, |
SpdyFrameType type) { |
const size_t kMaxControlFrameSize = GetControlFrameBufferMaxSize(); |
- // In addition to the prefix, fixed_field_size includes the size of |
- // any fields that come before the variable-length name/value block. |
- size_t fixed_field_size = 0; |
- uint8 end_flag = 0; |
- uint8 flags = 0; |
- if (type == HEADERS) { |
- fixed_field_size = GetHeadersMinimumSize(); |
- end_flag = HEADERS_FLAG_END_HEADERS; |
- } else if (type == PUSH_PROMISE) { |
- fixed_field_size = GetPushPromiseMinimumSize(); |
- end_flag = PUSH_PROMISE_FLAG_END_PUSH_PROMISE; |
- } else { |
- DLOG(FATAL) << "CONTINUATION frames cannot be used with frame type " |
- << FrameTypeToString(type); |
- } |
- |
- // Write as much of the payload as possible into the initial frame. |
- size_t bytes_remaining = hpack_encoding.size() - |
- std::min(hpack_encoding.size(), |
- kMaxControlFrameSize - fixed_field_size); |
- builder->WriteBytes(&hpack_encoding[0], |
- hpack_encoding.size() - bytes_remaining); |
- |
- if (bytes_remaining > 0) { |
- builder->OverwriteLength(*this, |
- kMaxControlFrameSize - GetControlFrameHeaderSize()); |
- } |
- |
- // Tack on CONTINUATION frames for the overflow. |
- while (bytes_remaining > 0) { |
- size_t bytes_to_write = std::min(bytes_remaining, |
- kMaxControlFrameSize - |
- GetContinuationMinimumSize()); |
- // Write CONTINUATION frame prefix. |
- if (bytes_remaining == bytes_to_write) { |
- flags |= end_flag; |
- } |
- builder->BeginNewFrame(*this, |
- CONTINUATION, |
- flags, |
- stream_id); |
- // Write payload fragment. |
- builder->WriteBytes(&hpack_encoding[hpack_encoding.size() - |
- bytes_remaining], |
- bytes_to_write); |
- bytes_remaining -= bytes_to_write; |
+ // In addition to the prefix, fixed_field_size includes the size of |
+ // any fields that come before the variable-length name/value block. |
+ size_t fixed_field_size = 0; |
+ uint8 end_flag = 0; |
+ uint8 flags = 0; |
+ if (type == HEADERS) { |
+ fixed_field_size = GetHeadersMinimumSize(); |
+ end_flag = HEADERS_FLAG_END_HEADERS; |
+ } else if (type == PUSH_PROMISE) { |
+ fixed_field_size = GetPushPromiseMinimumSize(); |
+ end_flag = PUSH_PROMISE_FLAG_END_PUSH_PROMISE; |
+ } else { |
+ DLOG(FATAL) << "CONTINUATION frames cannot be used with frame type " |
+ << FrameTypeToString(type); |
+ } |
+ |
+ // Write as much of the payload as possible into the initial frame. |
+ size_t bytes_remaining = |
+ hpack_encoding.size() - |
+ std::min(hpack_encoding.size(), kMaxControlFrameSize - fixed_field_size); |
+ builder->WriteBytes(&hpack_encoding[0], |
+ hpack_encoding.size() - bytes_remaining); |
+ |
+ if (bytes_remaining > 0) { |
+ builder->OverwriteLength( |
+ *this, kMaxControlFrameSize - GetControlFrameHeaderSize()); |
+ } |
+ |
+ // Tack on CONTINUATION frames for the overflow. |
+ while (bytes_remaining > 0) { |
+ size_t bytes_to_write = std::min( |
+ bytes_remaining, kMaxControlFrameSize - GetContinuationMinimumSize()); |
+ // Write CONTINUATION frame prefix. |
+ if (bytes_remaining == bytes_to_write) { |
+ flags |= end_flag; |
} |
+ builder->BeginNewFrame(*this, CONTINUATION, flags, stream_id); |
+ // Write payload fragment. |
+ builder->WriteBytes( |
+ &hpack_encoding[hpack_encoding.size() - bytes_remaining], |
+ bytes_to_write); |
+ bytes_remaining -= bytes_to_write; |
+ } |
} |
// The following compression setting are based on Brian Olson's analysis. See |
@@ -2760,7 +2705,7 @@ void SpdyFramer::WritePayloadWithContinuation(SpdyFrameBuilder* builder, |
// so disable compression in that case. |
// TODO(phajdan.jr): Remove the special case when it's no longer necessary. |
static const int kCompressorLevel = 0; |
-#else // !defined(USE_SYSTEM_ZLIB) |
+#else // !defined(USE_SYSTEM_ZLIB) |
static const int kCompressorLevel = 9; |
#endif // !defined(USE_SYSTEM_ZLIB) |
static const int kCompressorWindowSizeInBits = 11; |
@@ -2780,10 +2725,10 @@ z_stream* SpdyFramer::GetHeaderCompressor() { |
kCompressorMemLevel, |
Z_DEFAULT_STRATEGY); |
if (success == Z_OK) { |
- const char* dictionary = (protocol_version() <= SPDY2) ? |
- kV2Dictionary : kV3Dictionary; |
- const int dictionary_size = (protocol_version() <= SPDY2) ? |
- kV2DictionarySize : kV3DictionarySize; |
+ const char* dictionary = |
+ (protocol_version() <= SPDY2) ? kV2Dictionary : kV3Dictionary; |
+ const int dictionary_size = |
+ (protocol_version() <= SPDY2) ? kV2DictionarySize : kV3DictionarySize; |
success = deflateSetDictionary(header_compressor_.get(), |
reinterpret_cast<const Bytef*>(dictionary), |
dictionary_size); |
@@ -2843,13 +2788,14 @@ bool SpdyFramer::IncrementallyDecompressControlFrameHeaderData( |
int rv = inflate(decomp, Z_SYNC_FLUSH); |
if (rv == Z_NEED_DICT) { |
- const char* dictionary = (protocol_version() <= SPDY2) ? kV2Dictionary |
- : kV3Dictionary; |
- const int dictionary_size = (protocol_version() <= SPDY2) ? |
- kV2DictionarySize : kV3DictionarySize; |
+ const char* dictionary = |
+ (protocol_version() <= SPDY2) ? kV2Dictionary : kV3Dictionary; |
+ const int dictionary_size = |
+ (protocol_version() <= SPDY2) ? kV2DictionarySize : kV3DictionarySize; |
const DictionaryIds& ids = g_dictionary_ids.Get(); |
- const uLong dictionary_id = (protocol_version() <= SPDY2) ? |
- ids.v2_dictionary_id : ids.v3_dictionary_id; |
+ const uLong dictionary_id = (protocol_version() <= SPDY2) |
+ ? ids.v2_dictionary_id |
+ : ids.v3_dictionary_id; |
// Need to try again with the right dictionary. |
if (decomp->adler == dictionary_id) { |
rv = inflateSetDictionary(decomp, |
@@ -2886,12 +2832,14 @@ bool SpdyFramer::IncrementallyDecompressControlFrameHeaderData( |
} |
bool SpdyFramer::IncrementallyDeliverControlFrameHeaderData( |
- SpdyStreamId stream_id, const char* data, size_t len) { |
+ SpdyStreamId stream_id, |
+ const char* data, |
+ size_t len) { |
bool read_successfully = true; |
while (read_successfully && len > 0) { |
size_t bytes_to_deliver = std::min(len, kHeaderDataChunkMaxSize); |
- read_successfully = visitor_->OnControlFrameHeaderData(stream_id, data, |
- bytes_to_deliver); |
+ read_successfully = |
+ visitor_->OnControlFrameHeaderData(stream_id, data, bytes_to_deliver); |
data += bytes_to_deliver; |
len -= bytes_to_deliver; |
if (!read_successfully) { |
@@ -2937,8 +2885,8 @@ void SpdyFramer::SerializeNameValueBlock( |
} |
// First build an uncompressed version to be fed into the compressor. |
- const size_t uncompressed_len = GetSerializedLength( |
- protocol_version(), &(frame.name_value_block())); |
+ const size_t uncompressed_len = |
+ GetSerializedLength(protocol_version(), &(frame.name_value_block())); |
SpdyFrameBuilder uncompressed_builder(uncompressed_len, protocol_version()); |
SerializeNameValueBlockWithoutCompression(&uncompressed_builder, |
frame.name_value_block()); |
@@ -2963,18 +2911,18 @@ void SpdyFramer::SerializeNameValueBlock( |
const int compressed_max_size = |
2 * deflateBound(compressor, uncompressed_len); |
- // TODO(phajdan.jr): Clean up after we no longer need |
- // to workaround http://crbug.com/139744. |
+// TODO(phajdan.jr): Clean up after we no longer need |
+// to workaround http://crbug.com/139744. |
#if defined(USE_SYSTEM_ZLIB) |
compressor->next_in = reinterpret_cast<Bytef*>(uncompressed_payload->data()); |
compressor->avail_in = uncompressed_len; |
#endif // defined(USE_SYSTEM_ZLIB) |
- compressor->next_out = reinterpret_cast<Bytef*>( |
- builder->GetWritableBuffer(compressed_max_size)); |
+ compressor->next_out = |
+ reinterpret_cast<Bytef*>(builder->GetWritableBuffer(compressed_max_size)); |
compressor->avail_out = compressed_max_size; |
- // TODO(phajdan.jr): Clean up after we no longer need |
- // to workaround http://crbug.com/139744. |
+// TODO(phajdan.jr): Clean up after we no longer need |
+// to workaround http://crbug.com/139744. |
#if defined(USE_SYSTEM_ZLIB) |
int rv = deflate(compressor, Z_SYNC_FLUSH); |
if (rv != Z_OK) { // How can we know that it compressed everything? |