From 71561a8e12951001410a942178c9aede81457ccd Mon Sep 17 00:00:00 2001 From: Alexis Sellier Date: Thu, 16 Feb 2023 13:18:25 +0100 Subject: [PATCH] node: Move state transition code to session --- radicle-node/src/service.rs | 12 ++---------- radicle-node/src/service/session.rs | 13 +++++++++++++ 2 files changed, 15 insertions(+), 10 deletions(-) diff --git a/radicle-node/src/service.rs b/radicle-node/src/service.rs index a40fe9ee..4f6bb702 100644 --- a/radicle-node/src/service.rs +++ b/radicle-node/src/service.rs @@ -603,16 +603,8 @@ where } if let Some(session) = self.sessions.get_mut(&remote) { - if let session::State::Connected { protocol, .. } = &mut session.state { - if let session::Protocol::Fetch { .. } = protocol { - *protocol = session::Protocol::default(); - } else { - panic!( - "Unexpected session state for {}: expected 'fetch' protocol, got 'gossip'", - session.id - ); - } - } + // Transition session back to gossip protocol. + session.to_gossip(); // Drain any messages in the session's outbox, which might have accumulated during the // fetch, and send them to the peer. self.reactor.drain(session); diff --git a/radicle-node/src/service/session.rs b/radicle-node/src/service/session.rs index 2cc6974f..69f18f45 100644 --- a/radicle-node/src/service/session.rs +++ b/radicle-node/src/service/session.rs @@ -250,6 +250,19 @@ impl Session { *protocol = Protocol::Fetch { rid }; } + pub fn to_gossip(&mut self) { + if let State::Connected { protocol, .. } = &mut self.state { + if let Protocol::Fetch { .. } = protocol { + *protocol = Protocol::default(); + } else { + panic!( + "Unexpected session state for {}: expected 'fetch' protocol, got 'gossip'", + self.id + ); + } + } + } + pub fn to_connecting(&mut self) { assert!( self.is_disconnected(),