scatter_net/scatter_net/net/methods/
accept_connection.rs

1use iroh::endpoint::Connection;
2
3use crate::{Peer, ScatterNet};
4
5impl ScatterNet {
6    /// Accepts the [`Connection`] and returns the [`Peer`].
7    ///
8    /// # Errors
9    /// - [`ScatterNetAcceptConnectionError::RemoteNodeId`] means the [`Connection`]'s `NodeId` couldn't be resolved.
10    pub fn accept_connection(
11        &self,
12        connection: Connection,
13    ) -> Result<Peer, ScatterNetAcceptConnectionError> {
14        let node_id = connection.remote_node_id()?;
15        let peer = self.get_peer(&node_id);
16
17        if let Some(peer) = peer {
18            peer.replace_connection(connection);
19
20            return Ok(peer);
21        }
22
23        let peer = Peer::builder(self.clone(), node_id).finalize(connection);
24
25        Ok(peer)
26    }
27}
28
29#[derive(thiserror::Error, Debug)]
30pub enum ScatterNetAcceptConnectionError {
31    #[error(transparent)]
32    RemoteNodeId(#[from] iroh::endpoint::RemoteNodeIdError),
33}