Skip to main content

turn_types/attribute/
mod.rs

1// Copyright (C) 2025 Matthew Waters <matthew@centricular.com>
2//
3// Licensed under the Apache License, Version 2.0 <LICENSE-APACHE or
4// http://www.apache.org/licenses/LICENSE-2.0> or the MIT license
5// <LICENSE-MIT or http://opensource.org/licenses/MIT>, at your
6// option. This file may not be copied, modified, or distributed
7// except according to those terms.
8//
9// SPDX-License-Identifier: MIT OR Apache-2.0
10
11//! STUN Attributes for TURN.
12//!
13//! Provides for generating, parsing and manipulating STUN attributes as specified in TURN
14//! [RFC5766].
15//!
16//! [RFC5766]: https://tools.ietf.org/html/rfc5766
17
18mod address;
19pub use address::{
20    AdditionalAddressFamily, AddressErrorCode, RequestedAddressFamily, XorPeerAddress,
21    XorRelayedAddress,
22};
23mod channel;
24pub use channel::ChannelNumber;
25mod connection;
26pub use connection::ConnectionId;
27mod data;
28pub use data::Data;
29mod even_port;
30pub use even_port::EvenPort;
31mod fragment;
32pub use fragment::DontFragment;
33mod icmp;
34pub use icmp::Icmp;
35mod lifetime;
36pub use lifetime::Lifetime;
37mod reservation;
38pub use reservation::ReservationToken;
39mod transport;
40pub use transport::RequestedTransport;
41
42pub(super) fn attributes_init() {
43    #[cfg(feature = "std")]
44    {
45        use stun_types::prelude::*;
46
47        stun_types::attribute_display!(XorPeerAddress);
48        XorPeerAddress::TYPE.add_name("XorPeerAddress");
49        stun_types::attribute_display!(XorRelayedAddress);
50        XorRelayedAddress::TYPE.add_name("XorRelayedAddress");
51        stun_types::attribute_display!(ChannelNumber);
52        ChannelNumber::TYPE.add_name("ChannelNumber");
53        stun_types::attribute_display!(Data);
54        Data::TYPE.add_name("Data");
55        stun_types::attribute_display!(EvenPort);
56        EvenPort::TYPE.add_name("EvenPort");
57        stun_types::attribute_display!(DontFragment);
58        DontFragment::TYPE.add_name("DontFragment");
59        stun_types::attribute_display!(Lifetime);
60        Lifetime::TYPE.add_name("Lifetime");
61        stun_types::attribute_display!(ReservationToken);
62        ReservationToken::TYPE.add_name("ReservationToken");
63        stun_types::attribute_display!(RequestedTransport);
64        RequestedTransport::TYPE.add_name("RequestedTransport");
65        stun_types::attribute_display!(RequestedAddressFamily);
66        RequestedAddressFamily::TYPE.add_name("RequestedAddressFamily");
67        stun_types::attribute_display!(ConnectionId);
68        ConnectionId::TYPE.add_name("ConnectionId");
69        stun_types::attribute_display!(AdditionalAddressFamily);
70        AdditionalAddressFamily::TYPE.add_name("AdditionalAddressFamily");
71        stun_types::attribute_display!(AddressErrorCode);
72        AddressErrorCode::TYPE.add_name("AddressErrorCode");
73        stun_types::attribute_display!(Icmp);
74        Icmp::TYPE.add_name("Icmp");
75    }
76}