comparison libervia/backend/plugins/plugin_xep_0353.py @ 4240:79c8a70e1813

backend, frontend: prepare remote control: This is a series of changes necessary to prepare the implementation of remote control feature: - XEP-0166: add a `priority` attribute to `ApplicationData`: this is needed when several applications are working in a same session, to know which one must be handled first. Will be used to make Remote Control have precedence over Call content. - XEP-0166: `_call_plugins` is now async and is not used with `DeferredList` anymore: the benefit to have methods called in parallels is very low, and it cause a lot of trouble as we can't predict order. Methods are now called sequentially so workflow can be predicted. - XEP-0167: fix `senders` XMPP attribute <=> SDP mapping - XEP-0234: preflight acceptance key is now `pre-accepted` instead of `file-accepted`, so the same key can be used with other jingle applications. - XEP-0167, XEP-0343: move some method to XEP-0167 - XEP-0353: use new `priority` feature to call preflight methods of applications according to it. - frontend (webrtc): refactor the sources/sink handling with a more flexible mechanism based on Pydantic models. It is now possible to have has many Data Channel as necessary, to have them in addition to A/V streams, to specify manually GStreamer sources and sinks, etc. - frontend (webrtc): rework of the pipeline to reduce latency. - frontend: new `portal_desktop` method. Screenshare portal handling has been moved there, and RemoteDesktop portal has been added. - frontend (webrtc): fix `extract_ufrag_pwd` method. rel 436
author Goffi <goffi@goffi.org>
date Sat, 11 May 2024 13:52:41 +0200
parents e11b13418ba6
children 0d7bb4df2343
comparison
equal deleted inserted replaced
4239:a38559e6d6e2 4240:79c8a70e1813
14 # GNU Affero General Public License for more details. 14 # GNU Affero General Public License for more details.
15 15
16 # You should have received a copy of the GNU Affero General Public License 16 # You should have received a copy of the GNU Affero General Public License
17 # along with this program. If not, see <http://www.gnu.org/licenses/>. 17 # along with this program. If not, see <http://www.gnu.org/licenses/>.
18 18
19 from typing import cast
19 from twisted.internet import defer 20 from twisted.internet import defer
20 from twisted.internet import reactor 21 from twisted.internet import reactor
21 from twisted.words.protocols.jabber import error, jid 22 from twisted.words.protocols.jabber import error, jid
22 from twisted.words.protocols.jabber import xmlstream 23 from twisted.words.protocols.jabber import xmlstream
23 from twisted.words.xish import domish 24 from twisted.words.xish import domish
25 from libervia.backend.plugins.plugin_xep_0166.models import ApplicationData
24 from wokkel import disco, iwokkel 26 from wokkel import disco, iwokkel
25 from zope.interface import implementer 27 from zope.interface import implementer
26 28
27 from libervia.backend.core import exceptions 29 from libervia.backend.core import exceptions
28 from libervia.backend.core.constants import Const as C 30 from libervia.backend.core.constants import Const as C
326 328
327 if not desc_and_apps: 329 if not desc_and_apps:
328 log.warning("No application specified: {message_elt.toXml()}") 330 log.warning("No application specified: {message_elt.toXml()}")
329 return 331 return
330 332
333 cast(list[tuple[domish.Element, ApplicationData]], desc_and_apps)
334 desc_and_apps.sort(
335 key=lambda desc_and_app: desc_and_app[1].priority,
336 reverse=True
337 )
338
331 session = self._j.create_session( 339 session = self._j.create_session(
332 client, session_id, self._j.ROLE_RESPONDER, peer_jid, local_jid 340 client, session_id, self._j.ROLE_RESPONDER, peer_jid, local_jid
333 ) 341 )
334 342
335 is_in_roster = peer_jid.userhostJID() in client.roster 343 is_in_roster = peer_jid.userhostJID() in client.roster