diff options
| author | David Lönnhager <david.l@mullvad.net> | 2021-12-03 14:26:38 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2021-12-08 10:13:43 +0100 |
| commit | 42560c3354b9a7d8bf46a8e831c6e2d00e770ef5 (patch) | |
| tree | 664d89dbfc459b34396ec4fc0651dddb504241d9 | |
| parent | eccfcb6a5f1729e56b318e2c522ca0dd40f7a5da (diff) | |
| download | mullvadvpn-42560c3354b9a7d8bf46a8e831c6e2d00e770ef5.tar.xz mullvadvpn-42560c3354b9a7d8bf46a8e831c6e2d00e770ef5.zip | |
Send entry WireGuard relay hostname to frontends
| -rw-r--r-- | mullvad-daemon/src/lib.rs | 11 | ||||
| -rw-r--r-- | mullvad-daemon/src/relays.rs | 10 | ||||
| -rw-r--r-- | mullvad-management-interface/proto/management_interface.proto | 1 | ||||
| -rw-r--r-- | mullvad-management-interface/src/types.rs | 1 | ||||
| -rw-r--r-- | mullvad-types/src/location.rs | 3 |
5 files changed, 20 insertions, 6 deletions
diff --git a/mullvad-daemon/src/lib.rs b/mullvad-daemon/src/lib.rs index 4442db220e..b0292b4a8b 100644 --- a/mullvad-daemon/src/lib.rs +++ b/mullvad-daemon/src/lib.rs @@ -531,6 +531,7 @@ pub struct Daemon<L: EventListener> { relay_selector: relays::RelaySelector, last_generated_relay: Option<Relay>, last_generated_bridge_relay: Option<Relay>, + last_generated_entry_relay: Option<Relay>, app_version_info: Option<AppVersionInfo>, shutdown_tasks: Vec<Pin<Box<dyn Future<Output = ()>>>>, /// oneshot channel that completes once the tunnel state machine has been shut down @@ -755,6 +756,7 @@ where relay_selector, last_generated_relay: None, last_generated_bridge_relay: None, + last_generated_entry_relay: None, app_version_info, shutdown_tasks: vec![], tunnel_state_machine_shutdown_signal, @@ -988,6 +990,7 @@ where let result = match self.settings.get_relay_settings() { RelaySettings::CustomTunnelEndpoint(custom_relay) => { self.last_generated_relay = None; + self.last_generated_entry_relay = None; custom_relay // TODO(emilsp): generate proxy settings for custom tunnels .to_tunnel_parameters(self.settings.tunnel_options.clone(), None) @@ -1006,7 +1009,7 @@ where self.settings.get_wireguard().is_some(), ) .ok(); - if let Some((relay, endpoint)) = endpoint { + if let Some((relay, entry_relay, endpoint)) = endpoint { let result = self .create_tunnel_parameters( &relay, @@ -1016,6 +1019,7 @@ where ) .await; self.last_generated_relay = Some(relay); + self.last_generated_entry_relay = entry_relay; match result { Ok(result) => Ok(result), Err(Error::NoKeyAvailable) => { @@ -1459,6 +1463,10 @@ where .last_generated_bridge_relay .as_ref() .map(|bridge| bridge.hostname.clone()); + let entry_hostname = self + .last_generated_entry_relay + .as_ref() + .map(|entry| entry.hostname.clone()); let location = relay.location.as_ref().cloned().unwrap(); let hostname = relay.hostname.clone(); @@ -1472,6 +1480,7 @@ where mullvad_exit_ip: true, hostname: Some(hostname), bridge_hostname, + entry_hostname, }) } diff --git a/mullvad-daemon/src/relays.rs b/mullvad-daemon/src/relays.rs index 94b751ddb4..4eee17ac23 100644 --- a/mullvad-daemon/src/relays.rs +++ b/mullvad-daemon/src/relays.rs @@ -242,7 +242,7 @@ impl RelaySelector { bridge_state: BridgeState, retry_attempt: u32, wg_key_exists: bool, - ) -> Result<(Relay, MullvadEndpoint), Error> { + ) -> Result<(Relay, Option<Relay>, MullvadEndpoint), Error> { let mut exit_relay_constraints = relay_constraints.clone(); let wg_entry_is_subset = if let Some(entry_location) = exit_relay_constraints.wireguard_constraints.entry_location @@ -307,7 +307,7 @@ impl RelaySelector { "Selected entry relay {} at {}", entry_relay.hostname, addr_in ); - return Ok((exit_relay, entry_endpoint)); + return Ok((exit_relay, Some(entry_relay), entry_endpoint)); } else if relay_constraints .wireguard_constraints .entry_location @@ -317,7 +317,7 @@ impl RelaySelector { } } - Ok((exit_relay, endpoint)) + Ok((exit_relay, None, endpoint)) } fn get_tunnel_exit_endpoint( @@ -1431,7 +1431,7 @@ mod test { Some(Constraint::Only(location_specific.clone())); // The exit must not equal the entry - let (exit_relay, _exit_endpoint) = relay_selector + let (exit_relay, _entry_relay, _exit_endpoint) = relay_selector .get_tunnel_endpoint(&relay_constraints, BridgeState::Off, 0, true) .map_err(|error| error.to_string())?; @@ -1442,7 +1442,7 @@ mod test { Some(Constraint::Only(location_general)); // The entry must not equal the exit - let (exit_relay, exit_endpoint) = relay_selector + let (exit_relay, _entry_relay, exit_endpoint) = relay_selector .get_tunnel_endpoint(&relay_constraints, BridgeState::Off, 0, true) .map_err(|error| error.to_string())?; diff --git a/mullvad-management-interface/proto/management_interface.proto b/mullvad-management-interface/proto/management_interface.proto index a6d88bb0e0..ded1445fb8 100644 --- a/mullvad-management-interface/proto/management_interface.proto +++ b/mullvad-management-interface/proto/management_interface.proto @@ -211,6 +211,7 @@ message GeoIpLocation { bool mullvad_exit_ip = 7; string hostname = 8; string bridge_hostname = 9; + string entry_hostname = 10; } message BridgeSettings { diff --git a/mullvad-management-interface/src/types.rs b/mullvad-management-interface/src/types.rs index ba6774dbff..05e41ceee7 100644 --- a/mullvad-management-interface/src/types.rs +++ b/mullvad-management-interface/src/types.rs @@ -18,6 +18,7 @@ impl From<mullvad_types::location::GeoIpLocation> for GeoIpLocation { mullvad_exit_ip: geoip.mullvad_exit_ip, hostname: geoip.hostname.unwrap_or_default(), bridge_hostname: geoip.bridge_hostname.unwrap_or_default(), + entry_hostname: geoip.entry_hostname.unwrap_or_default(), } } } diff --git a/mullvad-types/src/location.rs b/mullvad-types/src/location.rs index 4fb1f05227..b9c460fa87 100644 --- a/mullvad-types/src/location.rs +++ b/mullvad-types/src/location.rs @@ -82,6 +82,8 @@ pub struct GeoIpLocation { pub hostname: Option<String>, #[cfg_attr(target_os = "android", jnix(skip))] pub bridge_hostname: Option<String>, + #[cfg_attr(target_os = "android", jnix(skip))] + pub entry_hostname: Option<String>, } impl From<AmIMullvad> for GeoIpLocation { @@ -101,6 +103,7 @@ impl From<AmIMullvad> for GeoIpLocation { mullvad_exit_ip: location.mullvad_exit_ip, hostname: None, bridge_hostname: None, + entry_hostname: None, } } } |
