#stun #extension #attributes #error #turn #message

stun_codec

Encoders and decoders for STUN (RFC 5389) and its extensions

22 releases

0.4.0 May 6, 2025
0.3.5 Apr 3, 2024
0.3.4 Oct 23, 2023
0.3.2 Jun 5, 2023
0.1.10 Sep 17, 2018

#80 in Network programming

Download history 15861/week @ 2025-01-31 17327/week @ 2025-02-07 15871/week @ 2025-02-14 12791/week @ 2025-02-21 17706/week @ 2025-02-28 13203/week @ 2025-03-07 12312/week @ 2025-03-14 9916/week @ 2025-03-21 19078/week @ 2025-03-28 13928/week @ 2025-04-04 15418/week @ 2025-04-11 17920/week @ 2025-04-18 17603/week @ 2025-04-25 12486/week @ 2025-05-02 21239/week @ 2025-05-09 12107/week @ 2025-05-16

64,515 downloads per month
Used in 11 crates (9 directly)

MIT license

175KB
3.5K SLoC

stun_codec

stun_codec Documentation Actions Status License: MIT

Encoders and decoders for STUN (RFC 5389) and its extensions.

Documentation

Examples

use bytecodec::{DecodeExt, EncodeExt, Error};
use stun_codec::{Message, MessageClass, MessageDecoder, MessageEncoder, TransactionId};
use stun_codec::rfc5389::{attributes::Software, methods::BINDING, Attribute};

// Creates a message
let mut message = Message::new(MessageClass::Request, BINDING, TransactionId::new([3; 12]));
message.add_attribute(Attribute::Software(Software::new("foo".to_owned())?));

// Encodes the message
let mut encoder = MessageEncoder::new();
let bytes = encoder.encode_into_bytes(message.clone())?;
assert_eq!(
    bytes,
    [
        0, 1, 0, 8, 33, 18, 164, 66, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 3, 128, 34, 0, 3,
        102, 111, 111, 0
    ]
);

// Decodes the message
let mut decoder = MessageDecoder::<Attribute>::new();
let decoded = decoder.decode_from_bytes(&bytes)?.map_err(Error::from)?;
assert_eq!(decoded.class(), message.class());
assert_eq!(decoded.method(), message.method());
assert_eq!(decoded.transaction_id(), message.transaction_id());
assert!(decoded.attributes().eq(message.attributes()));

References

Dependencies

~3MB
~64K SLoC