Enum hickory_proto::rr::rdata::svcb::SvcParamValue
source · pub enum SvcParamValue {
Mandatory(Mandatory),
Alpn(Alpn),
NoDefaultAlpn,
Port(u16),
Ipv4Hint(IpHint<A>),
EchConfigList(EchConfigList),
Ipv6Hint(IpHint<AAAA>),
Unknown(Unknown),
}
Expand description
Warning, it is currently up to users of this type to validate the data against that expected by the key
* a 2 octet field containing the length of the SvcParamValue as an
integer between 0 and 65535 in network byte order (but constrained
by the RDATA and DNS message sizes).
* an octet string of this length whose contents are in a format
determined by the SvcParamKey.
Variants§
Mandatory(Mandatory)
In a ServiceMode RR, a SvcParamKey is considered “mandatory” if the RR will not function correctly for clients that ignore this SvcParamKey. Each SVCB protocol mapping SHOULD specify a set of keys that are “automatically mandatory”, i.e. mandatory if they are present in an RR. The SvcParamKey “mandatory” is used to indicate any mandatory keys for this RR, in addition to any automatically mandatory keys that are present.
see Mandatory
Alpn(Alpn)
RFC 9460 SVCB and HTTPS Resource Records, Nov 2023
The "alpn" and "no-default-alpn" SvcParamKeys together indicate the
set of Application Layer Protocol Negotiation (ALPN) protocol
identifiers [Alpn] and associated transport protocols supported by
this service endpoint (the "SVCB ALPN set").
NoDefaultAlpn
For “no-default-alpn”, the presentation and wire format values MUST
be empty.
See also Alpn
Port(u16)
RFC 9460 SVCB and HTTPS Resource Records, Nov 2023
7.2. "port"
The "port" SvcParamKey defines the TCP or UDP port that should be
used to reach this alternative endpoint. If this key is not present,
clients SHALL use the authority endpoint's port number.
The presentation value of the SvcParamValue is a single decimal
integer between 0 and 65535 in ASCII. Any other value (e.g. an
empty value) is a syntax error. To enable simpler parsing, this
SvcParam MUST NOT contain escape sequences.
The wire format of the SvcParamValue is the corresponding 2 octet
numeric value in network byte order.
If a port-restricting firewall is in place between some client and
the service endpoint, changing the port number might cause that
client to lose access to the service, so operators should exercise
caution when using this SvcParamKey to specify a non-default port.
Ipv4Hint(IpHint<A>)
RFC 9460 SVCB and HTTPS Resource Records, Nov 2023
The “ipv4hint” and “ipv6hint” keys convey IP addresses that clients MAY use to reach the service. If A and AAAA records for TargetName are locally available, the client SHOULD ignore these hints. Otherwise, clients SHOULD perform A and/or AAAA queries for TargetName as in Section 3, and clients SHOULD use the IP address in those responses for future connections. Clients MAY opt to terminate any connections using the addresses in hints and instead switch to the addresses in response to the TargetName query. Failure to use A and/or AAAA response addresses could negatively impact load balancing or other geo-aware features and thereby degrade client performance.
see IpHint
EchConfigList(EchConfigList)
2. "SvcParam for ECH configuration"
The "ech" SvcParamKey is defined for conveying the ECH configuration
of an alternative endpoint. It is applicable to all TLS-based protocols
(including DTLS [RFC9147] and QUIC version 1 [RFC9001]) unless otherwise
specified.
Ipv6Hint(IpHint<AAAA>)
See IpHint
Unknown(Unknown)
Unparsed network data. Refer to documents on the associated key value
This will be left as is when read off the wire, and encoded in bas64 for presentation.
Implementations§
source§impl SvcParamValue
impl SvcParamValue
sourcepub fn is_mandatory(&self) -> bool
pub fn is_mandatory(&self) -> bool
Returns true if this is a SvcParamValue::Mandatory
, otherwise false
sourcepub fn as_mandatory_mut(&mut self) -> Option<&mut Mandatory>
pub fn as_mandatory_mut(&mut self) -> Option<&mut Mandatory>
Optionally returns mutable references to the inner fields if this is a SvcParamValue::Mandatory
, otherwise None
sourcepub fn as_mandatory(&self) -> Option<&Mandatory>
pub fn as_mandatory(&self) -> Option<&Mandatory>
Optionally returns references to the inner fields if this is a SvcParamValue::Mandatory
, otherwise None
sourcepub fn into_mandatory(self) -> Result<Mandatory, Self>
pub fn into_mandatory(self) -> Result<Mandatory, Self>
Returns the inner fields if this is a SvcParamValue::Mandatory
, otherwise returns back the enum in the Err
case of the result
sourcepub fn as_alpn_mut(&mut self) -> Option<&mut Alpn>
pub fn as_alpn_mut(&mut self) -> Option<&mut Alpn>
Optionally returns mutable references to the inner fields if this is a SvcParamValue::Alpn
, otherwise None
sourcepub fn as_alpn(&self) -> Option<&Alpn>
pub fn as_alpn(&self) -> Option<&Alpn>
Optionally returns references to the inner fields if this is a SvcParamValue::Alpn
, otherwise None
sourcepub fn into_alpn(self) -> Result<Alpn, Self>
pub fn into_alpn(self) -> Result<Alpn, Self>
Returns the inner fields if this is a SvcParamValue::Alpn
, otherwise returns back the enum in the Err
case of the result
sourcepub fn is_no_default_alpn(&self) -> bool
pub fn is_no_default_alpn(&self) -> bool
Returns true if this is a SvcParamValue::NoDefaultAlpn
, otherwise false
sourcepub fn as_port_mut(&mut self) -> Option<&mut u16>
pub fn as_port_mut(&mut self) -> Option<&mut u16>
Optionally returns mutable references to the inner fields if this is a SvcParamValue::Port
, otherwise None
sourcepub fn as_port(&self) -> Option<&u16>
pub fn as_port(&self) -> Option<&u16>
Optionally returns references to the inner fields if this is a SvcParamValue::Port
, otherwise None
sourcepub fn into_port(self) -> Result<u16, Self>
pub fn into_port(self) -> Result<u16, Self>
Returns the inner fields if this is a SvcParamValue::Port
, otherwise returns back the enum in the Err
case of the result
sourcepub fn is_ipv4_hint(&self) -> bool
pub fn is_ipv4_hint(&self) -> bool
Returns true if this is a SvcParamValue::Ipv4Hint
, otherwise false
sourcepub fn as_ipv4_hint_mut(&mut self) -> Option<&mut IpHint<A>>
pub fn as_ipv4_hint_mut(&mut self) -> Option<&mut IpHint<A>>
Optionally returns mutable references to the inner fields if this is a SvcParamValue::Ipv4Hint
, otherwise None
sourcepub fn as_ipv4_hint(&self) -> Option<&IpHint<A>>
pub fn as_ipv4_hint(&self) -> Option<&IpHint<A>>
Optionally returns references to the inner fields if this is a SvcParamValue::Ipv4Hint
, otherwise None
sourcepub fn into_ipv4_hint(self) -> Result<IpHint<A>, Self>
pub fn into_ipv4_hint(self) -> Result<IpHint<A>, Self>
Returns the inner fields if this is a SvcParamValue::Ipv4Hint
, otherwise returns back the enum in the Err
case of the result
sourcepub fn is_ech_config_list(&self) -> bool
pub fn is_ech_config_list(&self) -> bool
Returns true if this is a SvcParamValue::EchConfigList
, otherwise false
sourcepub fn as_ech_config_list_mut(&mut self) -> Option<&mut EchConfigList>
pub fn as_ech_config_list_mut(&mut self) -> Option<&mut EchConfigList>
Optionally returns mutable references to the inner fields if this is a SvcParamValue::EchConfigList
, otherwise None
sourcepub fn as_ech_config_list(&self) -> Option<&EchConfigList>
pub fn as_ech_config_list(&self) -> Option<&EchConfigList>
Optionally returns references to the inner fields if this is a SvcParamValue::EchConfigList
, otherwise None
sourcepub fn into_ech_config_list(self) -> Result<EchConfigList, Self>
pub fn into_ech_config_list(self) -> Result<EchConfigList, Self>
Returns the inner fields if this is a SvcParamValue::EchConfigList
, otherwise returns back the enum in the Err
case of the result
sourcepub fn is_ipv6_hint(&self) -> bool
pub fn is_ipv6_hint(&self) -> bool
Returns true if this is a SvcParamValue::Ipv6Hint
, otherwise false
sourcepub fn as_ipv6_hint_mut(&mut self) -> Option<&mut IpHint<AAAA>>
pub fn as_ipv6_hint_mut(&mut self) -> Option<&mut IpHint<AAAA>>
Optionally returns mutable references to the inner fields if this is a SvcParamValue::Ipv6Hint
, otherwise None
sourcepub fn as_ipv6_hint(&self) -> Option<&IpHint<AAAA>>
pub fn as_ipv6_hint(&self) -> Option<&IpHint<AAAA>>
Optionally returns references to the inner fields if this is a SvcParamValue::Ipv6Hint
, otherwise None
sourcepub fn into_ipv6_hint(self) -> Result<IpHint<AAAA>, Self>
pub fn into_ipv6_hint(self) -> Result<IpHint<AAAA>, Self>
Returns the inner fields if this is a SvcParamValue::Ipv6Hint
, otherwise returns back the enum in the Err
case of the result
sourcepub fn is_unknown(&self) -> bool
pub fn is_unknown(&self) -> bool
Returns true if this is a SvcParamValue::Unknown
, otherwise false
sourcepub fn as_unknown_mut(&mut self) -> Option<&mut Unknown>
pub fn as_unknown_mut(&mut self) -> Option<&mut Unknown>
Optionally returns mutable references to the inner fields if this is a SvcParamValue::Unknown
, otherwise None
sourcepub fn as_unknown(&self) -> Option<&Unknown>
pub fn as_unknown(&self) -> Option<&Unknown>
Optionally returns references to the inner fields if this is a SvcParamValue::Unknown
, otherwise None
sourcepub fn into_unknown(self) -> Result<Unknown, Self>
pub fn into_unknown(self) -> Result<Unknown, Self>
Returns the inner fields if this is a SvcParamValue::Unknown
, otherwise returns back the enum in the Err
case of the result
Trait Implementations§
source§impl BinEncodable for SvcParamValue
impl BinEncodable for SvcParamValue
source§fn emit(&self, encoder: &mut BinEncoder<'_>) -> ProtoResult<()>
fn emit(&self, encoder: &mut BinEncoder<'_>) -> ProtoResult<()>
source§impl Clone for SvcParamValue
impl Clone for SvcParamValue
source§fn clone(&self) -> SvcParamValue
fn clone(&self) -> SvcParamValue
1.0.0 · source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source
. Read moresource§impl Debug for SvcParamValue
impl Debug for SvcParamValue
source§impl<'de> Deserialize<'de> for SvcParamValue
impl<'de> Deserialize<'de> for SvcParamValue
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 SvcParamValue
impl Display for SvcParamValue
source§impl Hash for SvcParamValue
impl Hash for SvcParamValue
source§impl PartialEq for SvcParamValue
impl PartialEq for SvcParamValue
source§impl Serialize for SvcParamValue
impl Serialize for SvcParamValue
impl Eq for SvcParamValue
impl StructuralPartialEq for SvcParamValue
Auto Trait Implementations§
impl Freeze for SvcParamValue
impl RefUnwindSafe for SvcParamValue
impl Send for SvcParamValue
impl Sync for SvcParamValue
impl Unpin for SvcParamValue
impl UnwindSafe for SvcParamValue
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,
source§default unsafe fn clone_to_uninit(&self, dst: *mut T)
default unsafe fn clone_to_uninit(&self, dst: *mut T)
clone_to_uninit
)source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§impl<Q, K> Equivalent<K> for Q
impl<Q, K> Equivalent<K> for Q
source§fn equivalent(&self, key: &K) -> bool
fn equivalent(&self, key: &K) -> bool
key
and return true
if they are equal.