예제 #1
0
 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]
예제 #2
0
    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))