Enum NatResolver
pub enum NatResolver {
Any,
Upnp,
PublicIp,
ExternalIp(IpAddr),
ExternalAddr(String),
NetIf,
None,
}Expand description
reexport to get public ip. 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§
§impl NatResolver
impl NatResolver
pub 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.
pub 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§
§impl Clone for NatResolver
impl Clone for NatResolver
§fn clone(&self) -> NatResolver
fn clone(&self) -> NatResolver
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more§impl Debug for NatResolver
impl Debug for NatResolver
§impl Default for NatResolver
impl Default for NatResolver
§fn default() -> NatResolver
fn default() -> NatResolver
§impl<'de> Deserialize<'de> for NatResolver
impl<'de> Deserialize<'de> for NatResolver
§fn deserialize<__D>(
deserializer: __D,
) -> Result<NatResolver, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
fn deserialize<__D>(
deserializer: __D,
) -> Result<NatResolver, <__D as Deserializer<'de>>::Error>where
__D: Deserializer<'de>,
§impl Display for NatResolver
impl Display for NatResolver
impl Eq for NatResolver
§impl FromStr for NatResolver
impl FromStr for NatResolver
§impl Hash for NatResolver
impl Hash for NatResolver
§impl PartialEq for NatResolver
impl PartialEq for NatResolver
§impl Serialize for NatResolverwhere
NatResolver: Display,
impl Serialize for NatResolverwhere
NatResolver: Display,
§fn serialize<__S>(
&self,
serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
fn serialize<__S>(
&self,
serializer: __S,
) -> Result<<__S as Serializer>::Ok, <__S as Serializer>::Error>where
__S: Serializer,
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
impl<ST, DT> CastableFrom<ST, Initialized, Initialized> for DT
impl<ST, DT> CastableFrom<ST, Uninit, Uninit> for DT
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> ⓘ
Source§impl<T> IntoEither for T
impl<T> IntoEither for T
Source§fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
fn into_either(self, into_left: bool) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left is true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read moreSource§fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
fn into_either_with<F>(self, into_left: F) -> Either<Self, Self> ⓘ
self into a Left variant of Either<Self, Self>
if into_left(&self) returns true.
Converts self into a Right variant of Either<Self, Self>
otherwise. Read more§impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> PolicyExt for Twhere
T: ?Sized,
impl<T> Read<Exclusive, BecauseExclusive> 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