pub struct RadiusPacket {
pub code: u8,
pub identifier: u8,
pub length: u16,
pub authenticator: [u8; 16],
pub attributes: Vec<RadiusAttribute>,
}
Fields§
§code: u8
§identifier: u8
§length: u16
§authenticator: [u8; 16]
§attributes: Vec<RadiusAttribute>
Implementations§
Source§impl RadiusPacket
impl RadiusPacket
pub fn from_bytes(buf: &[u8]) -> Result<Self, String>
pub fn to_bytes(&self) -> Vec<u8> ⓘ
pub fn access_accept(identifier: u8, attributes: Vec<RadiusAttribute>) -> Self
pub fn access_reject(identifier: u8, msg: &str) -> Self
pub fn access_challenge(identifier: u8, msg: &str) -> Self
pub fn log(&self)
Sourcepub fn reply_accept(&self, attributes: Vec<RadiusAttribute>) -> RadiusPacket
pub fn reply_accept(&self, attributes: Vec<RadiusAttribute>) -> RadiusPacket
Examples found in repository?
examples/server.rs (lines 34-37)
10async fn main() -> Result<(), Box<dyn std::error::Error>> {
11 let dict = Arc::new(Dictionary::load_embedded()?);
12 let secret = "test123";
13
14 let dict_acct = dict.clone();
15 let dict_auth = dict.clone();
16 let secret_acct = secret.to_string();
17 let secret_auth = secret.to_string();
18
19 let acct_server = serve_accounting_async("0.0.0.0:1813", dict_acct, &secret_acct, move |packet| async move {
20 println!("📨 Accounting ID {} from {:?}", packet.identifier, packet.username());
21 for attr in packet.attributes {
22 println!(" → Type {}: {:?}", attr.typ, attr.value);
23 }
24 Ok(())
25 });
26
27 let auth_server = serve_async("0.0.0.0:1812", dict_auth, &secret_auth, move |packet| async move {
28 println!("🔍 Incoming ID {} from {:?}", packet.identifier, packet.username());
29 let acc_pkt: AccountingPacket = packet.clone().into();
30 println!("{:?}", acc_pkt);
31
32 if let Some(username) = packet.username() {
33 if username.trim() == " " {
34 Ok(packet.reply_accept(vec![
35 RadiusAttribute::session_timeout(3600),
36 RadiusAttribute::reply_message("Welcome, admin."),
37 ]))
38 } else {
39 Ok(packet.reply_reject("User not allowed"))
40 }
41 } else {
42 Ok(packet.reply_reject("Missing username"))
43 }
44 });
45
46 // Run both servers concurrently
47 tokio::try_join!(acct_server, auth_server)?;
48
49 Ok(())
50}
Sourcepub fn reply_reject(&self, message: &str) -> RadiusPacket
pub fn reply_reject(&self, message: &str) -> RadiusPacket
Examples found in repository?
examples/server.rs (line 39)
10async fn main() -> Result<(), Box<dyn std::error::Error>> {
11 let dict = Arc::new(Dictionary::load_embedded()?);
12 let secret = "test123";
13
14 let dict_acct = dict.clone();
15 let dict_auth = dict.clone();
16 let secret_acct = secret.to_string();
17 let secret_auth = secret.to_string();
18
19 let acct_server = serve_accounting_async("0.0.0.0:1813", dict_acct, &secret_acct, move |packet| async move {
20 println!("📨 Accounting ID {} from {:?}", packet.identifier, packet.username());
21 for attr in packet.attributes {
22 println!(" → Type {}: {:?}", attr.typ, attr.value);
23 }
24 Ok(())
25 });
26
27 let auth_server = serve_async("0.0.0.0:1812", dict_auth, &secret_auth, move |packet| async move {
28 println!("🔍 Incoming ID {} from {:?}", packet.identifier, packet.username());
29 let acc_pkt: AccountingPacket = packet.clone().into();
30 println!("{:?}", acc_pkt);
31
32 if let Some(username) = packet.username() {
33 if username.trim() == " " {
34 Ok(packet.reply_accept(vec![
35 RadiusAttribute::session_timeout(3600),
36 RadiusAttribute::reply_message("Welcome, admin."),
37 ]))
38 } else {
39 Ok(packet.reply_reject("User not allowed"))
40 }
41 } else {
42 Ok(packet.reply_reject("Missing username"))
43 }
44 });
45
46 // Run both servers concurrently
47 tokio::try_join!(acct_server, auth_server)?;
48
49 Ok(())
50}
pub fn reply_challenge(&self, message: &str) -> RadiusPacket
Sourcepub fn username(&self) -> Option<String>
pub fn username(&self) -> Option<String>
Examples found in repository?
examples/server.rs (line 20)
10async fn main() -> Result<(), Box<dyn std::error::Error>> {
11 let dict = Arc::new(Dictionary::load_embedded()?);
12 let secret = "test123";
13
14 let dict_acct = dict.clone();
15 let dict_auth = dict.clone();
16 let secret_acct = secret.to_string();
17 let secret_auth = secret.to_string();
18
19 let acct_server = serve_accounting_async("0.0.0.0:1813", dict_acct, &secret_acct, move |packet| async move {
20 println!("📨 Accounting ID {} from {:?}", packet.identifier, packet.username());
21 for attr in packet.attributes {
22 println!(" → Type {}: {:?}", attr.typ, attr.value);
23 }
24 Ok(())
25 });
26
27 let auth_server = serve_async("0.0.0.0:1812", dict_auth, &secret_auth, move |packet| async move {
28 println!("🔍 Incoming ID {} from {:?}", packet.identifier, packet.username());
29 let acc_pkt: AccountingPacket = packet.clone().into();
30 println!("{:?}", acc_pkt);
31
32 if let Some(username) = packet.username() {
33 if username.trim() == " " {
34 Ok(packet.reply_accept(vec![
35 RadiusAttribute::session_timeout(3600),
36 RadiusAttribute::reply_message("Welcome, admin."),
37 ]))
38 } else {
39 Ok(packet.reply_reject("User not allowed"))
40 }
41 } else {
42 Ok(packet.reply_reject("Missing username"))
43 }
44 });
45
46 // Run both servers concurrently
47 tokio::try_join!(acct_server, auth_server)?;
48
49 Ok(())
50}
Trait Implementations§
Source§impl Clone for RadiusPacket
impl Clone for RadiusPacket
Source§fn clone(&self) -> RadiusPacket
fn clone(&self) -> RadiusPacket
Returns a duplicate of the value. Read more
1.0.0 · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
Performs copy-assignment from
source
. Read moreSource§impl Debug for RadiusPacket
impl Debug for RadiusPacket
Source§impl From<RadiusPacket> for AccountingPacket
impl From<RadiusPacket> for AccountingPacket
Source§fn from(pkt: RadiusPacket) -> Self
fn from(pkt: RadiusPacket) -> Self
Converts to this type from the input type.
Auto Trait Implementations§
impl Freeze for RadiusPacket
impl RefUnwindSafe for RadiusPacket
impl Send for RadiusPacket
impl Sync for RadiusPacket
impl Unpin for RadiusPacket
impl UnwindSafe for RadiusPacket
Blanket Implementations§
Source§impl<T> BorrowMut<T> for Twhere
T: ?Sized,
impl<T> BorrowMut<T> for Twhere
T: ?Sized,
Source§fn borrow_mut(&mut self) -> &mut T
fn borrow_mut(&mut self) -> &mut T
Mutably borrows from an owned value. Read more