summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2021-12-03 14:26:38 +0100
committerDavid Lönnhager <david.l@mullvad.net>2021-12-08 10:13:43 +0100
commit42560c3354b9a7d8bf46a8e831c6e2d00e770ef5 (patch)
tree664d89dbfc459b34396ec4fc0651dddb504241d9
parenteccfcb6a5f1729e56b318e2c522ca0dd40f7a5da (diff)
downloadmullvadvpn-42560c3354b9a7d8bf46a8e831c6e2d00e770ef5.tar.xz
mullvadvpn-42560c3354b9a7d8bf46a8e831c6e2d00e770ef5.zip
Send entry WireGuard relay hostname to frontends
-rw-r--r--mullvad-daemon/src/lib.rs11
-rw-r--r--mullvad-daemon/src/relays.rs10
-rw-r--r--mullvad-management-interface/proto/management_interface.proto1
-rw-r--r--mullvad-management-interface/src/types.rs1
-rw-r--r--mullvad-types/src/location.rs3
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,
}
}
}