Bläddra i källkod

chore(stomp): parse \n as heartbeat frame

JianBo He 1 år sedan
förälder
incheckning
d2b6e41cd1

+ 1 - 4
apps/emqx_gateway/src/bhvrs/emqx_gateway_conn.erl

@@ -710,10 +710,7 @@ parse_incoming(
 ) ->
     try FrameMod:parse(Data, ParseState) of
         {more, NParseState} ->
-            if
-                Data == <<$\n>> -> {[Data], State#state{parse_state = NParseState}};
-                true -> {Packets, State#state{parse_state = NParseState}}
-            end;
+            {Packets, State#state{parse_state = NParseState}};
         {ok, Packet, Rest, NParseState} ->
             NState = State#state{parse_state = NParseState},
             parse_incoming(Rest, [Packet | Packets], NState)

+ 1 - 1
apps/emqx_gateway_stomp/src/emqx_stomp_channel.erl

@@ -654,7 +654,7 @@ handle_in(
         end,
     {ok, Outgoings, Channel};
 handle_in(
-    <<$\n>>,
+    ?PACKET(?CMD_HEARTBEAT),
     Channel = #channel{heartbeat = Heartbeat}
 ) ->
     NewHeartbeat = emqx_stomp_heartbeat:reset(incoming, 0, Heartbeat),

+ 4 - 3
apps/emqx_gateway_stomp/src/emqx_stomp_frame.erl

@@ -140,6 +140,9 @@ g(Key, Opts, Val) ->
 -spec parse(binary(), parse_state()) -> parse_result().
 parse(<<>>, Parser) ->
     {more, Parser};
+%% treat the \n as a heartbeat frame
+parse(<<$\n>>, Parser = #{phase := none}) ->
+    {ok, #stomp_frame{command = ?CMD_HEARTBEAT}, <<>>, Parser};
 parse(Bytes, #{phase := body, length := Len, state := State}) ->
     parse(body, Bytes, State, Len);
 parse(<<?LF, Bytes/binary>>, #{phase := hdname, state := State}) ->
@@ -346,9 +349,7 @@ serialize_pkt(
 serialize_pkt(header, {Name, Val}) when is_integer(Val) ->
     [escape(Name), ?COLON, integer_to_list(Val), ?LF];
 serialize_pkt(header, {Name, Val}) ->
-    [escape(Name), ?COLON, escape(Val), ?LF];
-serialize_pkt(<<$\n>>, _SerializeOpts) ->
-    <<$\n>>.
+    [escape(Name), ?COLON, escape(Val), ?LF].
 
 escape(Bin) when is_binary(Bin) ->
     <<<<(escape(Ch))/binary>> || <<Ch>> <= Bin>>;