Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
86 commits
Select commit Hold shift + click to select a range
3de19b5
feat: implement autorelay
dariusc93 Aug 25, 2025
98a709b
chore: use vec to track peerinfo
dariusc93 Aug 27, 2025
9f71d45
chore: add a timer to cleanup capacity if it exceeds maximum amount (…
dariusc93 Aug 28, 2025
a9b31f0
chore: add functionality for using autorelay
dariusc93 Aug 28, 2025
70f4d58
chore: extend functionality, move cleanup duration to a const, use ve…
dariusc93 Aug 30, 2025
8735d30
chore: add selection and use the correct amount for target
dariusc93 Aug 30, 2025
62da576
chore: remove RelayStatus::None
dariusc93 Aug 31, 2025
dbc5a65
chore: use NonZeroU8, rename field, and add Selection::Peer
dariusc93 Aug 31, 2025
97218d4
chore: add additional trait members for multiaddr ext
dariusc93 Aug 31, 2025
acca3be
chore: track external addresses, preventing relay reservations in the…
dariusc93 Aug 31, 2025
0e8ffd2
chore: remove config from behavior
dariusc93 Aug 31, 2025
98388ed
chore: fix check, add backoff timer before enabling relay
dariusc93 Sep 1, 2025
678ecf0
chore: add logic to remove all reservation when an external address i…
dariusc93 Sep 2, 2025
9b3fc41
chore: change map to use (PeerId, ConnectionId) as key
dariusc93 Sep 2, 2025
cad7383
chore: track connection in pending target
dariusc93 Sep 3, 2025
0a8f1f5
chore: add feature checks
dariusc93 Sep 4, 2025
8140fae
chore: check active reservation when status change
dariusc93 Sep 4, 2025
d96f357
chore: fmt
dariusc93 Sep 4, 2025
53c21d1
chore: optimize dialing by providing all static addresses for a peer …
dariusc93 Sep 7, 2025
f78c293
chore: add selector for lowest latency
dariusc93 Sep 7, 2025
5439287
chore: use immutable access to static relays
dariusc93 Sep 8, 2025
12ddfb6
chore: remove connection id from struct
dariusc93 Sep 8, 2025
a9f34fa
chore: add autorelay example
dariusc93 Sep 8, 2025
c47abf6
chore: use ConnexaBuilder::with_autorelay_with_config within ConnexaB…
dariusc93 Sep 8, 2025
df3722b
chore: add additional pending check
dariusc93 Sep 9, 2025
1392967
chore: update example to grab external addresses
dariusc93 Sep 9, 2025
01784aa
chore: remove pending_target
dariusc93 Sep 9, 2025
159c4d7
chore: add relay namespace for future relay discovery
dariusc93 Sep 12, 2025
4e56faf
chore: attempt to remove listener if status change instead of disconn…
dariusc93 Sep 14, 2025
28348e9
chore: add functions to add and list static relays
dariusc93 Sep 14, 2025
60df9db
chore: add function to disable active relays
dariusc93 Sep 15, 2025
883954c
chore: add logging
dariusc93 Sep 15, 2025
f24f754
chore: remove unused import
dariusc93 Sep 16, 2025
8d00bfa
chore: return early if address is not disqualified
dariusc93 Sep 19, 2025
d171c45
chore: rename struct field for clarity
dariusc93 Sep 26, 2025
3871f24
chore: rename struct field for clarity
dariusc93 Sep 26, 2025
a0fc951
chore: remove unused import
dariusc93 Sep 26, 2025
7f1576f
chore: fmt
dariusc93 Sep 26, 2025
666ec4e
Merge branch 'main' into feat/autorelay
dariusc93 Mar 6, 2026
18becdb
fix: correct private ipv6 address check
dariusc93 Mar 9, 2026
eb17049
chore: return avg latency zero if there is no connections available
dariusc93 Mar 9, 2026
ef35ec8
chore: return false if connection isnt found
dariusc93 Mar 9, 2026
66dd54f
chore: make MultiaddrExt public
dariusc93 Mar 9, 2026
d0a87a5
chore: retry if status match specific conditions
dariusc93 Mar 9, 2026
0f7929c
chore: update libp2p
dariusc93 Apr 27, 2026
6e29001
feat: Add function to enable/disable relay server
dariusc93 Apr 27, 2026
15e8a37
chore: cleanup and fmt
dariusc93 Apr 27, 2026
ba27a28
chore: point to branch to remove relay external addr when it is remov…
dariusc93 Apr 27, 2026
23e4616
Merge branch 'main' into feat/autorelay
dariusc93 Apr 27, 2026
7200fb5
Merge remote-tracking branch 'origin/feat/autorelay' into feat/autorelay
dariusc93 Apr 27, 2026
7516392
Merge branch 'chore/update-libp2p' into feat/autorelay
dariusc93 Apr 27, 2026
8ccddf2
chore: set relay status if connection is disqualified
dariusc93 Apr 27, 2026
6e4443f
chore: correctly disable all relays
dariusc93 Apr 28, 2026
428d7d0
chore: remove redundant flag
dariusc93 Apr 29, 2026
7dfe534
chore: remove autorelay override flag
dariusc93 Apr 29, 2026
5e5a080
chore: add flag to remove active reservation when we are notified abo…
dariusc93 May 1, 2026
57921b3
chore: add logs when unable to find reservation when disabling
dariusc93 May 1, 2026
ea24bde
chore: reduce allocation by iterating over map
dariusc93 May 1, 2026
fca25b2
chore: add event to indicate to swarm that no relay was found or avai…
dariusc93 May 1, 2026
914c209
chore: add additional events, remove hash derive
dariusc93 May 1, 2026
3b7e6c9
chore: use main rust-libp2p repo
dariusc93 May 11, 2026
5399711
Merge branch 'main' into feat/autorelay
dariusc93 May 29, 2026
81cbfc0
refactor: change to mirror libp2p autorelay PR
dariusc93 May 31, 2026
da1379f
chore: point to master
dariusc93 May 31, 2026
ff9d0b5
chore: update dns resolver and support Quad9
dariusc93 May 31, 2026
877123f
Merge branch 'main' into chore/update-libp2p
dariusc93 Jun 14, 2026
1b14e59
chore: remove feature
dariusc93 Jun 14, 2026
62f89b0
chore: wasm check
dariusc93 Jun 14, 2026
240658c
chore: check
dariusc93 Jun 14, 2026
7e43065
chore: wasm check
dariusc93 Jun 14, 2026
cf88b3b
chore: resolve generic types
dariusc93 Jun 14, 2026
622906a
chore: checks
dariusc93 Jun 14, 2026
3208f42
chore: check
dariusc93 Jun 14, 2026
45055d0
Merge branch 'main' into feat/autorelay
dariusc93 Jun 14, 2026
6d2025e
Merge branch 'chore/update-libp2p' into feat/autorelay
dariusc93 Jun 14, 2026
fc6e923
chore: fix types
dariusc93 Jun 14, 2026
14ff27b
chore: fix example
dariusc93 Jun 14, 2026
ffd5159
chore: correction
dariusc93 Jun 14, 2026
98e39be
chore: correction
dariusc93 Jun 14, 2026
d8b729f
chore: update autorelay
dariusc93 Jun 14, 2026
51c292c
Merge branch 'main' into feat/autorelay
dariusc93 Jun 14, 2026
328889e
Revert "Merge branch 'chore/update-libp2p' into feat/autorelay"
dariusc93 Jun 14, 2026
5d8fc2d
chore: minor reversals and changes
dariusc93 Jun 14, 2026
be28b25
chore: track reservations and remove addresses apart of relay listener
dariusc93 Jun 14, 2026
0d1f860
chore: port test over
dariusc93 Jun 15, 2026
de5983a
chore: update and add additional test
dariusc93 Jun 15, 2026
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -59,12 +59,12 @@ indexeddb = ["dep:idb", "serde"]
redb = ["dep:redb", "dep:cbor4ii", "serde"]
sqlite = ["dep:sqlx", "dep:cbor4ii", "serde"]

webrtc =["dep:libp2p-webrtc", "dep:libp2p-webrtc-websys"]
webrtc = ["dep:libp2p-webrtc", "dep:libp2p-webrtc-websys"]
websocket = ["libp2p/websocket", "rcgen", "dep:pem", "libp2p/websocket-websys"]
webtransport = ["libp2p/webtransport-websys"]

[workspace]
members = ["examples/browser-webrtc", "examples/custom-behaviour-and-context", "examples/custom-transport", "examples/distributed-key-value-store", "examples/file-sharing-request-response", "examples/file-sharing-stream", "examples/floodsub", "examples/gossipsub", "examples/ipfs-kad", "examples/peer-store", "examples/relay", "examples/rendezvous", "examples/stream", "examples/upnp"]
members = ["examples/autorelay", "examples/browser-webrtc", "examples/custom-behaviour-and-context", "examples/custom-transport", "examples/distributed-key-value-store", "examples/file-sharing-request-response", "examples/file-sharing-stream", "examples/floodsub", "examples/gossipsub", "examples/ipfs-kad", "examples/peer-store", "examples/relay", "examples/rendezvous", "examples/stream", "examples/upnp"]

[workspace.dependencies]
async-rt = "0.1.8"
Expand Down Expand Up @@ -170,7 +170,7 @@ getrandom = { workspace = true, features = ["js"] }
getrandom_03 = { workspace = true, features = ["wasm_js"] }
idb = { workspace = true, optional = true }
js-sys = { workspace = true, optional = true }
libp2p = { features = ["macros", "serde", "wasm-bindgen"], workspace = true }
libp2p = { features = ["macros", "serde"], workspace = true }
libp2p-webrtc-websys = { workspace = true, optional = true }
parking_lot = { workspace = true, optional = true }
send_wrapper = { workspace = true, features = ["futures"] }
Expand All @@ -180,4 +180,4 @@ tokio = { default-features = false, features = ["sync", "macros"], workspace = t
url = { workspace = true, optional = true }
wasm-bindgen.workspace = true
wasm-bindgen-futures.workspace = true
web-sys = { workspace = true, optional = true }
web-sys = { workspace = true, optional = true }
11 changes: 11 additions & 0 deletions examples/autorelay/Cargo.toml
Original file line number Diff line number Diff line change
@@ -0,0 +1,11 @@
[package]
name = "autorelay"
version = "0.1.0"
edition = "2024"

[dependencies]
tokio.workspace = true
futures.workspace = true
connexa = { path = "../../", default-features = false, features = ["ed25519", "rsa", "tcp", "quic", "yamux", "noise", "relay", "ping", "identify", "testing", "kad", "dns"] }
clap = { version = "4.5.39", features = ["derive"] }
tracing-subscriber = { version = "0.3.19", features = ["env-filter"] }
55 changes: 55 additions & 0 deletions examples/autorelay/src/main.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
use connexa::prelude::{DefaultConnexaBuilder, Multiaddr, PeerId};

pub const BOOTSTRAP_NODES: &[(&str, &str)] = &[
(
"/ip4/104.131.131.82/tcp/4001",
"QmaCpDMGvV2BGHeYERUEnRQAwe3N8SzbUtfsmvsqQLuvuJ",
),
(
"/dnsaddr/bootstrap.libp2p.io",
"QmNnooDu7bfjPFoTZYxMNLWUQJyrVwtbZg5gBMjTezGAJN",
),
(
"/dnsaddr/bootstrap.libp2p.io",
"QmQCU2EcMqAqQPR2i9bChDtGNJchTbq5TbXJJ16u19uLTa",
),
(
"/dnsaddr/bootstrap.libp2p.io",
"QmbLHAnMoJPWSCR5Zhtx6BHJX9KiKNN6tpvbUcqanj75Nb",
),
(
"/dnsaddr/bootstrap.libp2p.io",
"QmcZf59bWwK5XFi76CZX8cbJ4BhTzzA3gU1ZjYZcYW3dwt",
),
];

#[tokio::main]
async fn main() -> std::io::Result<()> {
let connexa = DefaultConnexaBuilder::new_identity()
.enable_tcp()
.enable_quic()
.enable_dns()
.with_relay()
.with_autorelay()
.with_ping()
.with_identify()
.with_kademlia()
.build()
.await?;

for (addr, peer_id) in BOOTSTRAP_NODES {
let peer_id: PeerId = peer_id.parse().expect("valid peer id");
let addr: Multiaddr = addr.parse().expect("valid addr");
connexa.dht().add_address(peer_id, addr).await?;
}

tokio::time::sleep(std::time::Duration::from_secs(10)).await;

let external_addrs = connexa.swarm().external_addresses().await?;

for addr in external_addrs {
println!("- {}", addr);
}

Ok(())
}
1 change: 1 addition & 0 deletions examples/upnp/src/main.rs
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ async fn main() -> std::io::Result<()> {
UpnpEvent::NonRoutableGateway => println!("Gateway is not routable"),
},
_ => {}
_ => {}
})
.build()
.await?;
Expand Down
16 changes: 16 additions & 0 deletions src/behaviour.rs
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
#[cfg(feature = "relay")]
pub mod autorelay;
pub mod dummy;
pub mod peer_store;
#[cfg(feature = "request-response")]
Expand Down Expand Up @@ -56,6 +58,9 @@ where
#[cfg(feature = "relay")]
pub relay_client: Toggle<RelayClient>,

#[cfg(feature = "relay")]
pub autorelay: Toggle<autorelay::Behaviour>,

#[cfg(not(target_arch = "wasm32"))]
#[cfg(feature = "upnp")]
pub upnp: Toggle<libp2p::upnp::tokio::Behaviour>,
Expand Down Expand Up @@ -270,6 +275,15 @@ where
}
false => (None, None.into()),
};
#[cfg(feature = "relay")]
let autorelay = protocols
.autorelay
.then(|| {
let config_fn = config.autorelay_config;
let config = config_fn(autorelay::Config::default());
autorelay::Behaviour::new_with_config(config)
})
.into();

#[cfg(not(feature = "relay"))]
let transport = None::<()>;
Expand Down Expand Up @@ -361,6 +375,8 @@ where
relay,
#[cfg(feature = "relay")]
relay_client,
#[cfg(feature = "relay")]
autorelay,
#[cfg(feature = "stream")]
stream,
#[cfg(not(target_arch = "wasm32"))]
Expand Down
Loading
Loading