Skip to main content

PexMessage

Enum PexMessage 

Source
pub enum PexMessage {
    PexHandshake {
        version: u32,
        network_id: String,
        interval: u32,
        flags: Vec<String>,
    },
    PexSnapshot {
        peers: Vec<PeerEntry>,
    },
    PexDelta {
        added: Vec<PeerEntry>,
        dropped: Vec<String>,
    },
    PexError {
        code: u16,
        message: String,
    },
}
Expand description

A PEX protocol message — one of the four type-tagged shapes (SPEC §4). The type tag and field names are the frozen wire contract.

Variants§

§

PexHandshake

The first PEX message a participant sends on a link, in each direction, before anything else (SPEC §4.2). Declares the wire version, the sender’s network_id, its minimum send interval (seconds), and its own capability flags.

Fields

§version: u32

The PEX wire version the sender speaks (this crate: 1).

§network_id: String

The sender’s network. MUST match the receiver’s.

§interval: u32

Seconds — the sender’s declared minimum spacing between its own data messages. MUST be within [30, 3600]; a receiver clamps out-of-range values for enforcement.

§flags: Vec<String>

The sender’s own capability flags (optional; defaults to empty).

§

PexSnapshot

The first data message in a direction — a fuller, capped picture of the sender’s first-hand known-peer set, so a fresh link warms up in one message (SPEC §4.3). Exactly one per direction per link.

Fields

§peers: Vec<PeerEntry>

The sender’s first-hand peers (MAY be empty; at most PEX_MAX_SNAPSHOT, freshest-first).

§

PexDelta

The periodic message: what changed in the sender’s first-hand set relative to what this link has already been told (SPEC §4.4). A delta with both arrays empty MUST NOT be sent.

Fields

§added: Vec<PeerEntry>

Newly-known entries, or already-told entries whose advertised content changed (an update replaces the previous entry). At most PEX_MAX_ADDED.

§dropped: Vec<String>

<64hex> peer ids the sender no longer considers good (SPEC §8.3). At most PEX_MAX_DROPPED. Advisory — a receiver never deletes a first-hand-verified peer on it.

§

PexError

The advisory error envelope, either direction (SPEC §4.5). Best-effort; never requires a reply.

Fields

§code: u16

A stable error code (SPEC §4.5 table).

§message: String

A human-readable message.

Implementations§

Source§

impl PexMessage

Source

pub fn encode(&self) -> Vec<u8>

Serialize as a u32 big-endian length prefix + JSON body — the byte-stream framing (§4.1).

Source

pub async fn decode<R: AsyncRead + Unpin>(r: &mut R) -> Result<Self>

Read + decode one framed message from r, bounded by PEX_MAX_FRAME. A length prefix over the bound errors before allocating or reading the body (SPEC §4.1, §7.2).

Source

pub fn to_json(&self) -> String

The bare JSON object as a string — the relay WebSocket text-frame form (§4.1, §10.2).

Source

pub fn to_json_bytes(&self) -> Vec<u8>

The bare JSON object as bytes.

Source

pub fn from_json(s: &str) -> Result<Self, Error>

Parse a bare JSON object (the relay WebSocket text-frame form). An Err here is a PEX_BAD_MESSAGE (SPEC §7.3) the caller strikes.

Source

pub fn type_tag(&self) -> &'static str

The message’s type tag string ("pex_handshake" | "pex_snapshot" | "pex_delta" | "pex_error").

Trait Implementations§

Source§

impl Clone for PexMessage

Source§

fn clone(&self) -> PexMessage

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 PexMessage

Source§

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

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

impl<'de> Deserialize<'de> for PexMessage

Source§

fn deserialize<__D>(__deserializer: __D) -> Result<Self, __D::Error>
where __D: Deserializer<'de>,

Deserialize this value from the given Serde deserializer. Read more
Source§

impl Eq for PexMessage

Source§

impl PartialEq for PexMessage

Source§

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

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

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

Inequality operator !=. Read more
Source§

impl Serialize for PexMessage

Source§

fn serialize<__S>(&self, __serializer: __S) -> Result<__S::Ok, __S::Error>
where __S: Serializer,

Serialize this value into the given Serde serializer. Read more
Source§

impl StructuralPartialEq for PexMessage

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<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
where ST: ?Sized, DT: ?Sized,

Source§

impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
where ST: ?Sized, DT: ?Sized,

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> DeserializeOwned for T
where T: for<'de> Deserialize<'de>,

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> Read<Exclusive, BecauseExclusive> for T
where T: ?Sized,

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, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

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

fn try_from(value: U) -> Result<T, !>

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