From cfac9628b442cba5817a7811de0a4372a812cfb4 Mon Sep 17 00:00:00 2001 From: Marijn Vriens Date: Wed, 7 Jun 2017 22:34:14 +0200 Subject: [PATCH 1/2] Adding support for Client to Server pinging and ping timeouts. --- wokkel/ping.py | 15 ++++++++++++--- 1 file changed, 12 insertions(+), 3 deletions(-) diff --git a/wokkel/ping.py b/wokkel/ping.py index 71d1ba2..2e6e99b 100755 --- a/wokkel/ping.py +++ b/wokkel/ping.py @@ -30,11 +30,11 @@ class PingClientProtocol(XMPPHandler): This handler implements the protocol for sending out XMPP Ping requests. """ - def ping(self, entity, sender=None): + def ping(self, entity=None, sender=None, timeout=None): """ Send out a ping request and wait for a response. - @param entity: Entity to be pinged. + @param entity: Entity to be pinged. L{None} to ping the server. @type entity: L{JID} @return: A deferred that fires upon receiving a response. @@ -42,6 +42,9 @@ def ping(self, entity, sender=None): @param sender: Optional sender address. @type sender: L{JID} + + @param entity: timeout in seconds for the ping to be responded before errback is called. + @type entity: L{int} """ def cb(response): return None @@ -60,7 +63,13 @@ def eb(failure): if sender is not None: request['from'] = sender.full() - d = request.send(entity.full()) + if timeout is not None: + request.timeout = timeout + + if entity is None: + d = request.send() + else: + d = request.send(entity.full()) d.addCallbacks(cb, eb) return d From 79177f36f0bd6876072727c9cd641a40d61c2494 Mon Sep 17 00:00:00 2001 From: Marijn Vriens Date: Wed, 7 Jun 2017 22:44:37 +0200 Subject: [PATCH 2/2] added unittest for server ping support. --- wokkel/test/test_ping.py | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/wokkel/test/test_ping.py b/wokkel/test/test_ping.py index 4501785..0564e69 100755 --- a/wokkel/test/test_ping.py +++ b/wokkel/test/test_ping.py @@ -51,6 +51,26 @@ def cb(result): return d + def test_pingToServer(self): + """ + Pinging a service should fire a deferred with None + """ + + def cb(result): + self.assertIdentical(None, result) + + d = self.protocol.ping() + d.addCallback(cb) + + iq = self.stub.output[-1] + self.assertIsNone(iq.getAttribute(u'to')) + self.assertEqual(u'get', iq.getAttribute(u'type')) + self.assertEqual('urn:xmpp:ping', iq.ping.uri) + + response = toResponse(iq, u'result') + self.stub.send(response) + + return d def test_pingWithSender(self): """