Skip to content

Commit c99d3c7

Browse files
committed
Some improvements
1 parent 80ed31c commit c99d3c7

File tree

2 files changed

+13
-15
lines changed

2 files changed

+13
-15
lines changed

mullvad-relay-selector/src/relay_selector/mod.rs

+5-5
Original file line numberDiff line numberDiff line change
@@ -198,9 +198,6 @@ impl RuntimeParameters {
198198
}
199199
}
200200

201-
// Note: It is probably not a good idea to rely on derived default values to be correct for our use
202-
// case.
203-
#[allow(clippy::derivable_impls)]
204201
impl Default for RuntimeParameters {
205202
fn default() -> Self {
206203
RuntimeParameters {
@@ -649,7 +646,7 @@ impl RelaySelector {
649646
.filter(|query| runtime_params.compatible(query))
650647
.filter(|_query| runtime_params.compatible(&user_query))
651648
.filter_map(|query| query.clone().intersection(user_query.clone()))
652-
.map(|query| force_valid_ip_version(&query, runtime_params.clone()))
649+
.map(|query| force_valid_ip_version(&query, &runtime_params))
653650
.filter(|query| Self::get_relay_inner(query, parsed_relays, user_config.custom_lists).is_ok())
654651
.cycle() // If the above filters remove all relays, cycle will also return an empty iterator
655652
.nth(retry_attempt)
@@ -1181,7 +1178,10 @@ impl RelaySelector {
11811178
}
11821179
}
11831180

1184-
fn force_valid_ip_version(query: &RelayQuery, runtime_params: RuntimeParameters) -> RelayQuery {
1181+
/// If the selected ip version is Any we want to resolve that to an Only ip version if only
1182+
/// one ip version is available on the network. This is to avoid situations where in other parts
1183+
/// of the relay selector that Any is resolved to IPv4 and IPv4 is not available.
1184+
fn resolve_valid_ip_version(query: &RelayQuery, runtime_params: &RuntimeParameters) -> RelayQuery {
11851185
let mut wireguard_constraints = query.wireguard_constraints().clone();
11861186
if wireguard_constraints.ip_version.is_any() {
11871187
if runtime_params.ipv4 && !runtime_params.ipv6 {

mullvad-relay-selector/tests/relay_selector.rs

+8-10
Original file line numberDiff line numberDiff line change
@@ -1649,7 +1649,8 @@ fn test_shadowsocks_runtime_ipv4_unavailable() {
16491649
ipv6: true,
16501650
};
16511651
let user_result = relay_selector.get_relay(0, runtime_parameters).unwrap();
1652-
assert!(matches!(user_result, GetRelay::Wireguard {
1652+
assert!(
1653+
matches!(user_result, GetRelay::Wireguard {
16531654
obfuscator: Some(SelectedObfuscator {
16541655
config: ObfuscatorConfig::Shadowsocks {
16551656
endpoint,
@@ -1658,16 +1659,16 @@ fn test_shadowsocks_runtime_ipv4_unavailable() {
16581659
..
16591660
}),
16601661
..
1661-
} if endpoint.is_ipv6()), "expected IPv6 endpoint for Shadowsocks, got {user_result:?}");
1662+
} if endpoint.is_ipv6()),
1663+
"expected IPv6 endpoint for Shadowsocks, got {user_result:?}"
1664+
);
16621665
}
16631666

1664-
/// Check that if IPv4 is not available, and IPv6 endpoint is returned.
1667+
/// Check that if IPv4 is not available, a relay with an IPv6 endpoint is returned.
16651668
#[test]
16661669
fn test_runtime_ipv4_unavailable() {
16671670
// Make a valid user relay constraint
1668-
let (relay_constraints, _, _, _) = RelayQueryBuilder::wireguard()
1669-
.build()
1670-
.into_settings();
1671+
let (relay_constraints, _, _, _) = RelayQueryBuilder::wireguard().build().into_settings();
16711672

16721673
let config = SelectorConfig {
16731674
relay_settings: relay_constraints.into(),
@@ -1680,10 +1681,7 @@ fn test_runtime_ipv4_unavailable() {
16801681
};
16811682
let relay = relay_selector.get_relay(0, runtime_parameters).unwrap();
16821683
match relay {
1683-
GetRelay::Wireguard {
1684-
endpoint,
1685-
..
1686-
} => {
1684+
GetRelay::Wireguard { endpoint, .. } => {
16871685
assert!(
16881686
endpoint.peer.endpoint.is_ipv6(),
16891687
"expected IPv6 endpoint, got {endpoint:?}",

0 commit comments

Comments
 (0)