@@ -1746,12 +1746,13 @@ defmodule ExWebRTC.PeerConnection do
17461746 defp apply_local_description ( % SessionDescription { type: type , sdp: raw_sdp } , state ) do
17471747 with { :ok , next_sig_state } <- next_signaling_state ( state . signaling_state , :local , type ) ,
17481748 :ok <- check_altered ( type , raw_sdp , state ) ,
1749- { :ok , sdp } <- parse_sdp ( raw_sdp ) do
1749+ { :ok , sdp } <- parse_sdp ( raw_sdp ) ,
1750+ ice_lite <- SDPUtils . get_ice_lite ( sdp ) do
17501751 # See: https://www.w3.org/TR/webrtc/#ref-for-dfn-icerole-1
17511752 # Also, this has to be before gathering candidates.
17521753 # Note: If we add support for ice-lite, this code needs to be adjusted.
1753- if state . ice_transport . get_role ( state . ice_pid ) == nil and type == :offer do
1754- :ok = state . ice_transport . set_role ( state . ice_pid , :controlling )
1754+ if state . ice_transport . get_role ( state . ice_pid ) == nil do
1755+ set_ice_role ( state , :local , type , ice_lite )
17551756 end
17561757
17571758 if state . ice_gathering_state == :new do
@@ -1800,13 +1801,7 @@ defmodule ExWebRTC.PeerConnection do
18001801 # See: https://www.w3.org/TR/webrtc/#ref-for-dfn-icerole-1
18011802 # Note: If we add support for ice-lite, this code needs to be adjusted.
18021803 if state . ice_transport . get_role ( state . ice_pid ) == nil do
1803- cond do
1804- type == :offer and ice_lite == true ->
1805- :ok = state . ice_transport . set_role ( state . ice_pid , :controlling )
1806-
1807- type == :offer and ice_lite == false ->
1808- :ok = state . ice_transport . set_role ( state . ice_pid , :controlled )
1809- end
1804+ set_ice_role ( state , :remote , type , ice_lite )
18101805 end
18111806
18121807 twcc_id =
@@ -1972,6 +1967,18 @@ defmodule ExWebRTC.PeerConnection do
19721967 % { state | pending_remote_desc: { type , sdp } }
19731968 end
19741969
1970+ defp set_ice_role ( state , :local , :offer , _ice_lite ) do
1971+ :ok = state . ice_transport . set_role ( state . ice_pid , :controlling )
1972+ end
1973+
1974+ defp set_ice_role ( state , :remote , :offer , true ) do
1975+ :ok = state . ice_transport . set_role ( state . ice_pid , :controlling )
1976+ end
1977+
1978+ defp set_ice_role ( state , :remote , :offer , false ) do
1979+ :ok = state . ice_transport . set_role ( state . ice_pid , :controlled )
1980+ end
1981+
19751982 defp parse_sdp ( raw_sdp ) do
19761983 case ExSDP . parse ( raw_sdp ) do
19771984 { :ok , _sdp } = res -> res
0 commit comments