diff options
Diffstat (limited to 'sleekxmpp/plugins/xep_0092.py')
| -rw-r--r-- | sleekxmpp/plugins/xep_0092.py | 56 |
1 files changed, 56 insertions, 0 deletions
diff --git a/sleekxmpp/plugins/xep_0092.py b/sleekxmpp/plugins/xep_0092.py new file mode 100644 index 0000000..ca02c4a --- /dev/null +++ b/sleekxmpp/plugins/xep_0092.py @@ -0,0 +1,56 @@ +""" + SleekXMPP: The Sleek XMPP Library + Copyright (C) 2010 Nathanael C. Fritz + This file is part of SleekXMPP. + + See the file LICENSE for copying permission. +""" +from xml.etree import cElementTree as ET +from . import base +from .. xmlstream.handler.xmlwaiter import XMLWaiter + +class xep_0092(base.base_plugin): + """ + XEP-0092 Software Version + """ + def plugin_init(self): + self.description = "Software Version" + self.xep = "0092" + self.name = self.config.get('name', 'SleekXMPP') + self.version = self.config.get('version', '0.1-dev') + self.xmpp.add_handler("<iq type='get' xmlns='%s'><query xmlns='jabber:iq:version' /></iq>" % self.xmpp.default_ns, self.report_version, name='Sofware Version') + + def post_init(self): + base.base_plugin.post_init(self) + self.xmpp.plugin['xep_0030'].add_feature('jabber:iq:version') + + def report_version(self, xml): + iq = self.xmpp.makeIqResult(xml.get('id', 'unknown')) + iq.attrib['to'] = xml.get('from', self.xmpp.server) + query = ET.Element('{jabber:iq:version}query') + name = ET.Element('name') + name.text = self.name + version = ET.Element('version') + version.text = self.version + query.append(name) + query.append(version) + iq.append(query) + self.xmpp.send(iq) + + def getVersion(self, jid): + iq = self.xmpp.makeIqGet() + query = ET.Element('{jabber:iq:version}query') + iq.append(query) + iq.attrib['to'] = jid + iq.attrib['from'] = self.xmpp.fulljid + id = iq.get('id') + result = iq.send() + if result and result is not None and result.get('type', 'error') != 'error': + qry = result.find('{jabber:iq:version}query') + version = {} + for child in qry.getchildren(): + version[child.tag.split('}')[-1]] = child.text + return version + else: + return False + |
