Skip to content

Commit 8372b4d

Browse files
committed
Remove unneeded trait and complexity
1 parent d9cefe5 commit 8372b4d

File tree

3 files changed

+52
-60
lines changed

3 files changed

+52
-60
lines changed

mullvad-daemon/src/api.rs

+12-14
Original file line numberDiff line numberDiff line change
@@ -10,33 +10,31 @@ use mullvad_api::{
1010
};
1111
use mullvad_encrypted_dns_proxy::state::EncryptedDnsProxyState;
1212
use mullvad_management_interface::async_trait;
13-
use mullvad_types::{
14-
access_method::{AccessMethod, AccessMethodSetting, BuiltInAccessMethod},
15-
relay_list::ShadowsocksBridgeProvider,
16-
};
13+
use mullvad_relay_selector::RelaySelector;
14+
use mullvad_types::access_method::{AccessMethod, AccessMethodSetting, BuiltInAccessMethod};
1715
#[cfg(target_os = "android")]
1816
use talpid_core::mpsc::Sender;
1917
use talpid_types::net::{proxy::CustomProxy, AllowedClients, Connectivity};
2018

21-
pub struct BridgeAndDNSProxyProvider<T> {
22-
bridge_provider: T,
19+
pub struct BridgeAndDNSProxyProvider {
20+
relay_selector: RelaySelector,
2321
encrypted_dns_proxy_cache: EncryptedDnsProxyState,
2422
}
2523

26-
impl<T: ShadowsocksBridgeProvider> BridgeAndDNSProxyProvider<T> {
27-
pub fn new(bridge_provider: T, encrypted_dns_proxy_cache: EncryptedDnsProxyState) -> Self {
24+
impl BridgeAndDNSProxyProvider {
25+
pub fn new(
26+
relay_selector: RelaySelector,
27+
encrypted_dns_proxy_cache: EncryptedDnsProxyState,
28+
) -> Self {
2829
Self {
29-
bridge_provider,
30+
relay_selector,
3031
encrypted_dns_proxy_cache,
3132
}
3233
}
3334
}
3435

3536
#[async_trait]
36-
impl<T> BridgeAndDNSProxy for BridgeAndDNSProxyProvider<T>
37-
where
38-
T: ShadowsocksBridgeProvider,
39-
{
37+
impl BridgeAndDNSProxy for BridgeAndDNSProxyProvider {
4038
async fn match_access_method(
4139
&mut self,
4240
access_method: &AccessMethodSetting,
@@ -45,7 +43,7 @@ where
4543
match &access_method.access_method {
4644
AccessMethod::BuiltIn(BuiltInAccessMethod::Direct) => ApiConnectionMode::Direct,
4745
AccessMethod::BuiltIn(BuiltInAccessMethod::Bridge) => {
48-
let Some(bridge) = self.bridge_provider.get_bridge_forced() else {
46+
let Some(bridge) = self.relay_selector.get_bridge_forced() else {
4947
log::warn!("Could not select a Mullvad bridge");
5048
log::debug!("The relay list might be empty");
5149
return None;

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

+40-42
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ use mullvad_types::{
3939
OpenVpnConstraints, RelayConstraints, RelayOverride, RelaySettings, ResolvedBridgeSettings,
4040
WireguardConstraints,
4141
},
42-
relay_list::{Relay, RelayEndpointData, RelayList, ShadowsocksBridgeProvider},
42+
relay_list::{Relay, RelayEndpointData, RelayList},
4343
settings::Settings,
4444
wireguard::QuantumResistantState,
4545
CustomTunnelEndpoint, Intersection,
@@ -432,47 +432,6 @@ impl<'a> TryFrom<NormalSelectorConfig<'a>> for RelayQuery {
432432
}
433433
}
434434

435-
impl ShadowsocksBridgeProvider for RelaySelector {
436-
/// Returns a non-custom bridge based on the relay and bridge constraints, ignoring the bridge
437-
/// state.
438-
fn get_bridge_forced(&self) -> Option<Shadowsocks> {
439-
let parsed_relays = &self.parsed_relays.lock().unwrap().parsed_list().clone();
440-
let config = self.config.lock().unwrap();
441-
let specialized_config = SpecializedSelectorConfig::from(&*config);
442-
443-
let near_location = match specialized_config {
444-
SpecializedSelectorConfig::Normal(config) => RelayQuery::try_from(config.clone())
445-
.ok()
446-
.and_then(|user_preferences| {
447-
Self::get_relay_midpoint(&user_preferences, parsed_relays, config.custom_lists)
448-
}),
449-
SpecializedSelectorConfig::Custom(_) => None,
450-
};
451-
452-
let bridge_settings = &config.bridge_settings;
453-
let constraints = match bridge_settings.resolve() {
454-
Ok(ResolvedBridgeSettings::Normal(settings)) => InternalBridgeConstraints {
455-
location: settings.location.clone(),
456-
providers: settings.providers.clone(),
457-
ownership: settings.ownership,
458-
transport_protocol: Constraint::Only(TransportProtocol::Tcp),
459-
},
460-
_ => InternalBridgeConstraints {
461-
location: Constraint::Any,
462-
providers: Constraint::Any,
463-
ownership: Constraint::Any,
464-
transport_protocol: Constraint::Only(TransportProtocol::Tcp),
465-
},
466-
};
467-
468-
let custom_lists = &config.custom_lists;
469-
Self::get_proxy_settings(parsed_relays, &constraints, near_location, custom_lists)
470-
.map(|(settings, _relay)| settings)
471-
.inspect_err(|error| log::error!("Failed to get bridge: {error}"))
472-
.ok()
473-
}
474-
}
475-
476435
impl RelaySelector {
477436
/// Returns a new `RelaySelector` backed by relays cached on disk.
478437
pub fn new(
@@ -545,6 +504,45 @@ impl RelaySelector {
545504
self.parsed_relays.lock().unwrap().last_updated()
546505
}
547506

507+
/// Returns a non-custom bridge based on the relay and bridge constraints, ignoring the bridge
508+
/// state.
509+
pub fn get_bridge_forced(&self) -> Option<Shadowsocks> {
510+
let parsed_relays = &self.parsed_relays.lock().unwrap().parsed_list().clone();
511+
let config = self.config.lock().unwrap();
512+
let specialized_config = SpecializedSelectorConfig::from(&*config);
513+
514+
let near_location = match specialized_config {
515+
SpecializedSelectorConfig::Normal(config) => RelayQuery::try_from(config.clone())
516+
.ok()
517+
.and_then(|user_preferences| {
518+
Self::get_relay_midpoint(&user_preferences, parsed_relays, config.custom_lists)
519+
}),
520+
SpecializedSelectorConfig::Custom(_) => None,
521+
};
522+
523+
let bridge_settings = &config.bridge_settings;
524+
let constraints = match bridge_settings.resolve() {
525+
Ok(ResolvedBridgeSettings::Normal(settings)) => InternalBridgeConstraints {
526+
location: settings.location.clone(),
527+
providers: settings.providers.clone(),
528+
ownership: settings.ownership,
529+
transport_protocol: Constraint::Only(TransportProtocol::Tcp),
530+
},
531+
_ => InternalBridgeConstraints {
532+
location: Constraint::Any,
533+
providers: Constraint::Any,
534+
ownership: Constraint::Any,
535+
transport_protocol: Constraint::Only(TransportProtocol::Tcp),
536+
},
537+
};
538+
539+
let custom_lists = &config.custom_lists;
540+
Self::get_proxy_settings(parsed_relays, &constraints, near_location, custom_lists)
541+
.map(|(settings, _relay)| settings)
542+
.inspect_err(|error| log::error!("Failed to get bridge: {error}"))
543+
.ok()
544+
}
545+
548546
/// Returns random relay and relay endpoint matching `query`.
549547
pub fn get_relay_by_query(&self, query: RelayQuery) -> Result<GetRelay, Error> {
550548
let config_guard = self.config.lock().unwrap();

mullvad-types/src/relay_list.rs

-4
Original file line numberDiff line numberDiff line change
@@ -251,7 +251,3 @@ impl ShadowsocksEndpointData {
251251
}
252252
}
253253
}
254-
255-
pub trait ShadowsocksBridgeProvider: Send + Sync {
256-
fn get_bridge_forced(&self) -> Option<Shadowsocks>;
257-
}

0 commit comments

Comments
 (0)