abol_codegen/
rfc3576.rs

1use abol_core::packet::Packet;
2pub const ERROR_CAUSE_TYPE: u8 = 101u8;
3#[derive(Debug, Clone, Copy, PartialEq, Eq)]
4#[repr(u32)]
5pub enum ErrorCause {
6    ResidualContextRemoved,
7    InvalidEapPacket,
8    UnsupportedAttribute,
9    MissingAttribute,
10    NasIdentificationMismatch,
11    InvalidRequest,
12    UnsupportedService,
13    UnsupportedExtension,
14    AdministrativelyProhibited,
15    ProxyRequestNotRoutable,
16    SessionContextNotFound,
17    SessionContextNotRemovable,
18    ProxyProcessingError,
19    ResourcesUnavailable,
20    RequestInitiated,
21    Unknown(u32),
22}
23impl From<u32> for ErrorCause {
24    fn from(v: u32) -> Self {
25        match v {
26            201u32 => Self::ResidualContextRemoved,
27            202u32 => Self::InvalidEapPacket,
28            401u32 => Self::UnsupportedAttribute,
29            402u32 => Self::MissingAttribute,
30            403u32 => Self::NasIdentificationMismatch,
31            404u32 => Self::InvalidRequest,
32            405u32 => Self::UnsupportedService,
33            406u32 => Self::UnsupportedExtension,
34            501u32 => Self::AdministrativelyProhibited,
35            502u32 => Self::ProxyRequestNotRoutable,
36            503u32 => Self::SessionContextNotFound,
37            504u32 => Self::SessionContextNotRemovable,
38            505u32 => Self::ProxyProcessingError,
39            506u32 => Self::ResourcesUnavailable,
40            507u32 => Self::RequestInitiated,
41            other => Self::Unknown(other),
42        }
43    }
44}
45impl From<ErrorCause> for u32 {
46    fn from(e: ErrorCause) -> Self {
47        match e {
48            ErrorCause::ResidualContextRemoved => 201u32,
49            ErrorCause::InvalidEapPacket => 202u32,
50            ErrorCause::UnsupportedAttribute => 401u32,
51            ErrorCause::MissingAttribute => 402u32,
52            ErrorCause::NasIdentificationMismatch => 403u32,
53            ErrorCause::InvalidRequest => 404u32,
54            ErrorCause::UnsupportedService => 405u32,
55            ErrorCause::UnsupportedExtension => 406u32,
56            ErrorCause::AdministrativelyProhibited => 501u32,
57            ErrorCause::ProxyRequestNotRoutable => 502u32,
58            ErrorCause::SessionContextNotFound => 503u32,
59            ErrorCause::SessionContextNotRemovable => 504u32,
60            ErrorCause::ProxyProcessingError => 505u32,
61            ErrorCause::ResourcesUnavailable => 506u32,
62            ErrorCause::RequestInitiated => 507u32,
63            ErrorCause::Unknown(v) => v,
64        }
65    }
66}
67pub trait Rfc3576Ext {
68    fn get_error_cause(&self) -> Option<ErrorCause>;
69    fn set_error_cause(&mut self, value: ErrorCause);
70}
71impl Rfc3576Ext for Packet {
72    fn get_error_cause(&self) -> Option<ErrorCause> {
73        self.get_attribute_as::<u32>(ERROR_CAUSE_TYPE)
74            .map(ErrorCause::from)
75    }
76    fn set_error_cause(&mut self, value: ErrorCause) {
77        let wire_val: u32 = value.into();
78        self.set_attribute_as::<u32>(ERROR_CAUSE_TYPE, wire_val);
79    }
80}