Source code for aioxmpp.ping.service

########################################################################
# File name: service.py
# This file is part of: aioxmpp
#
# LICENSE
#
# This program is free software: you can redistribute it and/or modify
# it under the terms of the GNU Lesser General Public License as
# published by the Free Software Foundation, either version 3 of the
# License, or (at your option) any later version.
#
# This program 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
# Lesser General Public License for more details.
#
# You should have received a copy of the GNU Lesser General Public
# License along with this program.  If not, see
# <http://www.gnu.org/licenses/>.
#
########################################################################
import asyncio

import aioxmpp.disco
import aioxmpp.service
import aioxmpp.structs

from aioxmpp.utils import namespaces

from . import xso as ping_xso


[docs]class PingService(aioxmpp.service.Service): """ Service implementing XMPP Ping (:xep:`199`). This service implements the response to XMPP Pings and provides a method to send pings. .. automethod:: ping """ ORDER_AFTER = [ aioxmpp.disco.DiscoServer, ] _ping_feature = aioxmpp.disco.register_feature( namespaces.xep0199_ping ) @aioxmpp.service.iq_handler(aioxmpp.structs.IQType.GET, ping_xso.Ping) @asyncio.coroutine def handle_ping(self, request): return ping_xso.Ping()
[docs] @asyncio.coroutine def ping(self, peer): """ Ping a peer. :param peer: The peer to ping. :type peer: :class:`aioxmpp.JID` :raises aioxmpp.errors.XMPPError: as received Send a :xep:`199` ping IQ to `peer` and wait for the reply. .. note:: If the peer does not support :xep:`199`, they will respond with a ``cancel`` ``service-unavailable`` error. However, some implementations return a ``cancel`` ``feature-not-implemented`` error instead. Callers should be prepared for the :class:`aioxmpp.XMPPCancelError` exceptions in those cases. """ iq = aioxmpp.IQ( to=peer, type_=aioxmpp.IQType.GET, payload=ping_xso.Ping() ) yield from self.client.send(iq)