Skip to content

Commit e98ab3c

Browse files
Merge pull request #1 from comit-network/make-it-work-with-asb-and-cli
2 parents a624805 + 55858c4 commit e98ab3c

File tree

6 files changed

+74
-65
lines changed

6 files changed

+74
-65
lines changed

Cargo.lock

Lines changed: 27 additions & 28 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

Cargo.toml

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,6 @@ edition = "2018"
77
[dependencies]
88
anyhow = "1"
99
futures = { version = "0.3", default-features = false }
10-
libp2p = { git = "https://github.com/comit-network/rust-libp2p.git", rev = "96002105b0a7019330413826a332b3a12a7e8a57", default-features = false, features = [ "rendezvous", "tcp-tokio", "yamux", "mplex", "dns-tokio", "noise", "identify" ] }
10+
libp2p = { git = "https://github.com/comit-network/rust-libp2p.git", rev = "4cacaf215b334d447faca8f4e361fe19c30d2162", default-features = false, features = [ "rendezvous", "tcp-tokio", "yamux", "mplex", "dns-tokio", "noise", "ping" ] }
1111
structopt = { version = "0.3", default-features = false }
1212
tokio = { version = "1", features = [ "rt-multi-thread", "time", "macros", "sync", "process", "fs", "net" ] }

examples/discover.rs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
use anyhow::Result;
22
use libp2p::dns::TokioDnsConfig;
33
use libp2p::futures::StreamExt;
4-
use libp2p::rendezvous::{Config, Rendezvous};
4+
use libp2p::rendezvous::{Config, Namespace, Rendezvous};
55
use libp2p::swarm::{SwarmBuilder, SwarmEvent};
66
use libp2p::tcp::TokioTcpConfig;
77
use libp2p::{identity, rendezvous, Multiaddr, PeerId, Transport};
@@ -54,7 +54,7 @@ async fn main() -> Result<()> {
5454
);
5555

5656
swarm.behaviour_mut().discover(
57-
Some(cli.namespace.to_string()),
57+
Some(Namespace::new(cli.namespace.clone())?),
5858
None,
5959
None,
6060
rendezvous_point,

examples/register_once.rs

Lines changed: 19 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -2,9 +2,8 @@ use anyhow::Result;
22
use libp2p::core::identity::ed25519::SecretKey;
33
use libp2p::dns::TokioDnsConfig;
44
use libp2p::futures::StreamExt;
5-
use libp2p::identify::{Identify, IdentifyConfig, IdentifyEvent};
6-
use libp2p::rendezvous::{Config, Rendezvous};
7-
use libp2p::swarm::{SwarmBuilder, SwarmEvent};
5+
use libp2p::rendezvous::{Config, Namespace, Rendezvous};
6+
use libp2p::swarm::{AddressScore, SwarmBuilder, SwarmEvent};
87
use libp2p::tcp::TokioTcpConfig;
98
use libp2p::{identity, rendezvous, Multiaddr, PeerId, Transport};
109
use rendezvous_server::transport::authenticate_and_multiplex;
@@ -17,9 +16,14 @@ struct Cli {
1716
pub rendezvous_peer_id: PeerId,
1817
#[structopt(long = "rendezvous-addr")]
1918
pub rendezvous_addr: Multiaddr,
19+
#[structopt(
20+
long = "external-addr",
21+
help = "A public facing address is registered with the rendezvous server"
22+
)]
23+
pub external_addr: Multiaddr,
2024
#[structopt(long = "secret-key", parse(try_from_str = parse_secret_key))]
2125
pub secret_key: SecretKey,
22-
#[structopt(long = "port")]
26+
#[structopt(long = "port", help = "Listen port")]
2327
pub port: u16,
2428
}
2529

@@ -36,16 +40,11 @@ async fn main() -> Result<()> {
3640

3741
let transport = authenticate_and_multiplex(tcp_with_dns.boxed(), &identity).unwrap();
3842

39-
let identify = Identify::new(IdentifyConfig::new(
40-
"rendezvous/1.0.0".to_string(),
41-
identity.public(),
42-
));
43-
4443
let rendezvous = Rendezvous::new(identity.clone(), Config::default());
4544

4645
let peer_id = PeerId::from(identity.public());
4746

48-
let mut swarm = SwarmBuilder::new(transport, Behaviour::new(identify, rendezvous), peer_id)
47+
let mut swarm = SwarmBuilder::new(transport, Behaviour::new(rendezvous), peer_id)
4948
.executor(Box::new(|f| {
5049
tokio::spawn(f);
5150
}))
@@ -55,6 +54,8 @@ async fn main() -> Result<()> {
5554

5655
let _ = swarm.listen_on(format!("/ip4/0.0.0.0/tcp/{}", cli.port).parse().unwrap());
5756

57+
let _ = swarm.add_external_address(cli.external_addr, AddressScore::Infinite);
58+
5859
swarm.dial_addr(rendezvous_point_address).unwrap();
5960

6061
while let Some(event) = swarm.next().await {
@@ -69,13 +70,14 @@ async fn main() -> Result<()> {
6970
} if peer_id == rendezvous_point => {
7071
println!("Lost connection to rendezvous point {}", error);
7172
}
72-
// once `/identify` did its job, we know our external address and can register
73-
SwarmEvent::Behaviour(Event::Identify(IdentifyEvent::Received { .. })) => {
74-
swarm
75-
.behaviour_mut()
76-
.rendezvous
77-
.register("rendezvous".to_string(), rendezvous_point, None)
78-
.unwrap();
73+
SwarmEvent::ConnectionEstablished { peer_id, .. } => {
74+
if peer_id == cli.rendezvous_peer_id {
75+
swarm.behaviour_mut().rendezvous.register(
76+
Namespace::new("rendezvous".to_string())?,
77+
rendezvous_point,
78+
None,
79+
);
80+
}
7981
}
8082
SwarmEvent::Behaviour(Event::Rendezvous(rendezvous::Event::Registered {
8183
namespace,

src/bin/rendezvous_server.rs

Lines changed: 10 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -2,13 +2,12 @@ use anyhow::Result;
22
use libp2p::core::identity::ed25519::SecretKey;
33
use libp2p::dns::TokioDnsConfig;
44
use libp2p::futures::StreamExt;
5-
use libp2p::identify::{Identify, IdentifyConfig};
65
use libp2p::rendezvous::{Config, Rendezvous};
7-
use libp2p::swarm::SwarmBuilder;
6+
use libp2p::swarm::{SwarmBuilder, SwarmEvent};
87
use libp2p::tcp::TokioTcpConfig;
98
use libp2p::{identity, PeerId, Transport};
109
use rendezvous_server::transport::authenticate_and_multiplex;
11-
use rendezvous_server::{parse_secret_key, Behaviour};
10+
use rendezvous_server::{parse_secret_key, Behaviour, Event};
1211
use structopt::StructOpt;
1312

1413
#[derive(Debug, StructOpt)]
@@ -29,15 +28,11 @@ async fn main() -> Result<()> {
2928

3029
let transport = authenticate_and_multiplex(tcp_with_dns.boxed(), &identity).unwrap();
3130

32-
let identify = Identify::new(IdentifyConfig::new(
33-
"rendezvous/1.0.0".to_string(),
34-
identity.public(),
35-
));
3631
let rendezvous = Rendezvous::new(identity.clone(), Config::default());
3732

3833
let peer_id = PeerId::from(identity.public());
3934

40-
let mut swarm = SwarmBuilder::new(transport, Behaviour::new(identify, rendezvous), peer_id)
35+
let mut swarm = SwarmBuilder::new(transport, Behaviour::new(rendezvous), peer_id)
4136
.executor(Box::new(|f| {
4237
tokio::spawn(f);
4338
}))
@@ -51,6 +46,12 @@ async fn main() -> Result<()> {
5146

5247
loop {
5348
let event = swarm.next().await;
54-
println!("swarm event: {:?}", event);
49+
50+
if let Some(event) = event {
51+
match event {
52+
SwarmEvent::Behaviour(Event::Ping(_)) => {}
53+
event => println!("swarm event: {:?}", event),
54+
}
55+
}
5556
}
5657
}

src/lib.rs

Lines changed: 15 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,9 @@
11
use anyhow::Result;
22
use libp2p::core::identity::ed25519::SecretKey;
3-
use libp2p::identify::{Identify, IdentifyEvent};
3+
use libp2p::ping::{Ping, PingConfig, PingEvent};
44
use libp2p::rendezvous::Rendezvous;
55
use libp2p::{rendezvous, NetworkBehaviour};
6+
use std::time::Duration;
67

78
pub mod transport;
89

@@ -15,7 +16,7 @@ pub fn parse_secret_key(s: &str) -> Result<SecretKey> {
1516
#[derive(Debug)]
1617
pub enum Event {
1718
Rendezvous(rendezvous::Event),
18-
Identify(IdentifyEvent),
19+
Ping(PingEvent),
1920
}
2021

2122
impl From<rendezvous::Event> for Event {
@@ -24,24 +25,30 @@ impl From<rendezvous::Event> for Event {
2425
}
2526
}
2627

27-
impl From<IdentifyEvent> for Event {
28-
fn from(event: IdentifyEvent) -> Self {
29-
Event::Identify(event)
28+
impl From<PingEvent> for Event {
29+
fn from(event: PingEvent) -> Self {
30+
Event::Ping(event)
3031
}
3132
}
3233

3334
#[derive(NetworkBehaviour)]
3435
#[behaviour(event_process = false)]
3536
#[behaviour(out_event = "Event")]
3637
pub struct Behaviour {
37-
identify: Identify,
38+
ping: Ping,
3839
pub rendezvous: Rendezvous,
3940
}
4041

4142
impl Behaviour {
42-
pub fn new(identify: Identify, rendezvous: Rendezvous) -> Self {
43+
pub fn new(rendezvous: Rendezvous) -> Self {
4344
Self {
44-
identify,
45+
// TODO: Remove Ping behaviour once https://github.com/libp2p/rust-libp2p/issues/2109 is fixed
46+
// interval for sending Ping set to 24 hours
47+
ping: Ping::new(
48+
PingConfig::new()
49+
.with_keep_alive(false)
50+
.with_interval(Duration::from_secs(86_400)),
51+
),
4552
rendezvous,
4653
}
4754
}

0 commit comments

Comments
 (0)