iroh_net::endpoint

Struct Builder

Source
pub struct Builder { /* private fields */ }
Expand description

Builder for Endpoint.

By default the endpoint will generate a new random SecretKey, which will result in a new NodeId.

To create the Endpoint call Builder::bind.

Implementations§

Source§

impl Builder

Source

pub async fn bind(self) -> Result<Endpoint>

Binds the magic endpoint.

Source

pub fn bind_addr_v4(self, addr: SocketAddrV4) -> Self

Sets the IPv4 bind address.

Setting the port to 0 will use a random port. If the port specified is already in use, it will fallback to choosing a random port.

By default will use 0.0.0.0:0 to bind to.

Source

pub fn bind_addr_v6(self, addr: SocketAddrV6) -> Self

Sets the IPv6 bind address.

Setting the port to 0 will use a random port. If the port specified is already in use, it will fallback to choosing a random port.

By default will use [::]:0 to bind to.

Source

pub fn secret_key(self, secret_key: SecretKey) -> Self

Sets a secret key to authenticate with other peers.

This secret key’s public key will be the PublicKey of this endpoint and thus also its NodeId

If not set, a new secret key will be generated.

Source

pub fn alpns(self, alpn_protocols: Vec<Vec<u8>>) -> Self

Sets the ALPN protocols that this endpoint will accept on incoming connections.

Not setting this will still allow creating connections, but to accept incoming connections the ALPN must be set.

Source

pub fn relay_mode(self, relay_mode: RelayMode) -> Self

Sets the relay servers to assist in establishing connectivity.

Relay servers are used to establish initial connection with another iroh-net node. They also perform various functions related to hole punching, see the crate docs for more details.

By default the number 0 relay servers are used, see RelayMode::Default.

When using RelayMode::Custom, the provided relay_map must contain at least one configured relay node. If an invalid RelayMap is provided bind will result in an error.

Source

pub fn clear_discovery(self) -> Self

Removes all discovery services from the builder.

Source

pub fn discovery(self, discovery: Box<dyn Discovery>) -> Self

Optionally sets a discovery mechanism for this endpoint.

If you want to combine multiple discovery services, you can use Builder::add_discovery instead. This will internally create a crate::discovery::ConcurrentDiscovery.

If no discovery service is set, connecting to a node without providing its direct addresses or relay URLs will fail.

See the documentation of the Discovery trait for details.

Source

pub fn add_discovery<F, D>(self, discovery: F) -> Self
where F: FnOnce(&SecretKey) -> Option<D> + Send + Sync + 'static, D: Discovery + 'static,

Adds a discovery mechanism for this endpoint.

The function discovery will be called on endpoint creation with the configured secret key of the endpoint. Discovery services that need to publish information need to use this secret key to sign the information.

If you add multiple discovery services, they will be combined using a crate::discovery::ConcurrentDiscovery.

If no discovery service is set, connecting to a node without providing its direct addresses or relay URLs will fail.

To clear all discovery services, use Builder::clear_discovery.

See the documentation of the Discovery trait for details.

Source

pub fn discovery_n0(self) -> Self

Configures the endpoint to use the default n0 DNS discovery service.

The default discovery service publishes to and resolves from the n0.computer dns server iroh.link.

This is equivalent to adding both a crate::discovery::pkarr::PkarrPublisher and a crate::discovery::dns::DnsDiscovery, both configured to use the n0.computer dns server.

This will by default use N0_DNS_PKARR_RELAY_PROD. When in tests, or when the test-utils feature is enabled, this will use the N0_DNS_PKARR_RELAY_STAGING.

Source

pub fn discovery_dht(self) -> Self

Configures the endpoint to also use the mainline DHT with default settings.

This is equivalent to adding a crate::discovery::pkarr::dht::DhtDiscovery with default settings. Note that DhtDiscovery has various more advanced configuration options. If you need any of those, you should manually create a DhtDiscovery and add it with Builder::add_discovery.

Source

pub fn discovery_local_network(self) -> Self

Configures the endpoint to also use local network discovery.

This is equivalent to adding a crate::discovery::local_swarm_discovery::LocalSwarmDiscovery with default settings. Note that LocalSwarmDiscovery has various more advanced configuration options. If you need any of those, you should manually create a LocalSwarmDiscovery and add it with Builder::add_discovery.

Source

pub fn known_nodes(self, nodes: Vec<NodeAddr>) -> Self

Optionally set a list of known nodes.

Source

pub fn transport_config(self, transport_config: TransportConfig) -> Self

Sets a custom quinn::TransportConfig for this endpoint.

The transport config contains parameters governing the QUIC state machine.

If unset, the default config is used. Default values should be suitable for most internet applications. Applications protocols which forbid remotely-initiated streams should set max_concurrent_bidi_streams and max_concurrent_uni_streams to zero.

Source

pub fn dns_resolver(self, dns_resolver: DnsResolver) -> Self

Optionally sets a custom DNS resolver to use for this endpoint.

The DNS resolver is used to resolve relay hostnames, and node addresses if crate::discovery::dns::DnsDiscovery is configured.

By default, all endpoints share a DNS resolver, which is configured to use the host system’s DNS configuration. You can pass a custom instance of DnsResolver here to use a differently configured DNS resolver for this endpoint.

Source

pub fn proxy_url(self, url: Url) -> Self

Sets an explicit proxy url to proxy all HTTP(S) traffic through.

Source

pub fn proxy_from_env(self) -> Self

Sets the proxy url from the environment, in this order:

  • HTTP_PROXY
  • http_proxy
  • HTTPS_PROXY
  • https_proxy
Source

pub fn keylog(self, keylog: bool) -> Self

Enables saving the TLS pre-master key for connections.

This key should normally remain secret but can be useful to debug networking issues by decrypting captured traffic.

If keylog is true then setting the SSLKEYLOGFILE environment variable to a filename will result in this file being used to log the TLS pre-master keys.

Source

pub fn insecure_skip_relay_cert_verify(self, skip_verify: bool) -> Self

Available on test or crate feature test-utils only.

Skip verification of SSL certificates from relay servers

May only be used in tests.

Trait Implementations§

Source§

impl Debug for Builder

Source§

fn fmt(&self, __derive_more_f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Default for Builder

Source§

fn default() -> Self

Returns the “default value” for a type. Read more

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<'a, T, E> AsTaggedExplicit<'a, E> for T
where T: 'a,

Source§

fn explicit(self, class: Class, tag: u32) -> TaggedParser<'a, Explicit, Self, E>

Source§

impl<'a, T, E> AsTaggedImplicit<'a, E> for T
where T: 'a,

Source§

fn implicit( self, class: Class, constructed: bool, tag: u32, ) -> TaggedParser<'a, Implicit, Self, E>

Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T> Instrument for T

Source§

fn instrument(self, span: Span) -> Instrumented<Self>

Instruments this type with the provided Span, returning an Instrumented wrapper. Read more
Source§

fn in_current_span(self) -> Instrumented<Self>

Instruments this type with the current Span, returning an Instrumented wrapper. Read more
Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> Same for T

Source§

type Output = T

Should always be Self
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = Infallible

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, <T as TryFrom<U>>::Error>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.
Source§

impl<V, T> VZip<V> for T
where V: MultiLane<T>,

Source§

fn vzip(self) -> V

Source§

impl<T> WithSubscriber for T

Source§

fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self>
where S: Into<Dispatch>,

Attaches the provided Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

fn with_current_subscriber(self) -> WithDispatch<Self>

Attaches the current default Subscriber to this type, returning a WithDispatch wrapper. Read more
Source§

impl<T> ErasedDestructor for T
where T: 'static,

Source§

impl<T> MaybeSendSync for T