diff --git a/apps/emqx_lwm2m/src/emqx_lwm2m.app.src b/apps/emqx_lwm2m/src/emqx_lwm2m.app.src index 19fabc526..209499fc5 100644 --- a/apps/emqx_lwm2m/src/emqx_lwm2m.app.src +++ b/apps/emqx_lwm2m/src/emqx_lwm2m.app.src @@ -1,6 +1,6 @@ {application,emqx_lwm2m, [{description,"EMQ X LwM2M Gateway"}, - {vsn, "4.3.1"}, % strict semver, bump manually! + {vsn, "4.3.2"}, % strict semver, bump manually! {modules,[]}, {registered,[emqx_lwm2m_sup]}, {applications,[kernel,stdlib,lwm2m_coap]}, diff --git a/apps/emqx_lwm2m/src/emqx_lwm2m.appup.src b/apps/emqx_lwm2m/src/emqx_lwm2m.appup.src index fb22c843d..db46dd42e 100644 --- a/apps/emqx_lwm2m/src/emqx_lwm2m.appup.src +++ b/apps/emqx_lwm2m/src/emqx_lwm2m.appup.src @@ -1,13 +1,21 @@ %% -*-: erlang -*- {VSN, [ + {"4.3.1", [ + {load_module, emqx_lwm2m_message, brutal_purge, soft_purge, []} + ]}, {"4.3.0", [ + {load_module, emqx_lwm2m_message, 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", [ + {load_module, emqx_lwm2m_message, brutal_purge, soft_purge, []}, {load_module, emqx_lwm2m_protocol, brutal_purge, soft_purge, []} ]}, {<<".*">>, []} diff --git a/apps/emqx_lwm2m/src/emqx_lwm2m_message.erl b/apps/emqx_lwm2m/src/emqx_lwm2m_message.erl index 2dc9fa08a..6b8bc8d50 100644 --- a/apps/emqx_lwm2m/src/emqx_lwm2m_message.erl +++ b/apps/emqx_lwm2m/src/emqx_lwm2m_message.erl @@ -197,7 +197,10 @@ value_ex(K, Value) when K =:= <<"Integer">>; K =:= <<"Float">>; K =:= <<"Time">> value_ex(K, Value) when K =:= <<"String">> -> Value; 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, <<"false">>) when K =:= <<"Boolean">> -> <<0>>; diff --git a/apps/emqx_lwm2m/test/emqx_lwm2m_SUITE.erl b/apps/emqx_lwm2m/test/emqx_lwm2m_SUITE.erl index 257502f2f..7f2f37466 100644 --- a/apps/emqx_lwm2m/test/emqx_lwm2m_SUITE.erl +++ b/apps/emqx_lwm2m/test/emqx_lwm2m_SUITE.erl @@ -40,6 +40,7 @@ all() -> , {group, test_grp_4_discover} , {group, test_grp_5_write_attr} , {group, test_grp_6_observe} + , {group, test_grp_8_object_19} ]. suite() -> [{timetrap, {seconds, 90}}]. @@ -98,9 +99,9 @@ groups() -> ]}, {test_grp_8_object_19, [RepeatOpt], [ case80_specail_object_19_1_0_write, - case80_specail_object_19_0_0_notify, - case80_specail_object_19_0_0_response, - case80_normal_object_19_0_0_read + case80_specail_object_19_0_0_notify + %case80_specail_object_19_0_0_response, + %case80_normal_object_19_0_0_read ]}, {test_grp_9_psm_queue_mode, [RepeatOpt], [ case90_psm_mode, @@ -1655,6 +1656,7 @@ case80_specail_object_19_1_0_write(Config) -> <<"value">> => base64:encode(<<12345:32>>) } }, + CommandJson = emqx_json:encode(Command), test_mqtt_broker:publish(CommandTopic, CommandJson, 0), timer:sleep(50), @@ -1663,7 +1665,7 @@ case80_specail_object_19_1_0_write(Config) -> Path2 = get_coap_path(Options2), ?assertEqual(put, Method2), ?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), 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(#{ <<"requestID">> => CmdId, <<"cacheID">> => CmdId, <<"data">> => #{ + <<"reqPath">> => <<"/19/1/0">>, <<"code">> => <<"2.04">>, <<"codeMsg">> => <<"changed">> },