libsignal_service/push_service/
error.rs1use 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}