Use rabbit_ws_handler as a regular module, not a parameterized one
Parameterized modules are removed in Erlang 21. There is a new compiler option to emulate parameterized modules, but it's easy enough to change the plugin to use regular module calling convention. [#157964874]
This commit is contained in:
parent
7b1552d39a
commit
30e9e063b6
|
|
@ -54,12 +54,12 @@ init({SupPid, Conn, Heartbeat}) ->
|
||||||
heartbeat_mode = Heartbeat},
|
heartbeat_mode = Heartbeat},
|
||||||
#state.stats_timer)}.
|
#state.stats_timer)}.
|
||||||
|
|
||||||
init_processor_state(Conn) ->
|
init_processor_state({ConnMod, ConnProps}) ->
|
||||||
SendFun = fun (_Sync, Data) ->
|
SendFun = fun (_Sync, Data) ->
|
||||||
Conn:send(Data),
|
ConnMod:send(ConnProps, Data),
|
||||||
ok
|
ok
|
||||||
end,
|
end,
|
||||||
Info = Conn:info(),
|
Info = ConnMod:info(ConnProps),
|
||||||
Headers = proplists:get_value(headers, Info),
|
Headers = proplists:get_value(headers, Info),
|
||||||
|
|
||||||
UseHTTPAuth = application:get_env(rabbitmq_web_stomp, use_http_auth, false),
|
UseHTTPAuth = application:get_env(rabbitmq_web_stomp, use_http_auth, false),
|
||||||
|
|
@ -166,13 +166,13 @@ handle_info({start_heartbeats, _},
|
||||||
handle_info({start_heartbeats, {0, 0}}, State) ->
|
handle_info({start_heartbeats, {0, 0}}, State) ->
|
||||||
{noreply, State};
|
{noreply, State};
|
||||||
handle_info({start_heartbeats, {SendTimeout, ReceiveTimeout}},
|
handle_info({start_heartbeats, {SendTimeout, ReceiveTimeout}},
|
||||||
State = #state{conn = Conn,
|
State = #state{conn = {ConnMod, ConnProps},
|
||||||
heartbeat_sup = SupPid,
|
heartbeat_sup = SupPid,
|
||||||
heartbeat_mode = heartbeat}) ->
|
heartbeat_mode = heartbeat}) ->
|
||||||
Info = Conn:info(),
|
Info = ConnMod:info(ConnProps),
|
||||||
Sock = proplists:get_value(socket, Info),
|
Sock = proplists:get_value(socket, Info),
|
||||||
Pid = self(),
|
Pid = self(),
|
||||||
SendFun = fun () -> Conn:send(<<$\n>>), ok end,
|
SendFun = fun () -> ConnMod:send(ConnProps, <<$\n>>), ok end,
|
||||||
ReceiveFun = fun() -> gen_server2:cast(Pid, client_timeout) end,
|
ReceiveFun = fun() -> gen_server2:cast(Pid, client_timeout) end,
|
||||||
Heartbeat = rabbit_heartbeat:start(SupPid, Sock, SendTimeout,
|
Heartbeat = rabbit_heartbeat:start(SupPid, Sock, SendTimeout,
|
||||||
SendFun, ReceiveTimeout, ReceiveFun),
|
SendFun, ReceiveTimeout, ReceiveFun),
|
||||||
|
|
@ -202,11 +202,12 @@ handle_info(Info, State) ->
|
||||||
handle_call(Request, _From, State) ->
|
handle_call(Request, _From, State) ->
|
||||||
{stop, {odd_request, Request}, State}.
|
{stop, {odd_request, Request}, State}.
|
||||||
|
|
||||||
terminate(_Reason, State = #state{conn = Conn, proc_state = ProcessorState}) ->
|
terminate(_Reason, State = #state{conn = {ConnMod, ConnProps},
|
||||||
|
proc_state = ProcessorState}) ->
|
||||||
maybe_emit_stats(State),
|
maybe_emit_stats(State),
|
||||||
ok = file_handle_cache:release(),
|
ok = file_handle_cache:release(),
|
||||||
rabbit_stomp_processor:flush_and_die(ProcessorState),
|
rabbit_stomp_processor:flush_and_die(ProcessorState),
|
||||||
Conn:close(1000, "STOMP died"),
|
ConnMod:close(ConnProps, 1000, "STOMP died"),
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
code_change(_OldVsn, State, _Extra) ->
|
code_change(_OldVsn, State, _Extra) ->
|
||||||
|
|
@ -248,8 +249,8 @@ emit_stats(State=#state{connection = C}) when C == none; C == undefined ->
|
||||||
%% established, as this causes orphan entries on the stats database
|
%% established, as this causes orphan entries on the stats database
|
||||||
State1 = rabbit_event:reset_stats_timer(State, #state.stats_timer),
|
State1 = rabbit_event:reset_stats_timer(State, #state.stats_timer),
|
||||||
State1;
|
State1;
|
||||||
emit_stats(State=#state{conn=Conn, connection=ConnPid}) ->
|
emit_stats(State=#state{conn={ConnMod, ConnProps}, connection=ConnPid}) ->
|
||||||
Info = Conn:info(),
|
Info = ConnMod:info(ConnProps),
|
||||||
Sock = proplists:get_value(socket, Info),
|
Sock = proplists:get_value(socket, Info),
|
||||||
SockInfos = case rabbit_net:getstat(Sock,
|
SockInfos = case rabbit_net:getstat(Sock,
|
||||||
[recv_oct, recv_cnt, send_oct, send_cnt, send_pend]) of
|
[recv_oct, recv_cnt, send_oct, send_cnt, send_pend]) of
|
||||||
|
|
|
||||||
|
|
@ -55,12 +55,14 @@ init(Req0, Opts) ->
|
||||||
{cowboy_websocket, Req, {Socket, Peername, Sockname, Headers, FrameType}}.
|
{cowboy_websocket, Req, {Socket, Peername, Sockname, Headers, FrameType}}.
|
||||||
|
|
||||||
websocket_init({Socket, Peername, Sockname, Headers, FrameType}) ->
|
websocket_init({Socket, Peername, Sockname, Headers, FrameType}) ->
|
||||||
Conn = {?MODULE, self(), [
|
Info = [{socket, Socket},
|
||||||
{socket, Socket},
|
{peername, Peername},
|
||||||
{peername, Peername},
|
{sockname, Sockname},
|
||||||
{sockname, Sockname},
|
{headers, Headers}],
|
||||||
{headers, Headers}]},
|
{ok, _Sup, Pid} = rabbit_ws_sup:start_client({{?MODULE,
|
||||||
{ok, _Sup, Pid} = rabbit_ws_sup:start_client({Conn, heartbeat}),
|
#{pid => self(),
|
||||||
|
info => Info}},
|
||||||
|
heartbeat}),
|
||||||
{ok, #state{pid=Pid, type=FrameType}}.
|
{ok, #state{pid=Pid, type=FrameType}}.
|
||||||
|
|
||||||
websocket_handle({text, Data}, State=#state{pid=Pid}) ->
|
websocket_handle({text, Data}, State=#state{pid=Pid}) ->
|
||||||
|
|
@ -109,13 +111,13 @@ filter_stomp_protocols(Protocols) ->
|
||||||
%% within the Websocket process. This could be a good refactoring
|
%% within the Websocket process. This could be a good refactoring
|
||||||
%% once SockJS gets removed.
|
%% once SockJS gets removed.
|
||||||
|
|
||||||
info({?MODULE, _, Info}) ->
|
info(#{info := Info}) ->
|
||||||
Info.
|
Info.
|
||||||
|
|
||||||
send(Data, {?MODULE, Pid, _}) ->
|
send(#{pid := Pid}, Data) ->
|
||||||
Pid ! {send, Data},
|
Pid ! {send, Data},
|
||||||
ok.
|
ok.
|
||||||
|
|
||||||
close(Code, Reason, {?MODULE, Pid, _}) ->
|
close(#{pid := Pid}, Code, Reason) ->
|
||||||
Pid ! {close, Code, Reason},
|
Pid ! {close, Code, Reason},
|
||||||
ok.
|
ok.
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue