diff --git a/.github/workflows/build_test.yml b/.github/workflows/build_test.yml index 648a5af..8d7b11e 100644 --- a/.github/workflows/build_test.yml +++ b/.github/workflows/build_test.yml @@ -21,7 +21,7 @@ jobs: - name: Set up Elixir uses: erlef/setup-beam@v1 with: - elixir-version: '1.17.0' + elixir-version: '1.17.2' otp-version: '27.0' - name: Restore dependencies cache uses: actions/cache@v4 diff --git a/lib/peridio/rat.ex b/lib/peridio/rat.ex index d696f1c..5c02fc1 100644 --- a/lib/peridio/rat.ex +++ b/lib/peridio/rat.ex @@ -44,4 +44,24 @@ defmodule Peridio.RAT do GenServer.cast(pid, {:extend, expires_at}) end end + + def list_tunnels() do + Peridio.RAT.DynamicSupervisor + |> DynamicSupervisor.which_children() + |> Enum.map(&elem(&1, 1)) + |> Enum.map(&{&1, Tunnel.get_state(&1)}) + |> Enum.map(fn {pid, %Tunnel.State{id: id, interface: interface}} -> + {pid, id, interface} + end) + end + + def get_tunnel_by_interface_id(interface_id) do + case Registry.select(:tunnels, [ + {{:"$2", :"$1", :"$3"}, [{:==, {:map_get, :id, :"$3"}, interface_id}], + [{{:"$1", :"$2", :"$3"}}]} + ]) do + [] -> nil + [tunnel] -> tunnel + end + end end