Skip to main content

src/masque_sup.erl

%%% @doc Top-level supervisor for the `masque' application.
%%%
%%% Listeners and client sessions are attached dynamically as children
%%% from later steps; the initial tree is empty on purpose.
-module(masque_sup).
-behaviour(supervisor).

-export([start_link/0, init/1]).

start_link() ->
    supervisor:start_link({local, ?MODULE}, ?MODULE, []).

init([]) ->
    %% ETS table for H2 per-connection tunnel counting (Step 4).
    _ = ets:new(masque_h2_tunnel_counts,
                [set, public, named_table, {write_concurrency, true}]),
    SupFlags = #{strategy => one_for_one,
                 intensity => 10,
                 period => 10},
    Children = [
        #{id    => masque_h2_session_sup,
          start => {masque_h2_session_sup, start_link, []},
          type  => supervisor},
        #{id    => masque_h2_tcp_session_sup,
          start => {masque_h2_session_sup, start_link_tcp, []},
          type  => supervisor},
        #{id    => masque_h2_ip_session_sup,
          start => {masque_h2_session_sup, start_link_ip, []},
          type  => supervisor},
        #{id    => masque_h2_udp_bind_session_sup,
          start => {masque_h2_session_sup, start_link_udp_bind, []},
          type  => supervisor},
        #{id    => masque_h1_udp_bind_session_sup,
          start => {masque_h1_session_sup, start_link_udp_bind, []},
          type  => supervisor},
        #{id    => masque_h1_session_sup,
          start => {masque_h1_session_sup, start_link, []},
          type  => supervisor},
        #{id    => masque_h1_ip_session_sup,
          start => {masque_h1_session_sup, start_link_ip, []},
          type  => supervisor},
        #{id    => masque_h1_tcp_session_sup,
          start => {masque_h1_session_sup, start_link_tcp, []},
          type  => supervisor},
        #{id    => masque_upstream_pool,
          start => {masque_upstream_pool, start_link, []},
          type  => worker},
        #{id    => masque_ip_session_registry,
          start => {masque_ip_session_registry, start_link, []},
          type  => worker}
    ],
    {ok, {SupFlags, Children}}.