summaryrefslogtreecommitdiff
path: root/sleekxmpp/basexmpp.py
diff options
context:
space:
mode:
authorLance Stout <lancestout@gmail.com>2012-06-22 22:59:15 -0700
committerLance Stout <lancestout@gmail.com>2012-06-22 23:13:16 -0700
commit85ef2d8d0bcc92cd20d857d01bcf1bba56bc8edf (patch)
tree899f0fb3aa57940e5dbc4ca86cb3ed6b0d5b22db /sleekxmpp/basexmpp.py
parentc2c7cc032b38d8a7a293467a8c2ff7380cbc756f (diff)
downloadslixmpp-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.
Diffstat (limited to 'sleekxmpp/basexmpp.py')
-rw-r--r--sleekxmpp/basexmpp.py22
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: