Struct tor_socksproto::handshake::client::SocksClientHandshake
source · pub struct SocksClientHandshake {
request: SocksRequest,
state: State,
reply: Option<SocksReply>,
}
client-handshake
only.Expand description
The client (initiator) side of a SOCKS handshake.
Fields§
§request: SocksRequest
The request that we are currently trying to negotiate with the proxy.
state: State
Our current state in negotiating that request.
reply: Option<SocksReply>
If present, the return message that we received from the proxy.
Implementations§
source§impl SocksClientHandshake
impl SocksClientHandshake
sourcepub fn new(request: SocksRequest) -> Self
pub fn new(request: SocksRequest) -> Self
Construct a new SocksClientHandshake
that will attempt to negotiate
with a peer using request
.
sourcepub fn into_reply(self) -> Option<SocksReply>
pub fn into_reply(self) -> Option<SocksReply>
Consume this handshake’s state; if it finished successfully,
return the SocksReply
that we got from the proxy..
sourcepub fn handshake(&mut self, input: &[u8]) -> TResult<Action>
pub fn handshake(&mut self, input: &[u8]) -> TResult<Action>
Try to advance a SocksProxyHandshake, given some proxy input in
input
.
If there isn’t enough input, gives a Truncated
.
In this case, the caller must retain the input, and pass it to a later
invocation of handshake
. Input should only be regarded as consumed when
the Action::drain
field is nonzero.
Other errors (besides Truncated
) indicate a failure.
On success, return an Action describing what to tell the proxy, and how much of its input to consume.
sourcefn send_v5_initial(&mut self) -> Result<Action>
fn send_v5_initial(&mut self) -> Result<Action>
Send our initial socks5 message (which negotiates our authentication methods).
sourcefn handle_v5_auth(&mut self, input: &[u8]) -> Result<Action>
fn handle_v5_auth(&mut self, input: &[u8]) -> Result<Action>
Try to handle a socks5 reply telling us what authentication method to use, and reply as appropriate.
sourcefn generate_v5_username_auth(&self) -> Result<Vec<u8>>
fn generate_v5_username_auth(&self) -> Result<Vec<u8>>
Return a message to perform username/password authentication.
sourcefn handle_v5_username_ack(&mut self, input: &[u8]) -> Result<Action>
fn handle_v5_username_ack(&mut self, input: &[u8]) -> Result<Action>
Try to handle a reply from the socks5 proxy to acknowledge our username/password authentication, and reply as appropriate.
sourcefn generate_v5_command(&self) -> Result<Vec<u8>>
fn generate_v5_command(&self) -> Result<Vec<u8>>
Return a message to encode our final socks5 request.
(This can be done either in response getting an ACK for our authentication, or in response to being told that we don’t need to authenticate.)
sourcefn handle_v5_final(&mut self, input: &[u8]) -> Result<Action>
fn handle_v5_final(&mut self, input: &[u8]) -> Result<Action>
Handle a final socks5 reply.
Trait Implementations§
source§impl Clone for SocksClientHandshake
impl Clone for SocksClientHandshake
source§fn clone(&self) -> SocksClientHandshake
fn clone(&self) -> SocksClientHandshake
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moreAuto Trait Implementations§
impl Freeze for SocksClientHandshake
impl RefUnwindSafe for SocksClientHandshake
impl Send for SocksClientHandshake
impl Sync for SocksClientHandshake
impl Unpin for SocksClientHandshake
impl UnwindSafe for SocksClientHandshake
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
§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
§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