@@ -1388,8 +1388,22 @@ defmodule ExWebRTC.PeerConnection do
13881388 @ impl true
13891389 def handle_call ( :close , _from , state ) do
13901390 Logger . debug ( "Closing peer connection" )
1391- # don't emit state change events
1392- state = do_close ( state , notify: false )
1391+ transceivers = Enum . map ( state . transceivers , & RTPTransceiver . stop ( & 1 ) )
1392+ sctp_transport = SCTPTransport . close_abruptly ( state . sctp_transport )
1393+ :ok = DTLSTransport . close ( state . dtls_transport )
1394+ :ok = state . ice_transport . close ( state . ice_pid )
1395+
1396+ state =
1397+ % {
1398+ state
1399+ | ice_state: :closed ,
1400+ dtls_state: :closed ,
1401+ transceivers: transceivers ,
1402+ sctp_transport: sctp_transport
1403+ }
1404+ |> update_signaling_state ( :closed , notify: false )
1405+ |> update_conn_state ( :closed , notify: false )
1406+
13931407 { :reply , :ok , state }
13941408 end
13951409
@@ -1548,17 +1562,12 @@ defmodule ExWebRTC.PeerConnection do
15481562
15491563 next_conn_state = next_conn_state ( state . ice_state , new_dtls_state )
15501564
1551- if next_conn_state == :closed and state . conn_state != :closed do
1552- state = do_close ( state )
1553- { :noreply , state }
1554- else
1555- state =
1556- % { state | dtls_state: new_dtls_state }
1557- |> update_conn_state ( next_conn_state )
1558- |> maybe_connect_sctp ( )
1565+ state =
1566+ % { state | dtls_state: new_dtls_state }
1567+ |> update_conn_state ( next_conn_state )
1568+ |> maybe_connect_sctp ( )
15591569
1560- { :noreply , state }
1561- end
1570+ { :noreply , state }
15621571 end
15631572
15641573 @ impl true
@@ -2330,8 +2339,6 @@ defmodule ExWebRTC.PeerConnection do
23302339 # Closed connection can't be reused.
23312340 defp next_conn_state ( :closed , _dtls_state ) , do: :closed
23322341
2333- defp next_conn_state ( _ice_state , :closed ) , do: :closed
2334-
23352342 defp next_conn_state ( :failed , _dtls_state ) , do: :failed
23362343
23372344 defp next_conn_state ( _ice_state , :failed ) , do: :failed
@@ -2342,8 +2349,9 @@ defmodule ExWebRTC.PeerConnection do
23422349 when ice_state in [ :new , :checking ] or dtls_state in [ :new , :connecting ] ,
23432350 do: :connecting
23442351
2345- defp next_conn_state ( ice_state , :connected ) when ice_state in [ :connected , :completed ] ,
2346- do: :connected
2352+ defp next_conn_state ( ice_state , dtls_state )
2353+ when ice_state in [ :connected , :completed ] and dtls_state in [ :connected , :closed ] ,
2354+ do: :connected
23472355
23482356 defp update_conn_state ( state , conn_state , opts \\ [ ] )
23492357 defp update_conn_state ( % { conn_state: conn_state } = state , conn_state , _opts ) , do: state
@@ -2551,27 +2559,6 @@ defmodule ExWebRTC.PeerConnection do
25512559 % SessionDescription { type: type , sdp: to_string ( sdp ) }
25522560 end
25532561
2554- defp do_close ( state , opts \\ [ ] ) do
2555- transceivers = Enum . map ( state . transceivers , & RTPTransceiver . stop ( & 1 ) )
2556- sctp_transport = SCTPTransport . close_abruptly ( state . sctp_transport )
2557- :ok = DTLSTransport . close ( state . dtls_transport )
2558- :ok = state . ice_transport . close ( state . ice_pid )
2559-
2560- if opts [ :notify ] != false do
2561- notify ( state . owner , { :ice_connection_state_change , :closed } )
2562- end
2563-
2564- % {
2565- state
2566- | ice_state: :closed ,
2567- dtls_state: :closed ,
2568- transceivers: transceivers ,
2569- sctp_transport: sctp_transport
2570- }
2571- |> update_signaling_state ( :closed , opts )
2572- |> update_conn_state ( :closed , opts )
2573- end
2574-
25752562 defp generate_ssrcs ( state ) do
25762563 generate_ssrcs ( state . transceivers , Map . keys ( state . demuxer . ssrc_to_mid ) )
25772564 end
0 commit comments