diff options
Diffstat (limited to 'deps/rabbitmq_web_stomp/src/rabbit_web_stomp_connection_sup.erl')
-rw-r--r-- | deps/rabbitmq_web_stomp/src/rabbit_web_stomp_connection_sup.erl | 51 |
1 files changed, 51 insertions, 0 deletions
diff --git a/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_connection_sup.erl b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_connection_sup.erl new file mode 100644 index 0000000000..0703681482 --- /dev/null +++ b/deps/rabbitmq_web_stomp/src/rabbit_web_stomp_connection_sup.erl @@ -0,0 +1,51 @@ +%% This Source Code Form is subject to the terms of the Mozilla Public +%% License, v. 2.0. If a copy of the MPL was not distributed with this +%% file, You can obtain one at https://mozilla.org/MPL/2.0/. +%% +%% Copyright (c) 2007-2020 VMware, Inc. or its affiliates. All rights reserved. +%% + +-module(rabbit_web_stomp_connection_sup). + +-behaviour(supervisor2). +-behaviour(ranch_protocol). + +-include_lib("rabbit_common/include/rabbit.hrl"). + +-export([start_link/4, start_keepalive_link/0]). +-export([init/1]). + +%%---------------------------------------------------------------------------- + +start_link(Ref, Sock, Transport, CowboyOpts0) -> + {ok, SupPid} = supervisor2:start_link(?MODULE, []), + {ok, KeepaliveSup} = supervisor2:start_child( + SupPid, + {rabbit_web_stomp_keepalive_sup, + {?MODULE, start_keepalive_link, []}, + intrinsic, infinity, supervisor, [rabbit_keepalive_sup]}), + %% In order for the Websocket handler to receive the KeepaliveSup + %% variable, we need to pass it first through the environment and + %% then have the middleware rabbit_web_mqtt_middleware place it + %% in the initial handler state. + Env = maps:get(env, CowboyOpts0), + CowboyOpts = CowboyOpts0#{env => Env#{keepalive_sup => KeepaliveSup, + socket => Sock}}, + Protocol = case Transport of + ranch_tcp -> cowboy_clear; + ranch_ssl -> cowboy_tls + end, + {ok, ReaderPid} = supervisor2:start_child( + SupPid, + {Protocol, + {Protocol, start_link, [Ref, Sock, Transport, CowboyOpts]}, + intrinsic, ?WORKER_WAIT, worker, [Protocol]}), + {ok, SupPid, ReaderPid}. + +start_keepalive_link() -> + supervisor2:start_link(?MODULE, []). + +%%---------------------------------------------------------------------------- + +init([]) -> + {ok, {{one_for_all, 0, 1}, []}}. |