Source code for slixmpp.plugins.xep_0092.version


# Slixmpp: The Slick XMPP Library
# Copyright (C) 2010 Nathanael C. Fritz
# This file is part of Slixmpp.
# See the file LICENSE for copying permission.
import logging

from asyncio import Future

import slixmpp
from slixmpp import JID
from slixmpp.stanza import Iq
from slixmpp.xmlstream import register_stanza_plugin
from slixmpp.xmlstream.handler import Callback
from slixmpp.xmlstream.matcher import StanzaPath
from slixmpp.plugins import BasePlugin
from slixmpp.plugins.xep_0092 import Version, stanza


log = logging.getLogger(__name__)


[docs] class XEP_0092(BasePlugin): """ XEP-0092: Software Version """ name = 'xep_0092' description = 'XEP-0092: Software Version' dependencies = {'xep_0030'} stanza = stanza default_config = { 'software_name': 'Slixmpp', 'version': slixmpp.__version__, 'os': '' } def plugin_init(self): """ Start the XEP-0092 plugin. """ if 'name' in self.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) def plugin_end(self): self.xmpp.remove_handler('Software Version') self.xmpp['xep_0030'].del_feature(feature='jabber:iq:version') def session_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() if self.software_name: iq['software_version']['name'] = self.software_name iq['software_version']['version'] = self.version iq['software_version']['os'] = self.os else: iq.error() iq['error']['type'] = 'cancel' iq['error']['condition'] = 'service-unavailable' iq.send()
[docs] def get_version(self, jid: JID, ifrom: JID | None = 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.namespace return iq.send(**iqkwargs)