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

Side by Side Diff: trunk/src/net/quic/quic_protocol.h

Issue 16374004: Revert 204046 "Land Recent QUIC changes." (Closed) Base URL: svn://svn.chromium.org/chrome/
Patch Set: Created 7 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 | « trunk/src/net/quic/quic_packet_creator_test.cc ('k') | trunk/src/net/quic/quic_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 #ifndef NET_QUIC_QUIC_PROTOCOL_H_ 5 #ifndef NET_QUIC_QUIC_PROTOCOL_H_
6 #define NET_QUIC_QUIC_PROTOCOL_H_ 6 #define NET_QUIC_QUIC_PROTOCOL_H_
7 7
8 #include <stddef.h> 8 #include <stddef.h>
9 #include <limits> 9 #include <limits>
10 #include <map> 10 #include <map>
(...skipping 35 matching lines...) Expand 10 before | Expand all | Expand 10 after
46 // Maximum size in bytes of a QUIC packet. 46 // Maximum size in bytes of a QUIC packet.
47 const QuicByteCount kMaxPacketSize = 1200; 47 const QuicByteCount kMaxPacketSize = 1200;
48 48
49 // Maximum number of open streams per connection. 49 // Maximum number of open streams per connection.
50 const size_t kDefaultMaxStreamsPerConnection = 100; 50 const size_t kDefaultMaxStreamsPerConnection = 100;
51 51
52 // Number of bytes reserved for public flags in the packet header. 52 // Number of bytes reserved for public flags in the packet header.
53 const size_t kPublicFlagsSize = 1; 53 const size_t kPublicFlagsSize = 1;
54 // Number of bytes reserved for version number in the packet header. 54 // Number of bytes reserved for version number in the packet header.
55 const size_t kQuicVersionSize = 4; 55 const size_t kQuicVersionSize = 4;
56 // Number of bytes reserved for sequence number in the packet header.
57 const size_t kSequenceNumberSize = 6;
56 // Number of bytes reserved for private flags in the packet header. 58 // Number of bytes reserved for private flags in the packet header.
57 const size_t kPrivateFlagsSize = 1; 59 const size_t kPrivateFlagsSize = 1;
58 // Number of bytes reserved for FEC group in the packet header. 60 // Number of bytes reserved for FEC group in the packet header.
59 const size_t kFecGroupSize = 1; 61 const size_t kFecGroupSize = 1;
60 // Number of bytes reserved for the nonce proof in public reset packet. 62 // Number of bytes reserved for the nonce proof in public reset packet.
61 const size_t kPublicResetNonceSize = 8; 63 const size_t kPublicResetNonceSize = 8;
62 64
63 // Signifies that the QuicPacket will contain version of the protocol. 65 // Signifies that the QuicPacket will contain version of the protocol.
64 const bool kIncludeVersion = true; 66 const bool kIncludeVersion = true;
65 67
(...skipping 44 matching lines...) Expand 10 before | Expand all | Expand 10 after
110 PACKET_1BYTE_GUID = 1, 112 PACKET_1BYTE_GUID = 1,
111 PACKET_4BYTE_GUID = 4, 113 PACKET_4BYTE_GUID = 4,
112 PACKET_8BYTE_GUID = 8 114 PACKET_8BYTE_GUID = 8
113 }; 115 };
114 116
115 enum InFecGroup { 117 enum InFecGroup {
116 NOT_IN_FEC_GROUP, 118 NOT_IN_FEC_GROUP,
117 IN_FEC_GROUP, 119 IN_FEC_GROUP,
118 }; 120 };
119 121
120 enum QuicSequenceNumberLength {
121 PACKET_1BYTE_SEQUENCE_NUMBER = 1,
122 PACKET_2BYTE_SEQUENCE_NUMBER = 2,
123 PACKET_4BYTE_SEQUENCE_NUMBER = 4,
124 PACKET_6BYTE_SEQUENCE_NUMBER = 6
125 };
126
127 enum QuicPacketPublicFlags { 122 enum QuicPacketPublicFlags {
128 PACKET_PUBLIC_FLAGS_NONE = 0, 123 PACKET_PUBLIC_FLAGS_NONE = 0,
129 PACKET_PUBLIC_FLAGS_VERSION = 1 << 0, // Packet header contains version info. 124 PACKET_PUBLIC_FLAGS_VERSION = 1 << 0, // Packet header contains version info.
130 PACKET_PUBLIC_FLAGS_RST = 1 << 1, // Packet is a public reset packet. 125 PACKET_PUBLIC_FLAGS_RST = 1 << 1, // Packet is a public reset packet.
131 // Packet header guid length in bytes. 126 // Packet header guid length in bytes.
132 PACKET_PUBLIC_FLAGS_0BYTE_GUID = 0, 127 PACKET_PUBLIC_FLAGS_0BYTE_GUID = 0,
133 PACKET_PUBLIC_FLAGS_1BYTE_GUID = 1 << 2, 128 PACKET_PUBLIC_FLAGS_1BYTE_GUID = 1 << 2,
134 PACKET_PUBLIC_FLAGS_4BYTE_GUID = 1 << 3, 129 PACKET_PUBLIC_FLAGS_4BYTE_GUID = 1 << 3,
135 PACKET_PUBLIC_FLAGS_8BYTE_GUID = 1 << 3 | 1 << 2, 130 PACKET_PUBLIC_FLAGS_8BYTE_GUID = 1 << 3 | 1 << 2,
136 // Packet sequence number length in bytes. 131 PACKET_PUBLIC_FLAGS_MAX = (1 << 4) - 1 // All bits set.
137 PACKET_PUBLIC_FLAGS_1BYTE_SEQUENCE = 0,
138 PACKET_PUBLIC_FLAGS_2BYTE_SEQUENCE = 1 << 4,
139 PACKET_PUBLIC_FLAGS_4BYTE_SEQUENCE = 1 << 5,
140 PACKET_PUBLIC_FLAGS_6BYTE_SEQUENCE = 1 << 5 | 1 << 4,
141 PACKET_PUBLIC_FLAGS_MAX = (1 << 6) - 1 // All bits set.
142 }; 132 };
143 133
144 enum QuicPacketPrivateFlags { 134 enum QuicPacketPrivateFlags {
145 PACKET_PRIVATE_FLAGS_NONE = 0, 135 PACKET_PRIVATE_FLAGS_NONE = 0,
146 PACKET_PRIVATE_FLAGS_ENTROPY = 1 << 0, 136 PACKET_PRIVATE_FLAGS_ENTROPY = 1 << 0,
147 PACKET_PRIVATE_FLAGS_FEC_GROUP = 1 << 1, // Payload is part of an FEC group. 137 PACKET_PRIVATE_FLAGS_FEC_GROUP = 1 << 1, // Payload is part of an FEC group.
148 PACKET_PRIVATE_FLAGS_FEC = 1 << 2, // Payload is FEC as opposed to frames. 138 PACKET_PRIVATE_FLAGS_FEC = 1 << 2, // Payload is FEC as opposed to frames.
149 PACKET_PRIVATE_FLAGS_MAX = (1 << 3) - 1 // All bits set. 139 PACKET_PRIVATE_FLAGS_MAX = (1 << 3) - 1 // All bits set.
150 }; 140 };
151 141
152 // Size in bytes of the data or fec packet header. 142 // Size in bytes of the data or fec packet header.
153 NET_EXPORT_PRIVATE size_t GetPacketHeaderSize(QuicPacketHeader header); 143 NET_EXPORT_PRIVATE size_t GetPacketHeaderSize(QuicPacketHeader header);
154 144
155 NET_EXPORT_PRIVATE size_t GetPacketHeaderSize( 145 NET_EXPORT_PRIVATE size_t GetPacketHeaderSize(QuicGuidLength guid_length,
156 QuicGuidLength guid_length, 146 bool include_version,
157 bool include_version, 147 InFecGroup is_in_fec_group);
158 QuicSequenceNumberLength sequence_number_length,
159 InFecGroup is_in_fec_group);
160 148
161 // Size in bytes of the public reset packet. 149 // Size in bytes of the public reset packet.
162 NET_EXPORT_PRIVATE size_t GetPublicResetPacketSize(); 150 NET_EXPORT_PRIVATE size_t GetPublicResetPacketSize();
163 151
164 // Index of the first byte in a QUIC packet of FEC protected data. 152 // Index of the first byte in a QUIC packet of FEC protected data.
165 NET_EXPORT_PRIVATE size_t GetStartOfFecProtectedData( 153 NET_EXPORT_PRIVATE size_t GetStartOfFecProtectedData(QuicGuidLength guid_length,
166 QuicGuidLength guid_length, 154 bool include_version);
167 bool include_version,
168 QuicSequenceNumberLength sequence_number_length);
169 // Index of the first byte in a QUIC packet of encrypted data. 155 // Index of the first byte in a QUIC packet of encrypted data.
170 NET_EXPORT_PRIVATE size_t GetStartOfEncryptedData( 156 NET_EXPORT_PRIVATE size_t GetStartOfEncryptedData(QuicGuidLength guid_length,
171 QuicGuidLength guid_length, 157 bool include_version);
172 bool include_version,
173 QuicSequenceNumberLength sequence_number_length);
174 158
175 enum QuicRstStreamErrorCode { 159 enum QuicRstStreamErrorCode {
176 QUIC_STREAM_NO_ERROR = 0, 160 QUIC_STREAM_NO_ERROR = 0,
177 161
178 // There was some server error which halted stream processing. 162 // There was some server error which halted stream processing.
179 QUIC_SERVER_ERROR_PROCESSING_STREAM, 163 QUIC_SERVER_ERROR_PROCESSING_STREAM,
180 // We got two fin or reset offsets which did not match. 164 // We got two fin or reset offsets which did not match.
181 QUIC_MULTIPLE_TERMINATION_OFFSETS, 165 QUIC_MULTIPLE_TERMINATION_OFFSETS,
182 // We got bad payload and can not respond to it at the protocol level. 166 // We got bad payload and can not respond to it at the protocol level.
183 QUIC_BAD_APPLICATION_PAYLOAD, 167 QUIC_BAD_APPLICATION_PAYLOAD,
(...skipping 120 matching lines...) Expand 10 before | Expand all | Expand 10 after
304 // stored in memory as a little endian uint32, we need 288 // stored in memory as a little endian uint32, we need
305 // to reverse the order of the bytes. 289 // to reverse the order of the bytes.
306 // 290 //
307 // The TAG macro is used in header files to ensure that we don't create static 291 // The TAG macro is used in header files to ensure that we don't create static
308 // initialisers. In normal code, the MakeQuicTag function should be used. 292 // initialisers. In normal code, the MakeQuicTag function should be used.
309 #define TAG(a, b, c, d) ((d << 24) + (c << 16) + (b << 8) + a) 293 #define TAG(a, b, c, d) ((d << 24) + (c << 16) + (b << 8) + a)
310 const QuicTag kUnsupportedVersion = -1; 294 const QuicTag kUnsupportedVersion = -1;
311 // Each time the wire format changes, this need needs to be incremented. 295 // Each time the wire format changes, this need needs to be incremented.
312 // At some point, we will actually freeze the wire format and make an official 296 // At some point, we will actually freeze the wire format and make an official
313 // version number, but this works for now. 297 // version number, but this works for now.
314 const QuicTag kQuicVersion1 = TAG('Q', '0', '0', '6'); 298 const QuicTag kQuicVersion1 = TAG('Q', '0', '0', '5');
315 #undef TAG 299 #undef TAG
316 300
317 // MakeQuicTag returns a value given the four bytes. For example: 301 // MakeQuicTag returns a value given the four bytes. For example:
318 // MakeQuicTag('C', 'H', 'L', 'O'); 302 // MakeQuicTag('C', 'H', 'L', 'O');
319 uint32 NET_EXPORT_PRIVATE MakeQuicTag(char a, char b, char c, char d); 303 uint32 NET_EXPORT_PRIVATE MakeQuicTag(char a, char b, char c, char d);
320 304
321 struct NET_EXPORT_PRIVATE QuicPacketPublicHeader { 305 struct NET_EXPORT_PRIVATE QuicPacketPublicHeader {
322 QuicPacketPublicHeader(); 306 QuicPacketPublicHeader();
323 explicit QuicPacketPublicHeader(const QuicPacketPublicHeader& other); 307 explicit QuicPacketPublicHeader(const QuicPacketPublicHeader& other);
324 ~QuicPacketPublicHeader(); 308 ~QuicPacketPublicHeader();
325 309
326 QuicPacketPublicHeader& operator=(const QuicPacketPublicHeader& other); 310 QuicPacketPublicHeader& operator=(const QuicPacketPublicHeader& other);
327 311
328 // Universal header. All QuicPacket headers will have a guid and public flags. 312 // Universal header. All QuicPacket headers will have a guid and public flags.
329 QuicGuid guid; 313 QuicGuid guid;
330 QuicGuidLength guid_length; 314 QuicGuidLength guid_length;
331 bool reset_flag; 315 bool reset_flag;
332 bool version_flag; 316 bool version_flag;
333 QuicSequenceNumberLength sequence_number_length;
334 QuicTagVector versions; 317 QuicTagVector versions;
335 }; 318 };
336 319
337 // Header for Data or FEC packets. 320 // Header for Data or FEC packets.
338 struct NET_EXPORT_PRIVATE QuicPacketHeader { 321 struct NET_EXPORT_PRIVATE QuicPacketHeader {
339 QuicPacketHeader(); 322 QuicPacketHeader();
340 explicit QuicPacketHeader(const QuicPacketPublicHeader& header); 323 explicit QuicPacketHeader(const QuicPacketPublicHeader& header);
341 324
342 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 325 NET_EXPORT_PRIVATE friend std::ostream& operator<<(
343 std::ostream& os, const QuicPacketHeader& s); 326 std::ostream& os, const QuicPacketHeader& s);
(...skipping 243 matching lines...) Expand 10 before | Expand all | Expand 10 after
587 QuicConnectionCloseFrame* connection_close_frame; 570 QuicConnectionCloseFrame* connection_close_frame;
588 QuicGoAwayFrame* goaway_frame; 571 QuicGoAwayFrame* goaway_frame;
589 }; 572 };
590 }; 573 };
591 574
592 typedef std::vector<QuicFrame> QuicFrames; 575 typedef std::vector<QuicFrame> QuicFrames;
593 576
594 struct NET_EXPORT_PRIVATE QuicFecData { 577 struct NET_EXPORT_PRIVATE QuicFecData {
595 QuicFecData(); 578 QuicFecData();
596 579
580 bool operator==(const QuicFecData& other) const;
581
597 // The FEC group number is also the sequence number of the first 582 // The FEC group number is also the sequence number of the first
598 // FEC protected packet. The last protected packet's sequence number will 583 // FEC protected packet. The last protected packet's sequence number will
599 // be one less than the sequence number of the FEC packet. 584 // be one less than the sequence number of the FEC packet.
600 QuicFecGroupNumber fec_group; 585 QuicFecGroupNumber fec_group;
601 base::StringPiece redundancy; 586 base::StringPiece redundancy;
602 }; 587 };
603 588
604 struct NET_EXPORT_PRIVATE QuicPacketData { 589 struct NET_EXPORT_PRIVATE QuicPacketData {
605 std::string data; 590 std::string data;
606 }; 591 };
(...skipping 22 matching lines...) Expand all
629 private: 614 private:
630 const char* buffer_; 615 const char* buffer_;
631 size_t length_; 616 size_t length_;
632 bool owns_buffer_; 617 bool owns_buffer_;
633 618
634 DISALLOW_COPY_AND_ASSIGN(QuicData); 619 DISALLOW_COPY_AND_ASSIGN(QuicData);
635 }; 620 };
636 621
637 class NET_EXPORT_PRIVATE QuicPacket : public QuicData { 622 class NET_EXPORT_PRIVATE QuicPacket : public QuicData {
638 public: 623 public:
639 static QuicPacket* NewDataPacket( 624 static QuicPacket* NewDataPacket(char* buffer,
640 char* buffer, 625 size_t length,
641 size_t length, 626 bool owns_buffer,
642 bool owns_buffer, 627 QuicGuidLength guid_length,
643 QuicGuidLength guid_length, 628 bool includes_version) {
644 bool includes_version, 629 return new QuicPacket(
645 QuicSequenceNumberLength sequence_number_length) { 630 buffer, length, owns_buffer, guid_length, includes_version, false);
646 return new QuicPacket(buffer, length, owns_buffer, guid_length,
647 includes_version, sequence_number_length, false);
648 } 631 }
649 632
650 static QuicPacket* NewFecPacket( 633 static QuicPacket* NewFecPacket(char* buffer,
651 char* buffer, 634 size_t length,
652 size_t length, 635 bool owns_buffer,
653 bool owns_buffer, 636 QuicGuidLength guid_length,
654 QuicGuidLength guid_length, 637 bool includes_version) {
655 bool includes_version, 638 return new QuicPacket(
656 QuicSequenceNumberLength sequence_number_length) { 639 buffer, length, owns_buffer, guid_length, includes_version, true);
657 return new QuicPacket(buffer, length, owns_buffer, guid_length,
658 includes_version, sequence_number_length, true);
659 } 640 }
660 641
661 base::StringPiece FecProtectedData() const; 642 base::StringPiece FecProtectedData() const;
662 base::StringPiece AssociatedData() const; 643 base::StringPiece AssociatedData() const;
663 base::StringPiece BeforePlaintext() const; 644 base::StringPiece BeforePlaintext() const;
664 base::StringPiece Plaintext() const; 645 base::StringPiece Plaintext() const;
665 646
666 bool is_fec_packet() const { return is_fec_packet_; } 647 bool is_fec_packet() const { return is_fec_packet_; }
667 648
668 bool includes_version() const { return includes_version_; } 649 bool includes_version() const { return includes_version_; }
669 650
670 char* mutable_data() { return buffer_; } 651 char* mutable_data() { return buffer_; }
671 652
672 private: 653 private:
673 QuicPacket(char* buffer, 654 QuicPacket(char* buffer,
674 size_t length, 655 size_t length,
675 bool owns_buffer, 656 bool owns_buffer,
676 QuicGuidLength guid_length, 657 QuicGuidLength guid_length,
677 bool includes_version, 658 bool includes_version,
678 QuicSequenceNumberLength sequence_number_length,
679 bool is_fec_packet) 659 bool is_fec_packet)
680 : QuicData(buffer, length, owns_buffer), 660 : QuicData(buffer, length, owns_buffer),
681 buffer_(buffer), 661 buffer_(buffer),
682 is_fec_packet_(is_fec_packet), 662 is_fec_packet_(is_fec_packet),
683 guid_length_(guid_length), 663 guid_length_(guid_length),
684 includes_version_(includes_version), 664 includes_version_(includes_version) {}
685 sequence_number_length_(sequence_number_length) {}
686 665
687 char* buffer_; 666 char* buffer_;
688 const bool is_fec_packet_; 667 const bool is_fec_packet_;
689 const QuicGuidLength guid_length_; 668 const QuicGuidLength guid_length_;
690 const bool includes_version_; 669 const bool includes_version_;
691 const QuicSequenceNumberLength sequence_number_length_;
692 670
693 DISALLOW_COPY_AND_ASSIGN(QuicPacket); 671 DISALLOW_COPY_AND_ASSIGN(QuicPacket);
694 }; 672 };
695 673
696 class NET_EXPORT_PRIVATE QuicEncryptedPacket : public QuicData { 674 class NET_EXPORT_PRIVATE QuicEncryptedPacket : public QuicData {
697 public: 675 public:
698 QuicEncryptedPacket(const char* buffer, size_t length) 676 QuicEncryptedPacket(const char* buffer, size_t length)
699 : QuicData(buffer, length) {} 677 : QuicData(buffer, length) {}
700 678
701 QuicEncryptedPacket(char* buffer, size_t length, bool owns_buffer) 679 QuicEncryptedPacket(char* buffer, size_t length, bool owns_buffer)
(...skipping 68 matching lines...) Expand 10 before | Expand all | Expand 10 after
770 NET_EXPORT_PRIVATE friend std::ostream& operator<<( 748 NET_EXPORT_PRIVATE friend std::ostream& operator<<(
771 std::ostream& os, const QuicConsumedData& s); 749 std::ostream& os, const QuicConsumedData& s);
772 750
773 size_t bytes_consumed; 751 size_t bytes_consumed;
774 bool fin_consumed; 752 bool fin_consumed;
775 }; 753 };
776 754
777 } // namespace net 755 } // namespace net
778 756
779 #endif // NET_QUIC_QUIC_PROTOCOL_H_ 757 #endif // NET_QUIC_QUIC_PROTOCOL_H_
OLDNEW
« no previous file with comments | « trunk/src/net/quic/quic_packet_creator_test.cc ('k') | trunk/src/net/quic/quic_protocol.cc » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698