From fbd27eda6a51d0c3e7e60e8a87dd9e026ff7af39 Mon Sep 17 00:00:00 2001 From: chengshq Date: Wed, 1 Nov 2023 20:08:26 +0800 Subject: [PATCH] fix(Stomp): content type returned --- .../src/emqx_stomp_channel.erl | 16 +++++++++++----- .../emqx_gateway_stomp/test/emqx_stomp_SUITE.erl | 10 +++++++++- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/apps/emqx_gateway_stomp/src/emqx_stomp_channel.erl b/apps/emqx_gateway_stomp/src/emqx_stomp_channel.erl index 8e9be8359..453fa9fd2 100644 --- a/apps/emqx_gateway_stomp/src/emqx_stomp_channel.erl +++ b/apps/emqx_gateway_stomp/src/emqx_stomp_channel.erl @@ -1052,9 +1052,16 @@ handle_deliver( _ -> Headers0 end, + Headers2 = lists:foldl( + fun({Key, _Val} = KV, Acc1) -> + lists:keystore(Key, 1, Acc1, KV) + end, + Headers1, + maps:get(stomp_headers, Headers, []) + ), Frame = #stomp_frame{ command = <<"MESSAGE">>, - headers = Headers1 ++ maps:get(stomp_headers, Headers, []), + headers = Headers2, body = Payload }, [Frame | Acc]; @@ -1160,12 +1167,12 @@ do_negotiate_version(Accepts) -> lists:reverse(lists:sort(binary:split(Accepts, <<",">>, [global]))) ). -do_negotiate_version(Ver, []) -> - {error, <<"Supported protocol versions < ", Ver/binary>>}; do_negotiate_version(Ver, [AcceptVer | _]) when Ver >= AcceptVer -> {ok, AcceptVer}; do_negotiate_version(Ver, [_ | T]) -> - do_negotiate_version(Ver, T). + do_negotiate_version(Ver, T); +do_negotiate_version(Ver, _) -> + {error, <<"Supported protocol versions < ", Ver/binary>>}. header(Name, Headers) -> get_value(Name, Headers). @@ -1227,7 +1234,6 @@ frame2message( [ <<"destination">>, <<"content-length">>, - <<"content-type">>, <<"transaction">>, <<"receipt">> ] diff --git a/apps/emqx_gateway_stomp/test/emqx_stomp_SUITE.erl b/apps/emqx_gateway_stomp/test/emqx_stomp_SUITE.erl index 2ba753ca4..58913cf2f 100644 --- a/apps/emqx_gateway_stomp/test/emqx_stomp_SUITE.erl +++ b/apps/emqx_gateway_stomp/test/emqx_stomp_SUITE.erl @@ -181,11 +181,15 @@ t_subscribe(_) -> %% 'user-defined' header will be retain ok = send_message_frame(Sock, <<"/queue/foo">>, <<"hello">>, [ - {<<"user-defined">>, <<"emq">>} + {<<"user-defined">>, <<"emq">>}, + {<<"content-type">>, <<"text/html">>} ]), ?assertMatch({ok, #stomp_frame{command = <<"RECEIPT">>}}, recv_a_frame(Sock)), {ok, Frame} = recv_a_frame(Sock), + ?assertEqual( + <<"text/html">>, proplists:get_value(<<"content-type">>, Frame#stomp_frame.headers) + ), ?assertMatch( #stomp_frame{ @@ -977,6 +981,10 @@ t_mountpoint(_) -> }} = recv_a_frame(Sock), ?assertEqual(<<"t/a">>, proplists:get_value(<<"destination">>, Headers)), + ?assertEqual( + <<"text/plain">>, proplists:get_value(<<"content-type">>, Headers) + ), + ok = send_disconnect_frame(Sock) end,