| 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 | 
| 11 #ifndef NET_SPDY_SPDY_PROTOCOL_H_ | 11 #ifndef NET_SPDY_SPDY_PROTOCOL_H_ | 
| 12 #define NET_SPDY_SPDY_PROTOCOL_H_ | 12 #define NET_SPDY_SPDY_PROTOCOL_H_ | 
| 13 | 13 | 
|  | 14 #include <stddef.h> | 
|  | 15 #include <stdint.h> | 
|  | 16 | 
| 14 #include <limits> | 17 #include <limits> | 
| 15 #include <map> | 18 #include <map> | 
| 16 #include <string> | 19 #include <string> | 
| 17 | 20 | 
| 18 #include "base/basictypes.h" |  | 
| 19 #include "base/compiler_specific.h" | 21 #include "base/compiler_specific.h" | 
| 20 #include "base/logging.h" | 22 #include "base/logging.h" | 
|  | 23 #include "base/macros.h" | 
| 21 #include "base/memory/scoped_ptr.h" | 24 #include "base/memory/scoped_ptr.h" | 
| 22 #include "base/strings/string_piece.h" | 25 #include "base/strings/string_piece.h" | 
| 23 #include "base/sys_byteorder.h" | 26 #include "base/sys_byteorder.h" | 
| 24 #include "net/base/net_export.h" | 27 #include "net/base/net_export.h" | 
| 25 #include "net/spdy/spdy_alt_svc_wire_format.h" | 28 #include "net/spdy/spdy_alt_svc_wire_format.h" | 
| 26 #include "net/spdy/spdy_bitmasks.h" | 29 #include "net/spdy/spdy_bitmasks.h" | 
| 27 #include "net/spdy/spdy_header_block.h" | 30 #include "net/spdy/spdy_header_block.h" | 
| 28 | 31 | 
| 29 namespace net { | 32 namespace net { | 
| 30 | 33 | 
| 31 // The major versions of SPDY. Major version differences indicate | 34 // The major versions of SPDY. Major version differences indicate | 
| 32 // framer-layer incompatibility, as opposed to minor version numbers | 35 // framer-layer incompatibility, as opposed to minor version numbers | 
| 33 // which indicate application-layer incompatibility. Do not rely on | 36 // which indicate application-layer incompatibility. Do not rely on | 
| 34 // the mapping from enum value SPDYn to the integer n. | 37 // the mapping from enum value SPDYn to the integer n. | 
| 35 enum SpdyMajorVersion { | 38 enum SpdyMajorVersion { | 
| 36   SPDY2 = 2, | 39   SPDY2 = 2, | 
| 37   SPDY_MIN_VERSION = SPDY2, | 40   SPDY_MIN_VERSION = SPDY2, | 
| 38   SPDY3 = 3, | 41   SPDY3 = 3, | 
| 39   HTTP2 = 4, | 42   HTTP2 = 4, | 
| 40   SPDY_MAX_VERSION = HTTP2 | 43   SPDY_MAX_VERSION = HTTP2 | 
| 41 }; | 44 }; | 
| 42 | 45 | 
| 43 // A SPDY stream id is a 31 bit entity. | 46 // A SPDY stream id is a 31 bit entity. | 
| 44 typedef uint32 SpdyStreamId; | 47 typedef uint32_t SpdyStreamId; | 
| 45 | 48 | 
| 46 // Specifies the stream ID used to denote the current session (for | 49 // Specifies the stream ID used to denote the current session (for | 
| 47 // flow control). | 50 // flow control). | 
| 48 const SpdyStreamId kSessionFlowControlStreamId = 0; | 51 const SpdyStreamId kSessionFlowControlStreamId = 0; | 
| 49 | 52 | 
| 50 // The maxmium possible control frame size allowed by the spec. | 53 // The maxmium possible control frame size allowed by the spec. | 
| 51 const int32 kSpdyMaxControlFrameSize = (1 << 24) - 1; | 54 const int32_t kSpdyMaxControlFrameSize = (1 << 24) - 1; | 
| 52 | 55 | 
| 53 // The maximum control frame size we accept. | 56 // The maximum control frame size we accept. | 
| 54 const int32 kControlFrameSizeLimit = 1 << 14; | 57 const int32_t kControlFrameSizeLimit = 1 << 14; | 
| 55 | 58 | 
| 56 // Maximum window size for a Spdy stream or session. | 59 // Maximum window size for a Spdy stream or session. | 
| 57 const int32 kSpdyMaximumWindowSize = 0x7FFFFFFF;  // Max signed 32bit int | 60 const int32_t kSpdyMaximumWindowSize = 0x7FFFFFFF;  // Max signed 32bit int | 
| 58 | 61 | 
| 59 // Maximum padding size in octets for one DATA or HEADERS or PUSH_PROMISE frame. | 62 // Maximum padding size in octets for one DATA or HEADERS or PUSH_PROMISE frame. | 
| 60 const int32 kPaddingSizePerFrame = 256; | 63 const int32_t kPaddingSizePerFrame = 256; | 
| 61 | 64 | 
| 62 // SPDY 2 dictionary. | 65 // SPDY 2 dictionary. | 
| 63 // This is just a hacked dictionary to use for shrinking HTTP-like headers. | 66 // This is just a hacked dictionary to use for shrinking HTTP-like headers. | 
| 64 const char kV2Dictionary[] = | 67 const char kV2Dictionary[] = | 
| 65   "optionsgetheadpostputdeletetraceacceptaccept-charsetaccept-encodingaccept-" | 68   "optionsgetheadpostputdeletetraceacceptaccept-charsetaccept-encodingaccept-" | 
| 66   "languageauthorizationexpectfromhostif-modified-sinceif-matchif-none-matchi" | 69   "languageauthorizationexpectfromhostif-modified-sinceif-matchif-none-matchi" | 
| 67   "f-rangeif-unmodifiedsincemax-forwardsproxy-authorizationrangerefererteuser" | 70   "f-rangeif-unmodifiedsincemax-forwardsproxy-authorizationrangerefererteuser" | 
| 68   "-agent10010120020120220320420520630030130230330430530630740040140240340440" | 71   "-agent10010120020120220320420520630030130230330430530630740040140240340440" | 
| 69   "5406407408409410411412413414415416417500501502503504505accept-rangesageeta" | 72   "5406407408409410411412413414415416417500501502503504505accept-rangesageeta" | 
| 70   "glocationproxy-authenticatepublicretry-afterservervarywarningwww-authentic" | 73   "glocationproxy-authenticatepublicretry-afterservervarywarningwww-authentic" | 
| (...skipping 339 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 410   GOAWAY_COMPRESSION_ERROR = 9, | 413   GOAWAY_COMPRESSION_ERROR = 9, | 
| 411   GOAWAY_CONNECT_ERROR = 10, | 414   GOAWAY_CONNECT_ERROR = 10, | 
| 412   GOAWAY_ENHANCE_YOUR_CALM = 11, | 415   GOAWAY_ENHANCE_YOUR_CALM = 11, | 
| 413   GOAWAY_INADEQUATE_SECURITY = 12, | 416   GOAWAY_INADEQUATE_SECURITY = 12, | 
| 414   GOAWAY_HTTP_1_1_REQUIRED = 13 | 417   GOAWAY_HTTP_1_1_REQUIRED = 13 | 
| 415 }; | 418 }; | 
| 416 | 419 | 
| 417 // A SPDY priority is a number between 0 and 7 (inclusive). | 420 // A SPDY priority is a number between 0 and 7 (inclusive). | 
| 418 // SPDY priority range is version-dependent. For SPDY 2 and below, priority is a | 421 // SPDY priority range is version-dependent. For SPDY 2 and below, priority is a | 
| 419 // number between 0 and 3. | 422 // number between 0 and 3. | 
| 420 typedef uint8 SpdyPriority; | 423 typedef uint8_t SpdyPriority; | 
| 421 | 424 | 
| 422 // Lowest and Highest here refer to SPDY priorities as described in | 425 // Lowest and Highest here refer to SPDY priorities as described in | 
| 423 | 426 | 
| 424 // https://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3-1#TOC-2.3.3-
      Stream-priority | 427 // https://www.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3-1#TOC-2.3.3-
      Stream-priority | 
| 425 const SpdyPriority kV3HighestPriority = 0; | 428 const SpdyPriority kV3HighestPriority = 0; | 
| 426 const SpdyPriority kV3LowestPriority = 7; | 429 const SpdyPriority kV3LowestPriority = 7; | 
| 427 | 430 | 
| 428 typedef uint64 SpdyPingId; | 431 typedef uint64_t SpdyPingId; | 
| 429 | 432 | 
| 430 typedef std::string SpdyProtocolId; | 433 typedef std::string SpdyProtocolId; | 
| 431 | 434 | 
| 432 enum class SpdyHeaderValidatorType { | 435 enum class SpdyHeaderValidatorType { | 
| 433   REQUEST, | 436   REQUEST, | 
| 434   RESPONSE_HEADER, | 437   RESPONSE_HEADER, | 
| 435   RESPONSE_TRAILER | 438   RESPONSE_TRAILER | 
| 436 }; | 439 }; | 
| 437 | 440 | 
| 438 // TODO(hkhalil): Add direct testing for this? It won't increase coverage any, | 441 // TODO(hkhalil): Add direct testing for this? It won't increase coverage any, | 
| (...skipping 88 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 527   static size_t GetFrameMaximumSize(SpdyMajorVersion version); | 530   static size_t GetFrameMaximumSize(SpdyMajorVersion version); | 
| 528 | 531 | 
| 529   // Returns the size of a header block size field. Valid only for SPDY | 532   // Returns the size of a header block size field. Valid only for SPDY | 
| 530   // versions <= 3. | 533   // versions <= 3. | 
| 531   static size_t GetSizeOfSizeField(SpdyMajorVersion version); | 534   static size_t GetSizeOfSizeField(SpdyMajorVersion version); | 
| 532 | 535 | 
| 533   // Returns the size (in bytes) of a wire setting ID and value. | 536   // Returns the size (in bytes) of a wire setting ID and value. | 
| 534   static size_t GetSettingSize(SpdyMajorVersion version); | 537   static size_t GetSettingSize(SpdyMajorVersion version); | 
| 535 | 538 | 
| 536   // Initial window size for a stream in bytes. | 539   // Initial window size for a stream in bytes. | 
| 537   static int32 GetInitialStreamWindowSize(SpdyMajorVersion version); | 540   static int32_t GetInitialStreamWindowSize(SpdyMajorVersion version); | 
| 538 | 541 | 
| 539   // Initial window size for a session in bytes. | 542   // Initial window size for a session in bytes. | 
| 540   static int32 GetInitialSessionWindowSize(SpdyMajorVersion version); | 543   static int32_t GetInitialSessionWindowSize(SpdyMajorVersion version); | 
| 541 | 544 | 
| 542   static SpdyMajorVersion ParseMajorVersion(int version_number); | 545   static SpdyMajorVersion ParseMajorVersion(int version_number); | 
| 543 | 546 | 
| 544   static int SerializeMajorVersion(SpdyMajorVersion version); | 547   static int SerializeMajorVersion(SpdyMajorVersion version); | 
| 545 | 548 | 
| 546   static std::string GetVersionString(SpdyMajorVersion version); | 549   static std::string GetVersionString(SpdyMajorVersion version); | 
| 547 }; | 550 }; | 
| 548 | 551 | 
| 549 class SpdyFrame; | 552 class SpdyFrame; | 
| 550 typedef SpdyFrame SpdySerializedFrame; | 553 typedef SpdyFrame SpdySerializedFrame; | 
| (...skipping 198 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 749 | 752 | 
| 750 class NET_EXPORT_PRIVATE SpdySettingsIR : public SpdyFrameIR { | 753 class NET_EXPORT_PRIVATE SpdySettingsIR : public SpdyFrameIR { | 
| 751  public: | 754  public: | 
| 752   // Associates flags with a value. | 755   // Associates flags with a value. | 
| 753   struct Value { | 756   struct Value { | 
| 754     Value() : persist_value(false), | 757     Value() : persist_value(false), | 
| 755               persisted(false), | 758               persisted(false), | 
| 756               value(0) {} | 759               value(0) {} | 
| 757     bool persist_value; | 760     bool persist_value; | 
| 758     bool persisted; | 761     bool persisted; | 
| 759     int32 value; | 762     int32_t value; | 
| 760   }; | 763   }; | 
| 761   typedef std::map<SpdySettingsIds, Value> ValueMap; | 764   typedef std::map<SpdySettingsIds, Value> ValueMap; | 
| 762 | 765 | 
| 763   SpdySettingsIR(); | 766   SpdySettingsIR(); | 
| 764 | 767 | 
| 765   ~SpdySettingsIR() override; | 768   ~SpdySettingsIR() override; | 
| 766 | 769 | 
| 767   // Overwrites as appropriate. | 770   // Overwrites as appropriate. | 
| 768   const ValueMap& values() const { return values_; } | 771   const ValueMap& values() const { return values_; } | 
| 769   void AddSetting(SpdySettingsIds id, | 772   void AddSetting(SpdySettingsIds id, | 
| 770                   bool persist_value, | 773                   bool persist_value, | 
| 771                   bool persisted, | 774                   bool persisted, | 
| 772                   int32 value) { | 775                   int32_t value) { | 
| 773     values_[id].persist_value = persist_value; | 776     values_[id].persist_value = persist_value; | 
| 774     values_[id].persisted = persisted; | 777     values_[id].persisted = persisted; | 
| 775     values_[id].value = value; | 778     values_[id].value = value; | 
| 776   } | 779   } | 
| 777 | 780 | 
| 778   bool clear_settings() const { return clear_settings_; } | 781   bool clear_settings() const { return clear_settings_; } | 
| 779   bool is_ack() const { return is_ack_; } | 782   bool is_ack() const { return is_ack_; } | 
| 780   void set_is_ack(bool is_ack) { | 783   void set_is_ack(bool is_ack) { | 
| 781     is_ack_ = is_ack; | 784     is_ack_ = is_ack; | 
| 782   } | 785   } | 
| (...skipping 58 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 841 | 844 | 
| 842 class NET_EXPORT_PRIVATE SpdyHeadersIR : public SpdyFrameWithHeaderBlockIR { | 845 class NET_EXPORT_PRIVATE SpdyHeadersIR : public SpdyFrameWithHeaderBlockIR { | 
| 843  public: | 846  public: | 
| 844   explicit SpdyHeadersIR(SpdyStreamId stream_id) | 847   explicit SpdyHeadersIR(SpdyStreamId stream_id) | 
| 845       : SpdyFrameWithHeaderBlockIR(stream_id) {} | 848       : SpdyFrameWithHeaderBlockIR(stream_id) {} | 
| 846 | 849 | 
| 847   void Visit(SpdyFrameVisitor* visitor) const override; | 850   void Visit(SpdyFrameVisitor* visitor) const override; | 
| 848 | 851 | 
| 849   bool has_priority() const { return has_priority_; } | 852   bool has_priority() const { return has_priority_; } | 
| 850   void set_has_priority(bool has_priority) { has_priority_ = has_priority; } | 853   void set_has_priority(bool has_priority) { has_priority_ = has_priority; } | 
| 851   uint32 priority() const { return priority_; } | 854   uint32_t priority() const { return priority_; } | 
| 852   void set_priority(SpdyPriority priority) { priority_ = priority; } | 855   void set_priority(SpdyPriority priority) { priority_ = priority; } | 
| 853   SpdyStreamId parent_stream_id() const { return parent_stream_id_; } | 856   SpdyStreamId parent_stream_id() const { return parent_stream_id_; } | 
| 854   void set_parent_stream_id(SpdyStreamId id) { parent_stream_id_ = id; } | 857   void set_parent_stream_id(SpdyStreamId id) { parent_stream_id_ = id; } | 
| 855   bool exclusive() const { return exclusive_; } | 858   bool exclusive() const { return exclusive_; } | 
| 856   void set_exclusive(bool exclusive) { exclusive_ = exclusive; } | 859   void set_exclusive(bool exclusive) { exclusive_ = exclusive; } | 
| 857   bool padded() const { return padded_; } | 860   bool padded() const { return padded_; } | 
| 858   int padding_payload_len() const { return padding_payload_len_; } | 861   int padding_payload_len() const { return padding_payload_len_; } | 
| 859   void set_padding_len(int padding_len) { | 862   void set_padding_len(int padding_len) { | 
| 860     DCHECK_GT(padding_len, 0); | 863     DCHECK_GT(padding_len, 0); | 
| 861     DCHECK_LE(padding_len, kPaddingSizePerFrame); | 864     DCHECK_LE(padding_len, kPaddingSizePerFrame); | 
| 862     padded_ = true; | 865     padded_ = true; | 
| 863     // The pad field takes one octet on the wire. | 866     // The pad field takes one octet on the wire. | 
| 864     padding_payload_len_ = padding_len - 1; | 867     padding_payload_len_ = padding_len - 1; | 
| 865   } | 868   } | 
| 866 | 869 | 
| 867  private: | 870  private: | 
| 868   bool has_priority_ = false; | 871   bool has_priority_ = false; | 
| 869   // 31-bit priority. | 872   // 31-bit priority. | 
| 870   uint32 priority_ = 0; | 873   uint32_t priority_ = 0; | 
| 871   SpdyStreamId parent_stream_id_ = 0; | 874   SpdyStreamId parent_stream_id_ = 0; | 
| 872   bool exclusive_ = false; | 875   bool exclusive_ = false; | 
| 873   bool padded_ = false; | 876   bool padded_ = false; | 
| 874   int padding_payload_len_ = 0; | 877   int padding_payload_len_ = 0; | 
| 875 | 878 | 
| 876   DISALLOW_COPY_AND_ASSIGN(SpdyHeadersIR); | 879   DISALLOW_COPY_AND_ASSIGN(SpdyHeadersIR); | 
| 877 }; | 880 }; | 
| 878 | 881 | 
| 879 class NET_EXPORT_PRIVATE SpdyWindowUpdateIR : public SpdyFrameWithStreamIdIR { | 882 class NET_EXPORT_PRIVATE SpdyWindowUpdateIR : public SpdyFrameWithStreamIdIR { | 
| 880  public: | 883  public: | 
| 881   SpdyWindowUpdateIR(SpdyStreamId stream_id, int32 delta) | 884   SpdyWindowUpdateIR(SpdyStreamId stream_id, int32_t delta) | 
| 882       : SpdyFrameWithStreamIdIR(stream_id) { | 885       : SpdyFrameWithStreamIdIR(stream_id) { | 
| 883     set_delta(delta); | 886     set_delta(delta); | 
| 884   } | 887   } | 
| 885   int32 delta() const { return delta_; } | 888   int32_t delta() const { return delta_; } | 
| 886   void set_delta(int32 delta) { | 889   void set_delta(int32_t delta) { | 
| 887     DCHECK_LT(0, delta); | 890     DCHECK_LT(0, delta); | 
| 888     DCHECK_LE(delta, kSpdyMaximumWindowSize); | 891     DCHECK_LE(delta, kSpdyMaximumWindowSize); | 
| 889     delta_ = delta; | 892     delta_ = delta; | 
| 890   } | 893   } | 
| 891 | 894 | 
| 892   void Visit(SpdyFrameVisitor* visitor) const override; | 895   void Visit(SpdyFrameVisitor* visitor) const override; | 
| 893 | 896 | 
| 894  private: | 897  private: | 
| 895   int32 delta_; | 898   int32_t delta_; | 
| 896 | 899 | 
| 897   DISALLOW_COPY_AND_ASSIGN(SpdyWindowUpdateIR); | 900   DISALLOW_COPY_AND_ASSIGN(SpdyWindowUpdateIR); | 
| 898 }; | 901 }; | 
| 899 | 902 | 
| 900 class NET_EXPORT_PRIVATE SpdyBlockedIR | 903 class NET_EXPORT_PRIVATE SpdyBlockedIR | 
| 901     : public NON_EXPORTED_BASE(SpdyFrameWithStreamIdIR) { | 904     : public NON_EXPORTED_BASE(SpdyFrameWithStreamIdIR) { | 
| 902  public: | 905  public: | 
| 903   explicit SpdyBlockedIR(SpdyStreamId stream_id) | 906   explicit SpdyBlockedIR(SpdyStreamId stream_id) | 
| 904       : SpdyFrameWithStreamIdIR(stream_id) {} | 907       : SpdyFrameWithStreamIdIR(stream_id) {} | 
| 905 | 908 | 
| (...skipping 76 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 982 | 985 | 
| 983 class NET_EXPORT_PRIVATE SpdyPriorityIR : public SpdyFrameWithStreamIdIR { | 986 class NET_EXPORT_PRIVATE SpdyPriorityIR : public SpdyFrameWithStreamIdIR { | 
| 984  public: | 987  public: | 
| 985   explicit SpdyPriorityIR(SpdyStreamId stream_id) | 988   explicit SpdyPriorityIR(SpdyStreamId stream_id) | 
| 986       : SpdyFrameWithStreamIdIR(stream_id), | 989       : SpdyFrameWithStreamIdIR(stream_id), | 
| 987         parent_stream_id_(0), | 990         parent_stream_id_(0), | 
| 988         weight_(1), | 991         weight_(1), | 
| 989         exclusive_(false) {} | 992         exclusive_(false) {} | 
| 990   SpdyPriorityIR(SpdyStreamId stream_id, | 993   SpdyPriorityIR(SpdyStreamId stream_id, | 
| 991                  SpdyStreamId parent_stream_id, | 994                  SpdyStreamId parent_stream_id, | 
| 992                  uint8 weight, | 995                  uint8_t weight, | 
| 993                  bool exclusive) | 996                  bool exclusive) | 
| 994       : SpdyFrameWithStreamIdIR(stream_id), | 997       : SpdyFrameWithStreamIdIR(stream_id), | 
| 995         parent_stream_id_(parent_stream_id), | 998         parent_stream_id_(parent_stream_id), | 
| 996         weight_(weight), | 999         weight_(weight), | 
| 997         exclusive_(exclusive) {} | 1000         exclusive_(exclusive) {} | 
| 998   SpdyStreamId parent_stream_id() const { return parent_stream_id_; } | 1001   SpdyStreamId parent_stream_id() const { return parent_stream_id_; } | 
| 999   void set_parent_stream_id(SpdyStreamId id) { parent_stream_id_ = id; } | 1002   void set_parent_stream_id(SpdyStreamId id) { parent_stream_id_ = id; } | 
| 1000   uint8 weight() const { return weight_; } | 1003   uint8_t weight() const { return weight_; } | 
| 1001   void set_weight(uint8 weight) { weight_ = weight; } | 1004   void set_weight(uint8_t weight) { weight_ = weight; } | 
| 1002   bool exclusive() const { return exclusive_; } | 1005   bool exclusive() const { return exclusive_; } | 
| 1003   void set_exclusive(bool exclusive) { exclusive_ = exclusive; } | 1006   void set_exclusive(bool exclusive) { exclusive_ = exclusive; } | 
| 1004 | 1007 | 
| 1005   void Visit(SpdyFrameVisitor* visitor) const override; | 1008   void Visit(SpdyFrameVisitor* visitor) const override; | 
| 1006 | 1009 | 
| 1007  private: | 1010  private: | 
| 1008   SpdyStreamId parent_stream_id_; | 1011   SpdyStreamId parent_stream_id_; | 
| 1009   uint8 weight_; | 1012   uint8_t weight_; | 
| 1010   bool exclusive_; | 1013   bool exclusive_; | 
| 1011   DISALLOW_COPY_AND_ASSIGN(SpdyPriorityIR); | 1014   DISALLOW_COPY_AND_ASSIGN(SpdyPriorityIR); | 
| 1012 }; | 1015 }; | 
| 1013 | 1016 | 
| 1014 // ------------------------------------------------------------------------- | 1017 // ------------------------------------------------------------------------- | 
| 1015 // Wrapper classes for various SPDY frames. | 1018 // Wrapper classes for various SPDY frames. | 
| 1016 | 1019 | 
| 1017 // All Spdy Frame types derive from this SpdyFrame class. | 1020 // All Spdy Frame types derive from this SpdyFrame class. | 
| 1018 class SpdyFrame { | 1021 class SpdyFrame { | 
| 1019  public: | 1022  public: | 
| (...skipping 59 matching lines...) Expand 10 before | Expand all | Expand 10 after  Loading... | 
| 1079   SpdyFrameVisitor() {} | 1082   SpdyFrameVisitor() {} | 
| 1080   virtual ~SpdyFrameVisitor() {} | 1083   virtual ~SpdyFrameVisitor() {} | 
| 1081 | 1084 | 
| 1082  private: | 1085  private: | 
| 1083   DISALLOW_COPY_AND_ASSIGN(SpdyFrameVisitor); | 1086   DISALLOW_COPY_AND_ASSIGN(SpdyFrameVisitor); | 
| 1084 }; | 1087 }; | 
| 1085 | 1088 | 
| 1086 }  // namespace net | 1089 }  // namespace net | 
| 1087 | 1090 | 
| 1088 #endif  // NET_SPDY_SPDY_PROTOCOL_H_ | 1091 #endif  // NET_SPDY_SPDY_PROTOCOL_H_ | 
| OLD | NEW | 
|---|