| 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 3 and HTTP 2 | 5 // This file contains some protocol structures for use with SPDY 3 and HTTP 2 |
| 6 // The SPDY 3 spec can be found at: | 6 // The SPDY 3 spec can be found at: |
| 7 // http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3 | 7 // http://dev.chromium.org/spdy/spdy-protocol/spdy-protocol-draft3 |
| 8 | 8 |
| 9 #ifndef NET_SPDY_CORE_SPDY_PROTOCOL_H_ | 9 #ifndef NET_SPDY_CORE_SPDY_PROTOCOL_H_ |
| 10 #define NET_SPDY_CORE_SPDY_PROTOCOL_H_ | 10 #define NET_SPDY_CORE_SPDY_PROTOCOL_H_ |
| (...skipping 363 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 374 | 374 |
| 375 class SpdyFrameVisitor; | 375 class SpdyFrameVisitor; |
| 376 | 376 |
| 377 // Intermediate representation for HTTP2 frames. | 377 // Intermediate representation for HTTP2 frames. |
| 378 class SPDY_EXPORT_PRIVATE SpdyFrameIR { | 378 class SPDY_EXPORT_PRIVATE SpdyFrameIR { |
| 379 public: | 379 public: |
| 380 virtual ~SpdyFrameIR() {} | 380 virtual ~SpdyFrameIR() {} |
| 381 | 381 |
| 382 virtual void Visit(SpdyFrameVisitor* visitor) const = 0; | 382 virtual void Visit(SpdyFrameVisitor* visitor) const = 0; |
| 383 virtual SpdyFrameType frame_type() const = 0; | 383 virtual SpdyFrameType frame_type() const = 0; |
| 384 SpdyStreamId stream_id() const { return stream_id_; } |
| 384 | 385 |
| 385 protected: | 386 protected: |
| 386 SpdyFrameIR() {} | 387 SpdyFrameIR() : stream_id_(0) {} |
| 387 | 388 explicit SpdyFrameIR(SpdyStreamId stream_id) : stream_id_(stream_id) {} |
| 388 private: | |
| 389 DISALLOW_COPY_AND_ASSIGN(SpdyFrameIR); | |
| 390 }; | |
| 391 | |
| 392 // Abstract class intended to be inherited by IRs that have a stream associated | |
| 393 // to them. | |
| 394 class SPDY_EXPORT_PRIVATE SpdyFrameWithStreamIdIR : public SpdyFrameIR { | |
| 395 public: | |
| 396 ~SpdyFrameWithStreamIdIR() override {} | |
| 397 SpdyStreamId stream_id() const { return stream_id_; } | |
| 398 void set_stream_id(SpdyStreamId stream_id) { | |
| 399 DCHECK_EQ(0u, stream_id & ~kStreamIdMask); | |
| 400 stream_id_ = stream_id; | |
| 401 } | |
| 402 | |
| 403 protected: | |
| 404 explicit SpdyFrameWithStreamIdIR(SpdyStreamId stream_id) { | |
| 405 set_stream_id(stream_id); | |
| 406 } | |
| 407 | 389 |
| 408 private: | 390 private: |
| 409 SpdyStreamId stream_id_; | 391 SpdyStreamId stream_id_; |
| 410 | 392 |
| 411 DISALLOW_COPY_AND_ASSIGN(SpdyFrameWithStreamIdIR); | 393 DISALLOW_COPY_AND_ASSIGN(SpdyFrameIR); |
| 412 }; | 394 }; |
| 413 | 395 |
| 414 // Abstract class intended to be inherited by IRs that have the option of a FIN | 396 // Abstract class intended to be inherited by IRs that have the option of a FIN |
| 415 // flag. Implies SpdyFrameWithStreamIdIR. | 397 // flag. |
| 416 class SPDY_EXPORT_PRIVATE SpdyFrameWithFinIR : public SpdyFrameWithStreamIdIR { | 398 class SPDY_EXPORT_PRIVATE SpdyFrameWithFinIR : public SpdyFrameIR { |
| 417 public: | 399 public: |
| 418 ~SpdyFrameWithFinIR() override {} | 400 ~SpdyFrameWithFinIR() override {} |
| 419 bool fin() const { return fin_; } | 401 bool fin() const { return fin_; } |
| 420 void set_fin(bool fin) { fin_ = fin; } | 402 void set_fin(bool fin) { fin_ = fin; } |
| 421 | 403 |
| 422 protected: | 404 protected: |
| 423 explicit SpdyFrameWithFinIR(SpdyStreamId stream_id) | 405 explicit SpdyFrameWithFinIR(SpdyStreamId stream_id) |
| 424 : SpdyFrameWithStreamIdIR(stream_id), | 406 : SpdyFrameIR(stream_id), fin_(false) {} |
| 425 fin_(false) {} | |
| 426 | 407 |
| 427 private: | 408 private: |
| 428 bool fin_; | 409 bool fin_; |
| 429 | 410 |
| 430 DISALLOW_COPY_AND_ASSIGN(SpdyFrameWithFinIR); | 411 DISALLOW_COPY_AND_ASSIGN(SpdyFrameWithFinIR); |
| 431 }; | 412 }; |
| 432 | 413 |
| 433 // Abstract class intended to be inherited by IRs that contain a header | 414 // Abstract class intended to be inherited by IRs that contain a header |
| 434 // block. Implies SpdyFrameWithFinIR. | 415 // block. Implies SpdyFrameWithFinIR. |
| 435 class SPDY_EXPORT_PRIVATE SpdyFrameWithHeaderBlockIR | 416 class SPDY_EXPORT_PRIVATE SpdyFrameWithHeaderBlockIR |
| (...skipping 87 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 523 const char* data_; | 504 const char* data_; |
| 524 size_t data_len_; | 505 size_t data_len_; |
| 525 | 506 |
| 526 bool padded_; | 507 bool padded_; |
| 527 // padding_payload_len_ = desired padding length - len(padding length field). | 508 // padding_payload_len_ = desired padding length - len(padding length field). |
| 528 int padding_payload_len_; | 509 int padding_payload_len_; |
| 529 | 510 |
| 530 DISALLOW_COPY_AND_ASSIGN(SpdyDataIR); | 511 DISALLOW_COPY_AND_ASSIGN(SpdyDataIR); |
| 531 }; | 512 }; |
| 532 | 513 |
| 533 class SPDY_EXPORT_PRIVATE SpdyRstStreamIR : public SpdyFrameWithStreamIdIR { | 514 class SPDY_EXPORT_PRIVATE SpdyRstStreamIR : public SpdyFrameIR { |
| 534 public: | 515 public: |
| 535 SpdyRstStreamIR(SpdyStreamId stream_id, SpdyErrorCode error_code); | 516 SpdyRstStreamIR(SpdyStreamId stream_id, SpdyErrorCode error_code); |
| 536 | 517 |
| 537 ~SpdyRstStreamIR() override; | 518 ~SpdyRstStreamIR() override; |
| 538 | 519 |
| 539 SpdyErrorCode error_code() const { return error_code_; } | 520 SpdyErrorCode error_code() const { return error_code_; } |
| 540 void set_error_code(SpdyErrorCode error_code) { error_code_ = error_code; } | 521 void set_error_code(SpdyErrorCode error_code) { error_code_ = error_code; } |
| 541 | 522 |
| 542 void Visit(SpdyFrameVisitor* visitor) const override; | 523 void Visit(SpdyFrameVisitor* visitor) const override; |
| 543 | 524 |
| (...skipping 129 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 673 bool has_priority_ = false; | 654 bool has_priority_ = false; |
| 674 int weight_ = kHttp2DefaultStreamWeight; | 655 int weight_ = kHttp2DefaultStreamWeight; |
| 675 SpdyStreamId parent_stream_id_ = 0; | 656 SpdyStreamId parent_stream_id_ = 0; |
| 676 bool exclusive_ = false; | 657 bool exclusive_ = false; |
| 677 bool padded_ = false; | 658 bool padded_ = false; |
| 678 int padding_payload_len_ = 0; | 659 int padding_payload_len_ = 0; |
| 679 | 660 |
| 680 DISALLOW_COPY_AND_ASSIGN(SpdyHeadersIR); | 661 DISALLOW_COPY_AND_ASSIGN(SpdyHeadersIR); |
| 681 }; | 662 }; |
| 682 | 663 |
| 683 class SPDY_EXPORT_PRIVATE SpdyWindowUpdateIR : public SpdyFrameWithStreamIdIR { | 664 class SPDY_EXPORT_PRIVATE SpdyWindowUpdateIR : public SpdyFrameIR { |
| 684 public: | 665 public: |
| 685 SpdyWindowUpdateIR(SpdyStreamId stream_id, int32_t delta) | 666 SpdyWindowUpdateIR(SpdyStreamId stream_id, int32_t delta) |
| 686 : SpdyFrameWithStreamIdIR(stream_id) { | 667 : SpdyFrameIR(stream_id) { |
| 687 set_delta(delta); | 668 set_delta(delta); |
| 688 } | 669 } |
| 689 int32_t delta() const { return delta_; } | 670 int32_t delta() const { return delta_; } |
| 690 void set_delta(int32_t delta) { | 671 void set_delta(int32_t delta) { |
| 691 DCHECK_LE(0, delta); | 672 DCHECK_LE(0, delta); |
| 692 DCHECK_LE(delta, kSpdyMaximumWindowSize); | 673 DCHECK_LE(delta, kSpdyMaximumWindowSize); |
| 693 delta_ = delta; | 674 delta_ = delta; |
| 694 } | 675 } |
| 695 | 676 |
| 696 void Visit(SpdyFrameVisitor* visitor) const override; | 677 void Visit(SpdyFrameVisitor* visitor) const override; |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 733 | 714 |
| 734 private: | 715 private: |
| 735 SpdyStreamId promised_stream_id_; | 716 SpdyStreamId promised_stream_id_; |
| 736 | 717 |
| 737 bool padded_; | 718 bool padded_; |
| 738 int padding_payload_len_; | 719 int padding_payload_len_; |
| 739 | 720 |
| 740 DISALLOW_COPY_AND_ASSIGN(SpdyPushPromiseIR); | 721 DISALLOW_COPY_AND_ASSIGN(SpdyPushPromiseIR); |
| 741 }; | 722 }; |
| 742 | 723 |
| 743 class SPDY_EXPORT_PRIVATE SpdyContinuationIR : public SpdyFrameWithStreamIdIR { | 724 class SPDY_EXPORT_PRIVATE SpdyContinuationIR : public SpdyFrameIR { |
| 744 public: | 725 public: |
| 745 explicit SpdyContinuationIR(SpdyStreamId stream_id); | 726 explicit SpdyContinuationIR(SpdyStreamId stream_id); |
| 746 ~SpdyContinuationIR() override; | 727 ~SpdyContinuationIR() override; |
| 747 | 728 |
| 748 void Visit(SpdyFrameVisitor* visitor) const override; | 729 void Visit(SpdyFrameVisitor* visitor) const override; |
| 749 | 730 |
| 750 SpdyFrameType frame_type() const override; | 731 SpdyFrameType frame_type() const override; |
| 751 | 732 |
| 752 bool end_headers() const { return end_headers_; } | 733 bool end_headers() const { return end_headers_; } |
| 753 void set_end_headers(bool end_headers) {end_headers_ = end_headers;} | 734 void set_end_headers(bool end_headers) {end_headers_ = end_headers;} |
| 754 const SpdyString& encoding() const { return *encoding_; } | 735 const SpdyString& encoding() const { return *encoding_; } |
| 755 void take_encoding(std::unique_ptr<SpdyString> encoding) { | 736 void take_encoding(std::unique_ptr<SpdyString> encoding) { |
| 756 encoding_ = std::move(encoding); | 737 encoding_ = std::move(encoding); |
| 757 } | 738 } |
| 758 | 739 |
| 759 private: | 740 private: |
| 760 std::unique_ptr<SpdyString> encoding_; | 741 std::unique_ptr<SpdyString> encoding_; |
| 761 bool end_headers_; | 742 bool end_headers_; |
| 762 DISALLOW_COPY_AND_ASSIGN(SpdyContinuationIR); | 743 DISALLOW_COPY_AND_ASSIGN(SpdyContinuationIR); |
| 763 }; | 744 }; |
| 764 | 745 |
| 765 class SPDY_EXPORT_PRIVATE SpdyAltSvcIR : public SpdyFrameWithStreamIdIR { | 746 class SPDY_EXPORT_PRIVATE SpdyAltSvcIR : public SpdyFrameIR { |
| 766 public: | 747 public: |
| 767 explicit SpdyAltSvcIR(SpdyStreamId stream_id); | 748 explicit SpdyAltSvcIR(SpdyStreamId stream_id); |
| 768 ~SpdyAltSvcIR() override; | 749 ~SpdyAltSvcIR() override; |
| 769 | 750 |
| 770 SpdyString origin() const { return origin_; } | 751 SpdyString origin() const { return origin_; } |
| 771 const SpdyAltSvcWireFormat::AlternativeServiceVector& altsvc_vector() const { | 752 const SpdyAltSvcWireFormat::AlternativeServiceVector& altsvc_vector() const { |
| 772 return altsvc_vector_; | 753 return altsvc_vector_; |
| 773 } | 754 } |
| 774 | 755 |
| 775 void set_origin(SpdyString origin) { origin_ = std::move(origin); } | 756 void set_origin(SpdyString origin) { origin_ = std::move(origin); } |
| 776 void add_altsvc(const SpdyAltSvcWireFormat::AlternativeService& altsvc) { | 757 void add_altsvc(const SpdyAltSvcWireFormat::AlternativeService& altsvc) { |
| 777 altsvc_vector_.push_back(altsvc); | 758 altsvc_vector_.push_back(altsvc); |
| 778 } | 759 } |
| 779 | 760 |
| 780 void Visit(SpdyFrameVisitor* visitor) const override; | 761 void Visit(SpdyFrameVisitor* visitor) const override; |
| 781 | 762 |
| 782 SpdyFrameType frame_type() const override; | 763 SpdyFrameType frame_type() const override; |
| 783 | 764 |
| 784 private: | 765 private: |
| 785 SpdyString origin_; | 766 SpdyString origin_; |
| 786 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector_; | 767 SpdyAltSvcWireFormat::AlternativeServiceVector altsvc_vector_; |
| 787 DISALLOW_COPY_AND_ASSIGN(SpdyAltSvcIR); | 768 DISALLOW_COPY_AND_ASSIGN(SpdyAltSvcIR); |
| 788 }; | 769 }; |
| 789 | 770 |
| 790 class SPDY_EXPORT_PRIVATE SpdyPriorityIR : public SpdyFrameWithStreamIdIR { | 771 class SPDY_EXPORT_PRIVATE SpdyPriorityIR : public SpdyFrameIR { |
| 791 public: | 772 public: |
| 792 SpdyPriorityIR(SpdyStreamId stream_id, | 773 SpdyPriorityIR(SpdyStreamId stream_id, |
| 793 SpdyStreamId parent_stream_id, | 774 SpdyStreamId parent_stream_id, |
| 794 int weight, | 775 int weight, |
| 795 bool exclusive) | 776 bool exclusive) |
| 796 : SpdyFrameWithStreamIdIR(stream_id), | 777 : SpdyFrameIR(stream_id), |
| 797 parent_stream_id_(parent_stream_id), | 778 parent_stream_id_(parent_stream_id), |
| 798 weight_(weight), | 779 weight_(weight), |
| 799 exclusive_(exclusive) {} | 780 exclusive_(exclusive) {} |
| 800 SpdyStreamId parent_stream_id() const { return parent_stream_id_; } | 781 SpdyStreamId parent_stream_id() const { return parent_stream_id_; } |
| 801 int weight() const { return weight_; } | 782 int weight() const { return weight_; } |
| 802 bool exclusive() const { return exclusive_; } | 783 bool exclusive() const { return exclusive_; } |
| 803 | 784 |
| 804 void Visit(SpdyFrameVisitor* visitor) const override; | 785 void Visit(SpdyFrameVisitor* visitor) const override; |
| 805 | 786 |
| 806 SpdyFrameType frame_type() const override; | 787 SpdyFrameType frame_type() const override; |
| (...skipping 105 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 912 SpdyFrameVisitor() {} | 893 SpdyFrameVisitor() {} |
| 913 virtual ~SpdyFrameVisitor() {} | 894 virtual ~SpdyFrameVisitor() {} |
| 914 | 895 |
| 915 private: | 896 private: |
| 916 DISALLOW_COPY_AND_ASSIGN(SpdyFrameVisitor); | 897 DISALLOW_COPY_AND_ASSIGN(SpdyFrameVisitor); |
| 917 }; | 898 }; |
| 918 | 899 |
| 919 } // namespace net | 900 } // namespace net |
| 920 | 901 |
| 921 #endif // NET_SPDY_CORE_SPDY_PROTOCOL_H_ | 902 #endif // NET_SPDY_CORE_SPDY_PROTOCOL_H_ |
| OLD | NEW |