Feng %!s(int64=10) %!d(string=hai) anos
pai
achega
c65d047fda
Modificáronse 3 ficheiros con 70 adicións e 3 borrados
  1. 20 0
      include/emqttd_protocol.hrl
  2. 3 3
      src/emqttd_message.erl
  3. 47 0
      src/emqttd_qos.erl

+ 20 - 0
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!
 %%------------------------------------------------------------------------------

+ 3 - 3
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().
 
 %%------------------------------------------------------------------------------

+ 47 - 0
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.
+
+