diff options
author | cbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-14 18:19:17 +0000 |
---|---|---|
committer | cbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98> | 2010-07-14 18:19:17 +0000 |
commit | 4c21b0f14edcb3bfc2c5c481428fe71bb9107817 (patch) | |
tree | e3db730ecdb981b0c66035c6d3efc7431008a778 /net/spdy/spdy_stream.cc | |
parent | 1655ba34a9191e59006bd7a48eb25b98319352e7 (diff) | |
download | chromium_src-4c21b0f14edcb3bfc2c5c481428fe71bb9107817.zip chromium_src-4c21b0f14edcb3bfc2c5c481428fe71bb9107817.tar.gz chromium_src-4c21b0f14edcb3bfc2c5c481428fe71bb9107817.tar.bz2 |
SPDY: Initial support for handling WINDOW_UPDATE frames and some cleanup.
BUG=48100
TEST=net_unittests --gtest_filter="SpdyProtocolTest.ControlFrameStructs:SpdyNetworkTransactionTest.WindowSizeChange:SpdyNetworkTransactionTest.WindowSizeOverflow"
Contributed by: agayev@google.com
Review URL: http://codereview.chromium.org/2807042
git-svn-id: svn://svn.chromium.org/chrome/trunk/src@52352 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/spdy/spdy_stream.cc')
-rw-r--r-- | net/spdy/spdy_stream.cc | 17 |
1 files changed, 17 insertions, 0 deletions
diff --git a/net/spdy/spdy_stream.cc b/net/spdy/spdy_stream.cc index 3d68d5d..29fb10a 100644 --- a/net/spdy/spdy_stream.cc +++ b/net/spdy/spdy_stream.cc @@ -71,6 +71,23 @@ void SpdyStream::set_spdy_headers( request_ = headers; } +void SpdyStream::UpdateWindowSize(int delta_window_size) { + DCHECK_GE(delta_window_size, 1); + int new_window_size = window_size_ + delta_window_size; + + // it's valid for window_size_ to become negative (via an incoming + // SETTINGS frame which is handled in SpdySession::OnSettings), in which + // case incoming WINDOW_UPDATEs will eventually make it positive; + // however, if window_size_ is positive and incoming WINDOW_UPDATE makes + // it negative, we have an overflow. + if (window_size_ > 0 && new_window_size < 0) { + LOG(WARNING) << "Received WINDOW_UPDATE overflows the window size"; + session_->ResetStream(stream_id_, spdy::FLOW_CONTROL_ERROR); + return; + } + window_size_ = new_window_size; +} + base::Time SpdyStream::GetRequestTime() const { return request_time_; } |