Skip to main content

Message

Struct Message 

Source
pub struct Message {
    pub typ: MessageType,
    pub length: u32,
    pub transaction_id: TransactionId,
    pub attributes: Attributes,
    pub raw: Vec<u8>,
}
Expand description

A STUN message: type, transaction id, and attributes, plus the encoded bytes.

Fields§

§typ: MessageType

The message class and method — request, response or indication, and which method.

§length: u32

The attribute section’s length in bytes, header excluded.

§transaction_id: TransactionId

The transaction id, echoed by the responder.

§attributes: Attributes

The message’s attributes.

§raw: Vec<u8>

The encoded message. Attributes whose value covers the message are computed over this.

Implementations§

Source§

impl Message

Source

pub fn new() -> Self

New returns *Message with pre-allocated Raw.

Source

pub fn marshal_binary(&self) -> Result<Vec<u8>>

Marshal_binary implements the encoding.BinaryMarshaler interface.

Source

pub fn unmarshal_binary(&mut self, data: &[u8]) -> Result<()>

Unmarshal_binary implements the encoding.BinaryUnmarshaler interface.

Source

pub fn new_transaction_id(&mut self) -> Result<()>

NewTransactionID sets m.TransactionID to random value from crypto/rand and returns error if any.

Source

pub fn reset(&mut self)

Reset resets Message, attributes and underlying buffer length.

Source

pub fn add(&mut self, t: AttrType, v: &[u8])

Add appends new attribute to message. Not goroutine-safe.

Value of attribute is copied to internal buffer so it is safe to reuse v.

Source

pub fn write_length(&mut self)

WriteLength writes m.Length to m.Raw.

Source

pub fn write_header(&mut self)

WriteHeader writes header to underlying buffer. Not goroutine-safe.

Source

pub fn write_transaction_id(&mut self)

WriteTransactionID writes m.TransactionID to m.Raw.

Source

pub fn write_attributes(&mut self)

WriteAttributes encodes all m.Attributes to m.

Source

pub fn write_type(&mut self)

WriteType writes m.Type to m.Raw.

Source

pub fn set_type(&mut self, t: MessageType)

SetType sets m.Type and writes it to m.Raw.

Source

pub fn encode(&mut self)

Encode re-encodes message into m.Raw.

Source

pub fn decode(&mut self) -> Result<()>

Decode decodes m.Raw into m.

Source

pub fn write_to<W: Write>(&self, writer: &mut W) -> Result<usize>

WriteTo implements WriterTo via calling Write(m.Raw) on w and returning call result.

Source

pub fn read_from<R: Read>(&mut self, reader: &mut R) -> Result<usize>

ReadFrom implements ReaderFrom. Reads message from r into m.Raw, Decodes it and return error if any. If m.Raw is too small, will return ErrUnexpectedEOF, ErrUnexpectedHeaderEOF or *DecodeErr.

Can return *DecodeErr while decoding too.

Source

pub fn write(&mut self, t_buf: &[u8]) -> Result<usize>

Write decodes message and return error if any.

Any error is unrecoverable, but message could be partially decoded.

Source

pub fn clone_to(&self, b: &mut Message) -> Result<()>

CloneTo clones m to b securing any further m mutations.

Source

pub fn contains(&self, t: AttrType) -> bool

Contains return true if message contain t attribute.

Source

pub fn get(&self, t: AttrType) -> Result<Vec<u8>>

Get returns byte slice that represents attribute value, if there is no attribute with such type, ErrAttributeNotFound is returned.

Source

pub fn build(&mut self, setters: &[Box<dyn Setter>]) -> Result<()>

Resets the message and applies setters to it in order, returning on the first error.

Each setter writes its attribute into the message as it is applied, so the encoded raw bytes are complete once this returns. Order matters for setters that cover the attributes before them — a MessageIntegrity or FINGERPRINT therefore goes last.

use rtc_stun::attributes::ATTR_SOFTWARE;
use rtc_stun::message::{BINDING_REQUEST, Message, TransactionId};
use rtc_stun::textattrs::TextAttribute;

let mut m = Message::new();
m.build(&[
    Box::new(BINDING_REQUEST),
    Box::new(TransactionId::new()),
    Box::new(TextAttribute::new(ATTR_SOFTWARE, "webrtc-rs".to_owned())),
])?;

assert!(!m.raw.is_empty());
Source

pub fn check<C: Checker>(&self, checkers: &[C]) -> Result<()>

Check applies checkers to message in batch, returning on first error.

Source

pub fn parse<G: Getter>(&self, getters: &mut [G]) -> Result<()>

Parse applies getters to message in batch, returning on first error.

Trait Implementations§

Source§

impl Clone for Message

Source§

fn clone(&self) -> Message

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for Message

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Message

Source§

fn default() -> Message

Returns the “default value” for a type. Read more
Source§

impl Display for Message

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl PartialEq for Message

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl Protocol<TransportMessage<BytesMut>, Message, ()> for Client

Source§

fn poll_write(&mut self) -> Option<Self::Wout>

Returns packets to transmit

It should be polled for transmit after:

  • the application performed some I/O
  • a call was made to handle_read
  • a call was made to handle_write
  • a call was made to handle_timeout
Source§

type Rout = ()

Output read message type Read more
Source§

type Wout = TransportMessage<BytesMut>

Output write message type Read more
Source§

type Eout = StunEvent

Output event type Read more
Source§

type Error = Error

Error type for protocol operations
Source§

type Time = Instant

Time/Instant type for timeout handling Read more
Source§

fn handle_read(&mut self, msg: TaggedBytesMut) -> Result<()>

Handle an incoming read message. Read more
Source§

fn poll_read(&mut self) -> Option<Self::Rout>

Poll for a processed read message. Read more
Source§

fn handle_write(&mut self, m: Message) -> Result<()>

Handle an outgoing write message. Read more
Source§

fn poll_event(&mut self) -> Option<Self::Eout>

Poll for a generated event. Read more
Source§

fn poll_timeout(&mut self) -> Option<Self::Time>

Poll for the next timeout deadline. Read more
Source§

fn handle_timeout(&mut self, now: Instant) -> Result<()>

Handle a timeout event. Read more
Source§

fn close(&mut self) -> Result<()>

Close the protocol. Read more
Source§

fn handle_event(&mut self, _evt: Ein) -> Result<(), Self::Error>

Handle a custom event. Read more
Source§

impl Setter for Message

Source§

fn add_to(&self, b: &mut Message) -> Result<()>

Encodes this value into m as an attribute. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T> ToString for T
where T: Display + ?Sized,

Source§

fn to_string(&self) -> String

Converts the given value to a String. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.