| Index: net/quic/quic_protocol.h
|
| diff --git a/net/quic/quic_protocol.h b/net/quic/quic_protocol.h
|
| index 9a1e128345b223ee8c424edf049898e4e6a80925..2a297ba6b5e4611b3beb304ab0e1db8b29282f66 100644
|
| --- a/net/quic/quic_protocol.h
|
| +++ b/net/quic/quic_protocol.h
|
| @@ -37,6 +37,7 @@ typedef QuicPacketSequenceNumber QuicFecGroupNumber;
|
| typedef uint64 QuicPublicResetNonceProof;
|
| typedef uint8 QuicPacketEntropyHash;
|
| typedef uint32 QuicVersionTag;
|
| +typedef std::vector<QuicVersionTag> QuicVersionTagList;
|
|
|
| // TODO(rch): Consider Quic specific names for these constants.
|
| // Maximum size in bytes of a QUIC packet.
|
| @@ -72,6 +73,8 @@ NET_EXPORT_PRIVATE size_t GetPublicResetPacketSize();
|
| NET_EXPORT_PRIVATE size_t GetStartOfFecProtectedData(bool include_version);
|
| // Index of the first byte in a QUIC packet of encrypted data.
|
| NET_EXPORT_PRIVATE size_t GetStartOfEncryptedData(bool include_version);
|
| +// Returns true if |version| is a supported protocol version.
|
| +NET_EXPORT_PRIVATE bool IsSupportedVersion(QuicVersionTag version);
|
|
|
| // Index of the first byte in a QUIC packet which is used in hash calculation.
|
| const size_t kStartOfHashData = 0;
|
| @@ -118,6 +121,9 @@ enum QuicErrorCode {
|
| // Stream errors.
|
| QUIC_NO_ERROR = 0,
|
|
|
| + // Connection has reached an invalid state.
|
| + QUIC_INTERNAL_ERROR,
|
| +
|
| // There were data frames after the a fin or reset.
|
| QUIC_STREAM_DATA_AFTER_TERMINATION,
|
| // There was some server error which halted stream processing.
|
| @@ -143,6 +149,8 @@ enum QuicErrorCode {
|
| QUIC_INVALID_GOAWAY_DATA,
|
| // Ack data is malformed.
|
| QUIC_INVALID_ACK_DATA,
|
| + // Version negotiation packet is malformed.
|
| + QUIC_INVALID_VERSION_NEGOTIATION_PACKET,
|
| // There was an error decrypting.
|
| QUIC_DECRYPTION_FAILURE,
|
| // There was an error encrypting.
|
| @@ -159,6 +167,8 @@ enum QuicErrorCode {
|
| QUIC_TOO_MANY_OPEN_STREAMS,
|
| // Received public reset for this connection.
|
| QUIC_PUBLIC_RESET,
|
| + // Invalid protocol version
|
| + QUIC_INVALID_VERSION,
|
|
|
| // We hit our prenegotiated (or default) timeout
|
| QUIC_CONNECTION_TIMED_OUT,
|
| @@ -195,14 +205,21 @@ enum QuicErrorCode {
|
| // to reverse the order of the bytes.
|
| #define MAKE_TAG(a, b, c, d) ((d << 24) + (c << 16) + (b << 8) + a)
|
|
|
| +const QuicVersionTag kUnsupportedVersion = -1;
|
| const QuicVersionTag kQuicVersion1 = MAKE_TAG('Q', '1', '.', '0');
|
|
|
| struct NET_EXPORT_PRIVATE QuicPacketPublicHeader {
|
| + QuicPacketPublicHeader();
|
| + explicit QuicPacketPublicHeader(const QuicPacketPublicHeader& other);
|
| + ~QuicPacketPublicHeader();
|
| +
|
| + QuicPacketPublicHeader& operator=(const QuicPacketPublicHeader& other);
|
| +
|
| // Universal header. All QuicPacket headers will have a guid and public flags.
|
| QuicGuid guid;
|
| bool reset_flag;
|
| bool version_flag;
|
| - QuicVersionTag version;
|
| + QuicVersionTagList versions;
|
| };
|
|
|
| // Header for Data or FEC packets.
|
| @@ -232,6 +249,14 @@ struct QuicPublicResetPacket {
|
| QuicPublicResetNonceProof nonce_proof;
|
| };
|
|
|
| +enum QuicVersionNegotiationState {
|
| + START_NEGOTIATION = 0,
|
| + SENT_NEGOTIATION_PACKET,
|
| + NEGOTIATED_VERSION
|
| +};
|
| +
|
| +typedef QuicPacketPublicHeader QuicVersionNegotiationPacket;
|
| +
|
| // A padding frame contains no payload.
|
| struct NET_EXPORT_PRIVATE QuicPaddingFrame {
|
| };
|
| @@ -275,6 +300,10 @@ struct NET_EXPORT_PRIVATE ReceivedPacketInfo {
|
| // list.
|
| QuicPacketSequenceNumber largest_observed;
|
|
|
| + // Time elapsed since largest_observed was received until this Ack frame was
|
| + // sent.
|
| + QuicTime::Delta delta_time_largest_observed;
|
| +
|
| // TODO(satyamshekhar): Can be optimized using an interval set like data
|
| // structure.
|
| // The set of packets which we're expecting and have not received.
|
| @@ -312,6 +341,7 @@ struct NET_EXPORT_PRIVATE QuicAckFrame {
|
| // Testing convenience method to construct a QuicAckFrame with all packets
|
| // from least_unacked to largest_observed acked.
|
| QuicAckFrame(QuicPacketSequenceNumber largest_observed,
|
| + QuicTime largest_observed_receive_time,
|
| QuicPacketSequenceNumber least_unacked);
|
|
|
| NET_EXPORT_PRIVATE friend std::ostream& operator<<(
|
|
|