diff options
| author | David Lönnhager <david.l@mullvad.net> | 2024-08-14 13:21:07 +0200 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2024-08-16 09:13:30 +0200 |
| commit | 57285fa162fced4bd62ff6bb7b71e1e0ccd42309 (patch) | |
| tree | 7b39314a6c384b8cce7bc091d0a7d9a99e6cb819 /mullvad-management-interface/src | |
| parent | 7b305bf624fe19e783fba8a46edf9fa54ed0d1d0 (diff) | |
| download | mullvadvpn-57285fa162fced4bd62ff6bb7b71e1e0ccd42309.tar.xz mullvadvpn-57285fa162fced4bd62ff6bb7b71e1e0ccd42309.zip | |
Use range types for all port ranges
Breaks backwards compatibility with relays.json (which is acceptable)
Diffstat (limited to 'mullvad-management-interface/src')
| -rw-r--r-- | mullvad-management-interface/src/types/conversions/relay_list.rs | 43 |
1 files changed, 21 insertions, 22 deletions
diff --git a/mullvad-management-interface/src/types/conversions/relay_list.rs b/mullvad-management-interface/src/types/conversions/relay_list.rs index 83f56b1595..e38b32eeed 100644 --- a/mullvad-management-interface/src/types/conversions/relay_list.rs +++ b/mullvad-management-interface/src/types/conversions/relay_list.rs @@ -1,5 +1,6 @@ use std::{ net::{Ipv4Addr, Ipv6Addr}, + ops::RangeInclusive, str::FromStr, }; @@ -79,11 +80,11 @@ impl From<mullvad_types::relay_list::WireguardEndpointData> for proto::Wireguard } } -impl From<(u16, u16)> for proto::PortRange { - fn from(range: (u16, u16)) -> Self { +impl From<RangeInclusive<u16>> for proto::PortRange { + fn from(range: RangeInclusive<u16>) -> Self { proto::PortRange { - first: u32::from(range.0), - last: u32::from(range.1), + first: u32::from(*range.start()), + last: u32::from(*range.end()), } } } @@ -373,14 +374,8 @@ impl TryFrom<proto::WireguardEndpointData> for mullvad_types::relay_list::Wiregu let port_ranges = wireguard .port_ranges .into_iter() - .map(|range| { - let first = u16::try_from(range.first) - .map_err(|_| FromProtobufTypeError::InvalidArgument("invalid wg port"))?; - let last = u16::try_from(range.last) - .map_err(|_| FromProtobufTypeError::InvalidArgument("invalid wg port"))?; - Ok((first, last)) - }) - .collect::<Result<Vec<(u16, u16)>, FromProtobufTypeError>>()?; + .map(RangeInclusive::try_from) + .collect::<Result<Vec<_>, FromProtobufTypeError>>()?; let ipv4_gateway = Ipv4Addr::from_str(&wireguard.ipv4_gateway) .map_err(|_| FromProtobufTypeError::InvalidArgument("Invalid IPv4 gateway"))?; @@ -390,16 +385,8 @@ impl TryFrom<proto::WireguardEndpointData> for mullvad_types::relay_list::Wiregu let shadowsocks_port_ranges = wireguard .shadowsocks_port_ranges .into_iter() - .map(|range| { - let first = u16::try_from(range.first).map_err(|_| { - FromProtobufTypeError::InvalidArgument("invalid shadowsocks port") - })?; - let last = u16::try_from(range.last).map_err(|_| { - FromProtobufTypeError::InvalidArgument("invalid shadowsocks port") - })?; - Ok((first, last)) - }) - .collect::<Result<Vec<(u16, u16)>, FromProtobufTypeError>>()?; + .map(RangeInclusive::try_from) + .collect::<Result<Vec<_>, FromProtobufTypeError>>()?; let udp2tcp_ports = wireguard .udp2tcp_ports @@ -419,3 +406,15 @@ impl TryFrom<proto::WireguardEndpointData> for mullvad_types::relay_list::Wiregu }) } } + +impl TryFrom<proto::PortRange> for RangeInclusive<u16> { + type Error = FromProtobufTypeError; + + fn try_from(range: proto::PortRange) -> Result<Self, Self::Error> { + let first = u16::try_from(range.first) + .map_err(|_| FromProtobufTypeError::InvalidArgument("invalid port"))?; + let last = u16::try_from(range.last) + .map_err(|_| FromProtobufTypeError::InvalidArgument("invalid port"))?; + Ok(first..=last) + } +} |
