Crate stun_codec[][src]

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

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

Modules

convert

Conversion traits.

net

Socket address related components.

rfc5389

RFC 5389(STUN) specific components.

rfc5766

RFC 5766(TURN) specific components.

Macros

define_attribute_enums

Defines an aggregated attribute type and its decoder and encoder.

Structs

AttributeType

Attribute type.

BrokenMessage

STUN message of which MessageDecoder could not decode the attribute part.

Message

STUN message.

MessageDecoder

Message decoder.

MessageEncoder

Message encoder.

Method

STUN method.

RawAttribute

An Attribute implementation that has raw value bytes.

RawAttributeDecoder

RawAttribute decoder.

RawAttributeEncoder

RawAttribute encoder.

TransactionId

Transaction ID.

Enums

MessageClass

The class of a message.

Traits

Attribute

STUN attribute.

Type Definitions

DecodedMessage

Message decoded by MessageDecoder.