Skip to main content

irontide_wire/
error.rs

1/// Crate-level result type.
2pub type Result<T> = std::result::Result<T, Error>;
3
4/// Errors from `BitTorrent` wire protocol operations.
5#[derive(Debug, thiserror::Error)]
6pub enum Error {
7    /// Invalid handshake data.
8    #[error("invalid handshake: {0}")]
9    InvalidHandshake(String),
10
11    /// Unrecognized message ID byte.
12    #[error("invalid message ID {0}")]
13    InvalidMessageId(u8),
14
15    /// Message payload shorter than required.
16    #[error("message too short: expected at least {expected} bytes, got {got}")]
17    MessageTooShort {
18        /// Minimum required byte count.
19        expected: usize,
20        /// Actual byte count received.
21        got: usize,
22    },
23
24    /// Message exceeds the maximum allowed size.
25    #[error("message too large: {size} bytes (max {max})")]
26    MessageTooLarge {
27        /// Actual message size in bytes.
28        size: usize,
29        /// Configured maximum size in bytes.
30        max: usize,
31    },
32
33    /// Malformed BEP 10 extension message.
34    #[error("invalid extended message: {0}")]
35    InvalidExtended(String),
36
37    /// MSE/PE encryption handshake failure.
38    #[error("encryption handshake failed: {0}")]
39    EncryptionHandshakeFailed(String),
40
41    /// Peer proposed an unsupported crypto method.
42    #[error("unsupported crypto method")]
43    UnsupportedCryptoMethod,
44
45    /// Encryption required but peer does not support it.
46    #[error("encryption required but peer does not support it")]
47    EncryptionRequired,
48
49    /// Bencode parsing error.
50    #[error("bencode: {0}")]
51    Bencode(#[from] irontide_bencode::Error),
52
53    /// TLS/SSL error.
54    #[error("SSL/TLS: {0}")]
55    Ssl(String),
56
57    /// I/O error.
58    #[error("I/O: {0}")]
59    Io(#[from] std::io::Error),
60}