aboutsummaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-03-23 19:51:13 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-03-23 19:51:13 +0100
commit9ea95ff89db60c9253bec94c85dfe5e4393db119 (patch)
treecf6538f3e513872dd0e8849ec754be15f124700c /src
parent6ebb83723b2b53f8431f7d35b24b2ecc0a3b435d (diff)
don't send infinitely many PADRs
Diffstat (limited to 'src')
-rw-r--r--src/client.rs14
1 files changed, 11 insertions, 3 deletions
diff --git a/src/client.rs b/src/client.rs
index b6bd4d3..ad4fd8e 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -243,19 +243,27 @@ impl Client {
}
}
- fn send_while_state(&self, buf: &[u8], state: State, msg: impl Into<String>) {
+ fn send_while_state(&self, buf: &[u8], state: State, max: Option<u8>, msg: impl Into<String>) {
let this = self.clone();
let buf = buf.to_vec();
let msg = msg.into();
thread::spawn(move || {
+ let mut i = 0;
while this.state() == state {
+ if let Some(max) = max {
+ if i >= max {
+ continue;
+ }
+ }
+
match this.send(&buf) {
Ok(_) => println!("(re)transmission: {}", &msg),
Err(e) => println!("(re)transmission failed: {}", e),
}
thread::sleep(Duration::from_secs(3));
+ i += 1
}
});
}
@@ -310,7 +318,7 @@ impl Client {
self.set_state(State::Discovery);
self.new_discovery_packet(&mut discovery)?;
- self.send_while_state(&discovery, State::Discovery, "PADI");
+ self.send_while_state(&discovery, State::Discovery, None, "PADI");
println!("discovering...");
Ok(())
@@ -776,7 +784,7 @@ impl Client {
self.set_state(State::Requesting);
self.new_discovery_packet(&mut request)?;
- self.send_while_state(&request, State::Requesting, "PADR");
+ self.send_while_state(&request, State::Requesting, Some(10), "PADR");
println!("requesting...");
} else {