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 // This file contains some protocol structures for use with SPDY 2 and 3 | 5 // This file contains some protocol structures for use with SPDY 2 and 3 |
6 // The SPDY 2 spec can be found at: | 6 // The SPDY 2 spec can be found at: |
7 // http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft2 | 7 // http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft2 |
8 // The SPDY 3 spec can be found at: | 8 // The SPDY 3 spec can be found at: |
9 // http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3 | 9 // http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3 |
10 | 10 |
(...skipping 342 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
353 SETTINGS_HEADER_TABLE_SIZE = 0x8, | 353 SETTINGS_HEADER_TABLE_SIZE = 0x8, |
354 // Whether or not server push (PUSH_PROMISE) is enabled. | 354 // Whether or not server push (PUSH_PROMISE) is enabled. |
355 SETTINGS_ENABLE_PUSH = 0x9, | 355 SETTINGS_ENABLE_PUSH = 0x9, |
356 }; | 356 }; |
357 | 357 |
358 // Status codes for RST_STREAM frames. | 358 // Status codes for RST_STREAM frames. |
359 enum SpdyRstStreamStatus { | 359 enum SpdyRstStreamStatus { |
360 RST_STREAM_INVALID = 0, | 360 RST_STREAM_INVALID = 0, |
361 RST_STREAM_PROTOCOL_ERROR = 1, | 361 RST_STREAM_PROTOCOL_ERROR = 1, |
362 RST_STREAM_INVALID_STREAM = 2, | 362 RST_STREAM_INVALID_STREAM = 2, |
| 363 RST_STREAM_STREAM_CLOSED = 2, // Equivalent to INVALID_STREAM |
363 RST_STREAM_REFUSED_STREAM = 3, | 364 RST_STREAM_REFUSED_STREAM = 3, |
364 RST_STREAM_UNSUPPORTED_VERSION = 4, | 365 RST_STREAM_UNSUPPORTED_VERSION = 4, |
365 RST_STREAM_CANCEL = 5, | 366 RST_STREAM_CANCEL = 5, |
366 RST_STREAM_INTERNAL_ERROR = 6, | 367 RST_STREAM_INTERNAL_ERROR = 6, |
367 RST_STREAM_FLOW_CONTROL_ERROR = 7, | 368 RST_STREAM_FLOW_CONTROL_ERROR = 7, |
368 RST_STREAM_STREAM_IN_USE = 8, | 369 RST_STREAM_STREAM_IN_USE = 8, |
369 RST_STREAM_STREAM_ALREADY_CLOSED = 9, | 370 RST_STREAM_STREAM_ALREADY_CLOSED = 9, |
370 RST_STREAM_INVALID_CREDENTIALS = 10, | 371 RST_STREAM_INVALID_CREDENTIALS = 10, |
| 372 // FRAME_TOO_LARGE (defined by SPDY versions 3.1 and below), and |
| 373 // FRAME_SIZE_ERROR (defined by HTTP/2) are mapped to the same internal |
| 374 // reset status. |
371 RST_STREAM_FRAME_TOO_LARGE = 11, | 375 RST_STREAM_FRAME_TOO_LARGE = 11, |
372 RST_STREAM_NUM_STATUS_CODES = 12 | 376 RST_STREAM_FRAME_SIZE_ERROR = 11, |
| 377 RST_STREAM_SETTINGS_TIMEOUT = 12, |
| 378 RST_STREAM_CONNECT_ERROR = 13, |
| 379 RST_STREAM_ENHANCE_YOUR_CALM = 14, |
| 380 RST_STREAM_NUM_STATUS_CODES = 15 |
373 }; | 381 }; |
374 | 382 |
375 // Status codes for GOAWAY frames. | 383 // Status codes for GOAWAY frames. |
376 enum SpdyGoAwayStatus { | 384 enum SpdyGoAwayStatus { |
377 GOAWAY_INVALID = -1, | 385 GOAWAY_INVALID = -1, |
378 GOAWAY_OK = 0, | 386 GOAWAY_OK = 0, |
379 GOAWAY_PROTOCOL_ERROR = 1, | 387 GOAWAY_PROTOCOL_ERROR = 1, |
380 GOAWAY_INTERNAL_ERROR = 2, | 388 GOAWAY_INTERNAL_ERROR = 2, |
381 GOAWAY_NUM_STATUS_CODES = 3 // Must be last. | 389 GOAWAY_NUM_STATUS_CODES = 3 // Must be last. |
382 }; | 390 }; |
(...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
419 // version. | 427 // version. |
420 // Behavior is undefined for invalid setting id fields; consumers should first | 428 // Behavior is undefined for invalid setting id fields; consumers should first |
421 // use IsValidSettingId() to verify validity of setting id fields. | 429 // use IsValidSettingId() to verify validity of setting id fields. |
422 static SpdySettingsIds ParseSettingId(SpdyMajorVersion version, | 430 static SpdySettingsIds ParseSettingId(SpdyMajorVersion version, |
423 int setting_id_field); | 431 int setting_id_field); |
424 | 432 |
425 // Serializes a given setting id to the on-the-wire enumeration value for the | 433 // Serializes a given setting id to the on-the-wire enumeration value for the |
426 // given protocol version. | 434 // given protocol version. |
427 // Returns -1 on failure (I.E. Invalid setting id for the given version). | 435 // Returns -1 on failure (I.E. Invalid setting id for the given version). |
428 static int SerializeSettingId(SpdyMajorVersion version, SpdySettingsIds id); | 436 static int SerializeSettingId(SpdyMajorVersion version, SpdySettingsIds id); |
| 437 |
| 438 // Returns true if a given on-the-wire enumeration of a RST_STREAM status code |
| 439 // is valid for a given protocol version, false otherwise. |
| 440 static bool IsValidRstStreamStatus(SpdyMajorVersion version, |
| 441 int rst_stream_status_field); |
| 442 |
| 443 // Parses a RST_STREAM status code from an on-the-wire enumeration of a given |
| 444 // protocol version. |
| 445 // Behavior is undefined for invalid RST_STREAM status code fields; consumers |
| 446 // should first use IsValidRstStreamStatus() to verify validity of RST_STREAM |
| 447 // status code fields.. |
| 448 static SpdyRstStreamStatus ParseRstStreamStatus(SpdyMajorVersion version, |
| 449 int rst_stream_status_field); |
| 450 |
| 451 // Serializes a given RST_STREAM status code to the on-the-wire enumeration |
| 452 // value for the given protocol version. |
| 453 // Returns -1 on failure (I.E. Invalid RST_STREAM status code for the given |
| 454 // version). |
| 455 static int SerializeRstStreamStatus(SpdyMajorVersion version, |
| 456 SpdyRstStreamStatus rst_stream_status); |
429 }; | 457 }; |
430 | 458 |
431 class SpdyFrame; | 459 class SpdyFrame; |
432 typedef SpdyFrame SpdySerializedFrame; | 460 typedef SpdyFrame SpdySerializedFrame; |
433 | 461 |
434 class SpdyFrameVisitor; | 462 class SpdyFrameVisitor; |
435 | 463 |
436 // Intermediate representation for SPDY frames. | 464 // Intermediate representation for SPDY frames. |
437 // TODO(hkhalil): Rename this class to SpdyFrame when the existing SpdyFrame is | 465 // TODO(hkhalil): Rename this class to SpdyFrame when the existing SpdyFrame is |
438 // gone. | 466 // gone. |
(...skipping 190 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
629 public: | 657 public: |
630 SpdyRstStreamIR(SpdyStreamId stream_id, SpdyRstStreamStatus status, | 658 SpdyRstStreamIR(SpdyStreamId stream_id, SpdyRstStreamStatus status, |
631 base::StringPiece description); | 659 base::StringPiece description); |
632 | 660 |
633 virtual ~SpdyRstStreamIR(); | 661 virtual ~SpdyRstStreamIR(); |
634 | 662 |
635 SpdyRstStreamStatus status() const { | 663 SpdyRstStreamStatus status() const { |
636 return status_; | 664 return status_; |
637 } | 665 } |
638 void set_status(SpdyRstStreamStatus status) { | 666 void set_status(SpdyRstStreamStatus status) { |
639 DCHECK_NE(status, RST_STREAM_INVALID); | |
640 DCHECK_LT(status, RST_STREAM_NUM_STATUS_CODES); | |
641 status_ = status; | 667 status_ = status; |
642 } | 668 } |
643 | 669 |
644 base::StringPiece description() const { return description_; } | 670 base::StringPiece description() const { return description_; } |
645 | 671 |
646 void set_description(base::StringPiece description) { | 672 void set_description(base::StringPiece description) { |
647 description_ = description; | 673 description_ = description; |
648 } | 674 } |
649 | 675 |
650 virtual void Visit(SpdyFrameVisitor* visitor) const OVERRIDE; | 676 virtual void Visit(SpdyFrameVisitor* visitor) const OVERRIDE; |
(...skipping 264 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
915 SpdyFrameVisitor() {} | 941 SpdyFrameVisitor() {} |
916 virtual ~SpdyFrameVisitor() {} | 942 virtual ~SpdyFrameVisitor() {} |
917 | 943 |
918 private: | 944 private: |
919 DISALLOW_COPY_AND_ASSIGN(SpdyFrameVisitor); | 945 DISALLOW_COPY_AND_ASSIGN(SpdyFrameVisitor); |
920 }; | 946 }; |
921 | 947 |
922 } // namespace net | 948 } // namespace net |
923 | 949 |
924 #endif // NET_SPDY_SPDY_PROTOCOL_H_ | 950 #endif // NET_SPDY_SPDY_PROTOCOL_H_ |
OLD | NEW |