mirror of
https://github.com/jmcorgan/fips.git
synced 2026-08-10 08:37:02 +00:00
node: source connection index/transport/stats from the peer machine
The connection leg's their_index, transport_id and link_stats duplicated the peer machine's own connection-state copy. Route every production reader through the machine copy: promotion, the stale-connection reaper, the outbound msg1 resend, and the in-use / connecting-path checks. Seed the inbound machine's transport_id from the msg1 packet (the same source the leg used), matching the outbound dial seed, so the hard-required promote read never sees a missing transport. link_stats is a never-mutated zero seed, so its leg accessors are removed outright; the leg their_index/transport_id getters/setters remain only for the test-only connection builder. Also delete the write-only next_resend_at_ms field from the connection state (the resend deadline is carried by the machine-armed retransmit timer, not this field). Byte-identical.
This commit is contained in:
+21
-14
@@ -2367,9 +2367,9 @@ impl Node {
|
||||
.links
|
||||
.values()
|
||||
.any(|link| link.transport_id() == transport_id)
|
||||
|| self
|
||||
.connections()
|
||||
.any(|conn| conn.transport_id() == Some(transport_id))
|
||||
|| self.peer_machines.values().any(|machine| {
|
||||
machine.leg().is_some() && machine.conn_transport_id() == Some(transport_id)
|
||||
})
|
||||
|| self
|
||||
.peers
|
||||
.values()
|
||||
@@ -2441,18 +2441,25 @@ impl Node {
|
||||
});
|
||||
}
|
||||
|
||||
self.peer_machines
|
||||
.entry(link_id)
|
||||
.or_insert_with(|| {
|
||||
let now = connection.started_at();
|
||||
match connection.expected_identity() {
|
||||
Some(identity) if connection.is_outbound() => {
|
||||
PeerMachine::new_outbound(link_id, *identity, now)
|
||||
}
|
||||
_ => PeerMachine::new_inbound(link_id, now),
|
||||
let machine = self.peer_machines.entry(link_id).or_insert_with(|| {
|
||||
let now = connection.started_at();
|
||||
match connection.expected_identity() {
|
||||
Some(identity) if connection.is_outbound() => {
|
||||
PeerMachine::new_outbound(link_id, *identity, now)
|
||||
}
|
||||
})
|
||||
.set_leg(connection);
|
||||
_ => PeerMachine::new_inbound(link_id, now),
|
||||
}
|
||||
});
|
||||
// Seed the surviving carrier's peer index and transport from the
|
||||
// pre-built leg so the promotion hand-off reads them from the machine,
|
||||
// matching the establish paths that write them on the machine directly.
|
||||
if let Some(their) = connection.their_index() {
|
||||
machine.set_conn_their_index(their);
|
||||
}
|
||||
if let Some(tid) = connection.transport_id() {
|
||||
machine.set_conn_transport_id(tid);
|
||||
}
|
||||
machine.set_leg(connection);
|
||||
Ok(())
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user