diff options
| author | David Lönnhager <david.l@mullvad.net> | 2021-02-08 17:22:32 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2021-02-10 11:23:23 +0100 |
| commit | 0a6747ef4a7f0139d0a9f63055deddbb8ada247f (patch) | |
| tree | 382b99178eee231422200b4d57833490c62b39b6 | |
| parent | ad0b9d39f439487650fca1fe5480b7b61ac03ab6 (diff) | |
| download | mullvadvpn-0a6747ef4a7f0139d0a9f63055deddbb8ada247f.tar.xz mullvadvpn-0a6747ef4a7f0139d0a9f63055deddbb8ada247f.zip | |
Update IPC interface to handle multiple providers
| -rw-r--r-- | mullvad-daemon/src/management_interface.rs | 52 | ||||
| -rw-r--r-- | mullvad-management-interface/proto/management_interface.proto | 8 |
2 files changed, 38 insertions, 22 deletions
diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs index 7faa0eee14..c87b846387 100644 --- a/mullvad-daemon/src/management_interface.rs +++ b/mullvad-daemon/src/management_interface.rs @@ -13,7 +13,7 @@ use mullvad_types::{ location::GeoIpLocation, relay_constraints::{ BridgeConstraints, BridgeSettings, BridgeState, Constraint, LocationConstraint, - OpenVpnConstraints, Provider, RelayConstraintsUpdate, RelaySettings, RelaySettingsUpdate, + OpenVpnConstraints, Providers, RelayConstraintsUpdate, RelaySettings, RelaySettingsUpdate, WireguardConstraints, }, relay_list::{Relay, RelayList, RelayListCountry}, @@ -241,12 +241,20 @@ impl ManagementService for ManagementServiceImpl { None => Constraint::Any, Some(location) => convert_proto_location(location), }; - let provider = match constraints.provider.as_ref() { - "" => Constraint::Any, - provider => Constraint::Only(String::from(provider)), + let providers = if constraints.providers.is_empty() { + Constraint::Any + } else { + Constraint::Only( + Providers::new(constraints.providers.clone().into_iter()).map_err( + |_| Status::invalid_argument("must specify at least one provider"), + )?, + ) }; - BridgeSettings::Normal(BridgeConstraints { location, provider }) + BridgeSettings::Normal(BridgeConstraints { + location, + providers, + }) } BridgeSettingType::Local(proxy_settings) => { let peer = proxy_settings @@ -928,15 +936,23 @@ fn convert_relay_settings_update( None }; + let providers = if let Some(ref provider_update) = settings.providers { + if !provider_update.providers.is_empty() { + Some(Constraint::Only( + Providers::new(provider_update.providers.clone().into_iter()).map_err( + |_| Status::invalid_argument("must specify at least one provider"), + )?, + )) + } else { + Some(Constraint::Any) + } + } else { + None + }; + Ok(RelaySettingsUpdate::Normal(RelayConstraintsUpdate { location, - provider: settings.provider.map(|provider_update| { - if !provider_update.provider.is_empty() { - Constraint::Only(provider_update.provider.clone()) - } else { - Constraint::Any - } - }), + providers, tunnel_protocol, wireguard_constraints: settings.wireguard_constraints.map(|constraints| { WireguardConstraints { @@ -975,7 +991,7 @@ fn convert_relay_settings(settings: &RelaySettings) -> types::RelaySettings { RelaySettings::Normal(constraints) => { relay_settings::Endpoint::Normal(types::NormalRelaySettings { location: convert_location_constraint(&constraints.location), - provider: convert_provider_constraint(&constraints.provider), + providers: convert_providers_constraint(&constraints.providers), tunnel_type: match constraints.tunnel_protocol { Constraint::Any => None, Constraint::Only(TunnelType::Wireguard) => Some(types::TunnelType::Wireguard), @@ -1070,7 +1086,7 @@ fn convert_bridge_settings(settings: &BridgeSettings) -> types::BridgeSettings { BridgeSettings::Normal(constraints) => { BridgeSettingType::Normal(types::bridge_settings::BridgeConstraints { location: convert_location_constraint(&constraints.location), - provider: convert_provider_constraint(&constraints.provider), + providers: convert_providers_constraint(&constraints.providers), }) } BridgeSettings::Custom(proxy_settings) => match proxy_settings { @@ -1157,10 +1173,10 @@ fn convert_location_constraint( }) } -fn convert_provider_constraint(provider: &Constraint<Provider>) -> String { - match provider.as_ref() { - Constraint::Any => "".to_string(), - Constraint::Only(ref provider) => provider.to_string(), +fn convert_providers_constraint(providers: &Constraint<Providers>) -> Vec<String> { + match providers.as_ref() { + Constraint::Any => vec![], + Constraint::Only(providers) => Vec::from(providers.clone()), } } diff --git a/mullvad-management-interface/proto/management_interface.proto b/mullvad-management-interface/proto/management_interface.proto index 755703c3ee..08b8a708d9 100644 --- a/mullvad-management-interface/proto/management_interface.proto +++ b/mullvad-management-interface/proto/management_interface.proto @@ -201,7 +201,7 @@ message AccountHistory { message BridgeSettings { message BridgeConstraints { RelayLocation location = 1; - string provider = 2; + repeated string providers = 2; } message LocalProxySettings { @@ -271,7 +271,7 @@ message TunnelTypeConstraint { message NormalRelaySettings { RelayLocation location = 1; - string provider = 2; + repeated string providers = 2; TunnelTypeConstraint tunnel_type = 3; WireguardConstraints wireguard_constraints = 4; OpenvpnConstraints openvpn_constraints = 5; @@ -280,14 +280,14 @@ message NormalRelaySettings { // Constraints are only updated for fields that are provided message NormalRelaySettingsUpdate { RelayLocation location = 1; - ProviderUpdate provider = 2; + ProviderUpdate providers = 2; TunnelTypeUpdate tunnel_type = 3; WireguardConstraints wireguard_constraints = 4; OpenvpnConstraints openvpn_constraints = 5; } message ProviderUpdate { - string provider = 1; + repeated string providers = 1; } message TunnelTypeUpdate { |
