XEP-0198: properly disable on disconnect, fix reconnect-loop
When the connection is disconnected (but the session didn't "end", because 0198 resumption is enabled), poezio will reconnect and try to send an <r/> element because the 0198 plugin doesn't realize that SM wasn't re-enabled yet.
This commit is contained in:
parent
115c234527
commit
deb6d4f176
1 changed files with 6 additions and 0 deletions
|
@ -131,6 +131,7 @@ class XEP_0198(BasePlugin):
|
||||||
self.xmpp.add_filter('in', self._handle_incoming)
|
self.xmpp.add_filter('in', self._handle_incoming)
|
||||||
self.xmpp.add_filter('out_sync', self._handle_outgoing)
|
self.xmpp.add_filter('out_sync', self._handle_outgoing)
|
||||||
|
|
||||||
|
self.xmpp.add_event_handler('disconnected', self.disconnected)
|
||||||
self.xmpp.add_event_handler('session_end', self.session_end)
|
self.xmpp.add_event_handler('session_end', self.session_end)
|
||||||
|
|
||||||
def plugin_end(self):
|
def plugin_end(self):
|
||||||
|
@ -139,6 +140,7 @@ class XEP_0198(BasePlugin):
|
||||||
|
|
||||||
self.xmpp.unregister_feature('sm', self.order)
|
self.xmpp.unregister_feature('sm', self.order)
|
||||||
self.xmpp.unregister_feature('sm', self.resume_order)
|
self.xmpp.unregister_feature('sm', self.resume_order)
|
||||||
|
self.xmpp.del_event_handler('disconnected', self.disconnected)
|
||||||
self.xmpp.del_event_handler('session_end', self.session_end)
|
self.xmpp.del_event_handler('session_end', self.session_end)
|
||||||
self.xmpp.del_filter('in', self._handle_incoming)
|
self.xmpp.del_filter('in', self._handle_incoming)
|
||||||
self.xmpp.del_filter('out_sync', self._handle_outgoing)
|
self.xmpp.del_filter('out_sync', self._handle_outgoing)
|
||||||
|
@ -154,6 +156,10 @@ class XEP_0198(BasePlugin):
|
||||||
self.xmpp.remove_stanza(stanza.Ack)
|
self.xmpp.remove_stanza(stanza.Ack)
|
||||||
self.xmpp.remove_stanza(stanza.RequestAck)
|
self.xmpp.remove_stanza(stanza.RequestAck)
|
||||||
|
|
||||||
|
def disconnected(self, event):
|
||||||
|
"""Reset enabled state until we can resume/reenable."""
|
||||||
|
self.enabled = False
|
||||||
|
|
||||||
def session_end(self, event):
|
def session_end(self, event):
|
||||||
"""Reset stream management state."""
|
"""Reset stream management state."""
|
||||||
self.enabled = False
|
self.enabled = False
|
||||||
|
|
Loading…
Reference in a new issue