Add header parsing logic
This commit is contained in:
parent
49c24a12d0
commit
763bae8a61
2 changed files with 27 additions and 2 deletions
|
@ -17,3 +17,6 @@
|
||||||
-record(stomp_msg, { headers :: #{ binary() => binary() },
|
-record(stomp_msg, { headers :: #{ binary() => binary() },
|
||||||
body :: binary() }).
|
body :: binary() }).
|
||||||
-type stomp_msg() :: #stomp_msg{}.
|
-type stomp_msg() :: #stomp_msg{}.
|
||||||
|
|
||||||
|
%% STOMP frame components
|
||||||
|
-type headers() :: #{binary() => binary()}.
|
||||||
|
|
|
@ -69,11 +69,13 @@ handle_call({subscribe, Dest, Ack}, From, State) ->
|
||||||
handle_call(_Req, _From, State) ->
|
handle_call(_Req, _From, State) ->
|
||||||
{reply, ignored, State}.
|
{reply, ignored, State}.
|
||||||
|
|
||||||
%% Unused gen_server callbacks
|
handle_info({tcp, Conn, Frame}, State#state{connection = Conn}) ->
|
||||||
|
handle_frame(Frame, State);
|
||||||
handle_info(_Msg, State) ->
|
handle_info(_Msg, State) ->
|
||||||
{noreply, State}.
|
{noreply, State}.
|
||||||
|
|
||||||
|
%% Unused gen_server callbacks
|
||||||
|
|
||||||
handle_cast(_Msg, State) ->
|
handle_cast(_Msg, State) ->
|
||||||
{noreply, State}.
|
{noreply, State}.
|
||||||
|
|
||||||
|
@ -106,6 +108,26 @@ subscribe(Socket, Id, Queue, Ack) ->
|
||||||
{ok, SubscribeFrame} = subscribe_frame(Id, Queue, Ack),
|
{ok, SubscribeFrame} = subscribe_frame(Id, Queue, Ack),
|
||||||
gen_tcp:send(Socket, SubscribeFrame).
|
gen_tcp:send(Socket, SubscribeFrame).
|
||||||
|
|
||||||
|
%%% Parsing STOMP frames
|
||||||
|
|
||||||
|
handle_frame(<<"MESSAGE", "\n", Frame/binary>>,
|
||||||
|
#state{subscribers = Subscribers,
|
||||||
|
subscriptions = Subscriptions}) ->
|
||||||
|
|
||||||
|
{noreply, State};
|
||||||
|
handle_frame(Frame, State) ->
|
||||||
|
io:format("Received unknown frame ~p", [Frame]),
|
||||||
|
{noreply, State}.
|
||||||
|
|
||||||
|
|
||||||
|
%% Parse out headers into a map
|
||||||
|
-spec parse_headers(binary()) -> headers().
|
||||||
|
parse_headers(HeadersBin) ->
|
||||||
|
Headers = binary:split(HeadersBin, <<"\n">>, [global]),
|
||||||
|
ToPairs = fun(H, M) -> [K,V | []] = binary:split(H, <<":">>),
|
||||||
|
maps:put(K, V, M)
|
||||||
|
end,
|
||||||
|
{ok, lists:mapfoldl(ToPairs, #{}, Headers)}.
|
||||||
|
|
||||||
%%% Making STOMP protocol frames
|
%%% Making STOMP protocol frames
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue