Skip to main content

Module handshake

Module handshake 

Source
Expand description

Handshake control packet — draft-sharabayko-srt-01 §3.2.1, Figure 5, and its extension messages: Handshake Extension Message (§3.2.1.1 / Figure 6, flags in §3.2.1.1.1 / Table 6), Key Material Extension (§3.2.1.2, content is a super::KeyMaterial — §3.2.2), Stream ID Extension (§3.2.1.3 / Figure 7), and Group Membership Extension (§3.2.1.4 / Figures 8-9).

word0..0   Version (32)
word1      Encryption Field (16) | Extension Field (16)
word2      Initial Packet Sequence Number (32)
word3      Maximum Transmission Unit Size (32)
word4      Maximum Flow Window Size (32)
word5      Handshake Type (32)
word6      SRT Socket ID (32)
word7      SYN Cookie (32)
word8..11  Peer IP Address (128)
── repeated ──
           Extension Type (16) | Extension Length (16, in 4-byte blocks)
           Extension Contents (Extension Length * 4 bytes)

This module covers structure only: parsing the fixed CIF fields and walking/decoding extension blocks. The handshake exchange (caller / listener / rendezvous state machine, §4.3) is an explicit follow-up.

Structs§

GroupFlags
Group Membership Extension Flags (§3.2.1.4, Figure 9): only the M bit is defined.
GroupMembershipExtension
Group Membership Extension (§3.2.1.4, Figure 8) — the payload of an ExtensionType::Group block.
HandshakeExtensionBlock
One decoded Handshake Extension block (§3.2.1): Extension Type / Extension Length / Extension Contents. Data-carrying (borrows the raw contents) — decode the contents with Self::as_hs_ext_message, Self::as_key_material, Self::as_stream_id, or Self::as_group_membership as appropriate for Self::ext_type.
HandshakeExtensionFlags
The Extension Field (§3.2.1, Table 3) — a 16-bit bitmask on a CONCLUSION handshake, or an opaque echoed value on an INDUCTION response.
HandshakeExtensionIter
Iterator over HandshakeExtensions. See HandshakeExtensions::iter.
HandshakeExtensionMessageFlags
SRT Flags of a Handshake Extension Message (§3.2.1.1.1, Table 6).
HandshakeExtensions
A borrowed, lazily-walked list of Handshake Extension blocks — the same convention dvb-si uses for descriptor loops. Iterate with Self::iter.
HandshakePacket
Handshake control packet (§3.2.1, Figure 5).
HsExtMessage
Handshake Extension Message contents (§3.2.1.1, Figure 6) — the payload of an ExtensionType::HsReq / ExtensionType::HsRsp block.

Enums§

EncryptionField
Encryption Field: block cipher family and key size advertised in the handshake (draft-sharabayko-srt-01 §3.2.1, Table 2).
ExtensionType
Handshake Extension Extension Type (draft-sharabayko-srt-01 §3.2.1, Table 5).
GroupType
Group Membership Extension Type (draft-sharabayko-srt-01 §3.2.1.4, SRT_GTYPE_*).
HandshakeType
Handshake Type (draft-sharabayko-srt-01 §3.2.1, Table 4).

Constants§

ENCRYPTION_FIELD_AES_128
AES-128.
ENCRYPTION_FIELD_AES_192
AES-192.
ENCRYPTION_FIELD_AES_256
AES-256.
ENCRYPTION_FIELD_NONE
Encryption Field wire values (§3.2.1, Table 2).
EXT_TYPE_CONGESTION
SRT_CMD_CONGESTION.
EXT_TYPE_FILTER
SRT_CMD_FILTER.
EXT_TYPE_GROUP
SRT_CMD_GROUP.
EXT_TYPE_HSREQ
Extension Type wire values (§3.2.1, Table 5).
EXT_TYPE_HSRSP
SRT_CMD_HSRSP.
EXT_TYPE_KMREQ
SRT_CMD_KMREQ — also used as the control-packet Subtype for a Key Material message delivered as a User-Defined control packet (§3.2.2).
EXT_TYPE_KMRSP
SRT_CMD_KMRSP.
EXT_TYPE_SID
SRT_CMD_SID.
GROUP_MEMBERSHIP_EXT_LEN
Wire length of a Group Membership Extension (Figure 8).
GROUP_TYPE_BALANCING
Balancing.
GROUP_TYPE_BROADCAST
Broadcast.
GROUP_TYPE_MAIN_BACKUP
Main/backup.
GROUP_TYPE_MULTICAST
Multicast (reserved for future use).
GROUP_TYPE_UNDEFINED
Type (Group Type) wire values of the Group Membership Extension (§3.2.1.4).
HANDSHAKE_CIF_FIXED_LEN
Length in bytes of the fixed Handshake CIF core (Version through Peer IP Address, §3.2.1 Figure 5) — 12 header words.
HANDSHAKE_TYPE_AGREEMENT
AGREEMENT.
HANDSHAKE_TYPE_CONCLUSION
CONCLUSION.
HANDSHAKE_TYPE_DONE
Handshake Type wire values (§3.2.1, Table 4).
HANDSHAKE_TYPE_INDUCTION
INDUCTION.
HANDSHAKE_TYPE_WAVEHAND
WAVEHAND.
HS_EXT_FLAG_CONFIG
CONFIG.
HS_EXT_FLAG_HSREQ
Extension Field bitmask values (§3.2.1, Table 3). Only meaningful on a CONCLUSION handshake; on an INDUCTION response this 16-bit field is instead echoed back opaquely by the Listener.
HS_EXT_FLAG_KMREQ
KMREQ.
HS_EXT_MESSAGE_LEN
Wire length of a Handshake Extension Message (Figure 6).
HS_MSG_FLAG_CRYPT
CRYPT.
HS_MSG_FLAG_PACKET_FILTER
PACKET_FILTER.
HS_MSG_FLAG_PERIODICNAK
PERIODICNAK.
HS_MSG_FLAG_REXMITFLG
REXMITFLG.
HS_MSG_FLAG_STREAM
STREAM.
HS_MSG_FLAG_TLPKTDROP
TLPKTDROP.
HS_MSG_FLAG_TSBPDRCV
TSBPDRCV.
HS_MSG_FLAG_TSBPDSND
SRT Flags bitmask values of the Handshake Extension Message (§3.2.1.1.1, Table 6).

Functions§

build_extension_block
Build one Handshake Extension block’s raw bytes (Extension Type + Extension Length + Extension Contents, §3.2.1) — append the result of repeated calls to chain multiple blocks.
encode_stream_id
Encode the Stream ID extension’s 32-bit-little-endian-word storage (§3.2.1.3) from a plain UTF-8 stream id string, padding with 0x00 up to the next 4-byte boundary. Inverse of HandshakeExtensionBlock::as_stream_id.