diff --git a/include/emqttd_protocol.hrl b/include/emqttd_protocol.hrl index 22a32bc09..c5adb66b3 100644 --- a/include/emqttd_protocol.hrl +++ b/include/emqttd_protocol.hrl @@ -49,6 +49,26 @@ -type mqtt_qos() :: ?QOS_0 | ?QOS_1 | ?QOS_2. +-type mqtt_qos_name() :: qos0 | at_most_once | + qos1 | at_least_once | + qos2 | exactly_once. + +-define(QOS_I(Name), + begin + (case Name of + ?QOS_0 -> ?QOS_0; + qos0 -> ?QOS_0; + at_most_once -> ?QOS_0; + ?QOS_1 -> ?QOS_1; + qos1 -> ?QOS_1; + at_least_once -> ?QOS_1; + ?QOS_2 -> ?QOS_2; + qos2 -> ?QOS_2; + exactly_once -> ?QOS_2 + end) + end). + + %%------------------------------------------------------------------------------ %% Max ClientId Length. Why 1024? NiDongDe! %%------------------------------------------------------------------------------ diff --git a/src/emqttd_message.erl b/src/emqttd_message.erl index 00608ea69..8f3d4ed40 100644 --- a/src/emqttd_message.erl +++ b/src/emqttd_message.erl @@ -55,14 +55,14 @@ make(From, Topic, Payload) -> -spec make(From, Qos, Topic, Payload) -> mqtt_message() when From :: atom() | binary(), - Qos :: mqtt_qos(), + Qos :: mqtt_qos() | mqtt_qos_name(), Topic :: binary(), Payload :: binary(). make(From, Qos, Topic, Payload) -> #mqtt_message{msgid = msgid(Qos), topic = Topic, from = From, - qos = Qos, + qos = ?QOS_I(Qos), payload = Payload, timestamp = os:timestamp()}. @@ -107,7 +107,7 @@ from_packet(ClientId, Packet) -> msgid(?QOS_0) -> undefined; -msgid(_Qos) -> +msgid(Qos) when Qos =:= ?QOS_1 orelse Qos =:= ?QOS_2 -> emqttd_guid:gen(). %%------------------------------------------------------------------------------ diff --git a/src/emqttd_qos.erl b/src/emqttd_qos.erl new file mode 100644 index 000000000..49e863e17 --- /dev/null +++ b/src/emqttd_qos.erl @@ -0,0 +1,47 @@ +%%%----------------------------------------------------------------------------- +%%% Copyright (c) 2012-2015 eMQTT.IO, All Rights Reserved. +%%% +%%% Permission is hereby granted, free of charge, to any person obtaining a copy +%%% of this software and associated documentation files (the "Software"), to deal +%%% in the Software without restriction, including without limitation the rights +%%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell +%%% copies of the Software, and to permit persons to whom the Software is +%%% furnished to do so, subject to the following conditions: +%%% +%%% The above copyright notice and this permission notice shall be included in all +%%% copies or substantial portions of the Software. +%%% +%%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR +%%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, +%%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE +%%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER +%%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, +%%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE +%%% SOFTWARE. +%%%----------------------------------------------------------------------------- +%%% @doc +%%% emqttd Qos Functions. +%%% +%%% @end +%%%----------------------------------------------------------------------------- +-module(emqttd_qos). + +-include("emqttd_protocol.hrl"). + +-export([a/1, i/1]). + +a(?QOS_0) -> qos0; +a(?QOS_1) -> qos1; +a(?QOS_2) -> qos2; +a(qos0) -> qos0; +a(qos1) -> qos1; +a(qos2) -> qos2. + +i(?QOS_0) -> ?QOS_0; +i(?QOS_1) -> ?QOS_1; +i(?QOS_2) -> ?QOS_2; +i(qos0) -> ?QOS_0; +i(qos1) -> ?QOS_1; +i(qos2) -> ?QOS_2. + +