diff --git a/iroh-gossip/examples/chat.rs b/iroh-gossip/examples/chat.rs index 046aaa3c4b..f9b48ad6ca 100644 --- a/iroh-gossip/examples/chat.rs +++ b/iroh-gossip/examples/chat.rs @@ -9,8 +9,7 @@ use iroh_gossip::{ proto::{util::base32, Event, TopicId}, }; use iroh_net::{ - defaults::default_derp_map, - derp::DerpMap, + derp::{DerpMap, DerpMode}, key::{PublicKey, SecretKey}, magic_endpoint::accept_conn, MagicEndpoint, PeerAddr, @@ -95,13 +94,13 @@ async fn main() -> anyhow::Result<()> { println!("> our secret key: {}", base32::fmt(secret_key.to_bytes())); // configure our derp map - let derp_map = match (args.no_derp, args.derp) { - (false, None) => Some(default_derp_map()), - (false, Some(url)) => Some(DerpMap::from_url(url, 0)), - (true, None) => None, + let derp_mode = match (args.no_derp, args.derp) { + (false, None) => DerpMode::Default, + (false, Some(url)) => DerpMode::Custom(DerpMap::from_url(url, 0)), + (true, None) => DerpMode::Disabled, (true, Some(_)) => bail!("You cannot set --no-derp and --derp at the same time"), }; - println!("> using DERP servers: {}", fmt_derp_map(&derp_map)); + println!("> using DERP servers: {}", fmt_derp_mode(&derp_mode)); // init a cell that will hold our gossip handle to be used in endpoint callbacks let gossip_cell: OnceCell = OnceCell::new(); @@ -113,6 +112,7 @@ async fn main() -> anyhow::Result<()> { let endpoint = MagicEndpoint::builder() .secret_key(secret_key) .alpns(vec![GOSSIP_ALPN.to_vec()]) + .derp_mode(derp_mode) .on_endpoints({ let gossip_cell = gossip_cell.clone(); let notify = notify.clone(); @@ -124,12 +124,9 @@ async fn main() -> anyhow::Result<()> { // notify the outer task of the initial endpoint update (later updates are not interesting) notify.notify_one(); }) - }); - let endpoint = match derp_map { - Some(derp_map) => endpoint.enable_derp(derp_map), - None => endpoint, - }; - let endpoint = endpoint.bind(args.bind_port).await?; + }) + .bind(args.bind_port) + .await?; println!("> our peer id: {}", endpoint.peer_id()); // create the gossip protocol @@ -328,10 +325,11 @@ fn parse_secret_key(secret: &str) -> anyhow::Result { Ok(SecretKey::from(bytes)) } -fn fmt_derp_map(derp_map: &Option) -> String { - match derp_map { - None => "None".to_string(), - Some(map) => map +fn fmt_derp_mode(derp_mode: &DerpMode) -> String { + match derp_mode { + DerpMode::Disabled => "None".to_string(), + DerpMode::Default => "Default Derp servers".to_string(), + DerpMode::Custom(map) => map .regions() .flat_map(|region| region.nodes.iter().map(|node| node.url.to_string())) .collect::>() diff --git a/iroh-gossip/src/net.rs b/iroh-gossip/src/net.rs index 115a61ca9e..d77a9c2349 100644 --- a/iroh-gossip/src/net.rs +++ b/iroh-gossip/src/net.rs @@ -613,7 +613,10 @@ mod test { use std::time::Duration; use iroh_net::PeerAddr; - use iroh_net::{derp::DerpMap, MagicEndpoint}; + use iroh_net::{ + derp::{DerpMap, DerpMode}, + MagicEndpoint, + }; use tokio::spawn; use tokio::time::timeout; use tokio_util::sync::CancellationToken; @@ -624,7 +627,7 @@ mod test { async fn create_endpoint(derp_map: DerpMap) -> anyhow::Result { MagicEndpoint::builder() .alpns(vec![GOSSIP_ALPN.to_vec()]) - .enable_derp(derp_map) + .derp_mode(DerpMode::Custom(derp_map)) .bind(0) .await } diff --git a/iroh-net/examples/magic.rs b/iroh-net/examples/magic.rs index 73deb933cd..0d7b833d8d 100644 --- a/iroh-net/examples/magic.rs +++ b/iroh-net/examples/magic.rs @@ -2,8 +2,8 @@ use std::net::SocketAddr; use clap::Parser; use iroh_net::{ - defaults::{default_derp_map, TEST_REGION_ID}, - derp::DerpMap, + defaults::TEST_REGION_ID, + derp::{DerpMap, DerpMode}, key::SecretKey, magic_endpoint::accept_conn, MagicEndpoint, PeerAddr, @@ -50,16 +50,16 @@ async fn main() -> anyhow::Result<()> { Some(key) => parse_secret(&key)?, }; - let derp_map = match args.derp_url { - None => default_derp_map(), + let derp_mode = match args.derp_url { + None => DerpMode::Default, // use `region_id` 65535, which is reserved for testing and experiments - Some(url) => DerpMap::from_url(url, TEST_REGION_ID), + Some(url) => DerpMode::Custom(DerpMap::from_url(url, TEST_REGION_ID)), }; let endpoint = MagicEndpoint::builder() .secret_key(secret_key) .alpns(vec![args.alpn.to_string().into_bytes()]) - .enable_derp(derp_map) + .derp_mode(derp_mode) .bind(args.bind_port) .await?; diff --git a/iroh-net/src/derp.rs b/iroh-net/src/derp.rs index 44b114c440..9be0cac0cd 100644 --- a/iroh-net/src/derp.rs +++ b/iroh-net/src/derp.rs @@ -22,7 +22,7 @@ pub(crate) mod types; pub use self::client::{Client as DerpClient, ReceivedMessage}; pub use self::codec::MAX_PACKET_SIZE; pub use self::http::Client as HttpClient; -pub use self::map::{DerpMap, DerpNode, DerpRegion, UseIpv4, UseIpv6}; +pub use self::map::{DerpMap, DerpMode, DerpNode, DerpRegion, UseIpv4, UseIpv6}; pub use self::metrics::Metrics; pub use self::server::{ ClientConnHandler, MaybeTlsStream as MaybeTlsStreamServer, PacketForwarderHandler, Server, diff --git a/iroh-net/src/derp/map.rs b/iroh-net/src/derp/map.rs index be211d43eb..abb302ee98 100644 --- a/iroh-net/src/derp/map.rs +++ b/iroh-net/src/derp/map.rs @@ -13,8 +13,19 @@ use url::Url; use crate::defaults::DEFAULT_DERP_STUN_PORT; +/// Configuration options for the Derp servers of the magic endpoint. +#[derive(Debug, Clone, PartialEq, Eq)] +pub enum DerpMode { + /// Disable Derp servers completely. + Disabled, + /// Use the default Derp map, with Derp servers from n0. + Default, + /// Use a custom Derp map. + Custom(DerpMap), +} + /// Configuration of all the Derp servers that can be used. -#[derive(Debug, Default, Clone, PartialEq, Eq)] +#[derive(Debug, Clone, PartialEq, Eq)] pub struct DerpMap { /// A map of the different region IDs to the [`DerpRegion`] information regions: Arc>, @@ -28,6 +39,13 @@ impl DerpMap { ids } + /// Create an empty Derp map. + pub fn empty() -> Self { + Self { + regions: Default::default(), + } + } + /// Returns an `Iterator` over all known regions. pub fn regions(&self) -> impl Iterator { self.regions.values() diff --git a/iroh-net/src/magic_endpoint.rs b/iroh-net/src/magic_endpoint.rs index 047fc94fe9..714adc2143 100644 --- a/iroh-net/src/magic_endpoint.rs +++ b/iroh-net/src/magic_endpoint.rs @@ -10,7 +10,7 @@ use tracing::{debug, trace}; use crate::{ config, defaults::default_derp_map, - derp::DerpMap, + derp::{DerpMap, DerpMode}, key::{PublicKey, SecretKey}, magicsock::{self, Callbacks, MagicSock}, tls, @@ -112,7 +112,7 @@ impl PeerAddr { #[derive(Debug)] pub struct MagicEndpointBuilder { secret_key: Option, - derp_map: Option, + derp_mode: DerpMode, alpn_protocols: Vec>, transport_config: Option, concurrent_connections: Option, @@ -126,7 +126,7 @@ impl Default for MagicEndpointBuilder { fn default() -> Self { Self { secret_key: Default::default(), - derp_map: Some(default_derp_map()), + derp_mode: DerpMode::Default, alpn_protocols: Default::default(), transport_config: Default::default(), concurrent_connections: Default::default(), @@ -162,32 +162,19 @@ impl MagicEndpointBuilder { self } - /// Enables using DERP servers to assist in establishing connectivity. + /// Sets the DERP servers to assist in establishing connectivity. /// /// DERP servers are used to discover other peers by [`PublicKey`] and also help /// establish connections between peers by being an initial relay for traffic while /// assisting in holepunching to establish a direct connection between peers. /// - /// The provided `derp_map` must contain at least one region with a configured derp - /// node. If an invalid [`DerpMap`] is provided [`bind`] will result in an error. - /// - /// When calling neither this, nor [`disable_derp`] the builder uses the - /// [`default_derp_map`] containing number0's global derp servers. + /// When using [DerpMode::Custom], the provided `derp_map` must contain at least one + /// region with a configured derp node. If an invalid [`DerpMap`] is provided [`bind`] + /// will result in an error. /// /// [`bind`]: MagicEndpointBuilder::bind - /// [`disable_derp`]: MagicEndpointBuilder::disable_derp - pub fn enable_derp(mut self, derp_map: DerpMap) -> Self { - self.derp_map = Some(derp_map); - self - } - - /// Disables using DERP servers. - /// - /// See [`enable_derp`] for details. - /// - /// [`enable_derp`]: MagicEndpointBuilder::enable_derp - pub fn disable_derp(mut self) -> Self { - self.derp_map = None; + pub fn derp_mode(mut self, derp_mode: DerpMode) -> Self { + self.derp_mode = derp_mode; self } @@ -253,13 +240,14 @@ impl MagicEndpointBuilder { /// You can pass `0` to let the operating system choose a free port for you. /// NOTE: This will be improved soon to add support for binding on specific addresses. pub async fn bind(self, bind_port: u16) -> Result { - ensure!( - self.derp_map - .as_ref() - .map(|m| !m.is_empty()) - .unwrap_or(true), - "Derp server enabled but DerpMap is empty", - ); + let derp_map = match self.derp_mode { + DerpMode::Disabled => DerpMap::empty(), + DerpMode::Default => default_derp_map(), + DerpMode::Custom(derp_map) => { + ensure!(!derp_map.is_empty(), "Empty custom Derp server map",); + derp_map + } + }; let secret_key = self.secret_key.unwrap_or_else(SecretKey::generate); let mut server_config = make_server_config( &secret_key, @@ -273,7 +261,7 @@ impl MagicEndpointBuilder { let msock_opts = magicsock::Options { port: bind_port, secret_key, - derp_map: self.derp_map.unwrap_or_default(), + derp_map, callbacks: self.callbacks, peers_path: self.peers_path, }; @@ -579,7 +567,7 @@ mod tests { let ep = MagicEndpoint::builder() .secret_key(server_secret_key) .alpns(vec![TEST_ALPN.to_vec()]) - .enable_derp(derp_map) + .derp_mode(DerpMode::Custom(derp_map)) .bind(0) .await .unwrap(); @@ -612,7 +600,7 @@ mod tests { async move { let ep = MagicEndpoint::builder() .alpns(vec![TEST_ALPN.to_vec()]) - .enable_derp(derp_map) + .derp_mode(DerpMode::Custom(derp_map)) .bind(0) .await .unwrap(); diff --git a/iroh-net/src/magicsock.rs b/iroh-net/src/magicsock.rs index d85fe2e5d2..80b6280713 100644 --- a/iroh-net/src/magicsock.rs +++ b/iroh-net/src/magicsock.rs @@ -174,7 +174,7 @@ impl Default for Options { Options { port: 0, secret_key: SecretKey::generate(), - derp_map: Default::default(), + derp_map: DerpMap::empty(), callbacks: Default::default(), peers_path: None, } @@ -2648,7 +2648,7 @@ pub(crate) mod tests { use tracing_subscriber::{prelude::*, EnvFilter}; use super::*; - use crate::{test_utils::run_derper, tls, MagicEndpoint}; + use crate::{derp::DerpMode, test_utils::run_derper, tls, MagicEndpoint}; fn make_transmit(destination: SocketAddr) -> quinn_udp::Transmit { quinn_udp::Transmit { @@ -2797,7 +2797,7 @@ pub(crate) mod tests { on_derp_s.try_send(()).ok(); })) .transport_config(transport_config) - .enable_derp(derp_map) + .derp_mode(DerpMode::Custom(derp_map)) .alpns(vec![ALPN.to_vec()]) .bind(0) .await?; diff --git a/iroh/examples/sync.rs b/iroh/examples/sync.rs index 061f35d1cd..d5f3a09e0b 100644 --- a/iroh/examples/sync.rs +++ b/iroh/examples/sync.rs @@ -37,7 +37,9 @@ use iroh_gossip::{ }; use iroh_io::AsyncSliceReaderExt; use iroh_net::{ - defaults::default_derp_map, derp::DerpMap, key::SecretKey, magic_endpoint::get_alpn, + derp::{DerpMap, DerpMode}, + key::SecretKey, + magic_endpoint::get_alpn, MagicEndpoint, PeerAddr, }; use iroh_sync::{ @@ -130,13 +132,13 @@ async fn run(args: Args) -> anyhow::Result<()> { println!("> our secret key: {}", secret_key); // configure our derp map - let derp_map = match (args.no_derp, args.derp) { - (false, None) => Some(default_derp_map()), - (false, Some(url)) => Some(DerpMap::from_url(url, 0)), - (true, None) => None, + let derp_mode = match (args.no_derp, args.derp) { + (false, None) => DerpMode::Default, + (false, Some(url)) => DerpMode::Custom(DerpMap::from_url(url, 0)), + (true, None) => DerpMode::Disabled, (true, Some(_)) => bail!("You cannot set --no-derp and --derp at the same time"), }; - println!("> using DERP servers: {}", fmt_derp_map(&derp_map)); + println!("> using DERP servers: {}", fmt_derp_mode(&derp_mode)); // build our magic endpoint and the gossip protocol let (endpoint, gossip) = { @@ -152,6 +154,7 @@ async fn run(args: Args) -> anyhow::Result<()> { SYNC_ALPN.to_vec(), iroh_bytes::protocol::ALPN.to_vec(), ]) + .derp_mode(derp_mode) .on_endpoints({ let gossip_cell = gossip_cell.clone(); Box::new(move |endpoints| { @@ -162,12 +165,9 @@ async fn run(args: Args) -> anyhow::Result<()> { // trigger oneshot on the first endpoint update initial_endpoints_tx.try_send(endpoints.to_vec()).ok(); }) - }); - let endpoint = match derp_map { - Some(derp_map) => endpoint.enable_derp(derp_map), - None => endpoint, - }; - let endpoint = endpoint.bind(args.bind_port).await?; + }) + .bind(args.bind_port) + .await?; // initialize the gossip protocol let gossip = Gossip::from_endpoint(endpoint.clone(), Default::default()); @@ -956,10 +956,11 @@ fn fmt_hash(hash: impl AsRef<[u8]>) -> String { text.make_ascii_lowercase(); format!("{}…{}", &text[..5], &text[(text.len() - 2)..]) } -fn fmt_derp_map(derp_map: &Option) -> String { - match derp_map { - None => "None".to_string(), - Some(map) => map +fn fmt_derp_mode(derp_mode: &DerpMode) -> String { + match derp_mode { + DerpMode::Disabled => "None".to_string(), + DerpMode::Default => "Default Derp servers".to_string(), + DerpMode::Custom(map) => map .regions() .flat_map(|region| region.nodes.iter().map(|node| node.url.to_string())) .collect::>() diff --git a/iroh/src/commands/doctor.rs b/iroh/src/commands/doctor.rs index e9840a59dc..daebbc32f6 100644 --- a/iroh/src/commands/doctor.rs +++ b/iroh/src/commands/doctor.rs @@ -15,7 +15,7 @@ use iroh::util::progress::ProgressWriter; use iroh_net::{ config, defaults::{DEFAULT_DERP_STUN_PORT, TEST_REGION_ID}, - derp::{DerpMap, UseIpv4, UseIpv6}, + derp::{DerpMap, DerpMode, UseIpv4, UseIpv6}, key::{PublicKey, SecretKey}, netcheck, portmapper, MagicEndpoint, PeerAddr, }; @@ -246,7 +246,7 @@ async fn report( // creating a derp map from host name and stun port DerpMap::default_from_node(url, stun_port, UseIpv4::TryDns, UseIpv6::TryDns, 0) } - None => config.derp_map()?.unwrap_or_default(), + None => config.derp_map()?.unwrap_or_else(DerpMap::empty), }; println!("getting report using derp map {dm:#?}"); @@ -525,7 +525,7 @@ async fn make_endpoint( .on_endpoints(Box::new(on_endpoints)) .on_derp_active(Box::new(on_derp_active)); let endpoint = match derp_map { - Some(derp_map) => endpoint.enable_derp(derp_map), + Some(derp_map) => endpoint.derp_mode(DerpMode::Custom(derp_map)), None => endpoint, }; let endpoint = endpoint.bind(0).await?; diff --git a/iroh/src/commands/get.rs b/iroh/src/commands/get.rs index 5d306b2f51..a03e7e84f7 100644 --- a/iroh/src/commands/get.rs +++ b/iroh/src/commands/get.rs @@ -21,6 +21,7 @@ use iroh_bytes::{ Hash, }; use iroh_io::ConcatenateSliceWriter; +use iroh_net::derp::DerpMode; use tokio::sync::mpsc; use crate::commands::show_download_progress; @@ -72,7 +73,7 @@ impl GetInteractive { // spin up temp node and ask it to download the data for us let mut provider = iroh::node::Node::builder(db, doc_store); if let Some(ref dm) = self.opts.derp_map { - provider = provider.enable_derp(dm.clone()); + provider = provider.derp_mode(DerpMode::Custom(dm.clone())); } let provider = provider .runtime(&iroh_bytes::util::runtime::Handle::from_current(1)?) diff --git a/iroh/src/commands/node.rs b/iroh/src/commands/node.rs index 97fcbc0e46..aed3218b8d 100644 --- a/iroh/src/commands/node.rs +++ b/iroh/src/commands/node.rs @@ -14,7 +14,10 @@ use iroh::{ rpc_protocol::{ProviderRequest, ProviderResponse, ProviderService}, }; use iroh_bytes::{baomap::Store as BaoStore, protocol::RequestToken, util::runtime}; -use iroh_net::{derp::DerpMap, key::SecretKey}; +use iroh_net::{ + derp::{DerpMap, DerpMode}, + key::SecretKey, +}; use iroh_sync::store::{fs::Store as DocFsStore, Store as DocStore}; use quic_rpc::{transport::quinn::QuinnServerEndpoint, ServiceEndpoint}; use tokio::io::AsyncWriteExt; @@ -115,7 +118,7 @@ async fn spawn_daemon_node( .peers_data_path(peers_data_path) .keylog(opts.keylog); if let Some(dm) = opts.derp_map { - builder = builder.enable_derp(dm); + builder = builder.derp_mode(DerpMode::Custom(dm)); } let builder = builder.bind_addr(opts.addr).runtime(rt); diff --git a/iroh/src/dial.rs b/iroh/src/dial.rs index 49a966ebcc..864feb2317 100644 --- a/iroh/src/dial.rs +++ b/iroh/src/dial.rs @@ -10,7 +10,7 @@ use anyhow::{ensure, Context, Result}; use iroh_bytes::protocol::RequestToken; use iroh_bytes::util::BlobFormat; use iroh_bytes::Hash; -use iroh_net::derp::DerpMap; +use iroh_net::derp::{DerpMap, DerpMode}; use iroh_net::key::SecretKey; use iroh_net::PeerAddr; use serde::{Deserialize, Serialize}; @@ -37,10 +37,11 @@ pub async fn dial(opts: Options) -> anyhow::Result { let endpoint = iroh_net::MagicEndpoint::builder() .secret_key(opts.secret_key) .keylog(opts.keylog); - let endpoint = match opts.derp_map { - Some(derp_map) => endpoint.enable_derp(derp_map), - None => endpoint, + let derp_mode = match opts.derp_map { + Some(derp_map) => DerpMode::Custom(derp_map), + None => DerpMode::Default, }; + let endpoint = endpoint.derp_mode(derp_mode); let endpoint = endpoint.bind(0).await?; endpoint .connect(opts.peer, &iroh_bytes::protocol::ALPN) diff --git a/iroh/src/node.rs b/iroh/src/node.rs index d70a55ca3c..1514aed324 100644 --- a/iroh/src/node.rs +++ b/iroh/src/node.rs @@ -15,7 +15,7 @@ use std::sync::Arc; use std::task::Poll; use std::time::Duration; -use anyhow::{anyhow, bail, ensure, Context, Result}; +use anyhow::{anyhow, bail, Context, Result}; use bytes::Bytes; use futures::future::{BoxFuture, Shared}; use futures::{FutureExt, Stream, StreamExt, TryFutureExt}; @@ -36,12 +36,11 @@ use iroh_bytes::{ }; use iroh_gossip::net::{Gossip, GOSSIP_ALPN}; use iroh_io::AsyncSliceReader; -use iroh_net::defaults::default_derp_map; use iroh_net::magic_endpoint::get_alpn; use iroh_net::util::AbortingJoinHandle; use iroh_net::{ config::Endpoint, - derp::DerpMap, + derp::DerpMode, key::{PublicKey, SecretKey}, tls, MagicEndpoint, PeerAddr, }; @@ -124,7 +123,7 @@ pub struct Builder< keylog: bool, custom_get_handler: Arc, auth_handler: Arc, - derp_map: Option, + derp_mode: DerpMode, collection_parser: C, gc_policy: GcPolicy, rt: Option, @@ -182,7 +181,7 @@ impl Builder { secret_key: SecretKey::generate(), db, keylog: false, - derp_map: Some(default_derp_map()), + derp_mode: DerpMode::Default, rpc_endpoint: Default::default(), custom_get_handler: Arc::new(NoopCustomGetHandler), auth_handler: Arc::new(NoopRequestAuthorizationHandler), @@ -216,7 +215,7 @@ where custom_get_handler: self.custom_get_handler, auth_handler: self.auth_handler, rpc_endpoint: value, - derp_map: self.derp_map, + derp_mode: self.derp_mode, collection_parser: self.collection_parser, gc_policy: self.gc_policy, rt: self.rt, @@ -240,7 +239,7 @@ where custom_get_handler: self.custom_get_handler, auth_handler: self.auth_handler, rpc_endpoint: self.rpc_endpoint, - derp_map: self.derp_map, + derp_mode: self.derp_mode, gc_policy: self.gc_policy, rt: self.rt, docs: self.docs, @@ -256,31 +255,17 @@ where self } - /// Enables using DERP servers to assist in establishing connectivity. + /// Sets the DERP servers to assist in establishing connectivity. /// /// DERP servers are used to discover other nodes by [`PublicKey`] and also help /// establish connections between peers by being an initial relay for traffic while /// assisting in holepunching to establish a direct connection between peers. /// - /// The provided `derp_map` must contain at least one region with a configured derp - /// node. - /// - /// When calling neither this, nor [`disable_derp`] the builder uses the - /// [`default_derp_map`] containing number0's global derp servers. - /// - /// [`disable_derp`]: Builder::disable_derp - pub fn enable_derp(mut self, dm: DerpMap) -> Self { - self.derp_map = Some(dm); - self - } - - /// Disables using DERP servers. - /// - /// See [`enable_derp`] for details. - /// - /// [`enable_derp`]: Builder::enable_derp - pub fn disable_derp(mut self) -> Self { - self.derp_map = None; + /// When using [DerpMode::Custom], the provided `derp_map` must contain at least one + /// region with a configured derp node. If an invalid [`iroh_net::derp::DerpMap`] + /// is provided [`Self::spawn`] will result in an error. + pub fn derp_mode(mut self, dm: DerpMode) -> Self { + self.derp_mode = dm; self } @@ -346,14 +331,6 @@ where pub async fn spawn(self) -> Result> { trace!("spawning node"); let rt = self.rt.context("runtime not set")?; - ensure!( - self.derp_map - .as_ref() - .map(|m| !m.is_empty()) - .unwrap_or(true), - "Derp server enabled but DerpMap is empty", - ); - // Initialize the metrics collection. // // The metrics are global per process. Subsequent calls do not change the metrics @@ -375,6 +352,7 @@ where .keylog(self.keylog) .transport_config(transport_config) .concurrent_connections(MAX_CONNECTIONS) + .derp_mode(self.derp_mode) .on_endpoints(Box::new(move |eps| { if !eps.is_empty() { endpoints_update_s.send(eps.to_vec()).ok(); @@ -384,10 +362,6 @@ where Some(path) => endpoint.peers_data_path(path), None => endpoint, }; - let endpoint = match self.derp_map { - Some(derp_map) => endpoint.enable_derp(derp_map), - None => endpoint, - }; let endpoint = endpoint.bind(self.bind_addr.port()).await?; trace!("created quinn endpoint"); diff --git a/iroh/tests/provide.rs b/iroh/tests/provide.rs index 59eae3cb60..9b0a1eaaa3 100644 --- a/iroh/tests/provide.rs +++ b/iroh/tests/provide.rs @@ -57,7 +57,6 @@ fn test_node( let store = iroh_sync::store::memory::Store::default(); Node::builder(db, store) .collection_parser(LinkSeqCollectionParser) - .enable_derp(iroh_net::defaults::default_derp_map()) .bind_addr(addr) } @@ -732,7 +731,6 @@ async fn test_custom_collection_parser() { let doc_store = iroh_sync::store::memory::Store::default(); let node = Node::builder(db, doc_store) .collection_parser(CollectionsAreJustLinks) - .enable_derp(iroh_net::defaults::default_derp_map()) .bind_addr(addr) .runtime(&rt) .spawn() @@ -1056,7 +1054,6 @@ async fn test_token_passthrough() -> Result<()> { tokio::time::timeout(Duration::from_secs(30), async move { let endpoint = MagicEndpoint::builder() .secret_key(SecretKey::generate()) - .enable_derp(iroh_net::defaults::default_derp_map()) .keylog(true) .bind(0) .await?; diff --git a/iroh/tests/sync.rs b/iroh/tests/sync.rs index f8bfb0b534..cf05f52858 100644 --- a/iroh/tests/sync.rs +++ b/iroh/tests/sync.rs @@ -35,10 +35,7 @@ fn test_node( ) -> Builder { let db = iroh::baomap::mem::Store::new(rt.clone()); let store = iroh_sync::store::memory::Store::default(); - Node::builder(db, store) - .enable_derp(iroh_net::defaults::default_derp_map()) - .runtime(&rt) - .bind_addr(addr) + Node::builder(db, store).runtime(&rt).bind_addr(addr) } async fn spawn_node(