libsignal_service/push_service/
error.rs

1use aes::cipher::block_padding::UnpadError;
2use libsignal_core::curve::CurveError;
3use libsignal_protocol::{ServiceIdKind, SignalProtocolError};
4use zkgroup::{ZkGroupDeserializationFailure, ZkGroupVerificationFailure};
5
6use crate::groups_v2::GroupDecodingError;
7
8use super::{
9    MismatchedDevices, ProofRequired, RegistrationLockFailure, StaleDevices,
10};
11
12#[derive(thiserror::Error, Debug)]
13pub enum ServiceError {
14    #[error("Service request timed out: {reason}")]
15    Timeout { reason: &'static str },
16
17    #[error("invalid URL: {0}")]
18    InvalidUrl(#[from] url::ParseError),
19
20    #[error("wrong address type: {0}")]
21    InvalidAddressType(ServiceIdKind),
22
23    #[error("Error sending request: {reason}")]
24    SendError { reason: String },
25
26    #[error("i/o error")]
27    IO(#[from] std::io::Error),
28
29    #[error("Error decoding JSON: {0}")]
30    JsonDecodeError(#[from] serde_json::Error),
31    #[error("Error decoding protobuf frame: {0}")]
32    ProtobufDecodeError(#[from] prost::DecodeError),
33    #[error("error encoding or decoding bincode: {0}")]
34    BincodeError(#[from] bincode::Error),
35    #[error("error decoding base64 string: {0}")]
36    Base64DecodeError(#[from] base64::DecodeError),
37
38    #[error("Rate limit exceeded")]
39    RateLimitExceeded,
40    #[error("Authorization failed")]
41    Unauthorized,
42    #[error("Registration lock is set: {0:?}")]
43    Locked(RegistrationLockFailure),
44    #[error("Unexpected response: HTTP {http_code}")]
45    UnhandledResponseCode { http_code: u16 },
46
47    #[error("Websocket error: {0}")]
48    WsError(#[from] reqwest_websocket::Error),
49    #[error("Websocket closing: {reason}")]
50    WsClosing { reason: &'static str },
51
52    #[error("Invalid padding: {0}")]
53    Padding(#[from] UnpadError),
54
55    #[error("unknown padding version {0}")]
56    PaddingVersion(u32),
57
58    #[error("Invalid frame: {reason}")]
59    InvalidFrame { reason: &'static str },
60
61    #[error("MAC error")]
62    MacError,
63
64    #[error("Protocol error: {0}")]
65    SignalProtocolError(#[from] SignalProtocolError),
66
67    #[error("invalid device id: {0}")]
68    InvalidDeviceId(#[from] libsignal_core::InvalidDeviceId),
69
70    #[error("Proof required: {0:?}")]
71    ProofRequiredError(ProofRequired),
72
73    #[error("{0:?}")]
74    MismatchedDevicesException(MismatchedDevices),
75
76    #[error("{0:?}")]
77    StaleDevices(StaleDevices),
78
79    #[error(transparent)]
80    CredentialsCacheError(#[from] crate::groups_v2::CredentialsCacheError),
81
82    #[error("groups v2 (zero-knowledge) error")]
83    GroupsV2Error,
84
85    #[error(transparent)]
86    GroupsV2DecryptionError(#[from] GroupDecodingError),
87
88    #[error(transparent)]
89    ZkGroupDeserializationFailure(#[from] ZkGroupDeserializationFailure),
90
91    #[error(transparent)]
92    ZkGroupVerificationFailure(#[from] ZkGroupVerificationFailure),
93
94    #[error("unsupported content")]
95    UnsupportedContent,
96
97    #[error("Not found.")]
98    NotFoundError,
99
100    #[error("invalid device name")]
101    InvalidDeviceName,
102
103    #[error("Unknown CDN version {0}")]
104    UnknownCdnVersion(u32),
105
106    #[error("HTTP reqwest error: {0}")]
107    Http(#[from] reqwest::Error),
108
109    #[error(transparent)]
110    Curve(#[from] CurveError),
111}