Mercurial > libervia-backend
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)] |