1#![allow(dead_code)]
2use std::{io, net::IpAddr};
3
4use thiserror::Error;
5
6use crate::{icmp::PingSequence, PingIdentifier};
7
8pub type Result<T> = std::result::Result<T, SurgeError>;
9
10#[derive(Error, Debug)]
13pub enum SurgeError {
14 #[error("buffer size was too small")]
15 IncorrectBufferSize,
16 #[error("malformed packet: {0}")]
17 MalformedPacket(#[from] MalformedPacketError),
18 #[error("io error: {0}")]
19 IOError(#[from] io::Error),
20 #[error("Request timeout for icmp_seq {seq}")]
21 Timeout { seq: PingSequence },
22 #[error("Echo Request packet.")]
23 EchoRequestPacket,
24 #[error("Network error.")]
25 NetworkError,
26 #[error("Multiple identical request")]
27 IdenticalRequests {
28 host: IpAddr,
29 ident: Option<PingIdentifier>,
30 seq: PingSequence,
31 },
32}
33
34#[derive(Error, Debug)]
35pub enum MalformedPacketError {
36 #[error("expected an Ipv4Packet")]
37 NotIpv4Packet,
38 #[error("expected an Ipv6Packet")]
39 NotIpv6Packet,
40 #[error("expected an Icmpv4Packet payload")]
41 NotIcmpv4Packet,
42 #[error("expected an Icmpv6Packet")]
43 NotIcmpv6Packet,
44 #[error("payload too short, got {got}, want {want}")]
45 PayloadTooShort { got: usize, want: usize },
46}