From 2d9ec520049409fe62a7543ca9568d54ff0152be Mon Sep 17 00:00:00 2001 From: Justin Schneck Date: Fri, 12 Jul 2024 10:28:23 -0400 Subject: [PATCH] Added list and get_by_interface_id for tunnels --- lib/peridio/rat.ex | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/lib/peridio/rat.ex b/lib/peridio/rat.ex index d696f1c..72a6303 100644 --- a/lib/peridio/rat.ex +++ b/lib/peridio/rat.ex @@ -44,4 +44,25 @@ defmodule Peridio.RAT do GenServer.cast(pid, {:extend, expires_at}) end end + + def list_tunnels() do + tunnel_pids = + 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