IPv4/IPv6 address-family constants for TURN Allocate and Refresh.
What problem this solves
Dual-stack TURN clients request relay addresses in a specific IP version via
REQUESTED-ADDRESS-FAMILY and related attributes. The server must compare those
four-byte values, map Erlang IP tuples to internal family ids (4 / 8), and
encode ADDRESS-ERROR-CODE when a family cannot be honored.
Internal note
Used by allocation and action handlers; not an operator API.
RFCs
Summary
Functions
Builds an ADDRESS-ERROR-CODE attribute binary.
Returns whether attrs carry an ADDITIONAL-ADDRESS-FAMILY of IPv6.
Maps an IP tuple to relay family 4, 8, or nil when unrecognized.
Four-byte REQUESTED-ADDRESS-FAMILY value for IPv4 (0x01).
Four-byte REQUESTED-ADDRESS-FAMILY value for IPv6 (0x02).
Returns whether Allocate attrs request an IPv6 relay address.
Functions
Builds an ADDRESS-ERROR-CODE attribute binary.
Parameters
family_byte- address-family byte (e.g.1for IPv4)err_no- three-digit STUN error number (class * 100 + number)reason- UTF-8 reason phrase
Returns whether attrs carry an ADDITIONAL-ADDRESS-FAMILY of IPv6.
Used for dual-stack Allocate requests per RFC 8656.
Parameters
attrs- decoded STUN attribute map (may include:additional_address_family)
Maps an IP tuple to relay family 4, 8, or nil when unrecognized.
Examples
iex> Xirsys.XTurn.AddressFamily.family_of({127, 0, 0, 1})
4
iex> Xirsys.XTurn.AddressFamily.family_of({0, 0, 0, 0, 0, 0, 0, 1})
8
iex> Xirsys.XTurn.AddressFamily.family_of(:not_an_address)
nil
Four-byte REQUESTED-ADDRESS-FAMILY value for IPv4 (0x01).
Four-byte REQUESTED-ADDRESS-FAMILY value for IPv6 (0x02).
Returns whether Allocate attrs request an IPv6 relay address.
Examples
iex> alias Xirsys.XTurn.AddressFamily
iex> AddressFamily.ipv6_requested?(%{requested_address_type: AddressFamily.ipv6()})
true
iex> Xirsys.XTurn.AddressFamily.ipv6_requested?(%{})
false