pub enum NatResolver {
Any,
Upnp,
PublicIp,
ExternalIp(IpAddr),
ExternalAddr(String),
NetIf,
None,
}Expand description
All builtin resolvers.
Variants§
Any
Resolve with any available resolver.
Upnp
Resolve external IP via UPnP.
PublicIp
Resolve external IP via a network request.
ExternalIp(IpAddr)
Use the given IpAddr
ExternalAddr(String)
Use the given domain name as the external address to expose to peers.
This is behaving essentially the same as NatResolver::ExternalIp, but supports domain
names. Domain names are resolved to IP addresses using the OS’s resolver. The first IP
address found is used.
This may be useful in docker bridge networks where containers are usually queried by DNS
instead of direct IP addresses.
Note: the domain shouldn’t include a port number. Only the IP address is resolved.
NetIf
Resolve external IP via the network interface.
None
Resolve nothing
Implementations§
Source§impl NatResolver
impl NatResolver
Sourcepub async fn external_addr(self) -> Option<IpAddr>
pub async fn external_addr(self) -> Option<IpAddr>
Attempts to produce an IP address (best effort).
§Panics
Network and interface resolution require an active Tokio runtime. Only
Self::ExternalIp and Self::None are guaranteed to work without one.
Sourcepub fn as_external_ip(self, port: u16) -> Option<IpAddr>
pub fn as_external_ip(self, port: u16) -> Option<IpAddr>
Returns the fixed ip, if it is NatResolver::ExternalIp or NatResolver::ExternalAddr.
In the case of NatResolver::ExternalAddr, it will return the first IP address found for
the domain. This performs blocking DNS resolution; async callers should use
Self::external_addr instead.
Trait Implementations§
Source§impl Clone for NatResolver
impl Clone for NatResolver
Source§impl Debug for NatResolver
impl Debug for NatResolver
Source§impl Default for NatResolver
impl Default for NatResolver
Source§impl<'de> Deserialize<'de> for NatResolver
Available on crate feature serde only.
impl<'de> Deserialize<'de> for NatResolver
serde only.Source§fn deserialize<__D>(deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(deserializer: __D) -> Result<Self, __D::Error>where
__D: Deserializer<'de>,
Source§impl Display for NatResolver
impl Display for NatResolver
impl Eq for NatResolver
Source§impl FromStr for NatResolver
impl FromStr for NatResolver
Source§impl Hash for NatResolver
impl Hash for NatResolver
Source§impl PartialEq for NatResolver
impl PartialEq for NatResolver
Source§impl Serialize for NatResolverwhere
Self: Display,
Available on crate feature serde only.
impl Serialize for NatResolverwhere
Self: Display,
serde only.impl StructuralPartialEq for NatResolver
Auto Trait Implementations§
impl Freeze for NatResolver
impl RefUnwindSafe for NatResolver
impl Send for NatResolver
impl Sync for NatResolver
impl Unpin for NatResolver
impl UnsafeUnpin for NatResolver
impl UnwindSafe for NatResolver
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Source§impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> CloneToUninit for Twhere
T: Clone,
impl<T> DeserializeOwned for Twhere
T: for<'de> Deserialize<'de>,
§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key and return true if they are equal.§impl<T> Instrument for T
impl<T> Instrument for T
§fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
fn instrument(self, span: Span) -> Instrumented<Self> ⓘ
§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
§impl<T> WithSubscriber for T
impl<T> WithSubscriber for T
§fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
fn with_subscriber<S>(self, subscriber: S) -> WithDispatch<Self> ⓘwhere
S: Into<Dispatch>,
§fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
fn with_current_subscriber(self) -> WithDispatch<Self> ⓘ
Layout§
Note: Most layout information is completely unstable and may even differ between compilations. The only exception is types with certain repr(...) attributes. Please see the Rust Reference's “Type Layout” chapter for details on type layout guarantees.
Size: 32 bytes
Size for each variant:
Any: 0 bytesUpnp: 0 bytesPublicIp: 0 bytesExternalIp: 17 bytesExternalAddr: 31 bytesNetIf: 0 bytesNone: 0 bytes