pub struct IdentityRequestFilters<'a> { /* private fields */ }Expand description
Interprets the option block of an MacCommand::IdentityRequest.
Borrows the raw block and decodes its identity_filter options on demand.
A responder uses nonce to obtain the correlation value it
must echo, and selects to decide whether it is a target
of the request.
Implementations§
Source§impl<'a> IdentityRequestFilters<'a>
impl<'a> IdentityRequestFilters<'a>
Sourcepub fn nonce(&self) -> Result<Option<u32>, AppParseError>
pub fn nonce(&self) -> Result<Option<u32>, AppParseError>
The correlation nonce the responder must echo into its identity’s Nonce
option, or None if the request carried no NONCE option.
Returns the first NONCE option; tolerates minimal (≤4 byte) encodings.
Sourcepub fn hint_filtered(&self) -> bool
pub fn hint_filtered(&self) -> bool
Whether the request carries at least one FILTER_NODE_HINT filter.
A hint filter names one node, or with a partial hint a handful, so such a request solicits few replies however far it travels. Without one the request selects by role or capability and every node it reaches may answer, which is what confines a broadcast or multicast solicitation — and its replies — to the requester’s own neighborhood.
A malformed option block reads as unfiltered, which is the conservative answer: it keeps the strict rules in force.
Sourcepub fn hint_names_one_node(&self) -> bool
pub fn hint_names_one_node(&self) -> bool
Whether this request’s hint filters name a node rather than a share of
the mesh: at least one FILTER_NODE_HINT is present and every one of
them is at least [UNIQUE_HINT_PREFIX_LEN] bytes.
This is the question the reply’s random hold turns on. The hold exists to keep many selected nodes from answering the same frame at once, so a request only one node can satisfy has nothing to spread and is answered straight away. A one-byte prefix selects a 256th of everything it reaches, which is a crowd, so it keeps the hold.
Stricter than hint_filtered, which asks only
whether the request is aimed at all. Filters of the same type combine as
OR, so one short filter widens the whole request and the shortest is
what decides.
A malformed option block reads as unnarrowed — the conservative answer, since it keeps the hold in force.
Sourcepub fn selects(
&self,
role: NodeRole,
capabilities: NodeCapabilities,
hint: &NodeHint,
) -> Result<bool, AppParseError>
pub fn selects( &self, role: NodeRole, capabilities: NodeCapabilities, hint: &NodeHint, ) -> Result<bool, AppParseError>
Whether a node with the given identity is selected by this request.
Filters combine as a logical AND across distinct filter types and a logical OR among repeated filters of the same type. An unknown critical option (odd key) excludes the node; unknown elective options are ignored. A well-formed request with no filters (a unicast request) selects every node.
Trait Implementations§
Source§impl<'a> Clone for IdentityRequestFilters<'a>
impl<'a> Clone for IdentityRequestFilters<'a>
Source§fn clone(&self) -> IdentityRequestFilters<'a>
fn clone(&self) -> IdentityRequestFilters<'a>
1.0.0§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read moreSource§impl<'a> Debug for IdentityRequestFilters<'a>
impl<'a> Debug for IdentityRequestFilters<'a>
impl<'a> Copy for IdentityRequestFilters<'a>
Auto Trait Implementations§
impl<'a> Freeze for IdentityRequestFilters<'a>
impl<'a> RefUnwindSafe for IdentityRequestFilters<'a>
impl<'a> Send for IdentityRequestFilters<'a>
impl<'a> Sync for IdentityRequestFilters<'a>
impl<'a> Unpin for IdentityRequestFilters<'a>
impl<'a> UnwindSafe for IdentityRequestFilters<'a>
Blanket Implementations§
§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
§unsafe fn clone_to_uninit(&self, dest: *mut u8)
unsafe fn clone_to_uninit(&self, dest: *mut u8)
clone_to_uninit)