Index: net/quic/core/quic_types.h |
diff --git a/net/quic/core/quic_types.h b/net/quic/core/quic_types.h |
index 4f24e95f62d15a6a6c8f728d29ef487a1bf58bf1..a46e7dab42135489a3b456b7be903648e2e62cb9 100644 |
--- a/net/quic/core/quic_types.h |
+++ b/net/quic/core/quic_types.h |
@@ -5,18 +5,28 @@ |
#ifndef NET_QUIC_QUIC_TYPES_H_ |
#define NET_QUIC_QUIC_TYPES_H_ |
-// This header defines some basic types that don't depend on quic_protocol.h, |
-// so that classes not directly related to the protocol wire format can avoid |
-// including quic_protocol.h. |
- |
#include <stddef.h> |
- |
+#include <array> |
+#include <map> |
#include <ostream> |
+#include <vector> |
#include "net/base/net_export.h" |
namespace net { |
+typedef uint8_t QuicPathId; |
+typedef uint16_t QuicPacketLength; |
+typedef uint32_t QuicHeaderId; |
+typedef uint32_t QuicStreamId; |
+typedef uint64_t QuicByteCount; |
+typedef uint64_t QuicConnectionId; |
+typedef uint64_t QuicPacketCount; |
+typedef uint64_t QuicPacketNumber; |
+typedef uint64_t QuicPublicResetNonceProof; |
+typedef uint64_t QuicStreamOffset; |
+typedef std::array<char, 32> DiversificationNonce; |
+ |
// A struct for functions which consume data payloads and fins. |
struct NET_EXPORT_PRIVATE QuicConsumedData { |
QuicConsumedData(size_t bytes_consumed, bool fin_consumed); |
@@ -65,6 +75,183 @@ struct NET_EXPORT_PRIVATE WriteResult { |
}; |
}; |
+enum TransmissionType : int8_t { |
+ NOT_RETRANSMISSION, |
+ FIRST_TRANSMISSION_TYPE = NOT_RETRANSMISSION, |
+ HANDSHAKE_RETRANSMISSION, // Retransmits due to handshake timeouts. |
+ ALL_UNACKED_RETRANSMISSION, // Retransmits all unacked packets. |
+ ALL_INITIAL_RETRANSMISSION, // Retransmits all initially encrypted packets. |
+ LOSS_RETRANSMISSION, // Retransmits due to loss detection. |
+ RTO_RETRANSMISSION, // Retransmits due to retransmit time out. |
+ TLP_RETRANSMISSION, // Tail loss probes. |
+ LAST_TRANSMISSION_TYPE = TLP_RETRANSMISSION, |
+}; |
+ |
+enum HasRetransmittableData : int8_t { |
+ NO_RETRANSMITTABLE_DATA, |
+ HAS_RETRANSMITTABLE_DATA, |
+}; |
+ |
+enum IsHandshake : int8_t { NOT_HANDSHAKE, IS_HANDSHAKE }; |
+ |
+enum class Perspective { IS_SERVER, IS_CLIENT }; |
+NET_EXPORT_PRIVATE std::ostream& operator<<(std::ostream& os, |
+ const Perspective& s); |
+ |
+// Describes whether a ConnectionClose was originated by the peer. |
+enum class ConnectionCloseSource { FROM_PEER, FROM_SELF }; |
+ |
+// Should a connection be closed silently or not. |
+enum class ConnectionCloseBehavior { |
+ SILENT_CLOSE, |
+ SEND_CONNECTION_CLOSE_PACKET, |
+ SEND_CONNECTION_CLOSE_PACKET_WITH_NO_ACK |
+}; |
+ |
+enum QuicFrameType { |
+ // Regular frame types. The values set here cannot change without the |
+ // introduction of a new QUIC version. |
+ PADDING_FRAME = 0, |
+ RST_STREAM_FRAME = 1, |
+ CONNECTION_CLOSE_FRAME = 2, |
+ GOAWAY_FRAME = 3, |
+ WINDOW_UPDATE_FRAME = 4, |
+ BLOCKED_FRAME = 5, |
+ STOP_WAITING_FRAME = 6, |
+ PING_FRAME = 7, |
+ PATH_CLOSE_FRAME = 8, |
+ |
+ // STREAM and ACK frames are special frames. They are encoded differently on |
+ // the wire and their values do not need to be stable. |
+ STREAM_FRAME, |
+ ACK_FRAME, |
+ // The path MTU discovery frame is encoded as a PING frame on the wire. |
+ MTU_DISCOVERY_FRAME, |
+ NUM_FRAME_TYPES |
+}; |
+ |
+enum QuicConnectionIdLength { |
+ PACKET_0BYTE_CONNECTION_ID = 0, |
+ PACKET_8BYTE_CONNECTION_ID = 8 |
+}; |
+ |
+enum QuicPacketNumberLength : int8_t { |
+ PACKET_1BYTE_PACKET_NUMBER = 1, |
+ PACKET_2BYTE_PACKET_NUMBER = 2, |
+ PACKET_4BYTE_PACKET_NUMBER = 4, |
+ PACKET_6BYTE_PACKET_NUMBER = 6 |
+}; |
+ |
+// Used to indicate a QuicSequenceNumberLength using two flag bits. |
+enum QuicPacketNumberLengthFlags { |
+ PACKET_FLAGS_1BYTE_PACKET = 0, // 00 |
+ PACKET_FLAGS_2BYTE_PACKET = 1, // 01 |
+ PACKET_FLAGS_4BYTE_PACKET = 1 << 1, // 10 |
+ PACKET_FLAGS_6BYTE_PACKET = 1 << 1 | 1, // 11 |
+}; |
+ |
+// The public flags are specified in one byte. |
+enum QuicPacketPublicFlags { |
+ PACKET_PUBLIC_FLAGS_NONE = 0, |
+ |
+ // Bit 0: Does the packet header contains version info? |
+ PACKET_PUBLIC_FLAGS_VERSION = 1 << 0, |
+ |
+ // Bit 1: Is this packet a public reset packet? |
+ PACKET_PUBLIC_FLAGS_RST = 1 << 1, |
+ |
+ // Bit 2: indicates the that public header includes a nonce. |
+ PACKET_PUBLIC_FLAGS_NONCE = 1 << 2, |
+ |
+ // Bit 3: indicates whether a ConnectionID is included. |
+ PACKET_PUBLIC_FLAGS_0BYTE_CONNECTION_ID = 0, |
+ PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID = 1 << 3, |
+ |
+ // QUIC_VERSION_32 and earlier use two bits for an 8 byte |
+ // connection id. |
+ PACKET_PUBLIC_FLAGS_8BYTE_CONNECTION_ID_OLD = 1 << 3 | 1 << 2, |
+ |
+ // Bits 4 and 5 describe the packet number length as follows: |
+ // --00----: 1 byte |
+ // --01----: 2 bytes |
+ // --10----: 4 bytes |
+ // --11----: 6 bytes |
+ PACKET_PUBLIC_FLAGS_1BYTE_PACKET = PACKET_FLAGS_1BYTE_PACKET << 4, |
+ PACKET_PUBLIC_FLAGS_2BYTE_PACKET = PACKET_FLAGS_2BYTE_PACKET << 4, |
+ PACKET_PUBLIC_FLAGS_4BYTE_PACKET = PACKET_FLAGS_4BYTE_PACKET << 4, |
+ PACKET_PUBLIC_FLAGS_6BYTE_PACKET = PACKET_FLAGS_6BYTE_PACKET << 4, |
+ |
+ // Bit 6: Does the packet header contain a path id? |
+ PACKET_PUBLIC_FLAGS_MULTIPATH = 1 << 6, |
+ |
+ // Reserved, unimplemented flags: |
+ |
+ // Bit 7: indicates the presence of a second flags byte. |
+ PACKET_PUBLIC_FLAGS_TWO_OR_MORE_BYTES = 1 << 7, |
+ |
+ // All bits set (bit 7 is not currently used): 01111111 |
+ PACKET_PUBLIC_FLAGS_MAX = (1 << 7) - 1, |
+}; |
+ |
+// The private flags are specified in one byte. |
+enum QuicPacketPrivateFlags { |
+ PACKET_PRIVATE_FLAGS_NONE = 0, |
+ |
+ // Bit 0: Does this packet contain an entropy bit? |
+ PACKET_PRIVATE_FLAGS_ENTROPY = 1 << 0, |
+ |
+ // (bits 1-7 are not used): 00000001 |
+ PACKET_PRIVATE_FLAGS_MAX = (1 << 1) - 1 |
+}; |
+ |
+// Defines for all types of congestion control algorithms that can be used in |
+// QUIC. Note that this is separate from the congestion feedback type - |
+// some congestion control algorithms may use the same feedback type |
+// (Reno and Cubic are the classic example for that). |
+enum CongestionControlType { |
+ kCubic, |
+ kCubicBytes, |
+ kReno, |
+ kRenoBytes, |
+ kBBR, |
+}; |
+ |
+enum LossDetectionType { |
+ kNack, // Used to mimic TCP's loss detection. |
+ kTime, // Time based loss detection. |
+ kAdaptiveTime, // Adaptive time based loss detection. |
+ kLazyFack, // Nack based but with FACK disabled for the first ack. |
+}; |
+ |
+// EncryptionLevel enumerates the stages of encryption that a QUIC connection |
+// progresses through. When retransmitting a packet, the encryption level needs |
+// to be specified so that it is retransmitted at a level which the peer can |
+// understand. |
+enum EncryptionLevel : int8_t { |
+ ENCRYPTION_NONE = 0, |
+ ENCRYPTION_INITIAL = 1, |
+ ENCRYPTION_FORWARD_SECURE = 2, |
+ |
+ NUM_ENCRYPTION_LEVELS, |
+}; |
+ |
+enum PeerAddressChangeType { |
+ // IP address and port remain unchanged. |
+ NO_CHANGE, |
+ // Port changed, but IP address remains unchanged. |
+ PORT_CHANGE, |
+ // IPv4 address changed, but within the /24 subnet (port may have changed.) |
+ IPV4_SUBNET_CHANGE, |
+ // IPv4 address changed, excluding /24 subnet change (port may have changed.) |
+ IPV4_TO_IPV4_CHANGE, |
+ // IP address change from an IPv4 to an IPv6 address (port may have changed.) |
+ IPV4_TO_IPV6_CHANGE, |
+ // IP address change from an IPv6 to an IPv4 address (port may have changed.) |
+ IPV6_TO_IPV4_CHANGE, |
+ // IP address change from an IPv6 to an IPv6 address (port may have changed.) |
+ IPV6_TO_IPV6_CHANGE, |
+}; |
+ |
} // namespace net |
#endif // NET_QUIC_QUIC_TYPES_H_ |