| OLD | NEW |
| 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. | 1 // Copyright (c) 2012 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "net/spdy/spdy_protocol.h" | 5 #include "net/spdy/spdy_protocol.h" |
| 6 | 6 |
| 7 #include "base/memory/ptr_util.h" | 7 #include "base/memory/ptr_util.h" |
| 8 #include "net/spdy/spdy_bug_tracker.h" | 8 #include "net/spdy/spdy_bug_tracker.h" |
| 9 | 9 |
| 10 namespace net { | 10 namespace net { |
| (...skipping 27 matching lines...) Expand all Loading... |
| 38 const float kSteps = 255.9f / 7.f; | 38 const float kSteps = 255.9f / 7.f; |
| 39 return static_cast<int>(kSteps * (7.f - priority)) + 1; | 39 return static_cast<int>(kSteps * (7.f - priority)) + 1; |
| 40 } | 40 } |
| 41 | 41 |
| 42 SpdyPriority Http2WeightToSpdy3Priority(int weight) { | 42 SpdyPriority Http2WeightToSpdy3Priority(int weight) { |
| 43 weight = ClampHttp2Weight(weight); | 43 weight = ClampHttp2Weight(weight); |
| 44 const float kSteps = 255.9f / 7.f; | 44 const float kSteps = 255.9f / 7.f; |
| 45 return static_cast<SpdyPriority>(7.f - (weight - 1) / kSteps); | 45 return static_cast<SpdyPriority>(7.f - (weight - 1) / kSteps); |
| 46 } | 46 } |
| 47 | 47 |
| 48 bool SpdyConstants::IsValidFrameType(SpdyMajorVersion version, | 48 bool SpdyConstants::IsValidFrameType(int frame_type_field) { |
| 49 int frame_type_field) { | |
| 50 // Check for recognized extensions. | 49 // Check for recognized extensions. |
| 51 if (frame_type_field == SerializeFrameType(version, ALTSVC) || | 50 if (frame_type_field == SerializeFrameType(ALTSVC) || |
| 52 frame_type_field == SerializeFrameType(version, BLOCKED)) { | 51 frame_type_field == SerializeFrameType(BLOCKED)) { |
| 53 return true; | 52 return true; |
| 54 } | 53 } |
| 55 | 54 |
| 56 // DATA is the first valid frame. | 55 // DATA is the first valid frame. |
| 57 if (frame_type_field < SerializeFrameType(version, DATA)) { | 56 if (frame_type_field < SerializeFrameType(DATA)) { |
| 58 return false; | 57 return false; |
| 59 } | 58 } |
| 60 | 59 |
| 61 // CONTINUATION is the last valid frame. | 60 // CONTINUATION is the last valid frame. |
| 62 if (frame_type_field > SerializeFrameType(version, CONTINUATION)) { | 61 if (frame_type_field > SerializeFrameType(CONTINUATION)) { |
| 63 return false; | 62 return false; |
| 64 } | 63 } |
| 65 | 64 |
| 66 return true; | 65 return true; |
| 67 } | 66 } |
| 68 | 67 |
| 69 SpdyFrameType SpdyConstants::ParseFrameType(SpdyMajorVersion /*version*/, | 68 SpdyFrameType SpdyConstants::ParseFrameType(int frame_type_field) { |
| 70 int frame_type_field) { | |
| 71 switch (frame_type_field) { | 69 switch (frame_type_field) { |
| 72 case 0: | 70 case 0: |
| 73 return DATA; | 71 return DATA; |
| 74 case 1: | 72 case 1: |
| 75 return HEADERS; | 73 return HEADERS; |
| 76 case 2: | 74 case 2: |
| 77 return PRIORITY; | 75 return PRIORITY; |
| 78 case 3: | 76 case 3: |
| 79 return RST_STREAM; | 77 return RST_STREAM; |
| 80 case 4: | 78 case 4: |
| (...skipping 10 matching lines...) Expand all Loading... |
| 91 return CONTINUATION; | 89 return CONTINUATION; |
| 92 case 10: | 90 case 10: |
| 93 return ALTSVC; | 91 return ALTSVC; |
| 94 case 11: | 92 case 11: |
| 95 return BLOCKED; | 93 return BLOCKED; |
| 96 } | 94 } |
| 97 SPDY_BUG << "Unhandled frame type " << frame_type_field; | 95 SPDY_BUG << "Unhandled frame type " << frame_type_field; |
| 98 return DATA; | 96 return DATA; |
| 99 } | 97 } |
| 100 | 98 |
| 101 int SpdyConstants::SerializeFrameType(SpdyMajorVersion /*version*/, | 99 int SpdyConstants::SerializeFrameType(SpdyFrameType frame_type) { |
| 102 SpdyFrameType frame_type) { | |
| 103 switch (frame_type) { | 100 switch (frame_type) { |
| 104 case DATA: | 101 case DATA: |
| 105 return 0; | 102 return kDataFrameType; |
| 106 case HEADERS: | 103 case HEADERS: |
| 107 return 1; | 104 return 1; |
| 108 case PRIORITY: | 105 case PRIORITY: |
| 109 return 2; | 106 return 2; |
| 110 case RST_STREAM: | 107 case RST_STREAM: |
| 111 return 3; | 108 return 3; |
| 112 case SETTINGS: | 109 case SETTINGS: |
| 113 return 4; | 110 return 4; |
| 114 case PUSH_PROMISE: | 111 case PUSH_PROMISE: |
| 115 return 5; | 112 return 5; |
| 116 case PING: | 113 case PING: |
| 117 return 6; | 114 return 6; |
| 118 case GOAWAY: | 115 case GOAWAY: |
| 119 return 7; | 116 return 7; |
| 120 case WINDOW_UPDATE: | 117 case WINDOW_UPDATE: |
| 121 return 8; | 118 return 8; |
| 122 case CONTINUATION: | 119 case CONTINUATION: |
| 123 return 9; | 120 return 9; |
| 124 // ALTSVC and BLOCKED are extensions. | 121 // ALTSVC and BLOCKED are extensions. |
| 125 case ALTSVC: | 122 case ALTSVC: |
| 126 return 10; | 123 return 10; |
| 127 case BLOCKED: | 124 case BLOCKED: |
| 128 return 11; | 125 return 11; |
| 129 default: | 126 default: |
| 130 SPDY_BUG << "Serializing unhandled frame type " << frame_type; | 127 SPDY_BUG << "Serializing unhandled frame type " << frame_type; |
| 131 return -1; | 128 return -1; |
| 132 } | 129 } |
| 133 } | 130 } |
| 134 | 131 |
| 135 int SpdyConstants::DataFrameType(SpdyMajorVersion version) { | |
| 136 return SerializeFrameType(version, DATA); | |
| 137 } | |
| 138 | |
| 139 bool SpdyConstants::IsValidHTTP2FrameStreamId( | 132 bool SpdyConstants::IsValidHTTP2FrameStreamId( |
| 140 SpdyStreamId current_frame_stream_id, | 133 SpdyStreamId current_frame_stream_id, |
| 141 SpdyFrameType frame_type_field) { | 134 SpdyFrameType frame_type_field) { |
| 142 if (current_frame_stream_id == 0) { | 135 if (current_frame_stream_id == 0) { |
| 143 switch (frame_type_field) { | 136 switch (frame_type_field) { |
| 144 case DATA: | 137 case DATA: |
| 145 case HEADERS: | 138 case HEADERS: |
| 146 case PRIORITY: | 139 case PRIORITY: |
| 147 case RST_STREAM: | 140 case RST_STREAM: |
| 148 case CONTINUATION: | 141 case CONTINUATION: |
| 149 case PUSH_PROMISE: | 142 case PUSH_PROMISE: |
| 150 // These frame types must specify a stream | 143 // These frame types must specify a stream |
| 151 return false; | 144 return false; |
| 152 default: | 145 default: |
| 153 return true; | 146 return true; |
| 154 } | 147 } |
| 155 } else { | 148 } else { |
| 156 switch (frame_type_field) { | 149 switch (frame_type_field) { |
| 157 case GOAWAY: | 150 case GOAWAY: |
| 158 case SETTINGS: | 151 case SETTINGS: |
| 159 case PING: | 152 case PING: |
| 160 // These frame types must not specify a stream | 153 // These frame types must not specify a stream |
| 161 return false; | 154 return false; |
| 162 default: | 155 default: |
| 163 return true; | 156 return true; |
| 164 } | 157 } |
| 165 } | 158 } |
| 166 } | 159 } |
| 167 | 160 |
| 168 bool SpdyConstants::IsValidSettingId(SpdyMajorVersion version, | 161 bool SpdyConstants::IsValidSettingId(int setting_id_field) { |
| 169 int setting_id_field) { | |
| 170 // HEADER_TABLE_SIZE is the first valid setting id. | 162 // HEADER_TABLE_SIZE is the first valid setting id. |
| 171 if (setting_id_field < | 163 if (setting_id_field < SerializeSettingId(SETTINGS_HEADER_TABLE_SIZE)) { |
| 172 SerializeSettingId(version, SETTINGS_HEADER_TABLE_SIZE)) { | |
| 173 return false; | 164 return false; |
| 174 } | 165 } |
| 175 | 166 |
| 176 // MAX_HEADER_LIST_SIZE is the last valid setting id. | 167 // MAX_HEADER_LIST_SIZE is the last valid setting id. |
| 177 if (setting_id_field > | 168 if (setting_id_field > SerializeSettingId(SETTINGS_MAX_HEADER_LIST_SIZE)) { |
| 178 SerializeSettingId(version, SETTINGS_MAX_HEADER_LIST_SIZE)) { | |
| 179 return false; | 169 return false; |
| 180 } | 170 } |
| 181 | 171 |
| 182 return true; | 172 return true; |
| 183 } | 173 } |
| 184 | 174 |
| 185 SpdySettingsIds SpdyConstants::ParseSettingId(SpdyMajorVersion /*version*/, | 175 SpdySettingsIds SpdyConstants::ParseSettingId(int setting_id_field) { |
| 186 int setting_id_field) { | |
| 187 switch (setting_id_field) { | 176 switch (setting_id_field) { |
| 188 case 1: | 177 case 1: |
| 189 return SETTINGS_HEADER_TABLE_SIZE; | 178 return SETTINGS_HEADER_TABLE_SIZE; |
| 190 case 2: | 179 case 2: |
| 191 return SETTINGS_ENABLE_PUSH; | 180 return SETTINGS_ENABLE_PUSH; |
| 192 case 3: | 181 case 3: |
| 193 return SETTINGS_MAX_CONCURRENT_STREAMS; | 182 return SETTINGS_MAX_CONCURRENT_STREAMS; |
| 194 case 4: | 183 case 4: |
| 195 return SETTINGS_INITIAL_WINDOW_SIZE; | 184 return SETTINGS_INITIAL_WINDOW_SIZE; |
| 196 case 5: | 185 case 5: |
| 197 return SETTINGS_MAX_FRAME_SIZE; | 186 return SETTINGS_MAX_FRAME_SIZE; |
| 198 case 6: | 187 case 6: |
| 199 return SETTINGS_MAX_HEADER_LIST_SIZE; | 188 return SETTINGS_MAX_HEADER_LIST_SIZE; |
| 200 } | 189 } |
| 201 SPDY_BUG << "Unhandled setting ID " << setting_id_field; | 190 SPDY_BUG << "Unhandled setting ID " << setting_id_field; |
| 202 return SETTINGS_UPLOAD_BANDWIDTH; | 191 return SETTINGS_UPLOAD_BANDWIDTH; |
| 203 } | 192 } |
| 204 | 193 |
| 205 int SpdyConstants::SerializeSettingId(SpdyMajorVersion /*version*/, | 194 int SpdyConstants::SerializeSettingId(SpdySettingsIds id) { |
| 206 SpdySettingsIds id) { | |
| 207 switch (id) { | 195 switch (id) { |
| 208 case SETTINGS_HEADER_TABLE_SIZE: | 196 case SETTINGS_HEADER_TABLE_SIZE: |
| 209 return 1; | 197 return 1; |
| 210 case SETTINGS_ENABLE_PUSH: | 198 case SETTINGS_ENABLE_PUSH: |
| 211 return 2; | 199 return 2; |
| 212 case SETTINGS_MAX_CONCURRENT_STREAMS: | 200 case SETTINGS_MAX_CONCURRENT_STREAMS: |
| 213 return 3; | 201 return 3; |
| 214 case SETTINGS_INITIAL_WINDOW_SIZE: | 202 case SETTINGS_INITIAL_WINDOW_SIZE: |
| 215 return 4; | 203 return 4; |
| 216 case SETTINGS_MAX_FRAME_SIZE: | 204 case SETTINGS_MAX_FRAME_SIZE: |
| 217 return 5; | 205 return 5; |
| 218 case SETTINGS_MAX_HEADER_LIST_SIZE: | 206 case SETTINGS_MAX_HEADER_LIST_SIZE: |
| 219 return 6; | 207 return 6; |
| 220 default: | 208 default: |
| 221 SPDY_BUG << "Serializing unhandled setting id " << id; | 209 SPDY_BUG << "Serializing unhandled setting id " << id; |
| 222 return -1; | 210 return -1; |
| 223 } | 211 } |
| 224 } | 212 } |
| 225 | 213 |
| 226 bool SpdyConstants::IsValidRstStreamStatus(SpdyMajorVersion version, | 214 bool SpdyConstants::IsValidRstStreamStatus(int rst_stream_status_field) { |
| 227 int rst_stream_status_field) { | |
| 228 // NO_ERROR is the first valid status code. | 215 // NO_ERROR is the first valid status code. |
| 229 if (rst_stream_status_field < | 216 if (rst_stream_status_field < SerializeRstStreamStatus(RST_STREAM_NO_ERROR)) { |
| 230 SerializeRstStreamStatus(version, RST_STREAM_NO_ERROR)) { | |
| 231 return false; | 217 return false; |
| 232 } | 218 } |
| 233 | 219 |
| 234 // TODO(hkhalil): Omit COMPRESSION_ERROR and SETTINGS_TIMEOUT | 220 // TODO(hkhalil): Omit COMPRESSION_ERROR and SETTINGS_TIMEOUT |
| 235 /* | 221 /* |
| 236 // This works because GOAWAY and RST_STREAM share a namespace. | 222 // This works because GOAWAY and RST_STREAM share a namespace. |
| 237 if (rst_stream_status_field == | 223 if (rst_stream_status_field == |
| 238 SerializeGoAwayStatus(version, GOAWAY_COMPRESSION_ERROR) || | 224 SerializeGoAwayStatus(version, GOAWAY_COMPRESSION_ERROR) || |
| 239 rst_stream_status_field == | 225 rst_stream_status_field == |
| 240 SerializeGoAwayStatus(version, GOAWAY_SETTINGS_TIMEOUT)) { | 226 SerializeGoAwayStatus(version, GOAWAY_SETTINGS_TIMEOUT)) { |
| 241 return false; | 227 return false; |
| 242 } | 228 } |
| 243 */ | 229 */ |
| 244 | 230 |
| 245 // HTTP_1_1_REQUIRED is the last valid status code. | 231 // HTTP_1_1_REQUIRED is the last valid status code. |
| 246 if (rst_stream_status_field > | 232 if (rst_stream_status_field > |
| 247 SerializeRstStreamStatus(version, RST_STREAM_HTTP_1_1_REQUIRED)) { | 233 SerializeRstStreamStatus(RST_STREAM_HTTP_1_1_REQUIRED)) { |
| 248 return false; | 234 return false; |
| 249 } | 235 } |
| 250 | 236 |
| 251 return true; | 237 return true; |
| 252 } | 238 } |
| 253 | 239 |
| 254 SpdyRstStreamStatus SpdyConstants::ParseRstStreamStatus( | 240 SpdyRstStreamStatus SpdyConstants::ParseRstStreamStatus( |
| 255 SpdyMajorVersion /*version*/, | |
| 256 int rst_stream_status_field) { | 241 int rst_stream_status_field) { |
| 257 switch (rst_stream_status_field) { | 242 switch (rst_stream_status_field) { |
| 258 case 0: | 243 case 0: |
| 259 return RST_STREAM_NO_ERROR; | 244 return RST_STREAM_NO_ERROR; |
| 260 case 1: | 245 case 1: |
| 261 return RST_STREAM_PROTOCOL_ERROR; | 246 return RST_STREAM_PROTOCOL_ERROR; |
| 262 case 2: | 247 case 2: |
| 263 return RST_STREAM_INTERNAL_ERROR; | 248 return RST_STREAM_INTERNAL_ERROR; |
| 264 case 3: | 249 case 3: |
| 265 return RST_STREAM_FLOW_CONTROL_ERROR; | 250 return RST_STREAM_FLOW_CONTROL_ERROR; |
| (...skipping 13 matching lines...) Expand all Loading... |
| 279 return RST_STREAM_INADEQUATE_SECURITY; | 264 return RST_STREAM_INADEQUATE_SECURITY; |
| 280 case 13: | 265 case 13: |
| 281 return RST_STREAM_HTTP_1_1_REQUIRED; | 266 return RST_STREAM_HTTP_1_1_REQUIRED; |
| 282 } | 267 } |
| 283 | 268 |
| 284 SPDY_BUG << "Invalid RST_STREAM status " << rst_stream_status_field; | 269 SPDY_BUG << "Invalid RST_STREAM status " << rst_stream_status_field; |
| 285 return RST_STREAM_PROTOCOL_ERROR; | 270 return RST_STREAM_PROTOCOL_ERROR; |
| 286 } | 271 } |
| 287 | 272 |
| 288 int SpdyConstants::SerializeRstStreamStatus( | 273 int SpdyConstants::SerializeRstStreamStatus( |
| 289 SpdyMajorVersion /*version*/, | |
| 290 SpdyRstStreamStatus rst_stream_status) { | 274 SpdyRstStreamStatus rst_stream_status) { |
| 291 switch (rst_stream_status) { | 275 switch (rst_stream_status) { |
| 292 case RST_STREAM_NO_ERROR: | 276 case RST_STREAM_NO_ERROR: |
| 293 return 0; | 277 return 0; |
| 294 case RST_STREAM_PROTOCOL_ERROR: | 278 case RST_STREAM_PROTOCOL_ERROR: |
| 295 return 1; | 279 return 1; |
| 296 case RST_STREAM_INTERNAL_ERROR: | 280 case RST_STREAM_INTERNAL_ERROR: |
| 297 return 2; | 281 return 2; |
| 298 case RST_STREAM_FLOW_CONTROL_ERROR: | 282 case RST_STREAM_FLOW_CONTROL_ERROR: |
| 299 return 3; | 283 return 3; |
| (...skipping 12 matching lines...) Expand all Loading... |
| 312 case RST_STREAM_INADEQUATE_SECURITY: | 296 case RST_STREAM_INADEQUATE_SECURITY: |
| 313 return 12; | 297 return 12; |
| 314 case RST_STREAM_HTTP_1_1_REQUIRED: | 298 case RST_STREAM_HTTP_1_1_REQUIRED: |
| 315 return 13; | 299 return 13; |
| 316 default: | 300 default: |
| 317 SPDY_BUG << "Unhandled RST_STREAM status " << rst_stream_status; | 301 SPDY_BUG << "Unhandled RST_STREAM status " << rst_stream_status; |
| 318 return -1; | 302 return -1; |
| 319 } | 303 } |
| 320 } | 304 } |
| 321 | 305 |
| 322 bool SpdyConstants::IsValidGoAwayStatus(SpdyMajorVersion version, | 306 bool SpdyConstants::IsValidGoAwayStatus(int goaway_status_field) { |
| 323 int goaway_status_field) { | |
| 324 // GOAWAY_NO_ERROR is the first valid status. | 307 // GOAWAY_NO_ERROR is the first valid status. |
| 325 if (goaway_status_field < SerializeGoAwayStatus(version, GOAWAY_NO_ERROR)) { | 308 if (goaway_status_field < SerializeGoAwayStatus(GOAWAY_NO_ERROR)) { |
| 326 return false; | 309 return false; |
| 327 } | 310 } |
| 328 | 311 |
| 329 // GOAWAY_HTTP_1_1_REQUIRED is the last valid status. | 312 // GOAWAY_HTTP_1_1_REQUIRED is the last valid status. |
| 330 if (goaway_status_field > | 313 if (goaway_status_field > SerializeGoAwayStatus(GOAWAY_HTTP_1_1_REQUIRED)) { |
| 331 SerializeGoAwayStatus(version, GOAWAY_HTTP_1_1_REQUIRED)) { | |
| 332 return false; | 314 return false; |
| 333 } | 315 } |
| 334 | 316 |
| 335 return true; | 317 return true; |
| 336 } | 318 } |
| 337 | 319 |
| 338 SpdyGoAwayStatus SpdyConstants::ParseGoAwayStatus(SpdyMajorVersion /*version*/, | 320 SpdyGoAwayStatus SpdyConstants::ParseGoAwayStatus(int goaway_status_field) { |
| 339 int goaway_status_field) { | |
| 340 switch (goaway_status_field) { | 321 switch (goaway_status_field) { |
| 341 case 0: | 322 case 0: |
| 342 return GOAWAY_NO_ERROR; | 323 return GOAWAY_NO_ERROR; |
| 343 case 1: | 324 case 1: |
| 344 return GOAWAY_PROTOCOL_ERROR; | 325 return GOAWAY_PROTOCOL_ERROR; |
| 345 case 2: | 326 case 2: |
| 346 return GOAWAY_INTERNAL_ERROR; | 327 return GOAWAY_INTERNAL_ERROR; |
| 347 case 3: | 328 case 3: |
| 348 return GOAWAY_FLOW_CONTROL_ERROR; | 329 return GOAWAY_FLOW_CONTROL_ERROR; |
| 349 case 4: | 330 case 4: |
| (...skipping 15 matching lines...) Expand all Loading... |
| 365 case 12: | 346 case 12: |
| 366 return GOAWAY_INADEQUATE_SECURITY; | 347 return GOAWAY_INADEQUATE_SECURITY; |
| 367 case 13: | 348 case 13: |
| 368 return GOAWAY_HTTP_1_1_REQUIRED; | 349 return GOAWAY_HTTP_1_1_REQUIRED; |
| 369 } | 350 } |
| 370 | 351 |
| 371 SPDY_BUG << "Unhandled GOAWAY status " << goaway_status_field; | 352 SPDY_BUG << "Unhandled GOAWAY status " << goaway_status_field; |
| 372 return GOAWAY_PROTOCOL_ERROR; | 353 return GOAWAY_PROTOCOL_ERROR; |
| 373 } | 354 } |
| 374 | 355 |
| 375 int SpdyConstants::SerializeGoAwayStatus(SpdyMajorVersion /*version*/, | 356 int SpdyConstants::SerializeGoAwayStatus(SpdyGoAwayStatus status) { |
| 376 SpdyGoAwayStatus status) { | |
| 377 switch (status) { | 357 switch (status) { |
| 378 case GOAWAY_NO_ERROR: | 358 case GOAWAY_NO_ERROR: |
| 379 return 0; | 359 return 0; |
| 380 case GOAWAY_PROTOCOL_ERROR: | 360 case GOAWAY_PROTOCOL_ERROR: |
| 381 return 1; | 361 return 1; |
| 382 case GOAWAY_INTERNAL_ERROR: | 362 case GOAWAY_INTERNAL_ERROR: |
| 383 return 2; | 363 return 2; |
| 384 case GOAWAY_FLOW_CONTROL_ERROR: | 364 case GOAWAY_FLOW_CONTROL_ERROR: |
| 385 return 3; | 365 return 3; |
| 386 case GOAWAY_SETTINGS_TIMEOUT: | 366 case GOAWAY_SETTINGS_TIMEOUT: |
| (...skipping 15 matching lines...) Expand all Loading... |
| 402 case GOAWAY_INADEQUATE_SECURITY: | 382 case GOAWAY_INADEQUATE_SECURITY: |
| 403 return 12; | 383 return 12; |
| 404 case GOAWAY_HTTP_1_1_REQUIRED: | 384 case GOAWAY_HTTP_1_1_REQUIRED: |
| 405 return 13; | 385 return 13; |
| 406 default: | 386 default: |
| 407 SPDY_BUG << "Serializing unhandled GOAWAY status " << status; | 387 SPDY_BUG << "Serializing unhandled GOAWAY status " << status; |
| 408 return -1; | 388 return -1; |
| 409 } | 389 } |
| 410 } | 390 } |
| 411 | 391 |
| 412 size_t SpdyConstants::GetFrameHeaderSize(SpdyMajorVersion /*version*/) { | 392 const int SpdyConstants::kDataFrameType = 0; |
| 413 return 9; | |
| 414 } | |
| 415 | 393 |
| 416 size_t SpdyConstants::GetDataFrameMinimumSize(SpdyMajorVersion version) { | 394 const size_t SpdyConstants::kFrameHeaderSize = 9; |
| 417 return GetFrameHeaderSize(version); | |
| 418 } | |
| 419 | 395 |
| 420 size_t SpdyConstants::GetMaxFrameSizeLimit(SpdyMajorVersion version) { | 396 const size_t SpdyConstants::kDataFrameMinimumSize = kFrameHeaderSize; |
| 421 return kSpdyMaxFrameSizeLimit + GetFrameHeaderSize(version); | |
| 422 } | |
| 423 | 397 |
| 424 size_t SpdyConstants::GetSizeOfSizeField() { | 398 const size_t SpdyConstants::kMaxFrameSizeLimit = |
| 425 return sizeof(uint32_t); | 399 kSpdyMaxFrameSizeLimit + kFrameHeaderSize; |
| 426 } | |
| 427 | 400 |
| 428 size_t SpdyConstants::GetPerHeaderOverhead(SpdyMajorVersion version) { | 401 const size_t SpdyConstants::kSizeOfSizeField = sizeof(uint32_t); |
| 429 return (version == net::HTTP2) ? 32 : 0; | |
| 430 } | |
| 431 | 402 |
| 432 size_t SpdyConstants::GetSettingSize(SpdyMajorVersion version) { | 403 const size_t SpdyConstants::kPerHeaderOverhead = 32; |
| 433 return 6; | |
| 434 } | |
| 435 | 404 |
| 436 int32_t SpdyConstants::GetInitialStreamWindowSize(SpdyMajorVersion version) { | 405 const int32_t SpdyConstants::kInitialStreamWindowSize = 64 * 1024 - 1; |
| 437 return 64 * 1024 - 1; | |
| 438 } | |
| 439 | 406 |
| 440 int32_t SpdyConstants::GetInitialSessionWindowSize(SpdyMajorVersion version) { | 407 const int32_t SpdyConstants::kInitialSessionWindowSize = 64 * 1024 - 1; |
| 441 return 64 * 1024 - 1; | |
| 442 } | |
| 443 | 408 |
| 444 std::string SpdyConstants::GetVersionString(SpdyMajorVersion version) { | 409 const char SpdyConstants::kHttp2Npn[] = "h2"; |
| 445 switch (version) { | |
| 446 case HTTP2: | |
| 447 return "h2"; | |
| 448 default: | |
| 449 SPDY_BUG << "Unsupported SPDY major version: " << version; | |
| 450 return "h2"; | |
| 451 } | |
| 452 } | |
| 453 | 410 |
| 454 SpdyFrameWithHeaderBlockIR::SpdyFrameWithHeaderBlockIR( | 411 SpdyFrameWithHeaderBlockIR::SpdyFrameWithHeaderBlockIR( |
| 455 SpdyStreamId stream_id, | 412 SpdyStreamId stream_id, |
| 456 SpdyHeaderBlock header_block) | 413 SpdyHeaderBlock header_block) |
| 457 : SpdyFrameWithFinIR(stream_id), header_block_(std::move(header_block)) {} | 414 : SpdyFrameWithFinIR(stream_id), header_block_(std::move(header_block)) {} |
| 458 | 415 |
| 459 SpdyFrameWithHeaderBlockIR::~SpdyFrameWithHeaderBlockIR() {} | 416 SpdyFrameWithHeaderBlockIR::~SpdyFrameWithHeaderBlockIR() {} |
| 460 | 417 |
| 461 SpdyDataIR::SpdyDataIR(SpdyStreamId stream_id, base::StringPiece data) | 418 SpdyDataIR::SpdyDataIR(SpdyStreamId stream_id, base::StringPiece data) |
| 462 : SpdyFrameWithFinIR(stream_id), | 419 : SpdyFrameWithFinIR(stream_id), |
| (...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 583 | 540 |
| 584 void SpdyAltSvcIR::Visit(SpdyFrameVisitor* visitor) const { | 541 void SpdyAltSvcIR::Visit(SpdyFrameVisitor* visitor) const { |
| 585 return visitor->VisitAltSvc(*this); | 542 return visitor->VisitAltSvc(*this); |
| 586 } | 543 } |
| 587 | 544 |
| 588 void SpdyPriorityIR::Visit(SpdyFrameVisitor* visitor) const { | 545 void SpdyPriorityIR::Visit(SpdyFrameVisitor* visitor) const { |
| 589 return visitor->VisitPriority(*this); | 546 return visitor->VisitPriority(*this); |
| 590 } | 547 } |
| 591 | 548 |
| 592 } // namespace net | 549 } // namespace net |
| OLD | NEW |