Index: net/quic/quic_protocol.h |
diff --git a/net/quic/quic_protocol.h b/net/quic/quic_protocol.h |
index 4cde9969ad2dc977f5972a22e7793c1802eecffd..608c526cb466ba6d858c19f415cec4f2961f8c21 100644 |
--- a/net/quic/quic_protocol.h |
+++ b/net/quic/quic_protocol.h |
@@ -53,8 +53,6 @@ const size_t kDefaultMaxStreamsPerConnection = 100; |
const size_t kPublicFlagsSize = 1; |
// Number of bytes reserved for version number in the packet header. |
const size_t kQuicVersionSize = 4; |
-// Number of bytes reserved for sequence number in the packet header. |
-const size_t kSequenceNumberSize = 6; |
// Number of bytes reserved for private flags in the packet header. |
const size_t kPrivateFlagsSize = 1; |
// Number of bytes reserved for FEC group in the packet header. |
@@ -119,6 +117,13 @@ enum InFecGroup { |
IN_FEC_GROUP, |
}; |
+enum QuicSequenceNumberLength { |
+ PACKET_1BYTE_SEQUENCE_NUMBER = 1, |
+ PACKET_2BYTE_SEQUENCE_NUMBER = 2, |
+ PACKET_4BYTE_SEQUENCE_NUMBER = 4, |
+ PACKET_6BYTE_SEQUENCE_NUMBER = 6 |
+}; |
+ |
enum QuicPacketPublicFlags { |
PACKET_PUBLIC_FLAGS_NONE = 0, |
PACKET_PUBLIC_FLAGS_VERSION = 1 << 0, // Packet header contains version info. |
@@ -128,7 +133,12 @@ enum QuicPacketPublicFlags { |
PACKET_PUBLIC_FLAGS_1BYTE_GUID = 1 << 2, |
PACKET_PUBLIC_FLAGS_4BYTE_GUID = 1 << 3, |
PACKET_PUBLIC_FLAGS_8BYTE_GUID = 1 << 3 | 1 << 2, |
- PACKET_PUBLIC_FLAGS_MAX = (1 << 4) - 1 // All bits set. |
+ // Packet sequence number length in bytes. |
+ PACKET_PUBLIC_FLAGS_1BYTE_SEQUENCE = 0, |
+ PACKET_PUBLIC_FLAGS_2BYTE_SEQUENCE = 1 << 4, |
+ PACKET_PUBLIC_FLAGS_4BYTE_SEQUENCE = 1 << 5, |
+ PACKET_PUBLIC_FLAGS_6BYTE_SEQUENCE = 1 << 5 | 1 << 4, |
+ PACKET_PUBLIC_FLAGS_MAX = (1 << 6) - 1 // All bits set. |
}; |
enum QuicPacketPrivateFlags { |
@@ -142,19 +152,25 @@ enum QuicPacketPrivateFlags { |
// Size in bytes of the data or fec packet header. |
NET_EXPORT_PRIVATE size_t GetPacketHeaderSize(QuicPacketHeader header); |
-NET_EXPORT_PRIVATE size_t GetPacketHeaderSize(QuicGuidLength guid_length, |
- bool include_version, |
- InFecGroup is_in_fec_group); |
+NET_EXPORT_PRIVATE size_t GetPacketHeaderSize( |
+ QuicGuidLength guid_length, |
+ bool include_version, |
+ QuicSequenceNumberLength sequence_number_length, |
+ InFecGroup is_in_fec_group); |
// Size in bytes of the public reset packet. |
NET_EXPORT_PRIVATE size_t GetPublicResetPacketSize(); |
// Index of the first byte in a QUIC packet of FEC protected data. |
-NET_EXPORT_PRIVATE size_t GetStartOfFecProtectedData(QuicGuidLength guid_length, |
- bool include_version); |
+NET_EXPORT_PRIVATE size_t GetStartOfFecProtectedData( |
+ QuicGuidLength guid_length, |
+ bool include_version, |
+ QuicSequenceNumberLength sequence_number_length); |
// Index of the first byte in a QUIC packet of encrypted data. |
-NET_EXPORT_PRIVATE size_t GetStartOfEncryptedData(QuicGuidLength guid_length, |
- bool include_version); |
+NET_EXPORT_PRIVATE size_t GetStartOfEncryptedData( |
+ QuicGuidLength guid_length, |
+ bool include_version, |
+ QuicSequenceNumberLength sequence_number_length); |
enum QuicRstStreamErrorCode { |
QUIC_STREAM_NO_ERROR = 0, |
@@ -295,7 +311,7 @@ const QuicTag kUnsupportedVersion = -1; |
// Each time the wire format changes, this need needs to be incremented. |
// At some point, we will actually freeze the wire format and make an official |
// version number, but this works for now. |
-const QuicTag kQuicVersion1 = TAG('Q', '0', '0', '5'); |
+const QuicTag kQuicVersion1 = TAG('Q', '0', '0', '6'); |
#undef TAG |
// MakeQuicTag returns a value given the four bytes. For example: |
@@ -314,6 +330,7 @@ struct NET_EXPORT_PRIVATE QuicPacketPublicHeader { |
QuicGuidLength guid_length; |
bool reset_flag; |
bool version_flag; |
+ QuicSequenceNumberLength sequence_number_length; |
QuicTagVector versions; |
}; |
@@ -577,8 +594,6 @@ typedef std::vector<QuicFrame> QuicFrames; |
struct NET_EXPORT_PRIVATE QuicFecData { |
QuicFecData(); |
- bool operator==(const QuicFecData& other) const; |
- |
// The FEC group number is also the sequence number of the first |
// FEC protected packet. The last protected packet's sequence number will |
// be one less than the sequence number of the FEC packet. |
@@ -621,22 +636,26 @@ class NET_EXPORT_PRIVATE QuicData { |
class NET_EXPORT_PRIVATE QuicPacket : public QuicData { |
public: |
- static QuicPacket* NewDataPacket(char* buffer, |
- size_t length, |
- bool owns_buffer, |
- QuicGuidLength guid_length, |
- bool includes_version) { |
- return new QuicPacket( |
- buffer, length, owns_buffer, guid_length, includes_version, false); |
+ static QuicPacket* NewDataPacket( |
+ char* buffer, |
+ size_t length, |
+ bool owns_buffer, |
+ QuicGuidLength guid_length, |
+ bool includes_version, |
+ QuicSequenceNumberLength sequence_number_length) { |
+ return new QuicPacket(buffer, length, owns_buffer, guid_length, |
+ includes_version, sequence_number_length, false); |
} |
- static QuicPacket* NewFecPacket(char* buffer, |
- size_t length, |
- bool owns_buffer, |
- QuicGuidLength guid_length, |
- bool includes_version) { |
- return new QuicPacket( |
- buffer, length, owns_buffer, guid_length, includes_version, true); |
+ static QuicPacket* NewFecPacket( |
+ char* buffer, |
+ size_t length, |
+ bool owns_buffer, |
+ QuicGuidLength guid_length, |
+ bool includes_version, |
+ QuicSequenceNumberLength sequence_number_length) { |
+ return new QuicPacket(buffer, length, owns_buffer, guid_length, |
+ includes_version, sequence_number_length, true); |
} |
base::StringPiece FecProtectedData() const; |
@@ -656,17 +675,20 @@ class NET_EXPORT_PRIVATE QuicPacket : public QuicData { |
bool owns_buffer, |
QuicGuidLength guid_length, |
bool includes_version, |
+ QuicSequenceNumberLength sequence_number_length, |
bool is_fec_packet) |
: QuicData(buffer, length, owns_buffer), |
buffer_(buffer), |
is_fec_packet_(is_fec_packet), |
guid_length_(guid_length), |
- includes_version_(includes_version) {} |
+ includes_version_(includes_version), |
+ sequence_number_length_(sequence_number_length) {} |
char* buffer_; |
const bool is_fec_packet_; |
const QuicGuidLength guid_length_; |
const bool includes_version_; |
+ const QuicSequenceNumberLength sequence_number_length_; |
DISALLOW_COPY_AND_ASSIGN(QuicPacket); |
}; |