Philipp Hörist pushed to branch master at gajim / python-nbxmpp
Commits: 74cf3a1e by lovetox at 2020-03-25T22:28:34+01:00 Dispatcher: Don't clear IQ callbacks on parser reset
Only clear IQ callbacks if we not resumed the stream
- - - - - 452f5eab by lovetox at 2020-03-25T22:59:35+01:00 Client: Fix various things with pings
- Remove ping callback after disconnect - Address ping correctly to the domain instead of bare jid
- - - - -
2 changed files:
- nbxmpp/client.py - nbxmpp/dispatcher.py
Changes:
===================================== nbxmpp/client.py ===================================== @@ -103,6 +103,7 @@ class Client(Observable): self._session_required = False self._connect_successful = False self._stream_close_initiated = False + self._ping_id = None self._error = None, None, None
self._ignored_tls_errors = [] @@ -398,6 +399,7 @@ class Client(Observable): def _disconnect(self, immediate=True): self.state = StreamState.DISCONNECTING self._remove_ping_timer() + self._dispatcher.remove_ping_callback(self._ping_id) if not immediate: self._stream_close_initiated = True self._smacks.close_session() @@ -643,8 +645,9 @@ class Client(Observable): self._on_bind(stanza)
elif self.state == StreamState.BIND_SUCCESSFUL: - self._smacks.send_enable() + self._dispatcher.clear_iq_callbacks() self._dispatcher.set_dispatch_callback(None) + self._smacks.send_enable() self.state = StreamState.ACTIVE self.notify('connected')
@@ -771,9 +774,12 @@ class Client(Observable): stanza.getErrorMsg())
def _ping(self): - iq = Iq('get', to=self._jid.getBare()) + self._ping_source_id = None + iq = Iq('get', to=self.domain) iq.addChild(name='ping', namespace=NS_PING) - self.send_stanza(iq, timeout=10, callback=self._on_pong) + self._ping_id = self.send_stanza(iq, + timeout=10, + callback=self._on_pong) self._log.info('Ping')
def _on_pong(self, _client, result):
===================================== nbxmpp/dispatcher.py ===================================== @@ -186,14 +186,11 @@ class StanzaDispatcher(Observable): self.register_handler(*handler)
def reset_parser(self): - self._remove_timeout_source() if self._parser is not None: self._parser.dispatch = None self._parser.destroy() self._parser = None
- self._id_callbacks.clear() - self._parser = NodeBuilder(dispatch_depth=2, finished=False) self._parser.dispatch = self.dispatch @@ -493,11 +490,18 @@ class StanzaDispatcher(Observable): GLib.source_remove(self._timeout_id) self._timeout_id = None
+ def remove_ping_callback(self, id_): + self._id_callbacks.pop(id_, None) + + def clear_iq_callbacks(self): + self._log.info('Clear IQ callbacks') + self._id_callbacks.clear() + def cleanup(self): self._client = None self._modules = {} self._parser = None - self._id_callbacks.clear() + self.clear_iq_callbacks() self._dispatch_callback = None self._handlers.clear() self._remove_timeout_source()
View it on GitLab: https://dev.gajim.org/gajim/python-nbxmpp/-/compare/42a4409ffa7598269145c1ef...