#codec #stun #rfc #attributes #decoder #encoder #transaction-id

stun_codec

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

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

#89 in Encoding

Download history 16311/week @ 2024-07-02 18364/week @ 2024-07-09 17250/week @ 2024-07-16 19818/week @ 2024-07-23 15647/week @ 2024-07-30 19653/week @ 2024-08-06 15225/week @ 2024-08-13 16316/week @ 2024-08-20 14513/week @ 2024-08-27 18537/week @ 2024-09-03 13689/week @ 2024-09-10 14351/week @ 2024-09-17 14248/week @ 2024-09-24 15821/week @ 2024-10-01 19595/week @ 2024-10-08 16504/week @ 2024-10-15

68,116 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

~2.5MB
~55K SLoC