mirror of
https://gitee.com/dgiiot/dgiot.git
synced 2024-12-04 13:17:38 +08:00
186 lines
6.5 KiB
Erlang
186 lines
6.5 KiB
Erlang
%%--------------------------------------------------------------------
|
|
%% Copyright (c) 2020-2021 EMQ Technologies Co., Ltd. All Rights Reserved.
|
|
%%
|
|
%% Licensed under the Apache License, Version 2.0 (the "License");
|
|
%% you may not use this file except in compliance with the License.
|
|
%% You may obtain a copy of the License at
|
|
%%
|
|
%% http://www.apache.org/licenses/LICENSE-2.0
|
|
%%
|
|
%% Unless required by applicable law or agreed to in writing, software
|
|
%% distributed under the License is distributed on an "AS IS" BASIS,
|
|
%% WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
|
%% See the License for the specific language governing permissions and
|
|
%% limitations under the License.
|
|
%%--------------------------------------------------------------------
|
|
|
|
|
|
%%--------------------------------------------------------------------
|
|
%% MQTT-SN Types
|
|
%%--------------------------------------------------------------------
|
|
|
|
-define(SN_ADVERTISE, 16#00).
|
|
-define(SN_SEARCHGW, 16#01).
|
|
-define(SN_GWINFO, 16#02).
|
|
-define(SN_CONNECT, 16#04).
|
|
-define(SN_CONNACK, 16#05).
|
|
-define(SN_WILLTOPICREQ, 16#06).
|
|
-define(SN_WILLTOPIC, 16#07).
|
|
-define(SN_WILLMSGREQ, 16#08).
|
|
-define(SN_WILLMSG, 16#09).
|
|
-define(SN_REGISTER, 16#0A).
|
|
-define(SN_REGACK, 16#0B).
|
|
-define(SN_PUBLISH, 16#0C).
|
|
-define(SN_PUBACK, 16#0D).
|
|
-define(SN_PUBCOMP, 16#0E).
|
|
-define(SN_PUBREC, 16#0F).
|
|
-define(SN_PUBREL, 16#10).
|
|
-define(SN_SUBSCRIBE, 16#12).
|
|
-define(SN_SUBACK, 16#13).
|
|
-define(SN_UNSUBSCRIBE, 16#14).
|
|
-define(SN_UNSUBACK, 16#15).
|
|
-define(SN_PINGREQ, 16#16).
|
|
-define(SN_PINGRESP, 16#17).
|
|
-define(SN_DISCONNECT, 16#18).
|
|
-define(SN_WILLTOPICUPD, 16#1A).
|
|
-define(SN_WILLTOPICRESP, 16#1B).
|
|
-define(SN_WILLMSGUPD, 16#1C).
|
|
-define(SN_WILLMSGRESP, 16#1D).
|
|
|
|
-type(mqtt_sn_type() :: ?SN_ADVERTISE..?SN_WILLMSGRESP).
|
|
|
|
-define(SN_RC_ACCEPTED, 16#00).
|
|
-define(SN_RC_CONGESTION, 16#01).
|
|
-define(SN_RC_INVALID_TOPIC_ID, 16#02).
|
|
-define(SN_RC_NOT_SUPPORTED, 16#03).
|
|
|
|
-define(QOS_NEG1, 3).
|
|
|
|
-type(mqtt_sn_return_code() :: ?SN_RC_ACCEPTED .. ?SN_RC_NOT_SUPPORTED).
|
|
|
|
%%--------------------------------------------------------------------
|
|
%% MQTT-SN Message
|
|
%%--------------------------------------------------------------------
|
|
|
|
-record(mqtt_sn_flags, {dup = false,
|
|
qos = 0,
|
|
retain = false,
|
|
will = false,
|
|
clean_start = false,
|
|
topic_id_type = 0}).
|
|
|
|
-type(mqtt_sn_flags() :: #mqtt_sn_flags{}).
|
|
|
|
-type(mqtt_sn_variable() :: undefined | integer() | binary() | tuple()).
|
|
|
|
-record(mqtt_sn_message, {type :: mqtt_sn_type(),
|
|
variable :: mqtt_sn_variable()}).
|
|
|
|
-type(mqtt_sn_message() :: #mqtt_sn_message{}).
|
|
|
|
-define(SN_ADVERTISE_MSG(GwId, Duration),
|
|
#mqtt_sn_message{type = ?SN_ADVERTISE,
|
|
variable = {GwId, Duration}}).
|
|
|
|
-define(SN_SEARCHGW_MSG(Radius),
|
|
#mqtt_sn_message{type = ?SN_SEARCHGW,
|
|
variable = Radius}).
|
|
|
|
-define(SN_GWINFO_MSG(GwId, GwAddr),
|
|
#mqtt_sn_message{type = ?SN_GWINFO,
|
|
variable = {GwId, GwAddr}}).
|
|
|
|
-define(SN_CONNECT_MSG(Flags, ProtocolId, Duration, ClientId),
|
|
#mqtt_sn_message{type = ?SN_CONNECT,
|
|
variable = {Flags, ProtocolId, Duration, ClientId}}).
|
|
|
|
-define(SN_CONNACK_MSG(ReturnCode),
|
|
#mqtt_sn_message{type = ?SN_CONNACK, variable = ReturnCode}).
|
|
|
|
-define(SN_WILLTOPICREQ_MSG(),
|
|
#mqtt_sn_message{type = ?SN_WILLTOPICREQ}).
|
|
|
|
-define(SN_WILLTOPIC_MSG(Flags, Topic),
|
|
#mqtt_sn_message{type = ?SN_WILLTOPIC,
|
|
variable = {Flags, Topic}}).
|
|
|
|
-define(SN_WILLTOPIC_EMPTY_MSG,
|
|
#mqtt_sn_message{type = ?SN_WILLTOPIC,
|
|
variable = undefined}).
|
|
|
|
-define(SN_WILLMSGREQ_MSG(),
|
|
#mqtt_sn_message{type = ?SN_WILLMSGREQ}).
|
|
|
|
-define(SN_WILLMSG_MSG(Msg),
|
|
#mqtt_sn_message{type = ?SN_WILLMSG, variable = Msg}).
|
|
|
|
-define(SN_REGISTER_MSG(TopicId, MsgId, TopicName),
|
|
#mqtt_sn_message{type = ?SN_REGISTER,
|
|
variable = {TopicId, MsgId, TopicName}}).
|
|
|
|
-define(SN_REGACK_MSG(TopicId, MsgId, ReturnCode),
|
|
#mqtt_sn_message{type = ?SN_REGACK,
|
|
variable = {TopicId, MsgId, ReturnCode}}).
|
|
|
|
-define(SN_PUBLISH_MSG(Flags, TopicId, MsgId, Data),
|
|
#mqtt_sn_message{type = ?SN_PUBLISH,
|
|
variable = {Flags, TopicId, MsgId, Data}}).
|
|
|
|
-define(SN_PUBACK_MSG(TopicId, MsgId, ReturnCode),
|
|
#mqtt_sn_message{type = ?SN_PUBACK,
|
|
variable = {TopicId, MsgId, ReturnCode}}).
|
|
|
|
%% Type: SN_PUBREC | SN_PUBREL | SN_PUBCOMP
|
|
-define(SN_PUBREC_MSG(Type, MsgId),
|
|
#mqtt_sn_message{type = Type,
|
|
variable = MsgId}).
|
|
|
|
-define(SN_SUBSCRIBE_MSG(Flags, MsgId, Topic),
|
|
#mqtt_sn_message{type = ?SN_SUBSCRIBE,
|
|
variable = {Flags, MsgId, Topic}}).
|
|
|
|
-define(SN_SUBACK_MSG(Flags, TopicId, MsgId, ReturnCode),
|
|
#mqtt_sn_message{type = ?SN_SUBACK,
|
|
variable = {Flags, TopicId, MsgId, ReturnCode}}).
|
|
|
|
-define(SN_UNSUBSCRIBE_MSG(Flags, MsgId, Topic),
|
|
#mqtt_sn_message{type = ?SN_UNSUBSCRIBE,
|
|
variable = {Flags, MsgId, Topic}}).
|
|
|
|
-define(SN_UNSUBACK_MSG(MsgId),
|
|
#mqtt_sn_message{type = ?SN_UNSUBACK,
|
|
variable = MsgId}).
|
|
|
|
-define(SN_PINGREQ_MSG(ClientId),
|
|
#mqtt_sn_message{type = ?SN_PINGREQ, variable = ClientId}).
|
|
|
|
-define(SN_PINGRESP_MSG(), #mqtt_sn_message{type = ?SN_PINGRESP}).
|
|
|
|
-define(SN_DISCONNECT_MSG(Duration),
|
|
#mqtt_sn_message{type = ?SN_DISCONNECT,
|
|
variable = Duration}).
|
|
|
|
-define(SN_WILLTOPICUPD_MSG(Flags, Topic),
|
|
#mqtt_sn_message{type = ?SN_WILLTOPICUPD,
|
|
variable = {Flags, Topic}}).
|
|
|
|
-define(SN_WILLTOPICRESP_MSG(ReturnCode),
|
|
#mqtt_sn_message{type = ?SN_WILLTOPICRESP,
|
|
variable = ReturnCode}).
|
|
|
|
-define(SN_WILLMSGUPD_MSG(Msg),
|
|
#mqtt_sn_message{type = ?SN_WILLMSGUPD,
|
|
variable = Msg}).
|
|
|
|
-define(SN_WILLMSGRESP_MSG(ReturnCode),
|
|
#mqtt_sn_message{type = ?SN_WILLMSGRESP,
|
|
variable = ReturnCode}).
|
|
|
|
-define(SN_NORMAL_TOPIC, 0).
|
|
-define(SN_PREDEFINED_TOPIC, 1).
|
|
-define(SN_SHORT_TOPIC, 2).
|
|
-define(SN_RESERVED_TOPIC, 3).
|
|
|
|
|
|
-define(SN_INVALID_TOPIC_ID, 0).
|