Mercurial > libervia-backend
diff src/plugins/plugin_xep_0092.py @ 952:91836a647515
plugin XEP-0092: use of checkFeature instead of hasFeature + timeout + message adapted to failure if software version is not available
author | Goffi <goffi@goffi.org> |
---|---|
date | Mon, 31 Mar 2014 12:23:13 +0200 |
parents | 899dc9cd0f35 |
children | 8ca5c990ed92 |
line wrap: on
line diff
--- a/src/plugins/plugin_xep_0092.py Mon Mar 31 12:23:13 2014 +0200 +++ b/src/plugins/plugin_xep_0092.py Mon Mar 31 12:23:13 2014 +0200 @@ -19,11 +19,13 @@ from sat.core.i18n import _ from sat.core.constants import Const as C +from twisted.internet import reactor, defer from wokkel import compat from sat.core import exceptions from logging import debug, info, warning, error NS_VERSION = "jabber:iq:version" +TIMEOUT = 10 PLUGIN_INFO = { "name": "Software Version Plugin", @@ -58,17 +60,16 @@ - os: operating system of the queried entity """ client = self.host.getClient(profile_key) - def getVersion(available): - if not available: - raise exceptions.FeatureNotFound + def getVersion(dummy): iq_elt = compat.IQ(client.xmlstream, 'get') iq_elt['to'] = jid_.full() iq_elt.addElement("query", NS_VERSION) d = iq_elt.send() d.addCallback(self._gotVersion) return d - d = self.host.hasFeature(NS_VERSION, jid_, client.profile) + d = self.host.checkFeature(NS_VERSION, jid_, client.profile) d.addCallback(getVersion) + reactor.callLater(TIMEOUT, d.cancel) # XXX: timeout needed because some clients don't answer the IQ return d def _gotVersion(self, iq_elt): @@ -98,8 +99,11 @@ if os: whois_msg.append(_("Operating system: %s") % os) def versionEb(failure): - failure.trap(exceptions.FeatureNotFound) - whois_msg.append(_("Software informations not available")) + failure.trap(exceptions.FeatureNotFound, defer.CancelledError) + if failure.check(failure,exceptions.FeatureNotFound): + whois_msg.append(_("Software version not available")) + else: + whois_msg.append(_("Client software version request timeout")) d = self.getVersion(target_jid, profile) d.addCallbacks(versionCb, versionEb)