mirror of
https://github.com/correl/SleekXMPP.git
synced 2024-11-23 19:19:53 +00:00
Session timeout now defaults to 45sec, but can be adjusted.
e.g. self.session_timeout = 15 It is also managed by XMLStream instead of ClientXMPP now.
This commit is contained in:
parent
b8a4ffece9
commit
2162d6042e
2 changed files with 21 additions and 7 deletions
|
@ -254,13 +254,6 @@ class ClientXMPP(BaseXMPP):
|
||||||
self.bindfail = False
|
self.bindfail = False
|
||||||
self.features = set()
|
self.features = set()
|
||||||
|
|
||||||
def session_timeout():
|
|
||||||
if not self.session_started_event.isSet():
|
|
||||||
log.debug("Session start has taken more than 15 seconds")
|
|
||||||
self.disconnect(reconnect=self.auto_reconnect)
|
|
||||||
|
|
||||||
self.schedule("session timeout checker", 15, session_timeout)
|
|
||||||
|
|
||||||
def _handle_stream_features(self, features):
|
def _handle_stream_features(self, features):
|
||||||
"""
|
"""
|
||||||
Process the received stream features.
|
Process the received stream features.
|
||||||
|
|
|
@ -211,6 +211,7 @@ class XMLStream(object):
|
||||||
self.stream_end_event = threading.Event()
|
self.stream_end_event = threading.Event()
|
||||||
self.stream_end_event.set()
|
self.stream_end_event.set()
|
||||||
self.session_started_event = threading.Event()
|
self.session_started_event = threading.Event()
|
||||||
|
self.session_timeout = 45
|
||||||
|
|
||||||
self.event_queue = queue.Queue()
|
self.event_queue = queue.Queue()
|
||||||
self.send_queue = queue.Queue()
|
self.send_queue = queue.Queue()
|
||||||
|
@ -232,6 +233,8 @@ class XMLStream(object):
|
||||||
self.is_client = False
|
self.is_client = False
|
||||||
self.dns_answers = []
|
self.dns_answers = []
|
||||||
|
|
||||||
|
self.add_event_handler('connected', self._handle_connected)
|
||||||
|
|
||||||
def use_signals(self, signals=None):
|
def use_signals(self, signals=None):
|
||||||
"""
|
"""
|
||||||
Register signal handlers for SIGHUP and SIGTERM, if possible,
|
Register signal handlers for SIGHUP and SIGTERM, if possible,
|
||||||
|
@ -337,6 +340,7 @@ class XMLStream(object):
|
||||||
return connected
|
return connected
|
||||||
|
|
||||||
def _connect(self):
|
def _connect(self):
|
||||||
|
self.scheduler.remove('Session timeout check')
|
||||||
self.stop.clear()
|
self.stop.clear()
|
||||||
if self.default_domain:
|
if self.default_domain:
|
||||||
self.address = self.pick_dns_answer(self.default_domain,
|
self.address = self.pick_dns_answer(self.default_domain,
|
||||||
|
@ -446,6 +450,23 @@ class XMLStream(object):
|
||||||
serr.errno, serr.strerror))
|
serr.errno, serr.strerror))
|
||||||
return False
|
return False
|
||||||
|
|
||||||
|
def _handle_connected(self, event=None):
|
||||||
|
"""
|
||||||
|
Add check to ensure that a session is established within
|
||||||
|
a reasonable amount of time.
|
||||||
|
"""
|
||||||
|
|
||||||
|
def _handle_session_timeout():
|
||||||
|
if not self.session_started_event.isSet():
|
||||||
|
log.debug("Session start has taken more " + \
|
||||||
|
"than %d seconds" % self.session_timeout)
|
||||||
|
self.disconnect(reconnect=self.auto_reconnect)
|
||||||
|
|
||||||
|
self.schedule("Session timeout check",
|
||||||
|
self.session_timeout,
|
||||||
|
_handle_session_timeout)
|
||||||
|
|
||||||
|
|
||||||
def disconnect(self, reconnect=False, wait=False):
|
def disconnect(self, reconnect=False, wait=False):
|
||||||
"""
|
"""
|
||||||
Terminate processing and close the XML streams.
|
Terminate processing and close the XML streams.
|
||||||
|
|
Loading…
Reference in a new issue