pub struct ChannelData<'a> {
pub bytes: &'a [u8],
pub number: u16,
}Expand description
The ChannelData Message
The ChannelData message is used to carry application data between the
client and the server.
It has the following format:
0 1 2 3
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| Channel Number | Length |
+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+-+
| |
/ Application Data /
/ /
| |
| +-------------------------------+
| |
+-------------------------------+
Figure 5The Channel Number field specifies the number of the channel on which the data is traveling, and thus, the address of the peer that is sending or is to receive the data.
The Length field specifies the length in bytes of the application data field (i.e., it does not include the size of the ChannelData header). Note that 0 is a valid length.
The Application Data field carries the data the client is trying to send to the peer, or that the peer is sending to the client.
Fields§
§bytes: &'a [u8]channnel data bytes.
number: u16channel number.
Implementations§
Source§impl ChannelData<'_>
impl ChannelData<'_>
Sourcepub fn message_size(bytes: &[u8], is_tcp: bool) -> Result<usize, StunError>
pub fn message_size(bytes: &[u8], is_tcp: bool) -> Result<usize, StunError>
§Test
use bytes::{BufMut, BytesMut};
use std::convert::TryFrom;
use turn_server::stun::*;
let data: [u8; 4] = [0x40, 0x00, 0x00, 0x40];
let mut bytes = BytesMut::with_capacity(1500);
ChannelData {
number: 16384,
bytes: &data[..],
}
.encode(&mut bytes);
let size = ChannelData::message_size(&bytes[..], false).unwrap();
assert_eq!(size, 8);Sourcepub fn encode(self, bytes: &mut BytesMut)
pub fn encode(self, bytes: &mut BytesMut)
§Test
use bytes::{BufMut, BytesMut};
use std::convert::TryFrom;
use turn_server::stun::*;
let data: [u8; 4] = [0x40, 0x00, 0x00, 0x40];
let mut bytes = BytesMut::with_capacity(1500);
ChannelData {
number: 16384,
bytes: &data[..],
}
.encode(&mut bytes);
let ret = ChannelData::try_from(&bytes[..]).unwrap();
assert_eq!(ret.number, 16384);
assert_eq!(ret.bytes, &data[..]);Trait Implementations§
Source§impl<'a> Debug for ChannelData<'a>
impl<'a> Debug for ChannelData<'a>
Source§impl<'a> TryFrom<&'a [u8]> for ChannelData<'a>
impl<'a> TryFrom<&'a [u8]> for ChannelData<'a>
Source§fn try_from(bytes: &'a [u8]) -> Result<Self, Self::Error>
fn try_from(bytes: &'a [u8]) -> Result<Self, Self::Error>
§Test
use bytes::{BufMut, BytesMut};
use std::convert::TryFrom;
use turn_server::stun::*;
let data: [u8; 4] = [0x40, 0x00, 0x00, 0x40];
let mut bytes = BytesMut::with_capacity(1500);
ChannelData {
number: 16384,
bytes: &data[..],
}
.encode(&mut bytes);
let ret = ChannelData::try_from(&bytes[..]).unwrap();
assert_eq!(ret.number, 16384);
assert_eq!(ret.bytes, &data[..]);Auto Trait Implementations§
impl<'a> Freeze for ChannelData<'a>
impl<'a> RefUnwindSafe for ChannelData<'a>
impl<'a> Send for ChannelData<'a>
impl<'a> Sync for ChannelData<'a>
impl<'a> Unpin for ChannelData<'a>
impl<'a> UnwindSafe for ChannelData<'a>
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
Source§impl<T> Instrument for T
impl<T> Instrument for T
Source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
Source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
Converts
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more