Struct tor_circmgr::isolation::IsolationToken
source · [−]pub struct IsolationToken(_);
Expand description
A token used to isolate unrelated streams on different circuits.
When two streams are associated with different isolation tokens, they can never share the same circuit.
Tokens created with IsolationToken::new
are all different from
one another, and different from tokens created with
IsolationToken::no_isolation
. However, tokens created with
IsolationToken::no_isolation
are all equal to one another.
Examples
Creating distinct isolation tokens:
let token_1 = IsolationToken::new();
let token_2 = IsolationToken::new();
assert_ne!(token_1, token_2);
// Demonstrating the behaviour of no_isolation() tokens:
assert_ne!(token_1, IsolationToken::no_isolation());
assert_eq!(IsolationToken::no_isolation(), IsolationToken::no_isolation());
Using an isolation token to route streams differently over the Tor network:
use arti_client::StreamPrefs;
let token_1 = IsolationToken::new();
let token_2 = IsolationToken::new();
let mut prefs_1 = StreamPrefs::new();
prefs_1.set_isolation(token_1);
let mut prefs_2 = StreamPrefs::new();
prefs_2.set_isolation(token_2);
// These two connections will come from different source IP addresses.
tor_client.connect(("example.com", 80), Some(prefs_1)).await?;
tor_client.connect(("example.com", 80), Some(prefs_2)).await?;
Implementations
sourceimpl IsolationToken
impl IsolationToken
sourcepub fn new() -> Self
pub fn new() -> Self
Create a new IsolationToken, unequal to any other token this function has created.
Panics
Panics if we have already allocated 2^64 isolation tokens: in that case, we have exhausted the space of possible tokens, and it is no longer possible to ensure isolation.
sourcepub fn no_isolation() -> Self
pub fn no_isolation() -> Self
Create a new IsolationToken equal to every other token created
with this function, but different from all tokens created with
new
.
This can be used when no isolation is wanted for some streams.
Trait Implementations
sourceimpl Clone for IsolationToken
impl Clone for IsolationToken
sourcefn clone(&self) -> IsolationToken
fn clone(&self) -> IsolationToken
Returns a copy of the value. Read more
1.0.0 · sourcefn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from source
. Read more
sourceimpl Debug for IsolationToken
impl Debug for IsolationToken
sourceimpl IsolationHelper for IsolationToken
impl IsolationHelper for IsolationToken
sourcefn compatible_same_type(&self, other: &Self) -> bool
fn compatible_same_type(&self, other: &Self) -> bool
Returns whether self and other are compatible. Read more
sourcefn join_same_type(&self, other: &Self) -> Option<Self>
fn join_same_type(&self, other: &Self) -> Option<Self>
Join self and other into the intersection of what they allows. Read more
sourceimpl Ord for IsolationToken
impl Ord for IsolationToken
sourceimpl PartialEq<IsolationToken> for IsolationToken
impl PartialEq<IsolationToken> for IsolationToken
sourcefn eq(&self, other: &IsolationToken) -> bool
fn eq(&self, other: &IsolationToken) -> bool
This method tests for self
and other
values to be equal, and is used
by ==
. Read more
sourcefn ne(&self, other: &IsolationToken) -> bool
fn ne(&self, other: &IsolationToken) -> bool
This method tests for !=
.
sourceimpl PartialOrd<IsolationToken> for IsolationToken
impl PartialOrd<IsolationToken> for IsolationToken
sourcefn partial_cmp(&self, other: &IsolationToken) -> Option<Ordering>
fn partial_cmp(&self, other: &IsolationToken) -> Option<Ordering>
This method returns an ordering between self
and other
values if one exists. Read more
1.0.0 · sourcefn lt(&self, other: &Rhs) -> bool
fn lt(&self, other: &Rhs) -> bool
This method tests less than (for self
and other
) and is used by the <
operator. Read more
1.0.0 · sourcefn le(&self, other: &Rhs) -> bool
fn le(&self, other: &Rhs) -> bool
This method tests less than or equal to (for self
and other
) and is used by the <=
operator. Read more
impl Copy for IsolationToken
impl Eq for IsolationToken
impl StructuralEq for IsolationToken
impl StructuralPartialEq for IsolationToken
Auto Trait Implementations
impl RefUnwindSafe for IsolationToken
impl Send for IsolationToken
impl Sync for IsolationToken
impl Unpin for IsolationToken
impl UnwindSafe for IsolationToken
Blanket Implementations
sourceimpl<T> BorrowMut<T> for T where
T: ?Sized,
impl<T> BorrowMut<T> for T where
T: ?Sized,
const: unstable · sourcefn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more
sourceimpl<T> Downcast for T where
T: Any,
impl<T> Downcast for T where
T: Any,
sourcefn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
fn into_any(self: Box<T, Global>) -> Box<dyn Any + 'static, Global>
Convert Box<dyn Trait>
(where Trait: Downcast
) to Box<dyn Any>
. Box<dyn Any>
can
then be further downcast
into Box<ConcreteType>
where ConcreteType
implements Trait
. Read more
sourcefn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
fn into_any_rc(self: Rc<T>) -> Rc<dyn Any + 'static>
Convert Rc<Trait>
(where Trait: Downcast
) to Rc<Any>
. Rc<Any>
can then be
further downcast
into Rc<ConcreteType>
where ConcreteType
implements Trait
. Read more
sourcefn as_any(&self) -> &(dyn Any + 'static)
fn as_any(&self) -> &(dyn Any + 'static)
Convert &Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &Any
’s vtable from &Trait
’s. Read more
sourcefn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
fn as_any_mut(&mut self) -> &mut (dyn Any + 'static)
Convert &mut Trait
(where Trait: Downcast
) to &Any
. This is needed since Rust cannot
generate &mut Any
’s vtable from &mut Trait
’s. Read more
sourceimpl<T> DowncastSync for T where
T: Any + Send + Sync,
impl<T> DowncastSync for T where
T: Any + Send + Sync,
sourceimpl<T> Instrument for T
impl<T> Instrument for T
sourcefn instrument(self, span: Span) -> Instrumented<Self>
fn instrument(self, span: Span) -> Instrumented<Self>
sourcefn in_current_span(self) -> Instrumented<Self>
fn in_current_span(self) -> Instrumented<Self>
sourceimpl<T> Isolation for T where
T: 'static + IsolationHelper + Clone + Debug + Send + Sync,
impl<T> Isolation for T where
T: 'static + IsolationHelper + Clone + Debug + Send + Sync,
sourcefn compatible(&self, other: &(dyn Isolation + 'static)) -> bool
fn compatible(&self, other: &(dyn Isolation + 'static)) -> bool
Return true if this Isolation is compatible with another. Read more
sourceimpl<T> ToOwned for T where
T: Clone,
impl<T> ToOwned for T where
T: Clone,
type Owned = T
type Owned = T
The resulting type after obtaining ownership.
sourcefn clone_into(&self, target: &mut T)
fn clone_into(&self, target: &mut T)
toowned_clone_into
)Uses borrowed data to replace owned data, usually by cloning. Read more
sourceimpl<T> WithSubscriber for T
impl<T> WithSubscriber for T
sourcefn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> where
S: Into<Dispatch>,
Attaches the provided Subscriber
to this type, returning a
WithDispatch
wrapper. Read more
sourcefn with_current_subscriber(self) -> WithDispatch<Self>
fn with_current_subscriber(self) -> WithDispatch<Self>
Attaches the current default Subscriber
to this type, returning a
WithDispatch
wrapper. Read more