mirror of
https://github.com/fluencelabs/rust-libp2p
synced 2025-05-20 14:41:21 +00:00
protocols/dcutr/example: Wait for relay to accept reservation request (#2642)
When in listening mode, wait for the relay to accept our reservation request. Only then can a client in dialing mode establish a relayed connection to us via the relay. See also https://github.com/libp2p/rust-libp2p/issues/2621#issuecomment-1123549348
This commit is contained in:
parent
d4c1292d42
commit
0e9ab1c960
@ -197,25 +197,46 @@ fn main() -> Result<(), Box<dyn Error>> {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
// Wait till connected to relay to learn external address.
|
// Wait till connected to relay to learn external address. In case we are in listening mode,
|
||||||
|
// wait for the relay to accept our reservation request.
|
||||||
block_on(async {
|
block_on(async {
|
||||||
|
let mut learned_observed_addr = false;
|
||||||
|
let mut relay_accepted_reservation = false;
|
||||||
|
|
||||||
loop {
|
loop {
|
||||||
match swarm.next().await.unwrap() {
|
match swarm.next().await.unwrap() {
|
||||||
SwarmEvent::NewListenAddr { .. } => {}
|
SwarmEvent::NewListenAddr { .. } => {}
|
||||||
SwarmEvent::Dialing { .. } => {}
|
SwarmEvent::Dialing { .. } => {}
|
||||||
SwarmEvent::ConnectionEstablished { .. } => {}
|
SwarmEvent::ConnectionEstablished { .. } => {}
|
||||||
SwarmEvent::Behaviour(Event::Ping(_)) => {}
|
SwarmEvent::Behaviour(Event::Ping(_)) => {}
|
||||||
SwarmEvent::Behaviour(Event::Relay(_)) => {}
|
SwarmEvent::Behaviour(Event::Relay(client::Event::ReservationReqAccepted {
|
||||||
|
..
|
||||||
|
})) => {
|
||||||
|
info!("Relay accepted our reservation request.");
|
||||||
|
relay_accepted_reservation = true
|
||||||
|
}
|
||||||
SwarmEvent::Behaviour(Event::Identify(IdentifyEvent::Sent { .. })) => {}
|
SwarmEvent::Behaviour(Event::Identify(IdentifyEvent::Sent { .. })) => {}
|
||||||
SwarmEvent::Behaviour(Event::Identify(IdentifyEvent::Received {
|
SwarmEvent::Behaviour(Event::Identify(IdentifyEvent::Received {
|
||||||
info: IdentifyInfo { observed_addr, .. },
|
info: IdentifyInfo { observed_addr, .. },
|
||||||
..
|
..
|
||||||
})) => {
|
})) => {
|
||||||
info!("Observed address: {:?}", observed_addr);
|
info!("Relay observes us under the address: {:?}", observed_addr);
|
||||||
break;
|
learned_observed_addr = true;
|
||||||
}
|
}
|
||||||
event => panic!("{:?}", event),
|
event => panic!("{:?}", event),
|
||||||
}
|
}
|
||||||
|
|
||||||
|
// Check whether we are done.
|
||||||
|
|
||||||
|
if !learned_observed_addr {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
if opts.mode == Mode::Listen && !relay_accepted_reservation {
|
||||||
|
continue;
|
||||||
|
}
|
||||||
|
|
||||||
|
break;
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
@ -132,6 +132,12 @@
|
|||||||
//!
|
//!
|
||||||
//! ``` bash
|
//! ``` bash
|
||||||
//! RUST_LOG=info ./client --secret-key-seed 1 --mode listen --relay-address /ip4/$RELAY_SERVER_IP/tcp/4001/p2p/12D3KooWDpJ7As7BWAwRMfu1VU2WCqNjvq387JEYKDBj4kx6nXTN
|
//! RUST_LOG=info ./client --secret-key-seed 1 --mode listen --relay-address /ip4/$RELAY_SERVER_IP/tcp/4001/p2p/12D3KooWDpJ7As7BWAwRMfu1VU2WCqNjvq387JEYKDBj4kx6nXTN
|
||||||
|
//!
|
||||||
|
//! [2022-05-11T10:38:52Z INFO client] Local peer id: PeerId("XXX")
|
||||||
|
//! [2022-05-11T10:38:52Z INFO client] Listening on "/ip4/127.0.0.1/tcp/44703"
|
||||||
|
//! [2022-05-11T10:38:52Z INFO client] Listening on "/ip4/XXX/tcp/44703"
|
||||||
|
//! [2022-05-11T10:38:54Z INFO client] Relay accepted our reservation request.
|
||||||
|
//! [2022-05-11T10:38:54Z INFO client] Relay observes us under the address: "/ip4/XXX/tcp/53160"
|
||||||
//! ```
|
//! ```
|
||||||
//!
|
//!
|
||||||
//! Now let's make sure that the listening client is not public, in other words let's make sure one
|
//! Now let's make sure that the listening client is not public, in other words let's make sure one
|
||||||
@ -139,7 +145,7 @@
|
|||||||
//! connect on Layer 4 (TCP):
|
//! connect on Layer 4 (TCP):
|
||||||
//!
|
//!
|
||||||
//! ``` bash
|
//! ``` bash
|
||||||
//! telnet $RELAY_SERVER_IP 4001
|
//! telnet $LISTENING_CLIENT_IP_OBSERVED_BY_RELAY 53160
|
||||||
//! ```
|
//! ```
|
||||||
//!
|
//!
|
||||||
//! ## Connecting to the listening client from the dialing client
|
//! ## Connecting to the listening client from the dialing client
|
||||||
|
Loading…
x
Reference in New Issue
Block a user