fix(lwm2m): base64 decode for opaque value

This commit is contained in:
JianBo He 2021-06-10 10:24:38 +08:00 committed by zhanghongtong
parent 5aa4565e84
commit 7af4b80ef4
4 changed files with 20 additions and 6 deletions

View File

@ -1,6 +1,6 @@
{application,emqx_lwm2m, {application,emqx_lwm2m,
[{description,"EMQ X LwM2M Gateway"}, [{description,"EMQ X LwM2M Gateway"},
{vsn, "4.3.1"}, % strict semver, bump manually! {vsn, "4.3.2"}, % strict semver, bump manually!
{modules,[]}, {modules,[]},
{registered,[emqx_lwm2m_sup]}, {registered,[emqx_lwm2m_sup]},
{applications,[kernel,stdlib,lwm2m_coap]}, {applications,[kernel,stdlib,lwm2m_coap]},

View File

@ -1,13 +1,21 @@
%% -*-: erlang -*- %% -*-: erlang -*-
{VSN, {VSN,
[ [
{"4.3.1", [
{load_module, emqx_lwm2m_message, brutal_purge, soft_purge, []}
]},
{"4.3.0", [ {"4.3.0", [
{load_module, emqx_lwm2m_message, brutal_purge, soft_purge, []},
{load_module, emqx_lwm2m_protocol, brutal_purge, soft_purge, []} {load_module, emqx_lwm2m_protocol, brutal_purge, soft_purge, []}
]}, ]},
{<<".*">>, []} {<<".*">>, []}
], ],
[ [
{"4.3.1", [
{load_module, emqx_lwm2m_message, brutal_purge, soft_purge, []}
]},
{"4.3.0", [ {"4.3.0", [
{load_module, emqx_lwm2m_message, brutal_purge, soft_purge, []},
{load_module, emqx_lwm2m_protocol, brutal_purge, soft_purge, []} {load_module, emqx_lwm2m_protocol, brutal_purge, soft_purge, []}
]}, ]},
{<<".*">>, []} {<<".*">>, []}

View File

@ -197,7 +197,10 @@ value_ex(K, Value) when K =:= <<"Integer">>; K =:= <<"Float">>; K =:= <<"Time">>
value_ex(K, Value) when K =:= <<"String">> -> value_ex(K, Value) when K =:= <<"String">> ->
Value; Value;
value_ex(K, Value) when K =:= <<"Opaque">> -> value_ex(K, Value) when K =:= <<"Opaque">> ->
Value; %% XXX: force to decode it with base64
%% This may not be a good implementation, but it is
%% consistent with the treatment of Opaque in value/3
base64:decode(Value);
value_ex(K, <<"true">>) when K =:= <<"Boolean">> -> <<1>>; value_ex(K, <<"true">>) when K =:= <<"Boolean">> -> <<1>>;
value_ex(K, <<"false">>) when K =:= <<"Boolean">> -> <<0>>; value_ex(K, <<"false">>) when K =:= <<"Boolean">> -> <<0>>;

View File

@ -40,6 +40,7 @@ all() ->
, {group, test_grp_4_discover} , {group, test_grp_4_discover}
, {group, test_grp_5_write_attr} , {group, test_grp_5_write_attr}
, {group, test_grp_6_observe} , {group, test_grp_6_observe}
, {group, test_grp_8_object_19}
]. ].
suite() -> [{timetrap, {seconds, 90}}]. suite() -> [{timetrap, {seconds, 90}}].
@ -98,9 +99,9 @@ groups() ->
]}, ]},
{test_grp_8_object_19, [RepeatOpt], [ {test_grp_8_object_19, [RepeatOpt], [
case80_specail_object_19_1_0_write, case80_specail_object_19_1_0_write,
case80_specail_object_19_0_0_notify, case80_specail_object_19_0_0_notify
case80_specail_object_19_0_0_response, %case80_specail_object_19_0_0_response,
case80_normal_object_19_0_0_read %case80_normal_object_19_0_0_read
]}, ]},
{test_grp_9_psm_queue_mode, [RepeatOpt], [ {test_grp_9_psm_queue_mode, [RepeatOpt], [
case90_psm_mode, case90_psm_mode,
@ -1655,6 +1656,7 @@ case80_specail_object_19_1_0_write(Config) ->
<<"value">> => base64:encode(<<12345:32>>) <<"value">> => base64:encode(<<12345:32>>)
} }
}, },
CommandJson = emqx_json:encode(Command), CommandJson = emqx_json:encode(Command),
test_mqtt_broker:publish(CommandTopic, CommandJson, 0), test_mqtt_broker:publish(CommandTopic, CommandJson, 0),
timer:sleep(50), timer:sleep(50),
@ -1663,7 +1665,7 @@ case80_specail_object_19_1_0_write(Config) ->
Path2 = get_coap_path(Options2), Path2 = get_coap_path(Options2),
?assertEqual(put, Method2), ?assertEqual(put, Method2),
?assertEqual(<<"/19/1/0">>, Path2), ?assertEqual(<<"/19/1/0">>, Path2),
?assertEqual(<<12345:32>>, Payload2), ?assertEqual(<<3:2, 0:1, 0:2, 4:3, 0, 12345:32>>, Payload2),
timer:sleep(50), timer:sleep(50),
test_send_coap_response(UdpSock, "127.0.0.1", ?PORT, {ok, changed}, #coap_content{}, Request2, true), test_send_coap_response(UdpSock, "127.0.0.1", ?PORT, {ok, changed}, #coap_content{}, Request2, true),
@ -1672,6 +1674,7 @@ case80_specail_object_19_1_0_write(Config) ->
ReadResult = emqx_json:encode(#{ ReadResult = emqx_json:encode(#{
<<"requestID">> => CmdId, <<"cacheID">> => CmdId, <<"requestID">> => CmdId, <<"cacheID">> => CmdId,
<<"data">> => #{ <<"data">> => #{
<<"reqPath">> => <<"/19/1/0">>,
<<"code">> => <<"2.04">>, <<"code">> => <<"2.04">>,
<<"codeMsg">> => <<"changed">> <<"codeMsg">> => <<"changed">>
}, },