comparison libervia/backend/plugins/plugin_xep_0353.py @ 4115:0da563780ffc

plugin XEP-0167, XEP-0353: handle ringing: - add a `jingle_preflight_info` method in the Jingle Application model to handle this kind of information - XEP-0353 is calling `jingle_preflight_info` when a `ringing` message is received - XEP-0167 use this information to send a `ringing` info to frontends
author Goffi <goffi@goffi.org>
date Wed, 16 Aug 2023 18:33:28 +0200
parents bc60875cb3b8
children 6784d07b99c8
comparison
equal deleted inserted replaced
4114:79ec7d7beef3 4115:0da563780ffc
27 from libervia.backend.core import exceptions 27 from libervia.backend.core import exceptions
28 from libervia.backend.core.constants import Const as C 28 from libervia.backend.core.constants import Const as C
29 from libervia.backend.core.core_types import SatXMPPEntity 29 from libervia.backend.core.core_types import SatXMPPEntity
30 from libervia.backend.core.i18n import D_, _ 30 from libervia.backend.core.i18n import D_, _
31 from libervia.backend.core.log import getLogger 31 from libervia.backend.core.log import getLogger
32 from libervia.backend.tools import xml_tools
33 32
34 log = getLogger(__name__) 33 log = getLogger(__name__)
35 34
36 35
37 NS_JINGLE_MESSAGE = "urn:xmpp:jingle-message:0" 36 NS_JINGLE_MESSAGE = "urn:xmpp:jingle-message:0"
213 return self._handle_proceed(client, message_elt, elt) 212 return self._handle_proceed(client, message_elt, elt)
214 elif elt.name == "accept": 213 elif elt.name == "accept":
215 return self._handle_accept(client, message_elt, elt) 214 return self._handle_accept(client, message_elt, elt)
216 elif elt.name == "reject": 215 elif elt.name == "reject":
217 return self._handle_reject(client, message_elt, elt) 216 return self._handle_reject(client, message_elt, elt)
217 elif elt.name == "ringing":
218 return await self._handle_ringing(client, message_elt, elt)
218 else: 219 else:
219 log.warning(f"invalid element: {elt.toXml}") 220 log.warning(f"invalid element: {elt.toXml}")
220 return True 221 return True
221 return True 222 return True
222 223
365 reason = "busy" 366 reason = "busy"
366 367
367 response_d.errback(RejectException(reason, text)) 368 response_d.errback(RejectException(reason, text))
368 return False 369 return False
369 370
371 async def _handle_ringing(self, client, message_elt, ringing_elt):
372 session_id = ringing_elt["id"]
373 try:
374 session = self._j.get_session(client, session_id)
375 except exceptions.NotFound:
376 log.warning(f"Session {session_id!r} unknown, ignoring ringing.")
377 return False
378 for __, content_data in session["contents"].items():
379 await content_data["application"].handler.jingle_preflight_info(
380 client, session, "ringing", None
381 )
382
383 return False
384
370 385
371 @implementer(iwokkel.IDisco) 386 @implementer(iwokkel.IDisco)
372 class Handler(xmlstream.XMPPHandler): 387 class Handler(xmlstream.XMPPHandler):
373 def getDiscoInfo(self, requestor, target, nodeIdentifier=""): 388 def getDiscoInfo(self, requestor, target, nodeIdentifier=""):
374 return [disco.DiscoFeature(NS_JINGLE_MESSAGE)] 389 return [disco.DiscoFeature(NS_JINGLE_MESSAGE)]