pub enum Version {
    V1,
    V1Lazy,
}
Expand description

Supported multistream-select versions.

Variants§

§

V1

Version 1 of the multistream-select protocol. See 1 and 2.

§

V1Lazy

A “lazy” variant of version 1 that is identical on the wire but whereby the dialer delays flushing protocol negotiation data in order to combine it with initial application data, thus performing 0-RTT negotiation.

This strategy is only applicable for the node with the role of “dialer” in the negotiation and only if the dialer supports just a single application protocol. In that case the dialer immedidately “settles” on that protocol, buffering the negotiation messages to be sent with the first round of application protocol data (or an attempt is made to read from the Negotiated I/O stream).

A listener will behave identically to V1. This ensures interoperability with V1. Notably, it will immediately send the multistream header as well as the protocol confirmation, resulting in multiple frames being sent on the underlying transport. Nevertheless, if the listener supports the protocol that the dialer optimistically settled on, it can be a 0-RTT negotiation.

Note: V1Lazy is specific to rust-libp2p. The wire protocol is identical to V1 and generally interoperable with peers only supporting V1. Nevertheless, there is a pitfall that is rarely encountered: When nesting multiple protocol negotiations, the listener should either be known to support all of the dialer’s optimistically chosen protocols or there is must be no intermediate protocol without a payload and none of the protocol payloads must have the potential for being mistaken for a multistream-select protocol message. This avoids rare edge-cases whereby the listener may not recognize upgrade boundaries and erroneously process a request despite not supporting one of the intermediate protocols that the dialer committed to. See 1 and 2.

Trait Implementations§

Returns a copy of the value. Read more
Performs copy-assignment from source. Read more
Formats the value using the given formatter. Read more
Returns the “default value” for a type. Read more
This method tests for self and other values to be equal, and is used by ==. Read more
This method tests for !=. The default implementation is almost always sufficient, and should not be overridden without very good reason. Read more

Auto Trait Implementations§

Blanket Implementations§

Gets the TypeId of self. Read more
Immutably borrows from an owned value. Read more
Mutably borrows from an owned value. Read more

Returns the argument unchanged.

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Should always be Self
The resulting type after obtaining ownership.
Creates owned data from borrowed data, usually by cloning. Read more
Uses borrowed data to replace owned data, usually by cloning. Read more
The type returned in the event of a conversion error.
Performs the conversion.
The type returned in the event of a conversion error.
Performs the conversion.