1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
//! Module contains RADIUS Generic Server implementation and related traits definitions


use crate::protocol::error::RadiusError;


#[cfg(all(feature = "async-radius"))]
use async_trait::async_trait;
#[cfg(all(feature = "async-radius"))]
#[async_trait]
/// This trait is to be implemented by user, if they are planning to resolve AUTH, ACCT or CoA
/// RADIUS requests for Async RADIUS Server
pub trait AsyncServerTrait {
    /// Main function, that starts and keeps server running
    ///
    /// For example see `examples/async_radius_server.rs`
    async fn run(&mut self) -> Result<(), RadiusError>;

    /// Function is responsible for resolving AUTH RADIUS request
    ///
    /// For example see `examples/async_radius_server.rs`
    async fn handle_auth_request(&self) -> Result<(), RadiusError> {
        Ok(())
    }
    /// Function is responsible for resolving AUTH RADIUS request
    ///
    /// For example see `examples/async_radius_server.rs`
    async fn handle_acct_request(&self) -> Result<(), RadiusError> {
        Ok(())
    }
    /// Function is responsible for resolving AUTH RADIUS request
    ///
    /// For example see `examples/async_radius_server.rs`
    async fn handle_coa_request(&self) -> Result<(), RadiusError> {
        Ok(())
    }
}

/// This trait is to be implemented by user, if they are planning to resolve AUTH, ACCT or CoA
/// RADIUS requests for Sync RADIUS Server
pub trait SyncServerTrait {
    /// Main function, that starts and keeps server running
    ///
    /// For example see `examples/sync_radius_server.rs`
    fn run(&mut self) -> Result<(), RadiusError>;

    /// Function is responsible for resolving AUTH RADIUS request
    ///
    /// For example see `examples/sync_radius_server.rs`
    fn handle_auth_request(&self, request: &mut [u8])->Result<Vec<u8>, RadiusError> {
        Ok(request.to_vec())
    }
    /// Function is responsible for resolving ACCT RADIUS request
    ///
    /// For example see `examples/sync_radius_server.rs`
    fn handle_acct_request(&self, request: &mut [u8])->Result<Vec<u8>, RadiusError> {
        Ok(request.to_vec())
    }
    /// Function is responsible for resolving CoA RADIUS request
    ///
    /// For example see `examples/sync_radius_server.rs`
    fn handle_coa_request(&self, request: &mut [u8])->Result<Vec<u8>, RadiusError> {
        Ok(request.to_vec())
    }
}

pub mod server;