diff options
author | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-03-23 19:19:04 +0100 |
---|---|---|
committer | HimbeerserverDE <himbeerserverde@gmail.com> | 2023-03-23 19:19:04 +0100 |
commit | 6ebb83723b2b53f8431f7d35b24b2ecc0a3b435d (patch) | |
tree | 06c300ecb5301c75a16edf3abe9f868e1cfb3e47 | |
parent | 667405f175daf0a6e23c5dbe6351bf93129d0bcd (diff) |
retransmit PADI and PADR
-rw-r--r-- | src/client.rs | 33 |
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); } |