dpp-nfc: Fix handover client wait for receiving handover select

This was supposed to wait for up to 3.0 seconds for the handover select,
but the incorrect loop terminated ended up limiting this to a single
iteration of 0.1 second wait. This was too fast for some cases like the
AP mode operation where it may take significant time to enable the radio
for listening to DPP authentication messages.

Fix the loop to allow that full three second wait for the response to be
used. In addition, report the amount of time it takes to receive the
response.

Signed-off-by: Jouni Malinen <jouni@codeaurora.org>
This commit is contained in:
Jouni Malinen 2020-08-14 00:11:44 +03:00 committed by Jouni Malinen
parent 596d99567a
commit 1733e356e4

View file

@ -278,8 +278,15 @@ class HandoverClient(nfc.handover.HandoverClient):
def recv_octets(self, timeout=None): def recv_octets(self, timeout=None):
start = time.time() start = time.time()
msg = bytearray() msg = bytearray()
poll_timeout = 0.1 if timeout is None or timeout > 0.1 else timeout while True:
while self.socket.poll('recv', poll_timeout): poll_timeout = 0.1 if timeout is None or timeout > 0.1 else timeout
if self.socket.poll('recv', poll_timeout) is None:
if timeout:
timeout -= time.time() - start
if timeout <= 0:
return None
start = time.time()
continue
try: try:
r = self.socket.recv() r = self.socket.recv()
if r is None: if r is None:
@ -372,7 +379,10 @@ def run_dpp_handover_client(handover, alt=False):
summary("Receiving handover response") summary("Receiving handover response")
try: try:
start = time.time()
message = client.recv_records(timeout=3.0) message = client.recv_records(timeout=3.0)
end = time.time()
summary("Received {} record(s) in {} seconds".format(len(message) if message is not None else -1, end - start))
except Exception as e: except Exception as e:
# This is fine if we are the handover selector # This is fine if we are the handover selector
if handover.hs_sent: if handover.hs_sent: