pub struct Versions { /* private fields */ }Expand description
A Versions message begins channel negotiation.
Every channel must begin by sending a Versions message. This message lists the link protocol versions that this Tor implementation supports.
Note that we should never actually send Versions cells using the usual channel cell encoding: Versions cells always use two-byte circuit IDs, whereas all the other cell types use four-byte circuit IDs [assuming a non-obsolete version is negotiated].
Implementations§
source§impl Versions
impl Versions
sourcepub fn new<B>(vs: B) -> Result<Self>
pub fn new<B>(vs: B) -> Result<Self>
Construct a new Versions message using a provided list of link protocols.
Returns an error if the list of versions is too long.
sourcepub fn encode_for_handshake(self) -> EncodeResult<Vec<u8>>
pub fn encode_for_handshake(self) -> EncodeResult<Vec<u8>>
Encode this VERSIONS cell in the manner expected for a handshake.
(That’s different from a standard cell encoding, since we have not negotiated versions yet, and so our circuit-ID length is an obsolete 2 bytes).
Return the best (numerically highest) link protocol that is shared by this versions cell and my_protos.
Trait Implementations§
source§impl Body for Versions
impl Body for Versions
source§fn encode_onto<W: Writer + ?Sized>(self, w: &mut W) -> EncodeResult<()>
fn encode_onto<W: Writer + ?Sized>(self, w: &mut W) -> EncodeResult<()>
w. Read moresource§fn decode_from_reader(r: &mut Reader<'_>) -> Result<Self>
fn decode_from_reader(r: &mut Reader<'_>) -> Result<Self>
source§impl ChanMsg for Versions
impl ChanMsg for Versions
source§fn encode_onto<W: Writer + ?Sized>(self, w: &mut W) -> EncodeResult<()>
fn encode_onto<W: Writer + ?Sized>(self, w: &mut W) -> EncodeResult<()>
source§impl From<Versions> for AnyChanMsg
impl From<Versions> for AnyChanMsg
source§fn from(m: Versions) -> AnyChanMsg
fn from(m: Versions) -> AnyChanMsg
source§impl From<Versions> for AnyChanCell
impl From<Versions> for AnyChanCell
source§fn from(body: Versions) -> AnyChanCell
fn from(body: Versions) -> AnyChanCell
Auto Trait Implementations§
impl Freeze for Versions
impl RefUnwindSafe for Versions
impl Send for Versions
impl Sync for Versions
impl Unpin for Versions
impl UnwindSafe for Versions
Blanket Implementations§
source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
source§unsafe fn clone_to_uninit(&self, dst: *mut T)
unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit)source§impl<T> Instrument for T
impl<T> Instrument for T
source§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
source§fn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
source§impl<T> IntoEither for T
impl<T> IntoEither for T
source§fn into_either(self, into_left: bool) -> Either<Self, Self>
fn into_either(self, into_left: bool) -> Either<Self, Self>
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 moresource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self>
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