libsignal_service/push_service/
error.rs

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