Struct PackedNode

Source
pub struct PackedNode {
    pub saddr: SocketAddr,
    pub pk: PublicKey,
}
Expand description

PackedNode format is a way to store the node info in a small yet easy to parse format.

It is used in many places in Tox, e.g. in DHT Send nodes.

To store more than one node, simply append another on to the previous one:

[packed node 1][packed node 2][...]

Serialized Packed node:

LengthContent
1Ip type (v4 or v6)
4 or 16IPv4 or IPv6 address
2port
32node ID

Size of serialized PackedNode is 39 bytes with IPv4 node info, or 51 with IPv6 node info.

DHT module should use only UDP variants of Ip type, given that DHT runs solely on the UDP.

Fields§

§saddr: SocketAddr

Socket addr of node.

§pk: PublicKey

Public Key of the node.

Implementations§

Source§

impl PackedNode

Source

pub fn new(saddr: SocketAddr, pk: &PublicKey) -> Self

Create new PackedNode. The IPv6 address will be converted to IPv4 if it’s IPv4-compatible or IPv4-mapped.

Source

pub fn to_tcp_bytes<'a>( &self, buf: (&'a mut [u8], usize), ) -> Result<(&'a mut [u8], usize), GenError>

to_bytes for TCP

Source

pub fn from_tcp_bytes( i: &[u8], ) -> IResult<&[u8], PackedNode, (&[u8], ErrorKind)>

from_bytes for TCP.

Source

pub fn ip_type(&self) -> u8

Get an IP type from the PackedNode.

Source

pub fn ip(&self) -> IpAddr

Get an IP address from the PackedNode.

Source

pub fn socket_addr(&self) -> SocketAddr

Get a Socket address from the PackedNode.

Trait Implementations§

Source§

impl Clone for PackedNode

Source§

fn clone(&self) -> PackedNode

Returns a copy of the value. Read more
1.0.0 · Source§

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

Performs copy-assignment from source. Read more
Source§

impl Debug for PackedNode

Source§

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

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

impl FromBytes for PackedNode

Deserialize bytes into PackedNode. Returns Error if deseralizing failed.

Can fail if:

  • length is too short for given Ip Type
  • PK can’t be parsed

Blindly trusts that provided Ip Type matches - i.e. if there are provided 51 bytes (which is length of PackedNode that contains IPv6), and Ip Type says that it’s actually IPv4, bytes will be parsed as if that was an IPv4 address.

Source§

fn from_bytes(i: &[u8]) -> IResult<&[u8], PackedNode, (&[u8], ErrorKind)>

Deserialize struct using nom from raw bytes
Source§

impl PartialEq for PackedNode

Source§

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

Tests for self and other values to be equal, and is used by ==.
1.0.0 · Source§

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

Tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason.
Source§

impl ToBytes for PackedNode

Source§

fn to_bytes<'a>( &self, buf: (&'a mut [u8], usize), ) -> Result<(&'a mut [u8], usize), GenError>

Serialize struct into raw bytes using cookie_factory
Source§

impl Copy for PackedNode

Source§

impl Eq for PackedNode

Source§

impl StructuralPartialEq for PackedNode

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> 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, 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.