summaryrefslogtreecommitdiffhomepage
path: root/mullvad-management-interface
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2023-11-08 13:54:55 +0100
committerDavid Lönnhager <david.l@mullvad.net>2023-11-13 10:53:39 +0100
commitf49d4c49f73905f1aadd4a67ab47616e943c4e5b (patch)
treeeacd4a6a3adaab4d126ea635a2e5d4dc098191dd /mullvad-management-interface
parent4575d5e105bf38b4a75abbfd20f431b6bccf5d18 (diff)
downloadmullvadvpn-f49d4c49f73905f1aadd4a67ab47616e943c4e5b.tar.xz
mullvadvpn-f49d4c49f73905f1aadd4a67ab47616e943c4e5b.zip
Add proto message for relay overrides
Diffstat (limited to 'mullvad-management-interface')
-rw-r--r--mullvad-management-interface/proto/management_interface.proto7
-rw-r--r--mullvad-management-interface/src/types/conversions/relay_constraints.rs36
-rw-r--r--mullvad-management-interface/src/types/conversions/settings.rs11
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),