Check for Iq results based on both the sender's JID and the ID value.

This commit is contained in:
Lance Stout 2012-04-08 15:58:48 -04:00
parent 272ddf9f01
commit 9ffde5ab37

View File

@ -9,7 +9,7 @@
from sleekxmpp.stanza.rootstanza import RootStanza from sleekxmpp.stanza.rootstanza import RootStanza
from sleekxmpp.xmlstream import StanzaBase, ET from sleekxmpp.xmlstream import StanzaBase, ET
from sleekxmpp.xmlstream.handler import Waiter, Callback from sleekxmpp.xmlstream.handler import Waiter, Callback
from sleekxmpp.xmlstream.matcher import MatcherId from sleekxmpp.xmlstream.matcher import StanzaPath
from sleekxmpp.exceptions import IqTimeout, IqError from sleekxmpp.exceptions import IqTimeout, IqError
@ -187,14 +187,17 @@ class Iq(RootStanza):
if callback is not None and self['type'] in ('get', 'set'): if callback is not None and self['type'] in ('get', 'set'):
handler_name = 'IqCallback_%s' % self['id'] handler_name = 'IqCallback_%s' % self['id']
handler = Callback(handler_name, handler = Callback(handler_name,
MatcherId(self['id']), StanzaPath('iq@id=%s@from=%s' % (
self['id'], self['to'])),
callback, callback,
once=True) once=True)
self.stream.register_handler(handler) self.stream.register_handler(handler)
StanzaBase.send(self, now=now) StanzaBase.send(self, now=now)
return handler_name return handler_name
elif block and self['type'] in ('get', 'set'): elif block and self['type'] in ('get', 'set'):
waitfor = Waiter('IqWait_%s' % self['id'], MatcherId(self['id'])) waitfor = Waiter('IqWait_%s' % self['id'],
StanzaPath('iq@id=%s@from=%s' % (
self['id'], self['to'])))
self.stream.register_handler(waitfor) self.stream.register_handler(waitfor)
StanzaBase.send(self, now=now) StanzaBase.send(self, now=now)
result = waitfor.wait(timeout) result = waitfor.wait(timeout)