Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(668)

Unified Diff: net/spdy/spdy_protocol.cc

Issue 485833002: HTTP2 draft 14 support (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Add ignore_result(). Created 6 years, 4 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
« no previous file with comments | « net/spdy/spdy_protocol.h ('k') | net/spdy/spdy_session.h » ('j') | no next file with comments »
Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
Index: net/spdy/spdy_protocol.cc
diff --git a/net/spdy/spdy_protocol.cc b/net/spdy/spdy_protocol.cc
index 6b55b11ea945e09e34029e8c4d30dc430041d03a..d300a15fca31c7a1784778394474e15fc4bb7866 100644
--- a/net/spdy/spdy_protocol.cc
+++ b/net/spdy/spdy_protocol.cc
@@ -43,13 +43,19 @@ bool SpdyConstants::IsValidFrameType(SpdyMajorVersion version,
return true;
case SPDY4:
case SPDY5:
+ // Check for recognized extensions.
+ if (frame_type_field == SerializeFrameType(version, ALTSVC) ||
+ frame_type_field == SerializeFrameType(version, BLOCKED)) {
+ return true;
+ }
+
// DATA is the first valid frame.
if (frame_type_field < SerializeFrameType(version, DATA)) {
return false;
}
- // BLOCKED is the last valid frame.
- if (frame_type_field > SerializeFrameType(version, BLOCKED)) {
+ // CONTINUATION is the last valid frame.
+ if (frame_type_field > SerializeFrameType(version, CONTINUATION)) {
return false;
}
@@ -168,6 +174,7 @@ int SpdyConstants::SerializeFrameType(SpdyMajorVersion version,
return 8;
case CONTINUATION:
return 9;
+ // ALTSVC and BLOCKED are extensions.
case ALTSVC:
return 10;
case BLOCKED:
@@ -222,9 +229,9 @@ bool SpdyConstants::IsValidSettingId(SpdyMajorVersion version,
return false;
}
- // INITIAL_WINDOW_SIZE is the last valid setting id.
+ // MAX_HEADER_LIST_SIZE is the last valid setting id.
if (setting_id_field >
- SerializeSettingId(version, SETTINGS_INITIAL_WINDOW_SIZE)) {
+ SerializeSettingId(version, SETTINGS_MAX_HEADER_LIST_SIZE)) {
return false;
}
@@ -268,6 +275,10 @@ SpdySettingsIds SpdyConstants::ParseSettingId(SpdyMajorVersion version,
return SETTINGS_MAX_CONCURRENT_STREAMS;
case 4:
return SETTINGS_INITIAL_WINDOW_SIZE;
+ case 5:
+ return SETTINGS_MAX_FRAME_SIZE;
+ case 6:
+ return SETTINGS_MAX_HEADER_LIST_SIZE;
}
break;
}
@@ -311,6 +322,10 @@ int SpdyConstants::SerializeSettingId(SpdyMajorVersion version,
return 3;
case SETTINGS_INITIAL_WINDOW_SIZE:
return 4;
+ case SETTINGS_MAX_FRAME_SIZE:
+ return 5;
+ case SETTINGS_MAX_HEADER_LIST_SIZE:
+ return 6;
default:
LOG(DFATAL) << "Serializing unhandled setting id " << id;
return -1;
@@ -694,17 +709,27 @@ int SpdyConstants::SerializeGoAwayStatus(SpdyMajorVersion version,
return -1;
}
-size_t SpdyConstants::GetDataFrameMinimumSize() {
- return 8;
+size_t SpdyConstants::GetDataFrameMinimumSize(SpdyMajorVersion version) {
+ switch (version) {
+ case SPDY2:
+ case SPDY3:
+ return 8;
+ case SPDY4:
+ case SPDY5:
+ return 9;
+ }
+ LOG(DFATAL) << "Unhandled SPDY version.";
+ return 0;
}
size_t SpdyConstants::GetControlFrameHeaderSize(SpdyMajorVersion version) {
switch (version) {
case SPDY2:
case SPDY3:
+ return 8;
case SPDY4:
case SPDY5:
- return 8;
+ return 9;
}
LOG(DFATAL) << "Unhandled SPDY version.";
return 0;
@@ -715,7 +740,7 @@ size_t SpdyConstants::GetPrefixLength(SpdyFrameType type,
if (type != DATA) {
return GetControlFrameHeaderSize(version);
} else {
- return GetDataFrameMinimumSize();
+ return GetDataFrameMinimumSize(version);
}
}
@@ -724,8 +749,11 @@ size_t SpdyConstants::GetFrameMaximumSize(SpdyMajorVersion version) {
// 24-bit length field plus eight-byte frame header.
return ((1<<24) - 1) + 8;
} else {
- // 14-bit length field.
- return (1<<14) - 1;
+ // Max payload of 2^14 plus nine-byte frame header.
+ // TODO(mlavan): In HTTP/2 this is actually not a constant;
+ // payload size can be set using the MAX_FRAME_SIZE setting to
+ // anything between 1 << 14 and (1 << 24) - 1
+ return (1 << 14) + 9;
}
}
« no previous file with comments | « net/spdy/spdy_protocol.h ('k') | net/spdy/spdy_session.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698