21 releases

0.3.5 Apr 3, 2024
0.3.4 Oct 23, 2023
0.3.3 Sep 19, 2023
0.3.2 Jun 5, 2023
0.1.10 Sep 17, 2018

#84 in Network programming

Download history 11396/week @ 2024-12-08 13406/week @ 2024-12-15 7583/week @ 2024-12-22 11381/week @ 2024-12-29 12804/week @ 2025-01-05 15144/week @ 2025-01-12 13004/week @ 2025-01-19 19283/week @ 2025-01-26 15150/week @ 2025-02-02 18305/week @ 2025-02-09 13949/week @ 2025-02-16 14492/week @ 2025-02-23 17719/week @ 2025-03-02 12278/week @ 2025-03-09 10187/week @ 2025-03-16 10841/week @ 2025-03-23

52,335 downloads per month
Used in 11 crates (9 directly)

MIT license

175KB
3.5K SLoC

stun_codec

stun_codec Documentation Actions Status Coverage 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