#stun-turn #attributes #stun

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

#140 in Network programming

Download history 34315/week @ 2025-11-10 35498/week @ 2025-11-17 41966/week @ 2025-11-24 43779/week @ 2025-12-01 37780/week @ 2025-12-08 37757/week @ 2025-12-15 39473/week @ 2025-12-22 38955/week @ 2025-12-29 45099/week @ 2026-01-05 42804/week @ 2026-01-12 49603/week @ 2026-01-19 47841/week @ 2026-01-26 46798/week @ 2026-02-02 44611/week @ 2026-02-09 42219/week @ 2026-02-16 51377/week @ 2026-02-23

192,837 downloads per month
Used in 13 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
~66K SLoC