pub enum Kind {
Public,
Temporary,
}Expand description
Which of the two GRUUs a UA puts in a Contact (§4.4).
§Why the default is Kind::Public
The two differ in exactly one property each way, and the trade is not sipx’s to make.
A public GRUU is a stable identifier for the instance. It survives re-registration, and §5.2 has a registrar keep treating it as valid even after the binding lapses — answering 480 until the device comes back — so an address handed out under one still names this device tomorrow. What it does not offer is privacy: two public GRUUs for one instance are the same URI, so anyone holding two of them can see they are the same device.
A temporary GRUU buys precisely that privacy. §5.4: “Given a pair of GRUUs, it MUST be
computationally infeasible to determine whether they were issued for the same AOR or instance
ID or for different AORs and instance IDs.” It pays for it in lifetime — §4.2 requires a UA
to discard every temporary GRUU it learned whenever its Call-ID changes, so an address
handed out under one stops resolving as soon as the UA registers afresh.
So the default is the public one, because it is the choice that keeps working, and because
only the application knows whether the address it is about to put in a Contact has to
outlive this registration. Unlinkability is a property that must be asked for — and, having
been asked for, is never quietly downgraded: see Gruus::preferred.
Variants§
Public
One stable URI for this instance, usable for as long as the instance exists.
Temporary
An address that cannot be correlated with any other GRUU, and that lapses with the registration that produced it.
Trait Implementations§
impl Copy for Kind
impl Eq for Kind
impl StructuralPartialEq for Kind
Auto Trait Implementations§
impl Freeze for Kind
impl RefUnwindSafe for Kind
impl Send for Kind
impl Sync for Kind
impl Unpin for Kind
impl UnsafeUnpin for Kind
impl UnwindSafe for Kind
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,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§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