123 #if (BYTE_ORDER == LITTLE_ENDIAN)
124 uint8_t : 6, fixedBit : 1, headerForm : 1;
126 uint8_t headerForm : 1, fixedBit : 1, : 6;
130 #pragma pack(push, 1)
139 #if (BYTE_ORDER == LITTLE_ENDIAN)
140 uint8_t packetNumberLength : 2, reserved : 2, longPacketType : 2, fixedBit : 1, headerForm : 1;
142 uint8_t headerForm : 1, fixedBit : 1, longPacketType : 2, reserved : 2, packetNumberLength : 2;
145 uint8_t destinationConnectionIdLength;
148 static_assert(
sizeof(
quic_long_header) == 6,
"quic_long_header size is not 6 bytes");
150 #pragma pack(push, 1)
158 #if (BYTE_ORDER == LITTLE_ENDIAN)
159 uint8_t packetNumberLength : 2, keyPhase : 1, reserved : 2, spinBit : 1, fixedBit : 1, headerForm : 1;
161 uint8_t headerForm : 1, fixedBit : 1, spinBit : 1, reserved : 2, keyPhase : 1, packetNumberLength : 2;
165 static_assert(
sizeof(
quic_short_header) == 1,
"quic_short_header size is not 1 byte");
205 using QuicV1Layer::QuicV1Layer;
225 OffsetAndLength getDestConIdOffsetAndLength()
const;
227 OffsetAndLength getSrcConIdOffsetAndLength()
const;
230 static constexpr
int destinationConnectionIdOffset =
sizeof(quic_long_header);
232 static bool isDataValid(
const uint8_t* data,
size_t dataLen);
234 quic_long_header* getLongHeader()
const
236 return reinterpret_cast<quic_long_header*
>(m_Data);
239 friend class QuicV1Layer;
287 virtual size_t getLengthOffset()
const;
289 VarintValueAndSize getVarintValueAndSize(
size_t offset)
const;
292 using QuicV1LongHeaderLayer::QuicV1LongHeaderLayer;
311 using QuicV1EstablishmentLayer::QuicV1EstablishmentLayer;
313 size_t getLengthOffset()
const override;
315 size_t getTokenLengthOffset()
const;
326 using QuicV1EstablishmentLayer::QuicV1EstablishmentLayer;
337 using QuicV1EstablishmentLayer::QuicV1EstablishmentLayer;
376 using QuicV1LongHeaderLayer::QuicV1LongHeaderLayer;
378 static constexpr
size_t retryIntegritySize = 16;
380 size_t getRetryTokenOffset()
const;
413 using QuicV1LongHeaderLayer::QuicV1LongHeaderLayer;
435 return getShortHeader()->spinBit;
442 return getShortHeader()->keyPhase;
460 using QuicV1Layer::QuicV1Layer;
462 static bool isDataValid(
const uint8_t* data,
size_t dataLen);
464 quic_short_header* getShortHeader()
const
466 return reinterpret_cast<quic_short_header*
>(m_Data);
469 friend class QuicV1Layer;
Definition: QuicLayer.h:248
size_t getHeaderLen() const override
uint64_t getLength() const
ProtectedPayload getProtectedPayload() const
Definition: QuicLayer.h:336
Definition: QuicLayer.h:300
std::string getTokenAsString() const
std::vector< uint8_t > getToken() const
Definition: QuicLayer.h:16
QuicHeaderForm
Definition: QuicLayer.h:45
QuicPacketType
Definition: QuicLayer.h:23
@ Handshake
Handshake packet - carries the remainder of the cryptographic handshake.
@ ZeroRTT
0-RTT packet - carries application data sent before the handshake completes
@ OneRtt
1-RTT packet - a short-header packet carrying post-handshake application data
std::string toString() const override
uint8_t getFixedBit() const
void computeCalculateFields() override
Does nothing for this layer.
Definition: QuicLayer.h:100
static bool isQuicPort(uint16_t port)
Definition: QuicLayer.h:86
static QuicV1Layer * parseQuicLayer(uint8_t *data, size_t dataLen, Layer *prevLayer, Packet *packet)
OsiModelLayer getOsiModelLayer() const override
Definition: QuicLayer.h:107
void parseNextLayer() override
QuicHeaderForm getHeaderForm() const
virtual QuicPacketType getPacketType() const =0
Definition: QuicLayer.h:423
QuicPacketType getPacketType() const override
Definition: QuicLayer.h:426
ProtectedPayload getProtectedPayload() const
bool getSpinBit() const
Definition: QuicLayer.h:433
bool getKeyPhaseBit() const
Definition: QuicLayer.h:440
size_t getHeaderLen() const override
Definition: QuicLayer.h:454
Definition: QuicLayer.h:348
std::string getRetryIntegrityTagAsString() const
size_t getHeaderLen() const override
Definition: QuicLayer.h:370
std::vector< uint8_t > getRetryToken() const
std::vector< uint8_t > getRetryIntegrityTag() const
std::string getRetryTokenAsString() const
Definition: QuicLayer.h:391
size_t getHeaderLen() const override
Definition: QuicLayer.h:407
QuicPacketType getPacketType() const override
Definition: QuicLayer.h:394
std::vector< uint32_t > getSupportedVersions() const
Definition: QuicLayer.h:325
const ProtocolType QUICv1
QUIC v1 protocol.
Definition: ProtocolType.h:266
The main namespace for the PcapPlusPlus lib.
Definition: AssertionUtils.h:19
OsiModelLayer
An enum representing OSI model layers.
Definition: ProtocolType.h:272
@ OsiModelTransportLayer
Transport layer (layer 4)
Definition: ProtocolType.h:280
Definition: QuicLayer.h:274
VarintValueAndSize(uint64_t value, size_t size)
Definition: QuicLayer.h:283
uint64_t value
The varint's decoded value.
Definition: QuicLayer.h:276
size_t size
The varint's encoded size on the wire, in bytes (1, 2, 4 or 8)
Definition: QuicLayer.h:278
Definition: QuicLayer.h:57
const uint8_t * data
Pointer to the beginning of the protected data.
Definition: QuicLayer.h:59
size_t length
Length of the protected data in bytes.
Definition: QuicLayer.h:61
Definition: QuicLayer.h:212
size_t offset
The field's offset from the start of the packet, in bytes.
Definition: QuicLayer.h:216
size_t length
The field's length, in bytes.
Definition: QuicLayer.h:214
OffsetAndLength(size_t length, size_t offset)
Definition: QuicLayer.h:221