diff options
author | Lance Stout <lancestout@gmail.com> | 2012-06-22 22:59:15 -0700 |
---|---|---|
committer | Lance Stout <lancestout@gmail.com> | 2012-06-22 23:13:16 -0700 |
commit | 85ef2d8d0bcc92cd20d857d01bcf1bba56bc8edf (patch) | |
tree | 899f0fb3aa57940e5dbc4ca86cb3ed6b0d5b22db | |
parent | c2c7cc032b38d8a7a293467a8c2ff7380cbc756f (diff) | |
download | slixmpp-85ef2d8d0bcc92cd20d857d01bcf1bba56bc8edf.tar.gz slixmpp-85ef2d8d0bcc92cd20d857d01bcf1bba56bc8edf.tar.bz2 slixmpp-85ef2d8d0bcc92cd20d857d01bcf1bba56bc8edf.tar.xz slixmpp-85ef2d8d0bcc92cd20d857d01bcf1bba56bc8edf.zip |
Add support for reconnecting based on see-other-host stream errors.
-rw-r--r-- | sleekxmpp/basexmpp.py | 22 |
1 files changed, 22 insertions, 0 deletions
diff --git a/sleekxmpp/basexmpp.py b/sleekxmpp/basexmpp.py index aae80168..275275d1 100644 --- a/sleekxmpp/basexmpp.py +++ b/sleekxmpp/basexmpp.py @@ -134,6 +134,7 @@ class BaseXMPP(XMLStream): Callback('Presence', MatchXPath("{%s}presence" % self.default_ns), self._handle_presence)) + self.register_handler( Callback('Stream Error', MatchXPath("{%s}error" % self.stream_ns), @@ -658,6 +659,27 @@ class BaseXMPP(XMLStream): def _handle_stream_error(self, error): self.event('stream_error', error) + if error['condition'] == 'see-other-host': + other_host = error['see_other_host'] + + host = other_host + port = 5222 + + if '[' in other_host and ']' in other_host: + host = other_host.split(']')[0][1:] + elif ':' in other_host: + host = other_host.split(':')[0] + + port_sec = other_host.split(']')[-1] + if ':' in port_sec: + port = int(port_sec.split(':')[1]) + + self.address = (host, port) + self.default_domain = host + self.dns_records = None + self.reconnect_delay = None + self.reconnect() + def _handle_message(self, msg): """Process incoming message stanzas.""" if not self.is_component and not msg['to'].bare: |