1use crate::{dialog::DialogId, transaction::key::TransactionKey, transport::SipAddr};
2use thiserror::Error as ThisError;
3use crate::rsip;
4
5#[derive(Debug, ThisError)]
6pub enum Error {
7 #[error("SIP message error: {0}")]
8 SipMessageError(#[from] rsip::Error),
9
10 #[error("DNS resolution error: {0}")]
11 DnsResolutionError(String),
12
13 #[error("Transport layer error: {0}: {1}")]
14 TransportLayerError(String, SipAddr),
15
16 #[error("Transaction error: {0}: {1}")]
17 TransactionError(String, TransactionKey),
18
19 #[error("Endpoint error: {0}")]
20 EndpointError(String),
21
22 #[error("Dialog error:{2}({0})")]
23 DialogError(String, DialogId, rsip::StatusCode),
24
25 #[error("I/O error: {0}")]
26 IoError(#[from] std::io::Error),
27
28 #[error("Address parse error: {0}")]
29 AddrParseError(#[from] std::net::AddrParseError),
30
31 #[error("Error: {0}")]
32 Error(String),
33}
34
35impl<T> From<tokio::sync::mpsc::error::SendError<T>> for Error {
36 fn from(e: tokio::sync::mpsc::error::SendError<T>) -> Self {
37 Error::Error(e.to_string())
38 }
39}