diff options
| author | David Lönnhager <david.l@mullvad.net> | 2023-11-08 13:54:55 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2023-11-13 10:53:39 +0100 |
| commit | f49d4c49f73905f1aadd4a67ab47616e943c4e5b (patch) | |
| tree | eacd4a6a3adaab4d126ea635a2e5d4dc098191dd /mullvad-management-interface | |
| parent | 4575d5e105bf38b4a75abbfd20f431b6bccf5d18 (diff) | |
| download | mullvadvpn-f49d4c49f73905f1aadd4a67ab47616e943c4e5b.tar.xz mullvadvpn-f49d4c49f73905f1aadd4a67ab47616e943c4e5b.zip | |
Add proto message for relay overrides
Diffstat (limited to 'mullvad-management-interface')
3 files changed, 54 insertions, 0 deletions
diff --git a/mullvad-management-interface/proto/management_interface.proto b/mullvad-management-interface/proto/management_interface.proto index 0eefd9a1db..17854b6956 100644 --- a/mullvad-management-interface/proto/management_interface.proto +++ b/mullvad-management-interface/proto/management_interface.proto @@ -390,6 +390,13 @@ message Settings { ObfuscationSettings obfuscation_settings = 10; CustomListSettings custom_lists = 11; ApiAccessMethodSettings api_access_methods = 12; + repeated RelayOverride relay_overrides = 13; +} + +message RelayOverride { + string hostname = 1; + optional string ipv4_addr_in = 2; + optional string ipv6_addr_in = 3; } message SplitTunnelSettings { diff --git a/mullvad-management-interface/src/types/conversions/relay_constraints.rs b/mullvad-management-interface/src/types/conversions/relay_constraints.rs index cff2bb5847..a1d468c976 100644 --- a/mullvad-management-interface/src/types/conversions/relay_constraints.rs +++ b/mullvad-management-interface/src/types/conversions/relay_constraints.rs @@ -545,6 +545,42 @@ impl TryFrom<proto::TransportPort> for mullvad_types::relay_constraints::Transpo } } +impl From<mullvad_types::relay_constraints::RelayOverride> for proto::RelayOverride { + fn from(r#override: mullvad_types::relay_constraints::RelayOverride) -> proto::RelayOverride { + proto::RelayOverride { + hostname: r#override.hostname, + ipv4_addr_in: r#override.ipv4_addr_in.map(|addr| addr.to_string()), + ipv6_addr_in: r#override.ipv6_addr_in.map(|addr| addr.to_string()), + } + } +} + +impl TryFrom<proto::RelayOverride> for mullvad_types::relay_constraints::RelayOverride { + type Error = FromProtobufTypeError; + + fn try_from( + r#override: proto::RelayOverride, + ) -> Result<mullvad_types::relay_constraints::RelayOverride, Self::Error> { + Ok(mullvad_types::relay_constraints::RelayOverride { + hostname: r#override.hostname, + ipv4_addr_in: r#override + .ipv4_addr_in + .map(|addr| { + addr.parse() + .map_err(|_| FromProtobufTypeError::InvalidArgument("invalid IPv4 address")) + }) + .transpose()?, + ipv6_addr_in: r#override + .ipv6_addr_in + .map(|addr| { + addr.parse() + .map_err(|_| FromProtobufTypeError::InvalidArgument("invalid IPv6 address")) + }) + .transpose()?, + }) + } +} + pub fn try_providers_constraint_from_proto( providers: &[String], ) -> Result<Constraint<mullvad_types::relay_constraints::Providers>, FromProtobufTypeError> { diff --git a/mullvad-management-interface/src/types/conversions/settings.rs b/mullvad-management-interface/src/types/conversions/settings.rs index c18e7aab57..a7c4bcd78c 100644 --- a/mullvad-management-interface/src/types/conversions/settings.rs +++ b/mullvad-management-interface/src/types/conversions/settings.rs @@ -45,6 +45,12 @@ impl From<&mullvad_types::settings::Settings> for proto::Settings { api_access_methods: Some(proto::ApiAccessMethodSettings::from( &settings.api_access_methods, )), + relay_overrides: settings + .relay_overrides + .iter() + .cloned() + .map(proto::RelayOverride::from) + .collect(), } } } @@ -168,6 +174,11 @@ impl TryFrom<proto::Settings> for mullvad_types::settings::Settings { block_when_disconnected: settings.block_when_disconnected, auto_connect: settings.auto_connect, tunnel_options: mullvad_types::settings::TunnelOptions::try_from(tunnel_options)?, + relay_overrides: settings + .relay_overrides + .into_iter() + .map(mullvad_types::relay_constraints::RelayOverride::try_from) + .collect::<Result<Vec<_>, _>>()?, show_beta_releases: settings.show_beta_releases, #[cfg(windows)] split_tunnel: mullvad_types::settings::SplitTunnelSettings::from(split_tunnel), |
