| Index: net/spdy/spdy_protocol.cc
|
| diff --git a/net/spdy/spdy_protocol.cc b/net/spdy/spdy_protocol.cc
|
| index 1cf988114244e0aebd82f08a5ca4d9f01b11cce3..1c79578130d5240f8b93c11d90b81c842d834656 100644
|
| --- a/net/spdy/spdy_protocol.cc
|
| +++ b/net/spdy/spdy_protocol.cc
|
| @@ -47,172 +47,93 @@ SpdyPriority Http2WeightToSpdy3Priority(int weight) {
|
|
|
| bool SpdyConstants::IsValidFrameType(SpdyMajorVersion version,
|
| int frame_type_field) {
|
| - switch (version) {
|
| - case SPDY3:
|
| - // SYN_STREAM is the first valid frame.
|
| - if (frame_type_field < SerializeFrameType(version, SYN_STREAM)) {
|
| - return false;
|
| - }
|
| -
|
| - // WINDOW_UPDATE is the last valid frame.
|
| - if (frame_type_field > SerializeFrameType(version, WINDOW_UPDATE)) {
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| - case HTTP2:
|
| - // 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;
|
| - }
|
| + // Check for recognized extensions.
|
| + if (frame_type_field == SerializeFrameType(version, ALTSVC) ||
|
| + frame_type_field == SerializeFrameType(version, BLOCKED)) {
|
| + return true;
|
| + }
|
|
|
| - // CONTINUATION is the last valid frame.
|
| - if (frame_type_field > SerializeFrameType(version, CONTINUATION)) {
|
| - return false;
|
| - }
|
| + // DATA is the first valid frame.
|
| + if (frame_type_field < SerializeFrameType(version, DATA)) {
|
| + return false;
|
| + }
|
|
|
| - return true;
|
| + // CONTINUATION is the last valid frame.
|
| + if (frame_type_field > SerializeFrameType(version, CONTINUATION)) {
|
| + return false;
|
| }
|
|
|
| - SPDY_BUG << "Unhandled SPDY version " << version;
|
| - return false;
|
| + return true;
|
| }
|
|
|
| -SpdyFrameType SpdyConstants::ParseFrameType(SpdyMajorVersion version,
|
| +SpdyFrameType SpdyConstants::ParseFrameType(SpdyMajorVersion /*version*/,
|
| int frame_type_field) {
|
| - switch (version) {
|
| - case SPDY3:
|
| - switch (frame_type_field) {
|
| - case 1:
|
| - return SYN_STREAM;
|
| - case 2:
|
| - return SYN_REPLY;
|
| - case 3:
|
| - return RST_STREAM;
|
| - case 4:
|
| - return SETTINGS;
|
| - case 6:
|
| - return PING;
|
| - case 7:
|
| - return GOAWAY;
|
| - case 8:
|
| - return HEADERS;
|
| - case 9:
|
| - return WINDOW_UPDATE;
|
| - }
|
| - break;
|
| - case HTTP2:
|
| - switch (frame_type_field) {
|
| - case 0:
|
| - return DATA;
|
| - case 1:
|
| - return HEADERS;
|
| - case 2:
|
| - return PRIORITY;
|
| - case 3:
|
| - return RST_STREAM;
|
| - case 4:
|
| - return SETTINGS;
|
| - case 5:
|
| - return PUSH_PROMISE;
|
| - case 6:
|
| - return PING;
|
| - case 7:
|
| - return GOAWAY;
|
| - case 8:
|
| - return WINDOW_UPDATE;
|
| - case 9:
|
| - return CONTINUATION;
|
| - case 10:
|
| - return ALTSVC;
|
| - case 11:
|
| - return BLOCKED;
|
| - }
|
| - break;
|
| + switch (frame_type_field) {
|
| + case 0:
|
| + return DATA;
|
| + case 1:
|
| + return HEADERS;
|
| + case 2:
|
| + return PRIORITY;
|
| + case 3:
|
| + return RST_STREAM;
|
| + case 4:
|
| + return SETTINGS;
|
| + case 5:
|
| + return PUSH_PROMISE;
|
| + case 6:
|
| + return PING;
|
| + case 7:
|
| + return GOAWAY;
|
| + case 8:
|
| + return WINDOW_UPDATE;
|
| + case 9:
|
| + return CONTINUATION;
|
| + case 10:
|
| + return ALTSVC;
|
| + case 11:
|
| + return BLOCKED;
|
| }
|
| -
|
| SPDY_BUG << "Unhandled frame type " << frame_type_field;
|
| return DATA;
|
| }
|
|
|
| -int SpdyConstants::SerializeFrameType(SpdyMajorVersion version,
|
| +int SpdyConstants::SerializeFrameType(SpdyMajorVersion /*version*/,
|
| SpdyFrameType frame_type) {
|
| - switch (version) {
|
| - case SPDY3:
|
| - switch (frame_type) {
|
| - case SYN_STREAM:
|
| - return 1;
|
| - case SYN_REPLY:
|
| - return 2;
|
| - case RST_STREAM:
|
| - return 3;
|
| - case SETTINGS:
|
| - return 4;
|
| - case PING:
|
| - return 6;
|
| - case GOAWAY:
|
| - return 7;
|
| - case HEADERS:
|
| - return 8;
|
| - case WINDOW_UPDATE:
|
| - return 9;
|
| - default:
|
| - SPDY_BUG << "Serializing unhandled frame type " << frame_type;
|
| - return -1;
|
| - }
|
| - case HTTP2:
|
| - switch (frame_type) {
|
| - case DATA:
|
| - return 0;
|
| - case HEADERS:
|
| - return 1;
|
| - case PRIORITY:
|
| - return 2;
|
| - case RST_STREAM:
|
| - return 3;
|
| - case SETTINGS:
|
| - return 4;
|
| - case PUSH_PROMISE:
|
| - return 5;
|
| - case PING:
|
| - return 6;
|
| - case GOAWAY:
|
| - return 7;
|
| - case WINDOW_UPDATE:
|
| - return 8;
|
| - case CONTINUATION:
|
| - return 9;
|
| - // ALTSVC and BLOCKED are extensions.
|
| - case ALTSVC:
|
| - return 10;
|
| - case BLOCKED:
|
| - return 11;
|
| - default:
|
| - SPDY_BUG << "Serializing unhandled frame type " << frame_type;
|
| - return -1;
|
| - }
|
| + switch (frame_type) {
|
| + case DATA:
|
| + return 0;
|
| + case HEADERS:
|
| + return 1;
|
| + case PRIORITY:
|
| + return 2;
|
| + case RST_STREAM:
|
| + return 3;
|
| + case SETTINGS:
|
| + return 4;
|
| + case PUSH_PROMISE:
|
| + return 5;
|
| + case PING:
|
| + return 6;
|
| + case GOAWAY:
|
| + return 7;
|
| + case WINDOW_UPDATE:
|
| + return 8;
|
| + case CONTINUATION:
|
| + return 9;
|
| + // ALTSVC and BLOCKED are extensions.
|
| + case ALTSVC:
|
| + return 10;
|
| + case BLOCKED:
|
| + return 11;
|
| + default:
|
| + SPDY_BUG << "Serializing unhandled frame type " << frame_type;
|
| + return -1;
|
| }
|
| -
|
| - SPDY_BUG << "Unhandled SPDY version " << version;
|
| - return -1;
|
| }
|
|
|
| int SpdyConstants::DataFrameType(SpdyMajorVersion version) {
|
| - switch (version) {
|
| - case SPDY3:
|
| - return 0;
|
| - case HTTP2:
|
| - return SerializeFrameType(version, DATA);
|
| - }
|
| -
|
| - SPDY_BUG << "Unhandled SPDY version " << version;
|
| - return 0;
|
| + return SerializeFrameType(version, DATA);
|
| }
|
|
|
| bool SpdyConstants::IsValidHTTP2FrameStreamId(
|
| @@ -246,233 +167,118 @@ bool SpdyConstants::IsValidHTTP2FrameStreamId(
|
|
|
| bool SpdyConstants::IsValidSettingId(SpdyMajorVersion version,
|
| int setting_id_field) {
|
| - switch (version) {
|
| - case SPDY3:
|
| - // UPLOAD_BANDWIDTH is the first valid setting id.
|
| - if (setting_id_field <
|
| - SerializeSettingId(version, SETTINGS_UPLOAD_BANDWIDTH)) {
|
| - return false;
|
| - }
|
| -
|
| - // INITIAL_WINDOW_SIZE is the last valid setting id.
|
| - if (setting_id_field >
|
| - SerializeSettingId(version, SETTINGS_INITIAL_WINDOW_SIZE)) {
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| - case HTTP2:
|
| - // HEADER_TABLE_SIZE is the first valid setting id.
|
| - if (setting_id_field <
|
| - SerializeSettingId(version, SETTINGS_HEADER_TABLE_SIZE)) {
|
| - return false;
|
| - }
|
| -
|
| - // MAX_HEADER_LIST_SIZE is the last valid setting id.
|
| - if (setting_id_field >
|
| - SerializeSettingId(version, SETTINGS_MAX_HEADER_LIST_SIZE)) {
|
| - return false;
|
| - }
|
| + // HEADER_TABLE_SIZE is the first valid setting id.
|
| + if (setting_id_field <
|
| + SerializeSettingId(version, SETTINGS_HEADER_TABLE_SIZE)) {
|
| + return false;
|
| + }
|
|
|
| - return true;
|
| + // MAX_HEADER_LIST_SIZE is the last valid setting id.
|
| + if (setting_id_field >
|
| + SerializeSettingId(version, SETTINGS_MAX_HEADER_LIST_SIZE)) {
|
| + return false;
|
| }
|
|
|
| - SPDY_BUG << "Unhandled SPDY version " << version;
|
| - return false;
|
| + return true;
|
| }
|
|
|
| -SpdySettingsIds SpdyConstants::ParseSettingId(SpdyMajorVersion version,
|
| +SpdySettingsIds SpdyConstants::ParseSettingId(SpdyMajorVersion /*version*/,
|
| int setting_id_field) {
|
| - switch (version) {
|
| - case SPDY3:
|
| - switch (setting_id_field) {
|
| - case 1:
|
| - return SETTINGS_UPLOAD_BANDWIDTH;
|
| - case 2:
|
| - return SETTINGS_DOWNLOAD_BANDWIDTH;
|
| - case 3:
|
| - return SETTINGS_ROUND_TRIP_TIME;
|
| - case 4:
|
| - return SETTINGS_MAX_CONCURRENT_STREAMS;
|
| - case 5:
|
| - return SETTINGS_CURRENT_CWND;
|
| - case 6:
|
| - return SETTINGS_DOWNLOAD_RETRANS_RATE;
|
| - case 7:
|
| - return SETTINGS_INITIAL_WINDOW_SIZE;
|
| - }
|
| - break;
|
| - case HTTP2:
|
| - switch (setting_id_field) {
|
| - case 1:
|
| - return SETTINGS_HEADER_TABLE_SIZE;
|
| - case 2:
|
| - return SETTINGS_ENABLE_PUSH;
|
| - case 3:
|
| - 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;
|
| + switch (setting_id_field) {
|
| + case 1:
|
| + return SETTINGS_HEADER_TABLE_SIZE;
|
| + case 2:
|
| + return SETTINGS_ENABLE_PUSH;
|
| + case 3:
|
| + 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;
|
| }
|
| -
|
| SPDY_BUG << "Unhandled setting ID " << setting_id_field;
|
| return SETTINGS_UPLOAD_BANDWIDTH;
|
| }
|
|
|
| -int SpdyConstants::SerializeSettingId(SpdyMajorVersion version,
|
| - SpdySettingsIds id) {
|
| - switch (version) {
|
| - case SPDY3:
|
| - switch (id) {
|
| - case SETTINGS_UPLOAD_BANDWIDTH:
|
| - return 1;
|
| - case SETTINGS_DOWNLOAD_BANDWIDTH:
|
| - return 2;
|
| - case SETTINGS_ROUND_TRIP_TIME:
|
| - return 3;
|
| - case SETTINGS_MAX_CONCURRENT_STREAMS:
|
| - return 4;
|
| - case SETTINGS_CURRENT_CWND:
|
| - return 5;
|
| - case SETTINGS_DOWNLOAD_RETRANS_RATE:
|
| - return 6;
|
| - case SETTINGS_INITIAL_WINDOW_SIZE:
|
| - return 7;
|
| - default:
|
| - SPDY_BUG << "Serializing unhandled setting id " << id;
|
| - return -1;
|
| - }
|
| - case HTTP2:
|
| - switch (id) {
|
| - case SETTINGS_HEADER_TABLE_SIZE:
|
| - return 1;
|
| - case SETTINGS_ENABLE_PUSH:
|
| - return 2;
|
| - case SETTINGS_MAX_CONCURRENT_STREAMS:
|
| - 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:
|
| - SPDY_BUG << "Serializing unhandled setting id " << id;
|
| - return -1;
|
| - }
|
| +int SpdyConstants::SerializeSettingId(SpdyMajorVersion /*version*/,
|
| + SpdySettingsIds id) {
|
| + switch (id) {
|
| + case SETTINGS_HEADER_TABLE_SIZE:
|
| + return 1;
|
| + case SETTINGS_ENABLE_PUSH:
|
| + return 2;
|
| + case SETTINGS_MAX_CONCURRENT_STREAMS:
|
| + 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:
|
| + SPDY_BUG << "Serializing unhandled setting id " << id;
|
| + return -1;
|
| }
|
| - SPDY_BUG << "Unhandled SPDY version " << version;
|
| - return -1;
|
| }
|
|
|
| bool SpdyConstants::IsValidRstStreamStatus(SpdyMajorVersion version,
|
| int rst_stream_status_field) {
|
| - switch (version) {
|
| - case SPDY3:
|
| - // PROTOCOL_ERROR is the valid first status code.
|
| - if (rst_stream_status_field <
|
| - SerializeRstStreamStatus(version, RST_STREAM_PROTOCOL_ERROR)) {
|
| - return false;
|
| - }
|
| -
|
| - // FRAME_TOO_LARGE is the valid last status code.
|
| - if (rst_stream_status_field >
|
| - SerializeRstStreamStatus(version, RST_STREAM_FRAME_TOO_LARGE)) {
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| - case HTTP2:
|
| - // NO_ERROR is the first valid status code.
|
| - if (rst_stream_status_field <
|
| - SerializeRstStreamStatus(version, RST_STREAM_NO_ERROR)) {
|
| - return false;
|
| - }
|
| -
|
| - // TODO(hkhalil): Omit COMPRESSION_ERROR and SETTINGS_TIMEOUT
|
| - /*
|
| - // This works because GOAWAY and RST_STREAM share a namespace.
|
| - if (rst_stream_status_field ==
|
| - SerializeGoAwayStatus(version, GOAWAY_COMPRESSION_ERROR) ||
|
| - rst_stream_status_field ==
|
| - SerializeGoAwayStatus(version, GOAWAY_SETTINGS_TIMEOUT)) {
|
| - return false;
|
| - }
|
| - */
|
| + // NO_ERROR is the first valid status code.
|
| + if (rst_stream_status_field <
|
| + SerializeRstStreamStatus(version, RST_STREAM_NO_ERROR)) {
|
| + return false;
|
| + }
|
|
|
| - // HTTP_1_1_REQUIRED is the last valid status code.
|
| - if (rst_stream_status_field >
|
| - SerializeRstStreamStatus(version, RST_STREAM_HTTP_1_1_REQUIRED)) {
|
| - return false;
|
| - }
|
| + // TODO(hkhalil): Omit COMPRESSION_ERROR and SETTINGS_TIMEOUT
|
| + /*
|
| + // This works because GOAWAY and RST_STREAM share a namespace.
|
| + if (rst_stream_status_field ==
|
| + SerializeGoAwayStatus(version, GOAWAY_COMPRESSION_ERROR) ||
|
| + rst_stream_status_field ==
|
| + SerializeGoAwayStatus(version, GOAWAY_SETTINGS_TIMEOUT)) {
|
| + return false;
|
| + }
|
| + */
|
|
|
| - return true;
|
| + // HTTP_1_1_REQUIRED is the last valid status code.
|
| + if (rst_stream_status_field >
|
| + SerializeRstStreamStatus(version, RST_STREAM_HTTP_1_1_REQUIRED)) {
|
| + return false;
|
| }
|
| - SPDY_BUG << "Unhandled SPDY version " << version;
|
| - return false;
|
| +
|
| + return true;
|
| }
|
|
|
| SpdyRstStreamStatus SpdyConstants::ParseRstStreamStatus(
|
| - SpdyMajorVersion version,
|
| + SpdyMajorVersion /*version*/,
|
| int rst_stream_status_field) {
|
| - switch (version) {
|
| - case SPDY3:
|
| - switch (rst_stream_status_field) {
|
| - case 1:
|
| - return RST_STREAM_PROTOCOL_ERROR;
|
| - case 2:
|
| - return RST_STREAM_INVALID_STREAM;
|
| - case 3:
|
| - return RST_STREAM_REFUSED_STREAM;
|
| - case 4:
|
| - return RST_STREAM_UNSUPPORTED_VERSION;
|
| - case 5:
|
| - return RST_STREAM_CANCEL;
|
| - case 6:
|
| - return RST_STREAM_INTERNAL_ERROR;
|
| - case 7:
|
| - return RST_STREAM_FLOW_CONTROL_ERROR;
|
| - case 8:
|
| - return RST_STREAM_STREAM_IN_USE;
|
| - case 9:
|
| - return RST_STREAM_STREAM_ALREADY_CLOSED;
|
| - case 11:
|
| - return RST_STREAM_FRAME_TOO_LARGE;
|
| - }
|
| - break;
|
| - case HTTP2:
|
| - switch (rst_stream_status_field) {
|
| - case 0:
|
| - return RST_STREAM_NO_ERROR;
|
| - case 1:
|
| - return RST_STREAM_PROTOCOL_ERROR;
|
| - case 2:
|
| - return RST_STREAM_INTERNAL_ERROR;
|
| - case 3:
|
| - return RST_STREAM_FLOW_CONTROL_ERROR;
|
| - case 5:
|
| - return RST_STREAM_STREAM_CLOSED;
|
| - case 6:
|
| - return RST_STREAM_FRAME_SIZE_ERROR;
|
| - case 7:
|
| - return RST_STREAM_REFUSED_STREAM;
|
| - case 8:
|
| - return RST_STREAM_CANCEL;
|
| - case 10:
|
| - return RST_STREAM_CONNECT_ERROR;
|
| - case 11:
|
| - return RST_STREAM_ENHANCE_YOUR_CALM;
|
| - case 12:
|
| - return RST_STREAM_INADEQUATE_SECURITY;
|
| - case 13:
|
| - return RST_STREAM_HTTP_1_1_REQUIRED;
|
| - }
|
| - break;
|
| + switch (rst_stream_status_field) {
|
| + case 0:
|
| + return RST_STREAM_NO_ERROR;
|
| + case 1:
|
| + return RST_STREAM_PROTOCOL_ERROR;
|
| + case 2:
|
| + return RST_STREAM_INTERNAL_ERROR;
|
| + case 3:
|
| + return RST_STREAM_FLOW_CONTROL_ERROR;
|
| + case 5:
|
| + return RST_STREAM_STREAM_CLOSED;
|
| + case 6:
|
| + return RST_STREAM_FRAME_SIZE_ERROR;
|
| + case 7:
|
| + return RST_STREAM_REFUSED_STREAM;
|
| + case 8:
|
| + return RST_STREAM_CANCEL;
|
| + case 10:
|
| + return RST_STREAM_CONNECT_ERROR;
|
| + case 11:
|
| + return RST_STREAM_ENHANCE_YOUR_CALM;
|
| + case 12:
|
| + return RST_STREAM_INADEQUATE_SECURITY;
|
| + case 13:
|
| + return RST_STREAM_HTTP_1_1_REQUIRED;
|
| }
|
|
|
| SPDY_BUG << "Invalid RST_STREAM status " << rst_stream_status_field;
|
| @@ -480,230 +286,131 @@ SpdyRstStreamStatus SpdyConstants::ParseRstStreamStatus(
|
| }
|
|
|
| int SpdyConstants::SerializeRstStreamStatus(
|
| - SpdyMajorVersion version,
|
| + SpdyMajorVersion /*version*/,
|
| SpdyRstStreamStatus rst_stream_status) {
|
| - switch (version) {
|
| - case SPDY3:
|
| - switch (rst_stream_status) {
|
| - case RST_STREAM_PROTOCOL_ERROR:
|
| - return 1;
|
| - case RST_STREAM_INVALID_STREAM:
|
| - return 2;
|
| - case RST_STREAM_REFUSED_STREAM:
|
| - return 3;
|
| - case RST_STREAM_UNSUPPORTED_VERSION:
|
| - return 4;
|
| - case RST_STREAM_CANCEL:
|
| - return 5;
|
| - case RST_STREAM_INTERNAL_ERROR:
|
| - return 6;
|
| - case RST_STREAM_FLOW_CONTROL_ERROR:
|
| - return 7;
|
| - case RST_STREAM_STREAM_IN_USE:
|
| - return 8;
|
| - case RST_STREAM_STREAM_ALREADY_CLOSED:
|
| - return 9;
|
| - case RST_STREAM_FRAME_TOO_LARGE:
|
| - return 11;
|
| - default:
|
| - SPDY_BUG << "Unhandled RST_STREAM status " << rst_stream_status;
|
| - return -1;
|
| - }
|
| - case HTTP2:
|
| - switch (rst_stream_status) {
|
| - case RST_STREAM_NO_ERROR:
|
| - return 0;
|
| - case RST_STREAM_PROTOCOL_ERROR:
|
| - return 1;
|
| - case RST_STREAM_INTERNAL_ERROR:
|
| - return 2;
|
| - case RST_STREAM_FLOW_CONTROL_ERROR:
|
| - return 3;
|
| - case RST_STREAM_STREAM_CLOSED:
|
| - return 5;
|
| - case RST_STREAM_FRAME_SIZE_ERROR:
|
| - return 6;
|
| - case RST_STREAM_REFUSED_STREAM:
|
| - return 7;
|
| - case RST_STREAM_CANCEL:
|
| - return 8;
|
| - case RST_STREAM_CONNECT_ERROR:
|
| - return 10;
|
| - case RST_STREAM_ENHANCE_YOUR_CALM:
|
| - return 11;
|
| - case RST_STREAM_INADEQUATE_SECURITY:
|
| - return 12;
|
| - case RST_STREAM_HTTP_1_1_REQUIRED:
|
| - return 13;
|
| - default:
|
| - SPDY_BUG << "Unhandled RST_STREAM status " << rst_stream_status;
|
| - return -1;
|
| - }
|
| + switch (rst_stream_status) {
|
| + case RST_STREAM_NO_ERROR:
|
| + return 0;
|
| + case RST_STREAM_PROTOCOL_ERROR:
|
| + return 1;
|
| + case RST_STREAM_INTERNAL_ERROR:
|
| + return 2;
|
| + case RST_STREAM_FLOW_CONTROL_ERROR:
|
| + return 3;
|
| + case RST_STREAM_STREAM_CLOSED:
|
| + return 5;
|
| + case RST_STREAM_FRAME_SIZE_ERROR:
|
| + return 6;
|
| + case RST_STREAM_REFUSED_STREAM:
|
| + return 7;
|
| + case RST_STREAM_CANCEL:
|
| + return 8;
|
| + case RST_STREAM_CONNECT_ERROR:
|
| + return 10;
|
| + case RST_STREAM_ENHANCE_YOUR_CALM:
|
| + return 11;
|
| + case RST_STREAM_INADEQUATE_SECURITY:
|
| + return 12;
|
| + case RST_STREAM_HTTP_1_1_REQUIRED:
|
| + return 13;
|
| + default:
|
| + SPDY_BUG << "Unhandled RST_STREAM status " << rst_stream_status;
|
| + return -1;
|
| }
|
| - SPDY_BUG << "Unhandled SPDY version " << version;
|
| - return -1;
|
| }
|
|
|
| bool SpdyConstants::IsValidGoAwayStatus(SpdyMajorVersion version,
|
| int goaway_status_field) {
|
| - switch (version) {
|
| - case SPDY3:
|
| - // GOAWAY_OK is the first valid status.
|
| - if (goaway_status_field < SerializeGoAwayStatus(version, GOAWAY_OK)) {
|
| - return false;
|
| - }
|
| -
|
| - // GOAWAY_INTERNAL_ERROR is the last valid status.
|
| - if (goaway_status_field > SerializeGoAwayStatus(version,
|
| - GOAWAY_INTERNAL_ERROR)) {
|
| - return false;
|
| - }
|
| -
|
| - return true;
|
| - case HTTP2:
|
| - // GOAWAY_NO_ERROR is the first valid status.
|
| - if (goaway_status_field < SerializeGoAwayStatus(version,
|
| - GOAWAY_NO_ERROR)) {
|
| - return false;
|
| - }
|
| -
|
| - // GOAWAY_HTTP_1_1_REQUIRED is the last valid status.
|
| - if (goaway_status_field >
|
| - SerializeGoAwayStatus(version, GOAWAY_HTTP_1_1_REQUIRED)) {
|
| - return false;
|
| - }
|
| + // GOAWAY_NO_ERROR is the first valid status.
|
| + if (goaway_status_field < SerializeGoAwayStatus(version, GOAWAY_NO_ERROR)) {
|
| + return false;
|
| + }
|
|
|
| - return true;
|
| + // GOAWAY_HTTP_1_1_REQUIRED is the last valid status.
|
| + if (goaway_status_field >
|
| + SerializeGoAwayStatus(version, GOAWAY_HTTP_1_1_REQUIRED)) {
|
| + return false;
|
| }
|
| - SPDY_BUG << "Unknown SpdyMajorVersion " << version;
|
| - return false;
|
| +
|
| + return true;
|
| }
|
|
|
| -SpdyGoAwayStatus SpdyConstants::ParseGoAwayStatus(SpdyMajorVersion version,
|
| +SpdyGoAwayStatus SpdyConstants::ParseGoAwayStatus(SpdyMajorVersion /*version*/,
|
| int goaway_status_field) {
|
| - switch (version) {
|
| - case SPDY3:
|
| - switch (goaway_status_field) {
|
| - case 0:
|
| - return GOAWAY_OK;
|
| - case 1:
|
| - return GOAWAY_PROTOCOL_ERROR;
|
| - case 2:
|
| - return GOAWAY_INTERNAL_ERROR;
|
| - }
|
| - break;
|
| - case HTTP2:
|
| - switch (goaway_status_field) {
|
| - case 0:
|
| - return GOAWAY_NO_ERROR;
|
| - case 1:
|
| - return GOAWAY_PROTOCOL_ERROR;
|
| - case 2:
|
| - return GOAWAY_INTERNAL_ERROR;
|
| - case 3:
|
| - return GOAWAY_FLOW_CONTROL_ERROR;
|
| - case 4:
|
| - return GOAWAY_SETTINGS_TIMEOUT;
|
| - case 5:
|
| - return GOAWAY_STREAM_CLOSED;
|
| - case 6:
|
| - return GOAWAY_FRAME_SIZE_ERROR;
|
| - case 7:
|
| - return GOAWAY_REFUSED_STREAM;
|
| - case 8:
|
| - return GOAWAY_CANCEL;
|
| - case 9:
|
| - return GOAWAY_COMPRESSION_ERROR;
|
| - case 10:
|
| - return GOAWAY_CONNECT_ERROR;
|
| - case 11:
|
| - return GOAWAY_ENHANCE_YOUR_CALM;
|
| - case 12:
|
| - return GOAWAY_INADEQUATE_SECURITY;
|
| - case 13:
|
| - return GOAWAY_HTTP_1_1_REQUIRED;
|
| - }
|
| - break;
|
| + switch (goaway_status_field) {
|
| + case 0:
|
| + return GOAWAY_NO_ERROR;
|
| + case 1:
|
| + return GOAWAY_PROTOCOL_ERROR;
|
| + case 2:
|
| + return GOAWAY_INTERNAL_ERROR;
|
| + case 3:
|
| + return GOAWAY_FLOW_CONTROL_ERROR;
|
| + case 4:
|
| + return GOAWAY_SETTINGS_TIMEOUT;
|
| + case 5:
|
| + return GOAWAY_STREAM_CLOSED;
|
| + case 6:
|
| + return GOAWAY_FRAME_SIZE_ERROR;
|
| + case 7:
|
| + return GOAWAY_REFUSED_STREAM;
|
| + case 8:
|
| + return GOAWAY_CANCEL;
|
| + case 9:
|
| + return GOAWAY_COMPRESSION_ERROR;
|
| + case 10:
|
| + return GOAWAY_CONNECT_ERROR;
|
| + case 11:
|
| + return GOAWAY_ENHANCE_YOUR_CALM;
|
| + case 12:
|
| + return GOAWAY_INADEQUATE_SECURITY;
|
| + case 13:
|
| + return GOAWAY_HTTP_1_1_REQUIRED;
|
| }
|
|
|
| SPDY_BUG << "Unhandled GOAWAY status " << goaway_status_field;
|
| return GOAWAY_PROTOCOL_ERROR;
|
| }
|
|
|
| -int SpdyConstants::SerializeGoAwayStatus(SpdyMajorVersion version,
|
| +int SpdyConstants::SerializeGoAwayStatus(SpdyMajorVersion /*version*/,
|
| SpdyGoAwayStatus status) {
|
| - switch (version) {
|
| - case SPDY3:
|
| - // TODO(jgraettinger): Merge this back to server-side.
|
| - switch (status) {
|
| - case GOAWAY_NO_ERROR:
|
| - return 0;
|
| - case GOAWAY_PROTOCOL_ERROR:
|
| - case GOAWAY_INTERNAL_ERROR:
|
| - case GOAWAY_FLOW_CONTROL_ERROR:
|
| - case GOAWAY_SETTINGS_TIMEOUT:
|
| - case GOAWAY_STREAM_CLOSED:
|
| - case GOAWAY_FRAME_SIZE_ERROR:
|
| - case GOAWAY_REFUSED_STREAM:
|
| - case GOAWAY_CANCEL:
|
| - case GOAWAY_COMPRESSION_ERROR:
|
| - case GOAWAY_CONNECT_ERROR:
|
| - case GOAWAY_ENHANCE_YOUR_CALM:
|
| - case GOAWAY_INADEQUATE_SECURITY:
|
| - case GOAWAY_HTTP_1_1_REQUIRED:
|
| - return 1; // PROTOCOL_ERROR.
|
| - default:
|
| - SPDY_BUG << "Serializing unhandled GOAWAY status " << status;
|
| - return -1;
|
| - }
|
| - case HTTP2:
|
| - switch (status) {
|
| - case GOAWAY_NO_ERROR:
|
| - return 0;
|
| - case GOAWAY_PROTOCOL_ERROR:
|
| - return 1;
|
| - case GOAWAY_INTERNAL_ERROR:
|
| - return 2;
|
| - case GOAWAY_FLOW_CONTROL_ERROR:
|
| - return 3;
|
| - case GOAWAY_SETTINGS_TIMEOUT:
|
| - return 4;
|
| - case GOAWAY_STREAM_CLOSED:
|
| - return 5;
|
| - case GOAWAY_FRAME_SIZE_ERROR:
|
| - return 6;
|
| - case GOAWAY_REFUSED_STREAM:
|
| - return 7;
|
| - case GOAWAY_CANCEL:
|
| - return 8;
|
| - case GOAWAY_COMPRESSION_ERROR:
|
| - return 9;
|
| - case GOAWAY_CONNECT_ERROR:
|
| - return 10;
|
| - case GOAWAY_ENHANCE_YOUR_CALM:
|
| - return 11;
|
| - case GOAWAY_INADEQUATE_SECURITY:
|
| - return 12;
|
| - case GOAWAY_HTTP_1_1_REQUIRED:
|
| - return 13;
|
| - default:
|
| - SPDY_BUG << "Serializing unhandled GOAWAY status " << status;
|
| - return -1;
|
| - }
|
| - }
|
| - SPDY_BUG << "Unknown SpdyMajorVersion " << version;
|
| - return -1;
|
| -}
|
| -
|
| -size_t SpdyConstants::GetFrameHeaderSize(SpdyMajorVersion version) {
|
| - switch (version) {
|
| - case SPDY3:
|
| + switch (status) {
|
| + case GOAWAY_NO_ERROR:
|
| + return 0;
|
| + case GOAWAY_PROTOCOL_ERROR:
|
| + return 1;
|
| + case GOAWAY_INTERNAL_ERROR:
|
| + return 2;
|
| + case GOAWAY_FLOW_CONTROL_ERROR:
|
| + return 3;
|
| + case GOAWAY_SETTINGS_TIMEOUT:
|
| + return 4;
|
| + case GOAWAY_STREAM_CLOSED:
|
| + return 5;
|
| + case GOAWAY_FRAME_SIZE_ERROR:
|
| + return 6;
|
| + case GOAWAY_REFUSED_STREAM:
|
| + return 7;
|
| + case GOAWAY_CANCEL:
|
| return 8;
|
| - case HTTP2:
|
| + case GOAWAY_COMPRESSION_ERROR:
|
| return 9;
|
| + case GOAWAY_CONNECT_ERROR:
|
| + return 10;
|
| + case GOAWAY_ENHANCE_YOUR_CALM:
|
| + return 11;
|
| + case GOAWAY_INADEQUATE_SECURITY:
|
| + return 12;
|
| + case GOAWAY_HTTP_1_1_REQUIRED:
|
| + return 13;
|
| + default:
|
| + SPDY_BUG << "Serializing unhandled GOAWAY status " << status;
|
| + return -1;
|
| }
|
| - SPDY_BUG << "Unhandled SPDY version: " << version;
|
| - return 0;
|
| +}
|
| +
|
| +size_t SpdyConstants::GetFrameHeaderSize(SpdyMajorVersion /*version*/) {
|
| + return 9;
|
| }
|
|
|
| size_t SpdyConstants::GetDataFrameMinimumSize(SpdyMajorVersion version) {
|
| @@ -723,26 +430,24 @@ size_t SpdyConstants::GetPerHeaderOverhead(SpdyMajorVersion version) {
|
| }
|
|
|
| size_t SpdyConstants::GetSettingSize(SpdyMajorVersion version) {
|
| - return version == SPDY3 ? 8 : 6;
|
| + return 6;
|
| }
|
|
|
| int32_t SpdyConstants::GetInitialStreamWindowSize(SpdyMajorVersion version) {
|
| - return (version == SPDY3) ? (64 * 1024) : (64 * 1024 - 1);
|
| + return 64 * 1024 - 1;
|
| }
|
|
|
| int32_t SpdyConstants::GetInitialSessionWindowSize(SpdyMajorVersion version) {
|
| - return (version == SPDY3) ? (64 * 1024) : (64 * 1024 - 1);
|
| + return 64 * 1024 - 1;
|
| }
|
|
|
| std::string SpdyConstants::GetVersionString(SpdyMajorVersion version) {
|
| switch (version) {
|
| - case SPDY3:
|
| - return "spdy/3.1";
|
| case HTTP2:
|
| return "h2";
|
| default:
|
| SPDY_BUG << "Unsupported SPDY major version: " << version;
|
| - return "spdy/3.1";
|
| + return "h2";
|
| }
|
| }
|
|
|
|
|