async def request( self, cmd: stun.Message, addr: Tuple[str, int], retransmissions=None) -> Tuple[stun.Message, Tuple[str, int]]: trans = stun.Transaction(cmd, addr, self, retransmissions) self.transactions[cmd.transaction_id] = trans try: return await trans.run() except Exception as e: print("[ERROR] Exception: " + str(e)) return None, None finally: del self.transactions[cmd.transaction_id]
def test_timeout(self): class DummyProtocol: def send_stun(self, message, address): pass request = stun.Message(message_method=stun.Method.BINDING, message_class=stun.Class.REQUEST) transaction = stun.Transaction(request, ('127.0.0.1', 1234), DummyProtocol()) # timeout with self.assertRaises(exceptions.TransactionTimeout): run(transaction.run()) # receive response after timeout response = stun.Message(message_method=stun.Method.BINDING, message_class=stun.Class.RESPONSE) transaction.response_received(response, ('127.0.0.1', 1234))