mirror of
https://github.com/correl/SleekXMPP.git
synced 2024-11-30 11:09:56 +00:00
Update plugins that use Iq stanzas to work with new exceptions.
This commit is contained in:
parent
62230fc970
commit
004eabf809
5 changed files with 75 additions and 41 deletions
|
@ -112,7 +112,4 @@ class xep_0012(base.base_plugin):
|
||||||
iq.attrib['from'] = self.xmpp.boundjid.full
|
iq.attrib['from'] = self.xmpp.boundjid.full
|
||||||
id = iq.get('id')
|
id = iq.get('id')
|
||||||
result = iq.send()
|
result = iq.send()
|
||||||
if result and result is not None and result.get('type', 'error') != 'error':
|
return result['last_activity']['seconds']
|
||||||
return result['last_activity']['seconds']
|
|
||||||
else:
|
|
||||||
return False
|
|
||||||
|
|
|
@ -188,8 +188,12 @@ class xep_0045(base.base_plugin):
|
||||||
iq['from'] = ifrom
|
iq['from'] = ifrom
|
||||||
query = ET.Element('{http://jabber.org/protocol/muc#owner}query')
|
query = ET.Element('{http://jabber.org/protocol/muc#owner}query')
|
||||||
iq.append(query)
|
iq.append(query)
|
||||||
result = iq.send()
|
# For now, swallow errors to preserve existing API
|
||||||
if result['type'] == 'error':
|
try:
|
||||||
|
result = iq.send()
|
||||||
|
except IqError:
|
||||||
|
return False
|
||||||
|
except IqTimeout:
|
||||||
return False
|
return False
|
||||||
xform = result.xml.find('{http://jabber.org/protocol/muc#owner}query/{jabber:x:data}x')
|
xform = result.xml.find('{http://jabber.org/protocol/muc#owner}query/{jabber:x:data}x')
|
||||||
if xform is None: return False
|
if xform is None: return False
|
||||||
|
@ -209,8 +213,12 @@ class xep_0045(base.base_plugin):
|
||||||
form = form.getXML('submit')
|
form = form.getXML('submit')
|
||||||
query.append(form)
|
query.append(form)
|
||||||
iq.append(query)
|
iq.append(query)
|
||||||
result = iq.send()
|
# For now, swallow errors to preserve existing API
|
||||||
if result['type'] == 'error':
|
try:
|
||||||
|
result = iq.send()
|
||||||
|
except IqError:
|
||||||
|
return False
|
||||||
|
except IqTimeout:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -254,8 +262,12 @@ class xep_0045(base.base_plugin):
|
||||||
destroy.append(xreason)
|
destroy.append(xreason)
|
||||||
query.append(destroy)
|
query.append(destroy)
|
||||||
iq.append(query)
|
iq.append(query)
|
||||||
r = iq.send()
|
# For now, swallow errors to preserve existing API
|
||||||
if r is False or r['type'] == 'error':
|
try:
|
||||||
|
r = iq.send()
|
||||||
|
except IqError:
|
||||||
|
return False
|
||||||
|
except IqTimeout:
|
||||||
return False
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -271,9 +283,13 @@ class xep_0045(base.base_plugin):
|
||||||
query.append(item)
|
query.append(item)
|
||||||
iq = self.xmpp.makeIqSet(query)
|
iq = self.xmpp.makeIqSet(query)
|
||||||
iq['to'] = room
|
iq['to'] = room
|
||||||
result = iq.send()
|
# For now, swallow errors to preserve existing API
|
||||||
if result is False or result['type'] != 'result':
|
try:
|
||||||
raise ValueError
|
result = iq.send()
|
||||||
|
except IqError:
|
||||||
|
return False
|
||||||
|
except IqTimeout:
|
||||||
|
return False
|
||||||
return True
|
return True
|
||||||
|
|
||||||
def invite(self, room, jid, reason='', mfrom=''):
|
def invite(self, room, jid, reason='', mfrom=''):
|
||||||
|
@ -303,8 +319,12 @@ class xep_0045(base.base_plugin):
|
||||||
iq = self.xmpp.makeIqGet('http://jabber.org/protocol/muc#owner')
|
iq = self.xmpp.makeIqGet('http://jabber.org/protocol/muc#owner')
|
||||||
iq['to'] = room
|
iq['to'] = room
|
||||||
iq['from'] = ifrom
|
iq['from'] = ifrom
|
||||||
result = iq.send()
|
# For now, swallow errors to preserve existing API
|
||||||
if result is None or result['type'] != 'result':
|
try:
|
||||||
|
result = iq.send()
|
||||||
|
except IqError:
|
||||||
|
raise ValueError
|
||||||
|
except IqTimeout:
|
||||||
raise ValueError
|
raise ValueError
|
||||||
form = result.xml.find('{http://jabber.org/protocol/muc#owner}query/{jabber:x:data}x')
|
form = result.xml.find('{http://jabber.org/protocol/muc#owner}query/{jabber:x:data}x')
|
||||||
if form is None:
|
if form is None:
|
||||||
|
|
|
@ -56,11 +56,17 @@ class xep_0078(base_plugin):
|
||||||
iq['type'] = 'get'
|
iq['type'] = 'get'
|
||||||
iq['to'] = self.xmpp.boundjid.host
|
iq['to'] = self.xmpp.boundjid.host
|
||||||
iq['auth']['username'] = self.xmpp.boundjid.user
|
iq['auth']['username'] = self.xmpp.boundjid.user
|
||||||
resp = iq.send(now=True)
|
|
||||||
|
|
||||||
if resp is None or resp['type'] != 'result':
|
try:
|
||||||
|
resp = iq.send(now=True)
|
||||||
|
except IqError:
|
||||||
log.info("Authentication failed: %s" % resp['error']['condition'])
|
log.info("Authentication failed: %s" % resp['error']['condition'])
|
||||||
self.xmpp.event('failed_auth', resp, direct=True)
|
self.xmpp.event('failed_auth', direct=True)
|
||||||
|
self.xmpp.disconnect()
|
||||||
|
return True
|
||||||
|
except IqTimeout:
|
||||||
|
log.info("Authentication failed: %s" % 'timeout')
|
||||||
|
self.xmpp.event('failed_auth', direct=True)
|
||||||
self.xmpp.disconnect()
|
self.xmpp.disconnect()
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -91,18 +97,23 @@ class xep_0078(base_plugin):
|
||||||
iq['auth']['password'] = self.xmpp.password
|
iq['auth']['password'] = self.xmpp.password
|
||||||
|
|
||||||
# Step 3: Send credentials
|
# Step 3: Send credentials
|
||||||
result = iq.send(now=True)
|
try:
|
||||||
if result is not None and result.attrib['type'] == 'result':
|
result = iq.send(now=True)
|
||||||
self.xmpp.features.add('auth')
|
except IqError as err:
|
||||||
|
|
||||||
self.xmpp.authenticated = True
|
|
||||||
log.debug("Established Session")
|
|
||||||
self.xmpp.sessionstarted = True
|
|
||||||
self.xmpp.session_started_event.set()
|
|
||||||
self.xmpp.event('session_start')
|
|
||||||
else:
|
|
||||||
log.info("Authentication failed")
|
log.info("Authentication failed")
|
||||||
self.xmpp.disconnect()
|
self.xmpp.disconnect()
|
||||||
self.xmpp.event("failed_auth")
|
self.xmpp.event("failed_auth", direct=True)
|
||||||
|
except IqTimeout:
|
||||||
|
log.info("Authentication failed")
|
||||||
|
self.xmpp.disconnect()
|
||||||
|
self.xmpp.event("failed_auth", direct=True)
|
||||||
|
|
||||||
|
self.xmpp.features.add('auth')
|
||||||
|
|
||||||
|
self.xmpp.authenticated = True
|
||||||
|
log.debug("Established Session")
|
||||||
|
self.xmpp.sessionstarted = True
|
||||||
|
self.xmpp.session_started_event.set()
|
||||||
|
self.xmpp.event('session_start')
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
|
@ -11,6 +11,7 @@ import logging
|
||||||
|
|
||||||
import sleekxmpp
|
import sleekxmpp
|
||||||
from sleekxmpp import Iq
|
from sleekxmpp import Iq
|
||||||
|
from sleekxmpp.exceptions import IqError, IqTimeout
|
||||||
from sleekxmpp.xmlstream import register_stanza_plugin
|
from sleekxmpp.xmlstream import register_stanza_plugin
|
||||||
from sleekxmpp.xmlstream.matcher import StanzaPath
|
from sleekxmpp.xmlstream.matcher import StanzaPath
|
||||||
from sleekxmpp.xmlstream.handler import Callback
|
from sleekxmpp.xmlstream.handler import Callback
|
||||||
|
@ -89,8 +90,13 @@ class xep_0199(base_plugin):
|
||||||
def scheduled_ping():
|
def scheduled_ping():
|
||||||
"""Send ping request to the server."""
|
"""Send ping request to the server."""
|
||||||
log.debug("Pinging...")
|
log.debug("Pinging...")
|
||||||
resp = self.send_ping(self.xmpp.boundjid.host, self.timeout)
|
try:
|
||||||
if resp is None or resp is False:
|
self.send_ping(self.xmpp.boundjid.host, self.timeout)
|
||||||
|
except IqError:
|
||||||
|
log.debug("Ping response was an error." + \
|
||||||
|
"Requesting Reconnect.")
|
||||||
|
self.xmpp.reconnect()
|
||||||
|
except IqTimeout:
|
||||||
log.debug("Did not recieve ping back in time." + \
|
log.debug("Did not recieve ping back in time." + \
|
||||||
"Requesting Reconnect.")
|
"Requesting Reconnect.")
|
||||||
self.xmpp.reconnect()
|
self.xmpp.reconnect()
|
||||||
|
@ -142,9 +148,14 @@ class xep_0199(base_plugin):
|
||||||
iq.enable('ping')
|
iq.enable('ping')
|
||||||
|
|
||||||
start_time = time.clock()
|
start_time = time.clock()
|
||||||
resp = iq.send(block=block,
|
|
||||||
timeout=timeout,
|
try:
|
||||||
callback=callback)
|
resp = iq.send(block=block,
|
||||||
|
timeout=timeout,
|
||||||
|
callback=callback)
|
||||||
|
except IqError as err:
|
||||||
|
resp = err.iq
|
||||||
|
|
||||||
end_time = time.clock()
|
end_time = time.clock()
|
||||||
|
|
||||||
delay = end_time - start_time
|
delay = end_time - start_time
|
||||||
|
@ -152,9 +163,6 @@ class xep_0199(base_plugin):
|
||||||
if not block:
|
if not block:
|
||||||
return None
|
return None
|
||||||
|
|
||||||
if not resp or resp['type'] == 'error':
|
|
||||||
return False
|
|
||||||
|
|
||||||
log.debug("Pong: %s %f" % (jid, delay))
|
log.debug("Pong: %s %f" % (jid, delay))
|
||||||
return delay
|
return delay
|
||||||
|
|
||||||
|
|
|
@ -204,10 +204,8 @@ class RosterNode(object):
|
||||||
iq['roster']['items'] = {jid: {'name': name,
|
iq['roster']['items'] = {jid: {'name': name,
|
||||||
'subscription': subscription,
|
'subscription': subscription,
|
||||||
'groups': groups}}
|
'groups': groups}}
|
||||||
response = iq.send(block, timeout, callback)
|
|
||||||
if response in [False, None] or isinstance(response, Iq):
|
return iq.send(block, timeout, callback)
|
||||||
return response
|
|
||||||
return response and response['type'] == 'result'
|
|
||||||
|
|
||||||
def presence(self, jid, resource=None):
|
def presence(self, jid, resource=None):
|
||||||
"""
|
"""
|
||||||
|
|
Loading…
Reference in a new issue