connects when server can't resume stream

This commit is contained in:
Jefry Lagrange 2011-06-07 18:48:53 -04:00
parent 2090b9b900
commit 7194260f98
2 changed files with 24 additions and 10 deletions

View File

@ -535,7 +535,7 @@ class XMPPDispatcher(PlugIn):
if self._owner._registered_name and not stanza.getAttr('from'):
stanza.setAttr('from', self._owner._registered_name)
if self.sm:
if self.sm and self.sm.enabled:
self.sm.uqueue.append(stanza)
self.sm.out_h = self.sm.out_h + 1
if len(self.sm.uqueue) > self.sm.max_queue:

View File

@ -24,7 +24,8 @@ class Smacks():
self.max_queue = 5
self._owner = None
self.resuming = False
self.enabled = False # If SM is enabled
def set_owner(self, owner):
self._owner = owner
@ -50,6 +51,8 @@ class Smacks():
if r == 'false' or r == 'False' or r == '0':
self.negociate(False)
self.enabled = True
def negociate(self, resume=True):
# Every time we attempt to negociate, we must erase all previous info
@ -69,7 +72,7 @@ class Smacks():
log.error('Attempted to resume without a valid session id ')
return
resume = Acks()
resume.buildResume(self.in_h, self.session_id)
resume.buildResume(self.in_h, None)#self.session_id)
self._owner.Connection.send(resume, True)
def send_ack(self, disp, stanza):
@ -105,17 +108,28 @@ class Smacks():
for i in self.uqueue:
self._owner.Connection.send(i, False)
def error_handling(self, disp, stanza): # NEEDS TESTING
def error_handling(self, disp, stanza):
tag = stanza.getTag('item-not-found')
# If the server doesn't recognize previd, forget about resuming
# Ask for service discovery, etc..
if tag:
self.negociate()
if stanza.getTag('item-not-found'):
self.enabled = False
self.resuming = False
self.negociate()
self.con._discover_server_at_connection(self.con.connection)
return
tag = stanza.getTag('feature-not-implemented')
# Doesn't support resumption
if tag:
self.negociate(False)
if stanza.getTag('feature-not-implemented'):
self.enabled = False
self.negociate(False)
return
if stanza.getTag('unexpected-request'):
self.enabled = False
log.error('Gajim failed to negociate Stream Management')
return