Skip to content

Commit 89de0c2

Browse files
olegokunevychOleg Okunevych
andauthored
Handle non-matching TURN<->socket IP families and invalid TURN URL (#58)
--------- Co-authored-by: Oleg Okunevych <[email protected]>
1 parent e644d1d commit 89de0c2

File tree

2 files changed

+45
-1
lines changed

2 files changed

+45
-1
lines changed

lib/ex_ice/priv/ice_agent.ex

Lines changed: 13 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -864,7 +864,8 @@ defmodule ExICE.Priv.ICEAgent do
864864
with {:ok, client} <-
865865
ExTURN.Client.new(turn_server.url, turn_server.username, turn_server.credential),
866866
{:ok, {sock_ip, _sock_port}} <- ice_agent.transport_module.sockname(socket),
867-
true <- Utils.family(client.turn_ip) == Utils.family(sock_ip) do
867+
{true, _, _} <-
868+
{Utils.family(client.turn_ip) == Utils.family(sock_ip), client, sock_ip} do
868869
t_id = {socket, {client.turn_ip, client.turn_port}}
869870

870871
t = %{
@@ -876,6 +877,17 @@ defmodule ExICE.Priv.ICEAgent do
876877
}
877878

878879
{t_id, t}
880+
else
881+
{false, client, sock_ip} ->
882+
Logger.warning(
883+
"Client's IP family doesn't match the socket's IP family (Client IP: #{inspect(client.turn_ip)} vs Socket IP: #{inspect(sock_ip)}). Ignoring."
884+
)
885+
886+
{nil, nil}
887+
888+
other ->
889+
Logger.warning("Couldn't create TURN client: #{inspect(other)}. Ignoring.")
890+
{nil, nil}
879891
end
880892
end
881893
|> Enum.reject(fn {tr_id, tr} -> tr_id == nil and tr == nil end)

test/priv/ice_agent_test.exs

Lines changed: 32 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -68,6 +68,38 @@ defmodule ExICE.Priv.ICEAgentTest do
6868
end
6969
end
7070

71+
describe "gather_candidates/1" do
72+
setup do
73+
ice_agent =
74+
ICEAgent.new(
75+
gathering_state: :new,
76+
ice_transport_policy: :all,
77+
controlling_process: self(),
78+
role: :controlling,
79+
if_discovery_module: IfDiscovery.Mock,
80+
transport_module: Transport.Mock
81+
)
82+
83+
%{ice_agent: ice_agent}
84+
end
85+
86+
test ~c"Agent with invalid TURN server url doesn't raise an exception", %{
87+
ice_agent: ice_agent
88+
} do
89+
assert %ICEAgent{gathering_state: :complete} =
90+
ICEAgent.gather_candidates(%{
91+
ice_agent
92+
| turn_servers: [
93+
%{
94+
url: "invalid.turn.url",
95+
username: "user",
96+
credential: "pass"
97+
}
98+
]
99+
})
100+
end
101+
end
102+
71103
describe "add_remote_candidate/2" do
72104
setup do
73105
ice_agent =

0 commit comments

Comments
 (0)