From b5b780180c16af24ad6183a37da02a0a6a62ce2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Micha=C5=82=20=C5=9Aled=C5=BA?= Date: Mon, 17 Mar 2025 11:19:14 +0100 Subject: [PATCH] Accept padded DataChannelOpenAck, fix closing DataChannel --- lib/ex_webrtc/sctp_transport.ex | 2 +- lib/ex_webrtc/sctp_transport/dcep.ex | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/lib/ex_webrtc/sctp_transport.ex b/lib/ex_webrtc/sctp_transport.ex index cb71319f..2aec9fe1 100644 --- a/lib/ex_webrtc/sctp_transport.ex +++ b/lib/ex_webrtc/sctp_transport.ex @@ -279,7 +279,7 @@ if Code.ensure_loaded?(ExSCTP) do ExSCTP.close_stream(sctp_transport.ref, id) - case Enum.find_value(sctp_transport.channels, fn {_k, v} -> v.id == id end) do + case Enum.find(sctp_transport.channels, fn {_k, v} -> v.id == id end) do {ref, %DataChannel{}} -> channels = Map.delete(sctp_transport.channels, ref) stats = Map.delete(sctp_transport.stats, ref) diff --git a/lib/ex_webrtc/sctp_transport/dcep.ex b/lib/ex_webrtc/sctp_transport/dcep.ex index 7f1efe7e..78fe5aed 100644 --- a/lib/ex_webrtc/sctp_transport/dcep.ex +++ b/lib/ex_webrtc/sctp_transport/dcep.ex @@ -8,6 +8,8 @@ defmodule ExWebRTC.SCTPTransport.DCEP do defstruct [] def decode(<<>>), do: {:ok, %__MODULE__{}} + # Some implementations (e.g. Pion) seems to pad DataChannelAck to 4 bytes. Accept them. + def decode(<<_, _, _>>), do: {:ok, %__MODULE__{}} def decode(_other), do: :error def encode(%__MODULE__{}), do: <<0x02>>