diff options
| author | David Lönnhager <david.l@mullvad.net> | 2022-02-28 17:59:49 +0100 |
|---|---|---|
| committer | David Lönnhager <david.l@mullvad.net> | 2022-03-01 15:30:23 +0100 |
| commit | d2bdcd5878ae6ea748e10fe8e430b80548ec2fb5 (patch) | |
| tree | 47690c0d69b5793eaf0348faaa4440fe92abf84e /mullvad-problem-report/src | |
| parent | bcf3278eeb1b63f2ff8fa6ee68ab4cc8bb8b76fd (diff) | |
| download | mullvadvpn-d2bdcd5878ae6ea748e10fe8e430b80548ec2fb5.tar.xz mullvadvpn-d2bdcd5878ae6ea748e10fe8e430b80548ec2fb5.zip | |
Add proxy config generator to daemon
Diffstat (limited to 'mullvad-problem-report/src')
| -rw-r--r-- | mullvad-problem-report/src/lib.rs | 86 |
1 files changed, 54 insertions, 32 deletions
diff --git a/mullvad-problem-report/src/lib.rs b/mullvad-problem-report/src/lib.rs index b652a0411f..4b9def6adb 100644 --- a/mullvad-problem-report/src/lib.rs +++ b/mullvad-problem-report/src/lib.rs @@ -1,6 +1,7 @@ #![deny(rust_2018_idioms)] use lazy_static::lazy_static; +use mullvad_rpc::proxy::ApiConnectionMode; use regex::Regex; use std::{ borrow::Cow, @@ -270,49 +271,70 @@ pub fn send_problem_report( } })?, ); - let metadata = - ProblemReport::parse_metadata(&report_content).unwrap_or_else(|| metadata::collect()); let runtime = tokio::runtime::Builder::new_multi_thread() .worker_threads(2) .enable_all() .build() .map_err(Error::CreateRuntime)?; + runtime.block_on(send_problem_report_inner( + user_email, + user_message, + &report_content, + cache_dir, + )) +} - let mut rpc_manager = runtime - .block_on(mullvad_rpc::MullvadRpcRuntime::with_cache( - cache_dir, - false, - #[cfg(target_os = "android")] - None, - )) - .map_err(Error::CreateRpcClientError)?; - let rpc_client = mullvad_rpc::ProblemReportProxy::new(rpc_manager.mullvad_rest_handle()); +async fn send_problem_report_inner( + user_email: &str, + user_message: &str, + report_content: &str, + cache_dir: &Path, +) -> Result<(), Error> { + let metadata = + ProblemReport::parse_metadata(&report_content).unwrap_or_else(|| metadata::collect()); + let rpc_runtime = mullvad_rpc::MullvadRpcRuntime::with_cache( + cache_dir, + false, + #[cfg(target_os = "android")] + None, + ) + .await + .map_err(Error::CreateRpcClientError)?; - runtime.block_on(async move { - for _attempt in 0..MAX_SEND_ATTEMPTS { - match rpc_client - .problem_report(user_email, user_message, &report_content, &metadata) - .await - { - Ok(()) => { - return Ok(()); - } - Err(error) => { - if !error.is_network_error() { - return Err(Error::SendProblemReportError(error)); - } - log::error!( - "{}", - error.display_chain_with_msg( - "Failed to send problem report due to network error" - ) - ); + let rpc_client = mullvad_rpc::ProblemReportProxy::new( + rpc_runtime + .mullvad_rest_handle( + ApiConnectionMode::try_from_cache(cache_dir) + .await + .into_repeat(), + |_| async { true }, + ) + .await, + ); + + for _attempt in 0..MAX_SEND_ATTEMPTS { + match rpc_client + .problem_report(user_email, user_message, &report_content, &metadata) + .await + { + Ok(()) => { + return Ok(()); + } + Err(error) => { + if !error.is_network_error() { + return Err(Error::SendProblemReportError(error)); } + log::error!( + "{}", + error.display_chain_with_msg( + "Failed to send problem report due to network error" + ) + ); } } - Err(Error::SendFailedTooManyTimes) - }) + } + Err(Error::SendFailedTooManyTimes) } fn write_problem_report(path: &Path, problem_report: &ProblemReport) -> io::Result<()> { |
