summaryrefslogtreecommitdiffstats
path: root/net/spdy/spdy_framer.cc
diff options
context:
space:
mode:
authoragayev@chromium.org <agayev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-20 14:16:27 +0000
committeragayev@chromium.org <agayev@chromium.org@0039d316-1c4b-4281-b951-d872f2087c98>2010-07-20 14:16:27 +0000
commit5af3c573076a8f04c285d6a0c40237462375e7c5 (patch)
tree3161f03d9e617a1499a83c2413faa435682c10a7 /net/spdy/spdy_framer.cc
parent1442b29a275b076203b5e0a78206fe3feda3b739 (diff)
downloadchromium_src-5af3c573076a8f04c285d6a0c40237462375e7c5.zip
chromium_src-5af3c573076a8f04c285d6a0c40237462375e7c5.tar.gz
chromium_src-5af3c573076a8f04c285d6a0c40237462375e7c5.tar.bz2
Initial SPDY flow control support
BUG=48100 TEST=net_unittests --gtest_filter="SpdyProtocolTest.ControlFrameStructs:SpdyNetworkTransactionTest.WindowSizeChange:SpdyNetworkTransactionTest.WindowSizeOverflow" Contributed by: agayev@google.com Review URL: http://codereview.chromium.org/2805083 git-svn-id: svn://svn.chromium.org/chrome/trunk/src@53039 0039d316-1c4b-4281-b951-d872f2087c98
Diffstat (limited to 'net/spdy/spdy_framer.cc')
-rw-r--r--net/spdy/spdy_framer.cc13
1 files changed, 6 insertions, 7 deletions
diff --git a/net/spdy/spdy_framer.cc b/net/spdy/spdy_framer.cc
index c0f4a86..cd622b8 100644
--- a/net/spdy/spdy_framer.cc
+++ b/net/spdy/spdy_framer.cc
@@ -304,6 +304,11 @@ void SpdyFramer::ProcessControlFrameHeader() {
SpdySettingsControlFrame::size() - SpdyControlFrame::size())
set_error(SPDY_INVALID_CONTROL_FRAME);
break;
+ case WINDOW_UPDATE:
+ if (current_control_frame.length() !=
+ SpdyWindowUpdateControlFrame::size() - SpdyFrame::size())
+ set_error(SPDY_INVALID_CONTROL_FRAME);
+ break;
default:
LOG(WARNING) << "Valid spdy control frame with unknown type: "
<< current_control_frame.type();
@@ -312,12 +317,6 @@ void SpdyFramer::ProcessControlFrameHeader() {
break;
}
- // We only support version 1 of this protocol.
- if (current_control_frame.version() != kSpdyProtocolVersion) {
- set_error(SPDY_UNSUPPORTED_VERSION);
- return;
- }
-
remaining_control_payload_ = current_control_frame.length();
if (remaining_control_payload_ > kControlFrameBufferMaxSize) {
set_error(SPDY_CONTROL_PAYLOAD_TOO_LARGE);
@@ -592,7 +591,7 @@ SpdyWindowUpdateControlFrame* SpdyFramer::CreateWindowUpdate(
DCHECK_GT(stream_id, 0u);
DCHECK_EQ(0u, stream_id & ~kStreamIdMask);
DCHECK_GT(delta_window_size, 0u);
- DCHECK_LE(delta_window_size, 0x80000000u); // 2^31
+ DCHECK_LT(delta_window_size, 0x80000000u); // 2^31
SpdyFrameBuilder frame;
frame.WriteUInt16(kControlFlagMask | kSpdyProtocolVersion);