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()));
Define your own attribute enum
By using define_attribute_enums!
macro,
you can easily define an enum that includes arbitrary attributes.
The following is an example taken from rusturn
crate:
#[macro_use] extern crate trackable; use stun_codec::define_attribute_enums; use stun_codec::rfc5389::attributes::*; use stun_codec::rfc5766::attributes::*; define_attribute_enums!( Attribute, AttributeDecoder, AttributeEncoder, [ // RFC 5389 MappedAddress, Username, MessageIntegrity, ErrorCode, UnknownAttributes, Realm, Nonce, XorMappedAddress, Software, AlternateServer, Fingerprint, // RFC 5766 ChannelNumber, Lifetime, XorPeerAddress, Data, XorRelayAddress, EvenPort, RequestedTransport, DontFragment, ReservationToken ] );
References
Modules
convert | Conversion traits. |
net | Socket address related components. |
rfc5245 | RFC 5245(ICE) specific components. |
rfc5389 | RFC 5389(STUN) specific components. |
rfc5766 | RFC 5766(TURN) specific components. |
rfc5780 | RFC 5780(NAT Behavior Discovery) 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 |
Message | STUN message. |
MessageDecoder |
|
MessageEncoder |
|
Method | STUN method. |
RawAttribute | An |
RawAttributeDecoder |
|
RawAttributeEncoder |
|
TransactionId | Transaction ID. |
Enums
MessageClass | The class of a message. |
Traits
Attribute | STUN attribute. |
Type Definitions
DecodedMessage | Message decoded by |