summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorDavid Lönnhager <david.l@mullvad.net>2022-05-27 10:53:21 +0200
committerDavid Lönnhager <david.l@mullvad.net>2022-05-30 14:43:00 +0200
commit8a3e7a249d97194619e1d03e547c2a21f48c54b4 (patch)
tree09ca58d4b146d6de4d82ee171a6930480c594ff0
parent970efd86d571d912b3716d544d483857cc49d4f6 (diff)
downloadmullvadvpn-8a3e7a249d97194619e1d03e547c2a21f48c54b4.tar.xz
mullvadvpn-8a3e7a249d97194619e1d03e547c2a21f48c54b4.zip
Improve error message for device broadcast error
-rw-r--r--mullvad-daemon/src/device/mod.rs2
-rw-r--r--mullvad-daemon/src/management_interface.rs25
2 files changed, 14 insertions, 13 deletions
diff --git a/mullvad-daemon/src/device/mod.rs b/mullvad-daemon/src/device/mod.rs
index 4d420a404a..a0e3bed908 100644
--- a/mullvad-daemon/src/device/mod.rs
+++ b/mullvad-daemon/src/device/mod.rs
@@ -279,7 +279,7 @@ impl Error {
}
}
- fn unpack(&self) -> &Error {
+ pub fn unpack(&self) -> &Error {
if let Error::ResponseFailure(ref inner) = self {
&*inner
} else {
diff --git a/mullvad-daemon/src/management_interface.rs b/mullvad-daemon/src/management_interface.rs
index 078fb52d97..2264159fc8 100644
--- a/mullvad-daemon/src/management_interface.rs
+++ b/mullvad-daemon/src/management_interface.rs
@@ -448,7 +448,7 @@ impl ManagementService for ManagementServiceImpl {
"Unable to get account data from API: {}",
error.display_chain()
);
- map_rest_error(error)
+ map_rest_error(&error)
})
}
@@ -927,15 +927,15 @@ fn map_daemon_error(error: crate::Error) -> Status {
use crate::Error as DaemonError;
match error {
- DaemonError::RestError(error) => map_rest_error(error),
+ DaemonError::RestError(error) => map_rest_error(&error),
DaemonError::SettingsError(error) => map_settings_error(error),
DaemonError::AlreadyLoggedIn => Status::already_exists(error.to_string()),
- DaemonError::LoginError(error) => map_device_error(error),
- DaemonError::LogoutError(error) => map_device_error(error),
- DaemonError::KeyRotationError(error) => map_device_error(error),
- DaemonError::ListDevicesError(error) => map_device_error(error),
- DaemonError::RemoveDeviceError(error) => map_device_error(error),
- DaemonError::UpdateDeviceError(error) => map_device_error(error),
+ DaemonError::LoginError(error) => map_device_error(&error),
+ DaemonError::LogoutError(error) => map_device_error(&error),
+ DaemonError::KeyRotationError(error) => map_device_error(&error),
+ DaemonError::ListDevicesError(error) => map_device_error(&error),
+ DaemonError::RemoveDeviceError(error) => map_device_error(&error),
+ DaemonError::UpdateDeviceError(error) => map_device_error(&error),
#[cfg(windows)]
DaemonError::SplitTunnelError(error) => map_split_tunnel_error(error),
DaemonError::AccountHistory(error) => map_account_history_error(error),
@@ -975,15 +975,15 @@ fn map_rest_voucher_error(error: RestError) -> Status {
error => Status::unknown(format!("Voucher error: {}", error)),
},
- error => map_rest_error(error),
+ error => map_rest_error(&error),
}
}
/// Converts a REST API error into a tonic status.
-fn map_rest_error(error: RestError) -> Status {
+fn map_rest_error(error: &RestError) -> Status {
match error {
RestError::ApiError(status, message)
- if status == StatusCode::UNAUTHORIZED || status == StatusCode::FORBIDDEN =>
+ if *status == StatusCode::UNAUTHORIZED || *status == StatusCode::FORBIDDEN =>
{
Status::new(Code::Unauthenticated, message)
}
@@ -1009,7 +1009,7 @@ fn map_settings_error(error: settings::Error) -> Status {
}
/// Converts an instance of [`mullvad_daemon::device::Error`] into a tonic status.
-fn map_device_error(error: device::Error) -> Status {
+fn map_device_error(error: &device::Error) -> Status {
match error {
device::Error::MaxDevicesReached => Status::new(Code::ResourceExhausted, error.to_string()),
device::Error::InvalidAccount => Status::new(Code::Unauthenticated, error.to_string()),
@@ -1020,6 +1020,7 @@ fn map_device_error(error: device::Error) -> Status {
Status::new(Code::Unavailable, error.to_string())
}
device::Error::OtherRestError(error) => map_rest_error(error),
+ device::Error::ResponseFailure(error) => map_device_error(error.unpack()),
_ => Status::new(Code::Unknown, error.to_string()),
}
}