plugin XEP-0167: fix ICE credentials handling.

This commit is contained in:
Goffi 2025-10-29 13:20:56 +01:00
commit cd8516f0bb
2 changed files with 10 additions and 12 deletions

View file

@ -180,15 +180,15 @@ class XEP_0167(BaseApplicationHandler):
continue
to_delete.add(media)
media_type, media_data = media, data
call_data[media_type] = media_data["application_data"]
media_type_data = call_data[media_type] = media_data["application_data"]
transport_data = media_data["transport_data"]
try:
call_data[media_type]["fingerprint"] = transport_data["fingerprint"]
media_type_data["fingerprint"] = transport_data["fingerprint"]
except KeyError:
log.warning("fingerprint is missing")
pass
try:
call_data[media_type]["id"] = media_data["id"]
media_type_data["id"] = media_data["id"]
except KeyError:
log.warning(f"no media ID found for {media_type}: {media_data}")
# FIXME: the 2 values below are linked to XEP-0343, they should be added
@ -198,11 +198,12 @@ class XEP_0167(BaseApplicationHandler):
if value is not None:
metadata[key] = value
try:
call_data[media_type]["ice-candidates"] = transport_data.get(
media_type_data["ice-candidates"] = transport_data.get(
"candidates", []
)
metadata["ice-ufrag"] = transport_data["ufrag"]
metadata["ice-pwd"] = transport_data["pwd"]
for data in ("ufrag", "pwd"):
key = f"ice-{data}"
media_type_data[key] = metadata[key] = transport_data[data]
except KeyError:
log.warning("ICE data are missing from SDP")
continue
@ -233,8 +234,8 @@ class XEP_0167(BaseApplicationHandler):
"app_kwargs": {"media": media, "media_data": media_data},
"transport_data": {
"local_ice_data": {
"ufrag": metadata["ice-ufrag"],
"pwd": metadata["ice-pwd"],
"ufrag": media_data.get("ice-ufrag") or metadata["ice-ufrag"],
"pwd": media_data.get("ice-pwd") or metadata["ice-pwd"],
"candidates": media_data.pop("ice-candidates"),
"fingerprint": media_data.pop("fingerprint", {}),
}

View file

@ -111,11 +111,8 @@ def generate_sdp_from_session(session: dict, local: bool = False, port: int = 9)
sdp_lines,
triggers_no_cancel=True,
)
content_names = sorted(contents)
for content_name, content_data in [
(n, contents[n]) for n in content_names
]: # contents.items():
for content_name, content_data in contents.items():
app_data_key = "local_data" if local else "peer_data"
application_data = content_data["application_data"]
media_data = application_data[app_data_key]