ChannelData

Struct ChannelData 

Source
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 5

The 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: u16

channel number.

Implementations§

Source§

impl ChannelData<'_>

Source

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);
Source

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>

Source§

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

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

impl<'a> TryFrom<&'a [u8]> for ChannelData<'a>

Source§

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[..]);
Source§

type Error = StunError

The type returned in the event of a conversion error.

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> 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> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
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> IntoEither for T

Source§

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 more
Source§

fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
where F: FnOnce(&Self) -> bool,

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
Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
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.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<A, B, T> HttpServerConnExec<A, B> for T
where B: Body,