aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorHimbeerserverDE <himbeerserverde@gmail.com>2023-03-23 19:19:04 +0100
committerHimbeerserverDE <himbeerserverde@gmail.com>2023-03-23 19:19:04 +0100
commit6ebb83723b2b53f8431f7d35b24b2ecc0a3b435d (patch)
tree06c300ecb5301c75a16edf3abe9f868e1cfb3e47
parent667405f175daf0a6e23c5dbe6351bf93129d0bcd (diff)
retransmit PADI and PADR
-rw-r--r--src/client.rs33
1 files changed, 25 insertions, 8 deletions
diff --git a/src/client.rs b/src/client.rs
index d970640..b6bd4d3 100644
--- a/src/client.rs
+++ b/src/client.rs
@@ -243,6 +243,23 @@ impl Client {
}
}
+ fn send_while_state(&self, buf: &[u8], state: State, msg: impl Into<String>) {
+ let this = self.clone();
+ let buf = buf.to_vec();
+ let msg = msg.into();
+
+ thread::spawn(move || {
+ while this.state() == state {
+ match this.send(&buf) {
+ Ok(_) => println!("(re)transmission: {}", &msg),
+ Err(e) => println!("(re)transmission failed: {}", e),
+ }
+
+ thread::sleep(Duration::from_secs(3));
+ }
+ });
+ }
+
fn recv<'a>(&'a self, buf: &'a mut [u8; BUFSIZE]) -> Result<Packet> {
let mut n;
@@ -290,12 +307,12 @@ impl Client {
discovery_header.add_tag(Tag::ServiceName(b""))?;
discovery_header.add_tag(Tag::HostUniq(&host_uniq))?;
- self.new_discovery_packet(&mut discovery)?;
- self.send(&discovery)?;
-
self.set_state(State::Discovery);
- println!("sent PADI");
+ self.new_discovery_packet(&mut discovery)?;
+ self.send_while_state(&discovery, State::Discovery, "PADI");
+
+ println!("discovering...");
Ok(())
}
@@ -756,12 +773,12 @@ impl Client {
request_header.add_tag(Tag::AcCookie(ac_cookie))?;
}
- self.new_discovery_packet(&mut request)?;
- self.send(&request)?;
-
self.set_state(State::Requesting);
- println!("sent PADR");
+ self.new_discovery_packet(&mut request)?;
+ self.send_while_state(&request, State::Requesting, "PADR");
+
+ println!("requesting...");
} else {
println!("ignoring offer from MAC {}, AC {}", remote_mac_str, ac_name);
}