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 more