diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-03-23 19:51:13 +0100 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-03-23 19:51:13 +0100 |
commit | 9ea95ff89db60c9253bec94c85dfe5e4393db119 (patch) | |
tree | cf6538f3e513872dd0e8849ec754be15f124700c /src | |
parent | 6ebb83723b2b53f8431f7d35b24b2ecc0a3b435d (diff) |
don't send infinitely many PADRs
Diffstat (limited to 'src')
-rw-r--r-- | src/client.rs | 14 |
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 { |