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//! STUN Attributes for TURN.
10//!
11//! Provides for generating, parsing and manipulating STUN attributes as specified in TURN
12//! [RFC5766].
13//!
14//! [RFC5766]: https://tools.ietf.org/html/rfc5766
15
16mod address;
17pub use address::{
18    AdditionalAddressFamily, AddressErrorCode, RequestedAddressFamily, XorPeerAddress,
19    XorRelayedAddress,
20};
21mod channel;
22pub use channel::ChannelNumber;
23mod connection;
24pub use connection::ConnectionId;
25mod data;
26pub use data::Data;
27mod even_port;
28pub use even_port::EvenPort;
29mod fragment;
30pub use fragment::DontFragment;
31mod icmp;
32pub use icmp::Icmp;
33mod lifetime;
34pub use lifetime::Lifetime;
35mod reservation;
36pub use reservation::ReservationToken;
37mod transport;
38pub use transport::RequestedTransport;
39
40pub(super) fn attributes_init() {
41    #[cfg(feature = "std")]
42    {
43        use stun_types::prelude::*;
44
45        stun_types::attribute_display!(XorPeerAddress);
46        XorPeerAddress::TYPE.add_name("XorPeerAddress");
47        stun_types::attribute_display!(XorRelayedAddress);
48        XorRelayedAddress::TYPE.add_name("XorRelayedAddress");
49        stun_types::attribute_display!(ChannelNumber);
50        ChannelNumber::TYPE.add_name("ChannelNumber");
51        stun_types::attribute_display!(Data);
52        Data::TYPE.add_name("Data");
53        stun_types::attribute_display!(EvenPort);
54        EvenPort::TYPE.add_name("EvenPort");
55        stun_types::attribute_display!(DontFragment);
56        DontFragment::TYPE.add_name("DontFragment");
57        stun_types::attribute_display!(Lifetime);
58        Lifetime::TYPE.add_name("Lifetime");
59        stun_types::attribute_display!(ReservationToken);
60        ReservationToken::TYPE.add_name("ReservationToken");
61        stun_types::attribute_display!(RequestedTransport);
62        RequestedTransport::TYPE.add_name("RequestedTransport");
63        stun_types::attribute_display!(RequestedAddressFamily);
64        RequestedAddressFamily::TYPE.add_name("RequestedAddressFamily");
65        stun_types::attribute_display!(ConnectionId);
66        ConnectionId::TYPE.add_name("ConnectionId");
67        stun_types::attribute_display!(AdditionalAddressFamily);
68        AdditionalAddressFamily::TYPE.add_name("AdditionalAddressFamily");
69        stun_types::attribute_display!(AddressErrorCode);
70        AddressErrorCode::TYPE.add_name("AddressErrorCode");
71        stun_types::attribute_display!(Icmp);
72        Icmp::TYPE.add_name("Icmp");
73    }
74}