summaryrefslogtreecommitdiffstats
path: root/net/spdy/spdy_stream.cc
diff options
context:
space:
mode:
authorcbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-14 18:19:17 +0000
committercbentzel@chromium.org <cbentzel@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-14 18:19:17 +0000
commit4c21b0f14edcb3bfc2c5c481428fe71bb9107817 (patch)
treee3db730ecdb981b0c66035c6d3efc7431008a778 /net/spdy/spdy_stream.cc
parent1655ba34a9191e59006bd7a48eb25b98319352e7 (diff)
downloadchromium_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.cc17
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_;
}