Skip to content

Commit 8656222

Browse files
committed
Handle DTLS close_notify alert
1 parent 598dc4e commit 8656222

File tree

4 files changed

+42
-3
lines changed

4 files changed

+42
-3
lines changed

lib/ex_webrtc/dtls_transport.ex

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -327,6 +327,13 @@ defmodule ExWebRTC.DTLSTransport do
327327
{:ok, state} ->
328328
{:noreply, state}
329329

330+
{:error, :peer_closed_for_writing} ->
331+
# See W3C WebRTC sec. 5.5.1
332+
# peer_closed_for_writing is returned when the remote side
333+
# sends close_notify alert
334+
state = update_dtls_state(state, :closed)
335+
{:noreply, state}
336+
330337
{:error, _reason} ->
331338
# See W3C WebRTC sec. 5.5.
332339
state = update_dtls_state(state, :failed)

lib/ex_webrtc/peer_connection.ex

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -63,7 +63,7 @@ defmodule ExWebRTC.PeerConnection do
6363
6464
For the exact meaning, refer to the [RTCDtlsTransport: state property](https://developer.mozilla.org/en-US/docs/Web/API/RTCDtlsTransport/state)
6565
"""
66-
@type dtls_transport_state() :: :new | :connecting | :connected | :failed
66+
@type dtls_transport_state() :: :new | :connecting | :connected | :closed | :failed
6767

6868
@typedoc """
6969
Possible signaling states.
@@ -105,8 +105,8 @@ defmodule ExWebRTC.PeerConnection do
105105
| {:track_muted, MediaStreamTrack.id()}
106106
| {:track_ended, MediaStreamTrack.id()}
107107
| {:data, DataChannel.ref(), binary()}
108-
| {:rtp, MediaStreamTrack.id(), String.t() | nil, ExRTP.Packet.t()}}
109-
| {:rtcp, [{MediaStreamTrack.id() | nil, ExRTCP.Packet.packet()}]}
108+
| {:rtp, MediaStreamTrack.id(), String.t() | nil, ExRTP.Packet.t()}
109+
| {:rtcp, [{MediaStreamTrack.id() | nil, ExRTCP.Packet.packet()}]}}
110110

111111
#### NON-MDN-API ####
112112

test/ex_webrtc/dtls_transport_test.exs

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -278,6 +278,13 @@ defmodule ExWebRTC.DTLSTransportTest do
278278
refute_receive {:mock_ice, _datachannel_packet}
279279
end
280280

281+
# test "closes on receiving close_notify DTLS alert", %{
282+
# dtls: dtls,
283+
# ice_transport: ice_transport,
284+
# ice_pid: ice_pid
285+
# } do
286+
# end
287+
281288
defp check_handshake(dtls, ice_transport, ice_pid, remote_dtls) do
282289
assert_receive {:mock_ice, packets}
283290

test/ex_webrtc/peer_connection_test.exs

Lines changed: 25 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1156,6 +1156,31 @@ defmodule ExWebRTC.PeerConnectionTest do
11561156
end
11571157
end
11581158

1159+
@tag :debug
1160+
test "" do
1161+
{:ok, pc1} = PeerConnection.start_link()
1162+
{:ok, _sender} = PeerConnection.add_track(pc1, MediaStreamTrack.new(:video))
1163+
{:ok, offer} = PeerConnection.create_offer(pc1)
1164+
:ok = PeerConnection.set_local_description(pc1, offer)
1165+
1166+
IO.inspect(offer.sdp, limit: :infinity)
1167+
1168+
{:ok, pc2} = PeerConnection.start_link()
1169+
{:ok, _sender} = PeerConnection.add_track(pc2, MediaStreamTrack.new(:video))
1170+
:ok = PeerConnection.set_remote_description(pc2, offer)
1171+
{:ok, answer} = PeerConnection.create_answer(pc2)
1172+
1173+
IO.inspect(answer.sdp, limit: :infinity)
1174+
1175+
:ok = PeerConnection.set_remote_description(pc1, answer)
1176+
1177+
{:ok, _sender} = PeerConnection.add_track(pc1, MediaStreamTrack.new(:video))
1178+
{:ok, offer} = PeerConnection.create_offer(pc1)
1179+
:ok = PeerConnection.set_local_description(pc1, offer)
1180+
1181+
IO.inspect(offer.sdp, limit: :infinity)
1182+
end
1183+
11591184
describe "send data in both directions on a single transceiver" do
11601185
test "using one negotiation" do
11611186
{:ok, pc1} = PeerConnection.start_link()

0 commit comments

Comments
 (0)