PacketHeader.msg
Msg File src/inet/transportlayer/quic/packet/PacketHeader.msg
| Name | Type | Description |
|---|---|---|
| PacketHeaderForm | enum | (no description) |
| LongPacketHeaderType | enum | (no description) |
| PacketHeader | class | (no description) |
| LongPacketHeader | class | (no description) |
| VersionNegotiationPacketHeader | class | (no description) |
| InitialPacketHeader | class | (no description) |
| ZeroRttPacketHeader | class | (no description) |
| HandshakePacketHeader | class | (no description) |
| RetryPacketHeader | class | (no description) |
| ShortPacketHeader | class | (no description) |
| OneRttPacketHeader | class | (no description) |
Source code
// // Copyright (C) 2019-2024 Timo Völker, Ekaterina Volodina // Copyright (C) 2025 OpenSim Ltd. // // SPDX-License-Identifier: LGPL-3.0-or-later // import inet.common.packet.chunk.Chunk; import inet.transportlayer.quic.packet.VariableLengthInteger; cplusplus{{ #include "VariableLengthInteger.h" }} namespace inet::quic; enum PacketHeaderForm { PACKET_HEADER_FORM_SHORT = 0; PACKET_HEADER_FORM_LONG = 1; } enum LongPacketHeaderType { LONG_PACKET_HEADER_TYPE_INITIAL = 0x00; LONG_PACKET_HEADER_TYPE_0RTT = 0x01; LONG_PACKET_HEADER_TYPE_HANDSHAKE = 0x02; LONG_PACKET_HEADER_TYPE_RETRY = 0x03; } class PacketHeader extends FieldsChunk { uint8_t headerForm; } class LongPacketHeader extends PacketHeader { headerForm = PACKET_HEADER_FORM_LONG; uint8_t longPacketType; uint32_t version = 1; uint8_t dstConnectionIdLength; uint64_t dstConnectionId; uint8_t srcConnectionIdLength; uint64_t srcConnectionId; } class VersionNegotiationPacketHeader extends LongPacketHeader { longPacketType = 0; version = 0; uint32_t supportedVersion[]; } class InitialPacketHeader extends LongPacketHeader { longPacketType = LONG_PACKET_HEADER_TYPE_INITIAL; uint8_t packetNumberLength; VariableLengthInteger tokenLength; uint32_t token; VariableLengthInteger length; uint64_t packetNumber; // payload } cplusplus(InitialPacketHeader) {{ public: void calcChunkLength() { int64_t len = 1 + 4 + 1 + dstConnectionIdLength + 1 + srcConnectionIdLength + getVariableLengthIntegerSize(length) + packetNumberLength; this->setChunkLength(B(len)); } std::string str() const override { std::ostringstream os; os << "Initial[dstConnectionId=" << dstConnectionId << ", packetNumber=" << packetNumber << "]"; return os.str(); } }} class ZeroRttPacketHeader extends LongPacketHeader { longPacketType = LONG_PACKET_HEADER_TYPE_0RTT; uint8_t packetNumberLength; VariableLengthInteger length; uint64_t packetNumber; // payload } cplusplus(ZeroRttPacketHeader) {{ public: void calcChunkLength() { int64_t len = 1 + 4 + 1 + dstConnectionIdLength + 1 + srcConnectionIdLength + getVariableLengthIntegerSize(length) + packetNumberLength; this->setChunkLength(B(len)); } std::string str() const override { std::ostringstream os; os << "0-RTT[dstConnectionId=" << dstConnectionId << ", packetNumber=" << packetNumber << "]"; return os.str(); } }} class HandshakePacketHeader extends LongPacketHeader { longPacketType = LONG_PACKET_HEADER_TYPE_HANDSHAKE; uint8_t packetNumberLength; VariableLengthInteger length; uint64_t packetNumber; // payload } cplusplus(HandshakePacketHeader) {{ public: void calcChunkLength() { int64_t len = 1 + 4 + 1 + dstConnectionIdLength + 1 + srcConnectionIdLength + getVariableLengthIntegerSize(length) + packetNumberLength; this->setChunkLength(B(len)); } std::string str() const override { std::ostringstream os; os << "Handshake[dstConnectionId=" << dstConnectionId << ", packetNumber=" << packetNumber << "]"; return os.str(); } }} class RetryPacketHeader extends LongPacketHeader { longPacketType = LONG_PACKET_HEADER_TYPE_RETRY; uint64_t retryToken; uint64_t retryIntegrityTag; } class ShortPacketHeader extends PacketHeader { headerForm = PACKET_HEADER_FORM_SHORT; uint64_t dstConnectionId; uint64_t packetNumber; // payload } class OneRttPacketHeader extends ShortPacketHeader { bool iBit = false; } cplusplus(OneRttPacketHeader) {{ public: static const size_t SIZE = 13; std::string str() const override { std::ostringstream os; os << "1-RTT[dstConnectionId=" << dstConnectionId << ", packetNumber=" << packetNumber << "]"; return os.str(); } }}