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

Side by Side Diff: net/spdy/spdy_protocol.h

Issue 358493002: Land recent SPDY changes (through 70021377) (Closed) Base URL: svn://svn.chromium.org/chrome/trunk/src
Patch Set: Rebase on code-review-feedback updates. Created 6 years, 6 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 unified diff | Download patch | Annotate | Revision Log
« no previous file with comments | « net/spdy/spdy_priority_tree_test.cc ('k') | net/spdy/spdy_protocol.cc » ('j') | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
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 37 matching lines...) Expand 10 before | Expand all | Expand 10 after
48 48
49 // Initial window size for a Spdy stream in bytes. 49 // Initial window size for a Spdy stream in bytes.
50 const int32 kSpdyStreamInitialWindowSize = 64 * 1024; // 64 KBytes 50 const int32 kSpdyStreamInitialWindowSize = 64 * 1024; // 64 KBytes
51 51
52 // Initial window size for a Spdy session in bytes. 52 // Initial window size for a Spdy session in bytes.
53 const int32 kSpdySessionInitialWindowSize = 64 * 1024; // 64 KBytes 53 const int32 kSpdySessionInitialWindowSize = 64 * 1024; // 64 KBytes
54 54
55 // Maximum window size for a Spdy stream or session. 55 // Maximum window size for a Spdy stream or session.
56 const int32 kSpdyMaximumWindowSize = 0x7FFFFFFF; // Max signed 32bit int 56 const int32 kSpdyMaximumWindowSize = 0x7FFFFFFF; // Max signed 32bit int
57 57
58 // Maximum padding size in octets for one DATA or HEADERS or PUSH_PROMISE frame.
59 const int32 kPaddingSizePerFrame = 256;
60
58 // SPDY 2 dictionary. 61 // SPDY 2 dictionary.
59 // This is just a hacked dictionary to use for shrinking HTTP-like headers. 62 // This is just a hacked dictionary to use for shrinking HTTP-like headers.
60 const char kV2Dictionary[] = 63 const char kV2Dictionary[] =
61 "optionsgetheadpostputdeletetraceacceptaccept-charsetaccept-encodingaccept-" 64 "optionsgetheadpostputdeletetraceacceptaccept-charsetaccept-encodingaccept-"
62 "languageauthorizationexpectfromhostif-modified-sinceif-matchif-none-matchi" 65 "languageauthorizationexpectfromhostif-modified-sinceif-matchif-none-matchi"
63 "f-rangeif-unmodifiedsincemax-forwardsproxy-authorizationrangerefererteuser" 66 "f-rangeif-unmodifiedsincemax-forwardsproxy-authorizationrangerefererteuser"
64 "-agent10010120020120220320420520630030130230330430530630740040140240340440" 67 "-agent10010120020120220320420520630030130230330430530630740040140240340440"
65 "5406407408409410411412413414415416417500501502503504505accept-rangesageeta" 68 "5406407408409410411412413414415416417500501502503504505accept-rangesageeta"
66 "glocationproxy-authenticatepublicretry-afterservervarywarningwww-authentic" 69 "glocationproxy-authenticatepublicretry-afterservervarywarningwww-authentic"
67 "ateallowcontent-basecontent-encodingcache-controlconnectiondatetrailertran" 70 "ateallowcontent-basecontent-encodingcache-controlconnectiondatetrailertran"
(...skipping 197 matching lines...) Expand 10 before | Expand all | Expand 10 after
265 const char kHttp2ConnectionHeaderPrefix[] = { 268 const char kHttp2ConnectionHeaderPrefix[] = {
266 0x50, 0x52, 0x49, 0x20, 0x2a, 0x20, 0x48, 0x54, // PRI * HT 269 0x50, 0x52, 0x49, 0x20, 0x2a, 0x20, 0x48, 0x54, // PRI * HT
267 0x54, 0x50, 0x2f, 0x32, 0x2e, 0x30, 0x0d, 0x0a, // TP/2.0.. 270 0x54, 0x50, 0x2f, 0x32, 0x2e, 0x30, 0x0d, 0x0a, // TP/2.0..
268 0x0d, 0x0a, 0x53, 0x4d, 0x0d, 0x0a, 0x0d, 0x0a // ..SM.... 271 0x0d, 0x0a, 0x53, 0x4d, 0x0d, 0x0a, 0x0d, 0x0a // ..SM....
269 }; 272 };
270 const int kHttp2ConnectionHeaderPrefixSize = 273 const int kHttp2ConnectionHeaderPrefixSize =
271 arraysize(kHttp2ConnectionHeaderPrefix); 274 arraysize(kHttp2ConnectionHeaderPrefix);
272 275
273 // Types of SPDY frames. 276 // Types of SPDY frames.
274 enum SpdyFrameType { 277 enum SpdyFrameType {
275 DATA = 0, 278 DATA,
276 SYN_STREAM = 1, 279 SYN_STREAM,
277 FIRST_CONTROL_TYPE = SYN_STREAM,
278 SYN_REPLY, 280 SYN_REPLY,
279 RST_STREAM, 281 RST_STREAM,
280 SETTINGS, 282 SETTINGS,
281 NOOP, // Because it is valid in SPDY/2, kept for identifiability/enum order.
282 PING, 283 PING,
283 GOAWAY, 284 GOAWAY,
284 HEADERS, 285 HEADERS,
285 WINDOW_UPDATE, 286 WINDOW_UPDATE,
286 CREDENTIAL, // No longer valid. Kept for identifiability/enum order. 287 CREDENTIAL = 10, // No longer valid. Kept for identifiability.
287 BLOCKED, 288 BLOCKED,
288 PUSH_PROMISE, 289 PUSH_PROMISE,
289 CONTINUATION, 290 CONTINUATION,
290 ALTSVC, 291 ALTSVC,
291 PRIORITY, 292 PRIORITY
292 LAST_CONTROL_TYPE = PRIORITY
293 }; 293 };
294 294
295 // Flags on data packets. 295 // Flags on data packets.
296 enum SpdyDataFlags { 296 enum SpdyDataFlags {
297 DATA_FLAG_NONE = 0x00, 297 DATA_FLAG_NONE = 0x00,
298 DATA_FLAG_FIN = 0x01, 298 DATA_FLAG_FIN = 0x01,
299 DATA_FLAG_END_SEGMENT = 0x02, 299 DATA_FLAG_END_SEGMENT = 0x02,
300 DATA_FLAG_PAD_LOW = 0x08, 300 DATA_FLAG_PADDED = 0x08,
301 DATA_FLAG_PAD_HIGH = 0x10,
302 DATA_FLAG_COMPRESSED = 0x20, 301 DATA_FLAG_COMPRESSED = 0x20,
303 }; 302 };
304 303
305 // Flags on control packets 304 // Flags on control packets
306 enum SpdyControlFlags { 305 enum SpdyControlFlags {
307 CONTROL_FLAG_NONE = 0x00, 306 CONTROL_FLAG_NONE = 0x00,
308 CONTROL_FLAG_FIN = 0x01, 307 CONTROL_FLAG_FIN = 0x01,
309 CONTROL_FLAG_UNIDIRECTIONAL = 0x02, 308 CONTROL_FLAG_UNIDIRECTIONAL = 0x02,
310 }; 309 };
311 310
312 enum SpdyPingFlags { 311 enum SpdyPingFlags {
313 PING_FLAG_ACK = 0x01, 312 PING_FLAG_ACK = 0x01,
314 }; 313 };
315 314
316 // Used by HEADERS, PUSH_PROMISE, and CONTINUATION. 315 // Used by HEADERS, PUSH_PROMISE, and CONTINUATION.
317 enum SpdyHeadersFlags { 316 enum SpdyHeadersFlags {
318 HEADERS_FLAG_END_SEGMENT = 0x02, 317 HEADERS_FLAG_END_SEGMENT = 0x02,
319 HEADERS_FLAG_END_HEADERS = 0x04, 318 HEADERS_FLAG_END_HEADERS = 0x04,
320 HEADERS_FLAG_PAD_LOW = 0x08, 319 HEADERS_FLAG_PADDED = 0x08,
321 HEADERS_FLAG_PAD_HIGH = 0x10,
322 HEADERS_FLAG_PRIORITY = 0x20, 320 HEADERS_FLAG_PRIORITY = 0x20,
323 }; 321 };
324 322
325 enum SpdyPushPromiseFlags { 323 enum SpdyPushPromiseFlags {
326 PUSH_PROMISE_FLAG_END_PUSH_PROMISE = 0x04, 324 PUSH_PROMISE_FLAG_END_PUSH_PROMISE = 0x04,
325 PUSH_PROMISE_FLAG_PADDED = 0x08,
327 }; 326 };
328 327
329 // Flags on the SETTINGS control frame. 328 // Flags on the SETTINGS control frame.
330 enum SpdySettingsControlFlags { 329 enum SpdySettingsControlFlags {
331 SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS = 0x01, 330 SETTINGS_FLAG_CLEAR_PREVIOUSLY_PERSISTED_SETTINGS = 0x01,
332 }; 331 };
333 332
334 enum Http2SettingsControlFlags { 333 enum Http2SettingsControlFlags {
335 SETTINGS_FLAG_ACK = 0x01, 334 SETTINGS_FLAG_ACK = 0x01,
336 }; 335 };
(...skipping 17 matching lines...) Expand all
354 // TCP congestion window in packets. 353 // TCP congestion window in packets.
355 SETTINGS_CURRENT_CWND = 0x5, 354 SETTINGS_CURRENT_CWND = 0x5,
356 // Downstream byte retransmission rate in percentage. 355 // Downstream byte retransmission rate in percentage.
357 SETTINGS_DOWNLOAD_RETRANS_RATE = 0x6, 356 SETTINGS_DOWNLOAD_RETRANS_RATE = 0x6,
358 // Initial window size in bytes 357 // Initial window size in bytes
359 SETTINGS_INITIAL_WINDOW_SIZE = 0x7, 358 SETTINGS_INITIAL_WINDOW_SIZE = 0x7,
360 // HPACK header table maximum size. 359 // HPACK header table maximum size.
361 SETTINGS_HEADER_TABLE_SIZE = 0x8, 360 SETTINGS_HEADER_TABLE_SIZE = 0x8,
362 // Whether or not server push (PUSH_PROMISE) is enabled. 361 // Whether or not server push (PUSH_PROMISE) is enabled.
363 SETTINGS_ENABLE_PUSH = 0x9, 362 SETTINGS_ENABLE_PUSH = 0x9,
364 // Whether or not to enable GZip compression of DATA frames.
365 SETTINGS_COMPRESS_DATA = 0xa,
366 }; 363 };
367 364
368 // Status codes for RST_STREAM frames. 365 // Status codes for RST_STREAM frames.
369 enum SpdyRstStreamStatus { 366 enum SpdyRstStreamStatus {
370 RST_STREAM_INVALID = 0, 367 RST_STREAM_INVALID = 0,
371 RST_STREAM_PROTOCOL_ERROR = 1, 368 RST_STREAM_PROTOCOL_ERROR = 1,
372 RST_STREAM_INVALID_STREAM = 2, 369 RST_STREAM_INVALID_STREAM = 2,
373 RST_STREAM_STREAM_CLOSED = 2, // Equivalent to INVALID_STREAM 370 RST_STREAM_STREAM_CLOSED = 2, // Equivalent to INVALID_STREAM
374 RST_STREAM_REFUSED_STREAM = 3, 371 RST_STREAM_REFUSED_STREAM = 3,
375 RST_STREAM_UNSUPPORTED_VERSION = 4, 372 RST_STREAM_UNSUPPORTED_VERSION = 4,
(...skipping 57 matching lines...) Expand 10 before | Expand all | Expand 10 after
433 // use IsValidFrameType() to verify validity of frame type fields. 430 // use IsValidFrameType() to verify validity of frame type fields.
434 static SpdyFrameType ParseFrameType(SpdyMajorVersion version, 431 static SpdyFrameType ParseFrameType(SpdyMajorVersion version,
435 int frame_type_field); 432 int frame_type_field);
436 433
437 // Serializes a given frame type to the on-the-wire enumeration value for the 434 // Serializes a given frame type to the on-the-wire enumeration value for the
438 // given protocol version. 435 // given protocol version.
439 // Returns -1 on failure (I.E. Invalid frame type for the given version). 436 // Returns -1 on failure (I.E. Invalid frame type for the given version).
440 static int SerializeFrameType(SpdyMajorVersion version, 437 static int SerializeFrameType(SpdyMajorVersion version,
441 SpdyFrameType frame_type); 438 SpdyFrameType frame_type);
442 439
440 // Returns the frame type for non-control (i.e. data) frames
441 // in the given SPDY version.
442 static int DataFrameType(SpdyMajorVersion version);
443
443 // Returns true if a given on-the-wire enumeration of a setting id is valid 444 // Returns true if a given on-the-wire enumeration of a setting id is valid
444 // for a given protocol version, false otherwise. 445 // for a given protocol version, false otherwise.
445 static bool IsValidSettingId(SpdyMajorVersion version, int setting_id_field); 446 static bool IsValidSettingId(SpdyMajorVersion version, int setting_id_field);
446 447
447 // Parses a setting id from an on-the-wire enumeration of a given protocol 448 // Parses a setting id from an on-the-wire enumeration of a given protocol
448 // version. 449 // version.
449 // Behavior is undefined for invalid setting id fields; consumers should first 450 // Behavior is undefined for invalid setting id fields; consumers should first
450 // use IsValidSettingId() to verify validity of setting id fields. 451 // use IsValidSettingId() to verify validity of setting id fields.
451 static SpdySettingsIds ParseSettingId(SpdyMajorVersion version, 452 static SpdySettingsIds ParseSettingId(SpdyMajorVersion version,
452 int setting_id_field); 453 int setting_id_field);
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
503 static size_t GetControlFrameHeaderSize(SpdyMajorVersion version); 504 static size_t GetControlFrameHeaderSize(SpdyMajorVersion version);
504 505
505 static size_t GetPrefixLength(SpdyFrameType type, SpdyMajorVersion version); 506 static size_t GetPrefixLength(SpdyFrameType type, SpdyMajorVersion version);
506 507
507 static size_t GetFrameMaximumSize(SpdyMajorVersion version); 508 static size_t GetFrameMaximumSize(SpdyMajorVersion version);
508 509
509 // Returns the size of a header block size field. Valid only for SPDY 510 // Returns the size of a header block size field. Valid only for SPDY
510 // versions <= 3. 511 // versions <= 3.
511 static size_t GetSizeOfSizeField(SpdyMajorVersion version); 512 static size_t GetSizeOfSizeField(SpdyMajorVersion version);
512 513
514 // Returns the size (in bytes) of a wire setting ID and value.
515 static size_t GetSettingSize(SpdyMajorVersion version);
516
513 static SpdyMajorVersion ParseMajorVersion(int version_number); 517 static SpdyMajorVersion ParseMajorVersion(int version_number);
514 518
515 static int SerializeMajorVersion(SpdyMajorVersion version); 519 static int SerializeMajorVersion(SpdyMajorVersion version);
516 520
517 static std::string GetVersionString(SpdyMajorVersion version); 521 static std::string GetVersionString(SpdyMajorVersion version);
518 }; 522 };
519 523
520 class SpdyFrame; 524 class SpdyFrame;
521 typedef SpdyFrame SpdySerializedFrame; 525 typedef SpdyFrame SpdySerializedFrame;
522 526
(...skipping 92 matching lines...) Expand 10 before | Expand all | Expand 10 after
615 // Performs deep copy on data. 619 // Performs deep copy on data.
616 SpdyDataIR(SpdyStreamId stream_id, const base::StringPiece& data); 620 SpdyDataIR(SpdyStreamId stream_id, const base::StringPiece& data);
617 621
618 // Use in conjunction with SetDataShallow() for shallow-copy on data. 622 // Use in conjunction with SetDataShallow() for shallow-copy on data.
619 explicit SpdyDataIR(SpdyStreamId stream_id); 623 explicit SpdyDataIR(SpdyStreamId stream_id);
620 624
621 virtual ~SpdyDataIR(); 625 virtual ~SpdyDataIR();
622 626
623 base::StringPiece data() const { return data_; } 627 base::StringPiece data() const { return data_; }
624 628
625 bool pad_low() const { return pad_low_; } 629 bool padded() const { return padded_; }
626
627 bool pad_high() const { return pad_high_; }
628 630
629 int padding_payload_len() const { return padding_payload_len_; } 631 int padding_payload_len() const { return padding_payload_len_; }
630 632
631 void set_padding_len(int padding_len) { 633 void set_padding_len(int padding_len) {
632 // The padding_len should be in (0, 65535 + 2].
633 // Note that SpdyFramer::GetDataFrameMaximumPayload() enforces the overall
634 // payload size later so we actually can't pad more than 16375 bytes.
635 DCHECK_GT(padding_len, 0); 634 DCHECK_GT(padding_len, 0);
636 DCHECK_LT(padding_len, 65537); 635 DCHECK_LE(padding_len, kPaddingSizePerFrame);
637 636 padded_ = true;
638 if (padding_len <= 256) { 637 // The pad field takes one octet on the wire.
639 pad_low_ = true; 638 padding_payload_len_ = padding_len - 1;
640 --padding_len;
641 } else {
642 pad_low_ = pad_high_ = true;
643 padding_len -= 2;
644 }
645 padding_payload_len_ = padding_len;
646 } 639 }
647 640
648 // Deep-copy of data (keep private copy). 641 // Deep-copy of data (keep private copy).
649 void SetDataDeep(const base::StringPiece& data) { 642 void SetDataDeep(const base::StringPiece& data) {
650 data_store_.reset(new std::string(data.data(), data.length())); 643 data_store_.reset(new std::string(data.data(), data.length()));
651 data_ = *(data_store_.get()); 644 data_ = *(data_store_.get());
652 } 645 }
653 646
654 // Shallow-copy of data (do not keep private copy). 647 // Shallow-copy of data (do not keep private copy).
655 void SetDataShallow(const base::StringPiece& data) { 648 void SetDataShallow(const base::StringPiece& data) {
656 data_store_.reset(); 649 data_store_.reset();
657 data_ = data; 650 data_ = data;
658 } 651 }
659 652
660 virtual void Visit(SpdyFrameVisitor* visitor) const OVERRIDE; 653 virtual void Visit(SpdyFrameVisitor* visitor) const OVERRIDE;
661 654
662 private: 655 private:
663 // Used to store data that this SpdyDataIR should own. 656 // Used to store data that this SpdyDataIR should own.
664 scoped_ptr<std::string> data_store_; 657 scoped_ptr<std::string> data_store_;
665 base::StringPiece data_; 658 base::StringPiece data_;
666 659
667 bool pad_low_; 660 bool padded_;
668 bool pad_high_;
669 // padding_payload_len_ = desired padding length - len(padding length field). 661 // padding_payload_len_ = desired padding length - len(padding length field).
670 int padding_payload_len_; 662 int padding_payload_len_;
671 663
672 DISALLOW_COPY_AND_ASSIGN(SpdyDataIR); 664 DISALLOW_COPY_AND_ASSIGN(SpdyDataIR);
673 }; 665 };
674 666
675 class NET_EXPORT_PRIVATE SpdySynStreamIR 667 class NET_EXPORT_PRIVATE SpdySynStreamIR
676 : public SpdyFrameWithNameValueBlockIR { 668 : public SpdyFrameWithNameValueBlockIR {
677 public: 669 public:
678 explicit SpdySynStreamIR(SpdyStreamId stream_id) 670 explicit SpdySynStreamIR(SpdyStreamId stream_id)
(...skipping 275 matching lines...) Expand 10 before | Expand all | Expand 10 after
954 946
955 private: 947 private:
956 uint32 max_age_; 948 uint32 max_age_;
957 uint16 port_; 949 uint16 port_;
958 SpdyProtocolId protocol_id_; 950 SpdyProtocolId protocol_id_;
959 std::string host_; 951 std::string host_;
960 std::string origin_; 952 std::string origin_;
961 DISALLOW_COPY_AND_ASSIGN(SpdyAltSvcIR); 953 DISALLOW_COPY_AND_ASSIGN(SpdyAltSvcIR);
962 }; 954 };
963 955
956 class NET_EXPORT_PRIVATE SpdyPriorityIR : public SpdyFrameWithStreamIdIR {
957 public:
958 explicit SpdyPriorityIR(SpdyStreamId stream_id);
959 explicit SpdyPriorityIR(SpdyStreamId stream_id,
960 SpdyStreamId parent_stream_id,
961 uint8 weight,
962 bool exclusive);
963 SpdyStreamId parent_stream_id() const { return parent_stream_id_; }
964 void set_parent_stream_id(SpdyStreamId id) { parent_stream_id_ = id; }
965 uint8 weight() const { return weight_; }
966 void set_weight(uint8 weight) { weight_ = weight; }
967 bool exclusive() const { return exclusive_; }
968 void set_exclusive(bool exclusive) { exclusive_ = exclusive; }
969
970 virtual void Visit(SpdyFrameVisitor* visitor) const OVERRIDE;
971
972 private:
973 SpdyStreamId parent_stream_id_;
974 uint8 weight_;
975 bool exclusive_;
976 DISALLOW_COPY_AND_ASSIGN(SpdyPriorityIR);
977 };
978
964 // ------------------------------------------------------------------------- 979 // -------------------------------------------------------------------------
965 // Wrapper classes for various SPDY frames. 980 // Wrapper classes for various SPDY frames.
966 981
967 // All Spdy Frame types derive from this SpdyFrame class. 982 // All Spdy Frame types derive from this SpdyFrame class.
968 class SpdyFrame { 983 class SpdyFrame {
969 public: 984 public:
970 // Create a SpdyFrame using a pre-created buffer. 985 // Create a SpdyFrame using a pre-created buffer.
971 // If |owns_buffer| is true, this class takes ownership of the buffer 986 // If |owns_buffer| is true, this class takes ownership of the buffer
972 // and will delete it on cleanup. The buffer must have been created using 987 // and will delete it on cleanup. The buffer must have been created using
973 // new char[]. 988 // new char[].
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
1015 virtual void VisitRstStream(const SpdyRstStreamIR& rst_stream) = 0; 1030 virtual void VisitRstStream(const SpdyRstStreamIR& rst_stream) = 0;
1016 virtual void VisitSettings(const SpdySettingsIR& settings) = 0; 1031 virtual void VisitSettings(const SpdySettingsIR& settings) = 0;
1017 virtual void VisitPing(const SpdyPingIR& ping) = 0; 1032 virtual void VisitPing(const SpdyPingIR& ping) = 0;
1018 virtual void VisitGoAway(const SpdyGoAwayIR& goaway) = 0; 1033 virtual void VisitGoAway(const SpdyGoAwayIR& goaway) = 0;
1019 virtual void VisitHeaders(const SpdyHeadersIR& headers) = 0; 1034 virtual void VisitHeaders(const SpdyHeadersIR& headers) = 0;
1020 virtual void VisitWindowUpdate(const SpdyWindowUpdateIR& window_update) = 0; 1035 virtual void VisitWindowUpdate(const SpdyWindowUpdateIR& window_update) = 0;
1021 virtual void VisitBlocked(const SpdyBlockedIR& blocked) = 0; 1036 virtual void VisitBlocked(const SpdyBlockedIR& blocked) = 0;
1022 virtual void VisitPushPromise(const SpdyPushPromiseIR& push_promise) = 0; 1037 virtual void VisitPushPromise(const SpdyPushPromiseIR& push_promise) = 0;
1023 virtual void VisitContinuation(const SpdyContinuationIR& continuation) = 0; 1038 virtual void VisitContinuation(const SpdyContinuationIR& continuation) = 0;
1024 virtual void VisitAltSvc(const SpdyAltSvcIR& altsvc) = 0; 1039 virtual void VisitAltSvc(const SpdyAltSvcIR& altsvc) = 0;
1040 virtual void VisitPriority(const SpdyPriorityIR& priority) = 0;
1025 virtual void VisitData(const SpdyDataIR& data) = 0; 1041 virtual void VisitData(const SpdyDataIR& data) = 0;
1026 1042
1027 protected: 1043 protected:
1028 SpdyFrameVisitor() {} 1044 SpdyFrameVisitor() {}
1029 virtual ~SpdyFrameVisitor() {} 1045 virtual ~SpdyFrameVisitor() {}
1030 1046
1031 private: 1047 private:
1032 DISALLOW_COPY_AND_ASSIGN(SpdyFrameVisitor); 1048 DISALLOW_COPY_AND_ASSIGN(SpdyFrameVisitor);
1033 }; 1049 };
1034 1050
1035 } // namespace net 1051 } // namespace net
1036 1052
1037 #endif // NET_SPDY_SPDY_PROTOCOL_H_ 1053 #endif // NET_SPDY_SPDY_PROTOCOL_H_
OLDNEW
« no previous file with comments | « net/spdy/spdy_priority_tree_test.cc ('k') | net/spdy/spdy_protocol.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698