# Slixmpp: The Slick XMPP Library# Copyright (C) 2010 Nathanael C. Fritz# This file is part of Slixmpp.# See the file LICENSE for copying permission.importloggingfromasyncioimportFuturefromtypingimportOptionalimportslixmppfromslixmppimportJIDfromslixmpp.stanzaimportIqfromslixmpp.xmlstreamimportregister_stanza_pluginfromslixmpp.xmlstream.handlerimportCallbackfromslixmpp.xmlstream.matcherimportStanzaPathfromslixmpp.pluginsimportBasePluginfromslixmpp.plugins.xep_0092importVersion,stanzalog=logging.getLogger(__name__)
[docs]classXEP_0092(BasePlugin):""" XEP-0092: Software Version """name='xep_0092'description='XEP-0092: Software Version'dependencies={'xep_0030'}stanza=stanzadefault_config={'software_name':'Slixmpp','version':slixmpp.__version__,'os':''}defplugin_init(self):""" Start the XEP-0092 plugin. """if'name'inself.config:self.software_name=self.config['name']self.xmpp.register_handler(Callback('Software Version',StanzaPath('iq@type=get/software_version'),self._handle_version))register_stanza_plugin(Iq,Version)defplugin_end(self):self.xmpp.remove_handler('Software Version')self.xmpp['xep_0030'].del_feature(feature='jabber:iq:version')defsession_bind(self,jid):self.xmpp.plugin['xep_0030'].add_feature('jabber:iq:version')def_handle_version(self,iq:Iq):""" Respond to a software version query. :param iq: The Iq stanza containing the software version query. """iq=iq.reply()ifself.software_name:iq['software_version']['name']=self.software_nameiq['software_version']['version']=self.versioniq['software_version']['os']=self.oselse:iq.error()iq['error']['type']='cancel'iq['error']['condition']='service-unavailable'iq.send()
[docs]defget_version(self,jid:JID,ifrom:Optional[JID]=None,**iqkwargs)->Future:""" Retrieve the software version of a remote agent. :param jid: The JID of the entity to query. """iq=self.xmpp.make_iq_get(ito=jid,ifrom=ifrom)iq['query']=Version.namespacereturniq.send(**iqkwargs)