diff options
author | bnc <bnc@chromium.org> | 2015-01-20 12:01:23 -0800 |
---|---|---|
committer | Commit bot <commit-bot@chromium.org> | 2015-01-20 20:02:06 +0000 |
commit | 21ffbdcc84becd18def7b26e228d27b790b03f59 (patch) | |
tree | 063fc9f05f2b7c9f50c3cc3331f53a3f16bff041 /net/spdy | |
parent | bfd852b73bc994150dca8f5b3c0061cb84728054 (diff) | |
download | chromium_src-21ffbdcc84becd18def7b26e228d27b790b03f59.zip chromium_src-21ffbdcc84becd18def7b26e228d27b790b03f59.tar.gz chromium_src-21ffbdcc84becd18def7b26e228d27b790b03f59.tar.bz2 |
Make SPDY initial window sizes version-dependent.
The initial window size of HTTP/2 is 65535 bytes, whereas in SPDY it is 65536
bytes. There have not been any external reports of issues due to this bug, but
we should fix it anyway.
This lands server change 82741013 by birenroy.
BUG=345769
Review URL: https://codereview.chromium.org/794103006
Cr-Commit-Position: refs/heads/master@{#312257}
Diffstat (limited to 'net/spdy')
-rw-r--r-- | net/spdy/spdy_headers_block_parser.cc | 17 | ||||
-rw-r--r-- | net/spdy/spdy_headers_block_parser.h | 4 | ||||
-rw-r--r-- | net/spdy/spdy_protocol.cc | 8 | ||||
-rw-r--r-- | net/spdy/spdy_protocol.h | 12 |
4 files changed, 27 insertions, 14 deletions
diff --git a/net/spdy/spdy_headers_block_parser.cc b/net/spdy/spdy_headers_block_parser.cc index 231533f..9686427 100644 --- a/net/spdy/spdy_headers_block_parser.cc +++ b/net/spdy/spdy_headers_block_parser.cc @@ -12,14 +12,15 @@ const size_t SpdyHeadersBlockParser::kMaximumFieldLength = 16 * 1024; SpdyHeadersBlockParser::SpdyHeadersBlockParser( SpdyMajorVersion spdy_version, - SpdyHeadersHandlerInterface* handler) : - state_(READING_HEADER_BLOCK_LEN), - length_field_size_(LengthFieldSizeForVersion(spdy_version)), - max_headers_in_block_(MaxNumberOfHeadersForVersion(spdy_version)), - total_bytes_received_(0), - remaining_key_value_pairs_for_frame_(0), - handler_(handler), - error_(OK) { + SpdyHeadersHandlerInterface* handler) + : state_(READING_HEADER_BLOCK_LEN), + length_field_size_(LengthFieldSizeForVersion(spdy_version)), + max_headers_in_block_(MaxNumberOfHeadersForVersion(spdy_version)), + total_bytes_received_(0), + remaining_key_value_pairs_for_frame_(0), + handler_(handler), + error_(OK), + spdy_version_(spdy_version) { // The handler that we set must not be NULL. DCHECK(handler_ != NULL); } diff --git a/net/spdy/spdy_headers_block_parser.h b/net/spdy/spdy_headers_block_parser.h index c0f97ca..3c0c8e3 100644 --- a/net/spdy/spdy_headers_block_parser.h +++ b/net/spdy/spdy_headers_block_parser.h @@ -78,6 +78,8 @@ class NET_EXPORT_PRIVATE SpdyHeadersBlockParser { }; ParserError get_error() const { return error_; } + SpdyMajorVersion spdy_version() const { return spdy_version_; } + // Returns the size in bytes of a length field in a SPDY header. static size_t LengthFieldSizeForVersion(SpdyMajorVersion spdy_version); @@ -138,6 +140,8 @@ class NET_EXPORT_PRIVATE SpdyHeadersBlockParser { SpdyStreamId stream_id_; ParserError error_; + + const SpdyMajorVersion spdy_version_; }; } // namespace net diff --git a/net/spdy/spdy_protocol.cc b/net/spdy/spdy_protocol.cc index a0e8313..34af7e4 100644 --- a/net/spdy/spdy_protocol.cc +++ b/net/spdy/spdy_protocol.cc @@ -778,6 +778,14 @@ size_t SpdyConstants::GetSettingSize(SpdyMajorVersion version) { return version <= SPDY3 ? 8 : 6; } +int32 SpdyConstants::GetInitialStreamWindowSize(SpdyMajorVersion version) { + return (version <= SPDY3) ? (64 * 1024) : (64 * 1024 - 1); +} + +int32 SpdyConstants::GetInitialSessionWindowSize(SpdyMajorVersion version) { + return (version <= SPDY3) ? (64 * 1024) : (64 * 1024 - 1); +} + void SpdyDataIR::Visit(SpdyFrameVisitor* visitor) const { return visitor->VisitData(*this); } diff --git a/net/spdy/spdy_protocol.h b/net/spdy/spdy_protocol.h index beaf14a..410bf22 100644 --- a/net/spdy/spdy_protocol.h +++ b/net/spdy/spdy_protocol.h @@ -47,18 +47,12 @@ typedef uint32 SpdyStreamId; // flow control). const SpdyStreamId kSessionFlowControlStreamId = 0; -// Initial window size for a Spdy stream in bytes. -const int32 kSpdyStreamInitialWindowSize = 64 * 1024; // 64 KBytes - // The maxmium possible control frame size allowed by the spec. const int32 kSpdyMaxControlFrameSize = (1 << 24) - 1; // The maximum control frame size we accept. const int32 kControlFrameSizeLimit = 1 << 14; -// Initial window size for a Spdy session in bytes. -const int32 kSpdySessionInitialWindowSize = 64 * 1024; // 64 KBytes - // Maximum window size for a Spdy stream or session. const int32 kSpdyMaximumWindowSize = 0x7FFFFFFF; // Max signed 32bit int @@ -533,6 +527,12 @@ class NET_EXPORT_PRIVATE SpdyConstants { // Returns the size (in bytes) of a wire setting ID and value. static size_t GetSettingSize(SpdyMajorVersion version); + // Initial window size for a stream in bytes. + static int32 GetInitialStreamWindowSize(SpdyMajorVersion version); + + // Initial window size for a session in bytes. + static int32 GetInitialSessionWindowSize(SpdyMajorVersion version); + static SpdyMajorVersion ParseMajorVersion(int version_number); static int SerializeMajorVersion(SpdyMajorVersion version); |