@@ -588,30 +588,34 @@ pub struct Daemon {
588
588
volume_update_tx : mpsc:: UnboundedSender < ( ) > ,
589
589
location_handler : GeoIpHandler ,
590
590
}
591
+ pub struct DaemonConfig {
592
+ pub log_dir : Option < PathBuf > ,
593
+ pub resource_dir : PathBuf ,
594
+ pub settings_dir : PathBuf ,
595
+ pub cache_dir : PathBuf ,
596
+ pub rpc_socket_path : PathBuf ,
597
+ pub endpoint : ApiEndpoint ,
598
+ #[ cfg( target_os = "android" ) ]
599
+ pub android_context : AndroidContext ,
600
+ }
591
601
592
602
impl Daemon {
593
603
pub async fn start (
594
- log_dir : Option < PathBuf > ,
595
- resource_dir : PathBuf ,
596
- settings_dir : PathBuf ,
597
- cache_dir : PathBuf ,
598
- rpc_socket_path : PathBuf ,
604
+ config : DaemonConfig ,
599
605
daemon_command_channel : DaemonCommandChannel ,
600
- endpoint : ApiEndpoint ,
601
- #[ cfg( target_os = "android" ) ] android_context : AndroidContext ,
602
606
) -> Result < Self , Error > {
603
607
#[ cfg( target_os = "macos" ) ]
604
608
macos:: bump_filehandle_limit ( ) ;
605
609
606
610
let command_sender = daemon_command_channel. sender ( ) ;
607
611
let management_interface =
608
- ManagementInterfaceServer :: start ( command_sender, rpc_socket_path)
612
+ ManagementInterfaceServer :: start ( command_sender, config . rpc_socket_path )
609
613
. map_err ( Error :: ManagementInterfaceError ) ?;
610
614
611
615
let ( internal_event_tx, internal_event_rx) = daemon_command_channel. destructure ( ) ;
612
616
613
617
#[ cfg( target_os = "android" ) ]
614
- let connectivity_listener = ConnectivityListener :: new ( android_context. clone ( ) )
618
+ let connectivity_listener = ConnectivityListener :: new ( config . android_context . clone ( ) )
615
619
. inspect_err ( |error| {
616
620
log:: error!(
617
621
"{}" ,
@@ -620,10 +624,10 @@ impl Daemon {
620
624
} )
621
625
. map_err ( |_| Error :: DaemonUnavailable ) ?;
622
626
623
- mullvad_api:: proxy:: ApiConnectionMode :: try_delete_cache ( & cache_dir) . await ;
627
+ mullvad_api:: proxy:: ApiConnectionMode :: try_delete_cache ( & config . cache_dir ) . await ;
624
628
let api_runtime = mullvad_api:: Runtime :: with_cache (
625
- & endpoint,
626
- & cache_dir,
629
+ & config . endpoint ,
630
+ & config . cache_dir ,
627
631
true ,
628
632
#[ cfg( target_os = "android" ) ]
629
633
api:: create_bypass_tx ( & internal_event_tx) ,
@@ -634,7 +638,7 @@ impl Daemon {
634
638
let api_availability = api_runtime. availability_handle ( ) ;
635
639
api_availability. suspend ( ) ;
636
640
637
- let migration_data = migrations:: migrate_all ( & cache_dir, & settings_dir)
641
+ let migration_data = migrations:: migrate_all ( & config . cache_dir , & config . settings_dir )
638
642
. await
639
643
. unwrap_or_else ( |error| {
640
644
log:: error!(
@@ -645,7 +649,7 @@ impl Daemon {
645
649
} ) ;
646
650
647
651
let settings_event_listener = management_interface. notifier ( ) . clone ( ) ;
648
- let mut settings = SettingsPersister :: load ( & settings_dir) . await ;
652
+ let mut settings = SettingsPersister :: load ( & config . settings_dir ) . await ;
649
653
settings. register_change_listener ( move |settings| {
650
654
// Notify management interface server of changes to the settings
651
655
settings_event_listener. notify_settings ( settings. to_owned ( ) ) ;
@@ -654,8 +658,8 @@ impl Daemon {
654
658
let initial_selector_config = SelectorConfig :: from_settings ( & settings) ;
655
659
let relay_selector = RelaySelector :: new (
656
660
initial_selector_config,
657
- resource_dir. join ( RELAYS_FILENAME ) ,
658
- cache_dir. join ( RELAYS_FILENAME ) ,
661
+ config . resource_dir . join ( RELAYS_FILENAME ) ,
662
+ config . cache_dir . join ( RELAYS_FILENAME ) ,
659
663
) ;
660
664
661
665
let settings_relay_selector = relay_selector. clone ( ) ;
@@ -667,11 +671,11 @@ impl Daemon {
667
671
} ) ;
668
672
669
673
let ( access_mode_handler, access_mode_provider) = api:: AccessModeSelector :: spawn (
670
- cache_dir. clone ( ) ,
674
+ config . cache_dir . clone ( ) ,
671
675
relay_selector. clone ( ) ,
672
676
settings. api_access_methods . clone ( ) ,
673
677
#[ cfg( feature = "api-override" ) ]
674
- endpoint. clone ( ) ,
678
+ config . endpoint . clone ( ) ,
675
679
internal_event_tx. to_specialized_sender ( ) ,
676
680
api_runtime. address_cache ( ) . clone ( ) ,
677
681
)
@@ -685,7 +689,7 @@ impl Daemon {
685
689
api_runtime. address_cache ( ) . clone ( ) ,
686
690
api_handle. clone ( ) ,
687
691
#[ cfg( feature = "api-override" ) ]
688
- endpoint,
692
+ config . endpoint . clone ( ) ,
689
693
) ) ;
690
694
691
695
let access_method_handle = access_mode_handler. clone ( ) ;
@@ -709,7 +713,7 @@ impl Daemon {
709
713
710
714
let ( account_manager, data) = device:: AccountManager :: spawn (
711
715
api_handle. clone ( ) ,
712
- & settings_dir,
716
+ & config . settings_dir ,
713
717
settings
714
718
. tunnel_options
715
719
. wireguard
@@ -721,17 +725,17 @@ impl Daemon {
721
725
. map_err ( Error :: LoadAccountManager ) ?;
722
726
723
727
let account_history = account_history:: AccountHistory :: new (
724
- & settings_dir,
728
+ & config . settings_dir ,
725
729
data. device ( ) . map ( |device| device. account_number . clone ( ) ) ,
726
730
)
727
731
. await
728
732
. map_err ( Error :: LoadAccountHistory ) ?;
729
733
730
734
let target_state = if settings. auto_connect {
731
735
log:: info!( "Automatically connecting since auto-connect is turned on" ) ;
732
- PersistentTargetState :: new_secured ( & cache_dir) . await
736
+ PersistentTargetState :: new_secured ( & config . cache_dir ) . await
733
737
} else {
734
- PersistentTargetState :: new ( & cache_dir) . await
738
+ PersistentTargetState :: new ( & config . cache_dir ) . await
735
739
} ;
736
740
737
741
#[ cfg( any( windows, target_os = "android" , target_os = "macos" ) ) ]
@@ -790,14 +794,14 @@ impl Daemon {
790
794
exclude_paths,
791
795
} ,
792
796
parameters_generator. clone ( ) ,
793
- log_dir,
794
- resource_dir. clone ( ) ,
797
+ config . log_dir ,
798
+ config . resource_dir . clone ( ) ,
795
799
internal_event_tx. to_specialized_sender ( ) ,
796
800
offline_state_tx,
797
801
#[ cfg( target_os = "windows" ) ]
798
802
volume_update_rx,
799
803
#[ cfg( target_os = "android" ) ]
800
- android_context,
804
+ config . android_context ,
801
805
#[ cfg( target_os = "android" ) ]
802
806
connectivity_listener. clone ( ) ,
803
807
#[ cfg( target_os = "linux" ) ]
@@ -819,14 +823,14 @@ impl Daemon {
819
823
let mut relay_list_updater = RelayListUpdater :: spawn (
820
824
relay_selector. clone ( ) ,
821
825
api_handle. clone ( ) ,
822
- & cache_dir,
826
+ & config . cache_dir ,
823
827
on_relay_list_update,
824
828
) ;
825
829
826
830
let version_updater_handle = version_check:: VersionUpdater :: spawn (
827
831
api_handle. clone ( ) ,
828
832
api_availability. clone ( ) ,
829
- cache_dir. clone ( ) ,
833
+ config . cache_dir . clone ( ) ,
830
834
internal_event_tx. to_specialized_sender ( ) ,
831
835
settings. show_beta_releases ,
832
836
)
0 commit comments