summaryrefslogtreecommitdiff
path: root/sleekxmpp/plugins/xep_0092.py
diff options
context:
space:
mode:
Diffstat (limited to 'sleekxmpp/plugins/xep_0092.py')
-rw-r--r--sleekxmpp/plugins/xep_0092.py67
1 files changed, 67 insertions, 0 deletions
diff --git a/sleekxmpp/plugins/xep_0092.py b/sleekxmpp/plugins/xep_0092.py
new file mode 100644
index 00000000..97346d91
--- /dev/null
+++ b/sleekxmpp/plugins/xep_0092.py
@@ -0,0 +1,67 @@
+"""
+ SleekXMPP: The Sleek XMPP Library
+ Copyright (C) 2007 Nathanael C. Fritz
+ This file is part of SleekXMPP.
+
+ SleekXMPP is free software; you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation; either version 2 of the License, or
+ (at your option) any later version.
+
+ SleekXMPP is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with SleekXMPP; if not, write to the Free Software
+ Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
+"""
+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)
+
+ def post_init(self):
+ self.xmpp['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 = self.xmpp.send(iq, "<iq xmlns='%s' id='%s'/>" % (self.xmpp.default_ns, id))
+ 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
+