pub struct EngineState {
pub engine_id: Bytes,
pub engine_boots: u32,
pub engine_time: u32,
pub synced_at: Instant,
pub latest_received_engine_time: u32,
pub msg_max_size: u32,
}Expand description
Discovered engine state.
Fields§
§engine_id: BytesAuthoritative engine ID
engine_boots: u32Engine boot count
engine_time: u32Engine time at last sync
synced_at: InstantLocal time when engine_time was received
latest_received_engine_time: u32Latest received engine time (for anti-replay, RFC 3414 Section 2.3)
msg_max_size: u32Maximum message size the remote engine can accept (from msgMaxSize header).
Implementations§
Source§impl EngineState
impl EngineState
Sourcepub fn new(engine_id: Bytes, engine_boots: u32, engine_time: u32) -> Self
pub fn new(engine_id: Bytes, engine_boots: u32, engine_time: u32) -> Self
Create new engine state from discovery response.
Sourcepub fn with_msg_max_size(
engine_id: Bytes,
engine_boots: u32,
engine_time: u32,
msg_max_size: u32,
) -> Self
pub fn with_msg_max_size( engine_id: Bytes, engine_boots: u32, engine_time: u32, msg_max_size: u32, ) -> Self
Create with explicit msgMaxSize from agent’s header.
Sourcepub fn with_msg_max_size_capped(
engine_id: Bytes,
engine_boots: u32,
engine_time: u32,
reported_msg_max_size: u32,
session_max: u32,
) -> Self
pub fn with_msg_max_size_capped( engine_id: Bytes, engine_boots: u32, engine_time: u32, reported_msg_max_size: u32, session_max: u32, ) -> Self
Create with msgMaxSize capped to session maximum.
Non-compliant agents may advertise msgMaxSize values larger than they can handle. This caps the value to a known safe session limit.
Sourcepub fn estimated_time(&self) -> u32
pub fn estimated_time(&self) -> u32
Get the estimated current engine time.
This adds elapsed local time to the synced engine time. Per RFC 3414 Section 2.2.1, the result is capped at MAX_ENGINE_TIME (2^31-1).
Sourcepub fn update_time(&mut self, response_boots: u32, response_time: u32) -> bool
pub fn update_time(&mut self, response_boots: u32, response_time: u32) -> bool
Update time from a response.
Per RFC 3414 Section 3.2 Step 7b, only update if:
- Response boots > local boots, OR
- Response boots == local boots AND response time > latest_received_engine_time
Sourcepub fn is_in_time_window(&self, msg_boots: u32, msg_time: u32) -> bool
pub fn is_in_time_window(&self, msg_boots: u32, msg_time: u32) -> bool
Check if a message time is within the time window.
Per RFC 3414 Section 2.2.3, a message is outside the window if:
- Local boots is 2147483647 (latched), OR
- Message boots differs from local boots, OR
- |message_time - local_time| > 150 seconds
Trait Implementations§
Source§impl Clone for EngineState
impl Clone for EngineState
Source§fn clone(&self) -> EngineState
fn clone(&self) -> EngineState
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 EngineState
impl RefUnwindSafe for EngineState
impl Send for EngineState
impl Sync for EngineState
impl Unpin for EngineState
impl UnsafeUnpin for EngineState
impl UnwindSafe for EngineState
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§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