Enum ConnectionStatus

Source
pub enum ConnectionStatus {
    CookieRequesting {
        cookie_request_id: u64,
        packet: StatusPacketWithTime,
    },
    HandshakeSending {
        sent_nonce: Nonce,
        packet: StatusPacketWithTime,
    },
    NotConfirmed {
        sent_nonce: Nonce,
        received_nonce: Nonce,
        session_precomputed_key: PrecomputedKey,
        packet: StatusPacketWithTime,
    },
    Established {
        sent_nonce: Nonce,
        received_nonce: Nonce,
        session_precomputed_key: PrecomputedKey,
    },
}
Expand description

Status of crypto connection.

Initial state is CookieRequesting. In this status we send up to 8 CookieRequest packets every second and waiting for a CookieResponse packet. After receiving a CookieResponse packet we change the status to HandshakeSending in which we send up to 8 CryptoHandshake packets every second and waiting for CryptoHandshake packet from the other side. When we received CryptoHandshake packet we change the status to NotConfirmed and continue sending CryptoHandshake packets because we don’t know if the other side received our CryptoHandshake packet. Only after receiving first CryptoData packet we change status to Established and stop sending CryptoHandshake packets. In this status connection is considered as fully established.

It’s also possible that we received CryptoHandshake packet but didn’t create crypto connection yet. This means that we should skip first two states and use NotConfirmed state as initial. We can do it because CryptoHandshake contains Cookie that we can use to send our CryptoHandshake.

Variants§

§

CookieRequesting

We are sending cookie request packets and haven’t received cookie response yet.

Fields

§cookie_request_id: u64

ID used in the cookie request packets for this connection

§packet: StatusPacketWithTime

Packet that should be sent every second

§

HandshakeSending

We are sending handshake packets and haven’t received handshake from the other side yet.

Fields

§sent_nonce: Nonce

Nonce that should be used to encrypt outgoing packets

§packet: StatusPacketWithTime

Packet that should be sent every second

§

NotConfirmed

A handshake packet has been received from the other side but no encrypted packets. Continue sending handshake packets because we can’t know if the other side has received them.

Fields

§sent_nonce: Nonce

Nonce that should be used to encrypt outgoing packets

§received_nonce: Nonce

Nonce that should be used to decrypt incoming packets

§session_precomputed_key: PrecomputedKey

PrecomputedKey for this session that is used to encrypt and decrypt data packets

§packet: StatusPacketWithTime

Packet that should be sent every second

§

Established

A valid encrypted packet has been received from the other side. Connection is fully established.

Fields

§sent_nonce: Nonce

Nonce that should be used to encrypt outgoing packets

§received_nonce: Nonce

Nonce that should be used to decrypt incoming packets

§session_precomputed_key: PrecomputedKey

PrecomputedKey for this session that is used to encrypt and decrypt data packets

Trait Implementations§

Source§

impl Clone for ConnectionStatus

Source§

fn clone(&self) -> ConnectionStatus

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 ConnectionStatus

Source§

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

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

impl PartialEq for ConnectionStatus

Source§

fn eq(&self, other: &ConnectionStatus) -> 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 Eq for ConnectionStatus

Source§

impl StructuralPartialEq for ConnectionStatus

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