diff --git a/libervia/backend/plugins/plugin_xep_0167/__init__.py b/libervia/backend/plugins/plugin_xep_0167/__init__.py index 4a1bf56c..8af99061 100644 --- a/libervia/backend/plugins/plugin_xep_0167/__init__.py +++ b/libervia/backend/plugins/plugin_xep_0167/__init__.py @@ -171,11 +171,12 @@ class XEP_0167(BaseApplicationHandler): if "sdp" in call_data: sdp_data = mapping.parse_sdp(call_data["sdp"]) - for media_type in ("audio", "video"): - try: - media_data = sdp_data.pop(media_type) - except KeyError: + to_delete = set() + for media, data in sdp_data.items(): + if media not in ("audio", "video"): continue + to_delete.add(media) + media_type, media_data = media, data call_data[media_type] = media_data["application_data"] transport_data = media_data["transport_data"] try: @@ -196,6 +197,8 @@ class XEP_0167(BaseApplicationHandler): except KeyError: log.warning("ICE data are missing from SDP") continue + for media in to_delete: + del sdp_data[media] metadata.update(sdp_data.get("metadata", {})) call_type = ( @@ -205,31 +208,31 @@ class XEP_0167(BaseApplicationHandler): ) seen_names = set() - for media in ("audio", "video"): - media_data = call_data.get(media) - if media_data is not None: - content = { - "app_ns": NS_JINGLE_RTP, - "senders": "both", - "transport_type": self._j.TRANSPORT_DATAGRAM, - "app_kwargs": {"media": media, "media_data": media_data}, - "transport_data": { - "local_ice_data": { - "ufrag": metadata["ice-ufrag"], - "pwd": metadata["ice-pwd"], - "candidates": media_data.pop("ice-candidates"), - "fingerprint": media_data.pop("fingerprint", {}), - } - }, - } - if "id" in media_data: - name = media_data.pop("id") - if name in seen_names: - raise exceptions.DataError( - f"Content name (mid) seen multiple times: {name}" - ) - content["name"] = name - contents.append(content) + for media, media_data in call_data.items(): + if media not in ("audio", "video"): + continue + content = { + "app_ns": NS_JINGLE_RTP, + "senders": "both", + "transport_type": self._j.TRANSPORT_DATAGRAM, + "app_kwargs": {"media": media, "media_data": media_data}, + "transport_data": { + "local_ice_data": { + "ufrag": metadata["ice-ufrag"], + "pwd": metadata["ice-pwd"], + "candidates": media_data.pop("ice-candidates"), + "fingerprint": media_data.pop("fingerprint", {}), + } + }, + } + if "id" in media_data: + name = media_data.pop("id") + if name in seen_names: + raise exceptions.DataError( + f"Content name (mid) seen multiple times: {name}" + ) + content["name"] = name + contents.append(content) if not contents: raise exceptions.DataError("no valid media data found: {call_data}") sid = str(uuid.uuid4())