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: MessageTypeThe message class and method — request, response or indication, and which method.
length: u32The attribute section’s length in bytes, header excluded.
transaction_id: TransactionIdThe transaction id, echoed by the responder.
attributes: AttributesThe message’s attributes.
raw: Vec<u8>The encoded message. Attributes whose value covers the message are computed over this.
Implementations§
Source§impl Message
impl Message
Sourcepub fn marshal_binary(&self) -> Result<Vec<u8>>
pub fn marshal_binary(&self) -> Result<Vec<u8>>
Marshal_binary implements the encoding.BinaryMarshaler interface.
Sourcepub fn unmarshal_binary(&mut self, data: &[u8]) -> Result<()>
pub fn unmarshal_binary(&mut self, data: &[u8]) -> Result<()>
Unmarshal_binary implements the encoding.BinaryUnmarshaler interface.
Sourcepub fn new_transaction_id(&mut self) -> Result<()>
pub fn new_transaction_id(&mut self) -> Result<()>
NewTransactionID sets m.TransactionID to random value from crypto/rand and returns error if any.
Sourcepub fn add(&mut self, t: AttrType, v: &[u8])
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.
Sourcepub fn write_length(&mut self)
pub fn write_length(&mut self)
WriteLength writes m.Length to m.Raw.
Sourcepub fn write_header(&mut self)
pub fn write_header(&mut self)
WriteHeader writes header to underlying buffer. Not goroutine-safe.
Sourcepub fn write_transaction_id(&mut self)
pub fn write_transaction_id(&mut self)
WriteTransactionID writes m.TransactionID to m.Raw.
Sourcepub fn write_attributes(&mut self)
pub fn write_attributes(&mut self)
WriteAttributes encodes all m.Attributes to m.
Sourcepub fn write_type(&mut self)
pub fn write_type(&mut self)
WriteType writes m.Type to m.Raw.
Sourcepub fn set_type(&mut self, t: MessageType)
pub fn set_type(&mut self, t: MessageType)
SetType sets m.Type and writes it to m.Raw.
Sourcepub fn write_to<W: Write>(&self, writer: &mut W) -> Result<usize>
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.
Sourcepub fn read_from<R: Read>(&mut self, reader: &mut R) -> Result<usize>
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.
Sourcepub fn write(&mut self, t_buf: &[u8]) -> Result<usize>
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.
Sourcepub fn clone_to(&self, b: &mut Message) -> Result<()>
pub fn clone_to(&self, b: &mut Message) -> Result<()>
CloneTo clones m to b securing any further m mutations.
Sourcepub fn contains(&self, t: AttrType) -> bool
pub fn contains(&self, t: AttrType) -> bool
Contains return true if message contain t attribute.
Sourcepub fn get(&self, t: AttrType) -> Result<Vec<u8>>
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.
Sourcepub fn build(&mut self, setters: &[Box<dyn Setter>]) -> Result<()>
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());Trait Implementations§
Source§impl Protocol<TransportMessage<BytesMut>, Message, ()> for Client
impl Protocol<TransportMessage<BytesMut>, Message, ()> for Client
Source§fn poll_write(&mut self) -> Option<Self::Wout>
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