Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
2 changes: 1 addition & 1 deletion Cargo.lock

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions Cargo.toml
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@ homepage = "https://rustonbsd.github.io/2025/09/03/distributed-topic-tracker.htm
readme = "README.md"
keywords = ["networking"]
categories = ["network-programming"]
version = "0.2.5"
version = "0.2.6"
edition = "2024"

[features]
Expand All @@ -25,7 +25,7 @@ ed25519-dalek-hpke = { version = "0.0.5" }

tokio = { version = "1", default-features = false, features = ["macros", "time", "sync", "rt-multi-thread"] }

iroh = { version = "0.95", optional = true, default-features = false }
iroh = { version = "0.95.1", optional = true, default-features = false }
iroh-gossip = { version = "0.95", optional = true, default-features = false, features = ["net"]}

futures-lite = "2"
Expand Down
2 changes: 1 addition & 1 deletion examples/chat.rs
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ use iroh_gossip::{api::Event, net::Gossip};

use ed25519_dalek::SigningKey;

// Imports from distrubuted-topic-tracker
// Imports from distributed-topic-tracker
use distributed_topic_tracker::{AutoDiscoveryGossip, RecordPublisher, TopicId};

#[tokio::main]
Expand Down
65 changes: 65 additions & 0 deletions examples/custom_relay_discovery.rs
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
use anyhow::Result;
use ed25519_dalek::SigningKey;
use iroh::{Endpoint, RelayMap, SecretKey, discovery::{dns::DnsDiscovery, pkarr::PkarrPublisher}};
use iroh_gossip::net::Gossip;

// Imports from distrubuted-topic-tracker
use distributed_topic_tracker::{AutoDiscoveryGossip, RecordPublisher, TopicId};

#[tokio::main]
async fn main() -> Result<()> {
// Generate a new random secret key
let secret_key = SecretKey::generate(&mut rand::rng());
let signing_key = SigningKey::from_bytes(&secret_key.to_bytes());

// Set up endpoint with custom discovery enabled
let relay_map = iroh::RelayMap::empty();//iroh::defaults::prod::default_relay_map();
relay_map.extend(&RelayMap::from(
"https://iroh-relay.rustonbsd.com:8443/".parse::<iroh::RelayUrl>()?,
));
let dns_discovery = DnsDiscovery::builder("https://iroh-dns.rustonbsd.com/".parse()?).build();
let pkarr_publisher = PkarrPublisher::builder("https://iroh-relay.rustonbsd.com".parse()?).build(secret_key.clone());

let endpoint = Endpoint::builder()
.relay_mode(iroh::RelayMode::Custom(relay_map))
//.discovery(DnsDiscovery::n0_dns().build())
//.discovery(PkarrPublisher::n0_dns().build(secret_key.clone()))
.discovery(dns_discovery)
.discovery(pkarr_publisher)
.secret_key(secret_key.clone())
.bind()
.await?;

// Initialize gossip with auto-discovery
let gossip = Gossip::builder().spawn(endpoint.clone());

// Set up protocol router
let _router = iroh::protocol::Router::builder(endpoint.clone())
.accept(iroh_gossip::ALPN, gossip.clone())
.spawn();

let topic_id = TopicId::new("my-iroh-gossip-topic".to_string());
let initial_secret = b"my-initial-secret".to_vec();

// Split into sink (sending) and stream (receiving)

let record_publisher = RecordPublisher::new(
topic_id.clone(),
signing_key.verifying_key(),
signing_key.clone(),
None,
initial_secret,
);

let topic = gossip
.subscribe_and_join_with_auto_discovery(record_publisher)
.await?;

println!("[joined topic]");

// Do something with the gossip topic
// (bonus: GossipSender and GossipReceiver are safely clonable)
let (_gossip_sender, _gossip_receiver) = topic.split().await?;

Ok(())
}
14 changes: 13 additions & 1 deletion examples/e2e_test.rs
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
use anyhow::Result;
use iroh::{Endpoint, SecretKey};
use iroh::{Endpoint, RelayMap, SecretKey, discovery::{dns::DnsDiscovery, pkarr::PkarrPublisher}};
use iroh_gossip::net::Gossip;

// Imports from distrubuted-topic-tracker
Expand All @@ -11,8 +11,20 @@ async fn main() -> Result<()> {
let secret_key = SecretKey::generate(&mut rand::rng());
let signing_key = mainline::SigningKey::from_bytes(&secret_key.to_bytes());

let relay_map = iroh::RelayMap::empty();//iroh::defaults::prod::default_relay_map();
relay_map.extend(&RelayMap::from(
"https://iroh-relay.rustonbsd.com:8443/".parse::<iroh::RelayUrl>()?,
));
let dns_discovery = DnsDiscovery::builder("https://iroh-dns.rustonbsd.com/".parse()?).build();
let pkarr_publisher = PkarrPublisher::builder("https://iroh-relay.rustonbsd.com".parse()?).build(secret_key.clone());

// Set up endpoint with discovery enabled
let endpoint = Endpoint::builder()
.relay_mode(iroh::RelayMode::Custom(relay_map))
.discovery(DnsDiscovery::n0_dns().build())
.discovery(PkarrPublisher::n0_dns().build(secret_key.clone()))
.discovery(dns_discovery)
.discovery(pkarr_publisher)
.secret_key(secret_key.clone())
.bind()
.await?;
Expand Down
Loading