snowstorm/net/behaviour/
config.rs1use crate::config::Config;
2use instant::Duration;
3use libp2p::swarm::behaviour::toggle::Toggle;
4pub use libp2p::{
5 identify,
6 ping,
7 rendezvous,
8 upnp,
9};
10use libp2p_stream as stream;
11use log::debug;
12use rand::Rng;
13
14use crate::net::behaviour::SnowstormBehaviour;
15
16impl From<&Config> for Toggle<ping::Behaviour> {
17 fn from(_config: &Config) -> Toggle<ping::Behaviour> {
18 let max = rand::rng().random_range(1.0..=6.0);
19 let min = rand::rng().random_range(0.0..=max);
20 let ping_interval = rand::rng().random_range(min..=max);
21 return Toggle::from(Some(ping::Behaviour::new(
22 ping::Config::new()
23 .with_interval(Duration::from_secs_f32(ping_interval))
24 .with_timeout(Duration::from_secs_f32(ping_interval * 2.0)),
25 )));
26 }
27}
28
29impl From<&Config> for Toggle<stream::Behaviour> {
30 fn from(_config: &Config) -> Toggle<stream::Behaviour> {
31 return Toggle::from(Some(stream::Behaviour::new()));
32 }
41}
42
43impl From<&Config> for Toggle<upnp::tokio::Behaviour> {
44 fn from(config: &Config) -> Toggle<upnp::tokio::Behaviour> {
45 #[cfg(not(target_arch = "wasm32"))]
46 if config.roles.contains(&crate::identity::Role::Volunteer)
47 || config.roles.contains(&crate::identity::Role::Exit)
48 {
49 debug!("upnp behaviour enabled");
50 return Toggle::from(Some(upnp::tokio::Behaviour::default()));
51 }
52
53 Toggle::from(None)
54 }
55}
56
57impl From<&Config> for Toggle<rendezvous::server::Behaviour> {
76 fn from(config: &Config) -> Toggle<rendezvous::server::Behaviour> {
77 if config.roles.contains(&crate::identity::Role::Volunteer) {
78 debug!("rendezvous server behaviour enabled");
79 return Toggle::from(Some(rendezvous::server::Behaviour::new(
80 rendezvous::server::Config::default(),
81 )));
82 }
83
84 Toggle::from(None)
85 }
86}
87
88impl From<&Config> for Toggle<rendezvous::client::Behaviour> {
89 fn from(config: &Config) -> Toggle<rendezvous::client::Behaviour> {
90 debug!("rendezvous client behaviour enabled");
91 return Toggle::from(Some(rendezvous::client::Behaviour::new(
92 config.keypair.clone(),
93 )));
94 }
95}
96
97impl From<&Config> for Toggle<identify::Behaviour> {
98 fn from(config: &Config) -> Toggle<identify::Behaviour> {
99 debug!("identify behaviour enabled");
100
101 return Toggle::from(Some(identify::Behaviour::new(identify::Config::new(
102 "snowstorm-rendezvous/0.0.0".to_string(),
103 config.keypair.public(),
104 ))));
105 }
106}
107
108impl From<&Config> for SnowstormBehaviour {
109 fn from(config: &Config) -> SnowstormBehaviour {
110 SnowstormBehaviour {
111 ping: Toggle::from(config),
112 upnp: Toggle::from(config),
113 identify: Toggle::from(config),
114 rendezvous_server: Toggle::from(config),
115 rendezvous_client: Toggle::from(config),
116 stream: Toggle::from(config),
117 }
118 }
119}