emqttd.hrl 5.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167
  1. %%%-----------------------------------------------------------------------------
  2. %%% Copyright (c) 2012-2015 eMQTT.IO, All Rights Reserved.
  3. %%%
  4. %%% Permission is hereby granted, free of charge, to any person obtaining a copy
  5. %%% of this software and associated documentation files (the "Software"), to deal
  6. %%% in the Software without restriction, including without limitation the rights
  7. %%% to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
  8. %%% copies of the Software, and to permit persons to whom the Software is
  9. %%% furnished to do so, subject to the following conditions:
  10. %%%
  11. %%% The above copyright notice and this permission notice shall be included in all
  12. %%% copies or substantial portions of the Software.
  13. %%%
  14. %%% THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
  15. %%% IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
  16. %%% FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
  17. %%% AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
  18. %%% LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
  19. %%% OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
  20. %%% SOFTWARE.
  21. %%%-----------------------------------------------------------------------------
  22. %%% @doc
  23. %%% MQTT Broker Header.
  24. %%%
  25. %%% @end
  26. %%%-----------------------------------------------------------------------------
  27. %%------------------------------------------------------------------------------
  28. %% Banner
  29. %%------------------------------------------------------------------------------
  30. -define(COPYRIGHT, "Copyright (C) 2012-2015, Feng Lee <feng@emqtt.io>").
  31. -define(LICENSE_MESSAGE, "Licensed under MIT").
  32. -define(PROTOCOL_VERSION, "MQTT/3.1.1").
  33. -define(ERTS_MINIMUM, "6.0").
  34. %% System Topics.
  35. -define(SYSTOP, <<"$SYS">>).
  36. %% Queue Topics.
  37. -define(QTop, <<"$Q">>).
  38. %%------------------------------------------------------------------------------
  39. %% PubSub
  40. %%------------------------------------------------------------------------------
  41. -type pubsub() :: publish | subscribe.
  42. -define(IS_PUBSUB(PS), (PS =:= publish orelse PS =:= subscribe)).
  43. %%------------------------------------------------------------------------------
  44. %% MQTT Topic
  45. %%------------------------------------------------------------------------------
  46. -record(mqtt_topic, {
  47. topic :: binary(),
  48. node :: node()
  49. }).
  50. -type mqtt_topic() :: #mqtt_topic{}.
  51. %%------------------------------------------------------------------------------
  52. %% MQTT Subscription
  53. %%------------------------------------------------------------------------------
  54. -record(mqtt_subscription, {
  55. subid :: binary() | atom(),
  56. topic :: binary(),
  57. qos = 0 :: 0 | 1 | 2
  58. }).
  59. -type mqtt_subscription() :: #mqtt_subscription{}.
  60. %%------------------------------------------------------------------------------
  61. %% MQTT Client
  62. %%------------------------------------------------------------------------------
  63. -type header_key() :: atom() | binary() | string().
  64. -type header_val() :: atom() | binary() | string() | integer().
  65. -record(mqtt_client, {
  66. client_id :: binary() | undefined,
  67. client_pid :: pid(),
  68. username :: binary() | undefined,
  69. peername :: {inet:ip_address(), integer()},
  70. clean_sess :: boolean(),
  71. proto_ver :: 3 | 4,
  72. keepalive = 0,
  73. will_topic :: undefined | binary(),
  74. ws_initial_headers :: list({header_key(), header_val()}),
  75. connected_at :: erlang:timestamp()
  76. }).
  77. -type mqtt_client() :: #mqtt_client{}.
  78. %%------------------------------------------------------------------------------
  79. %% MQTT Session
  80. %%------------------------------------------------------------------------------
  81. -record(mqtt_session, {
  82. client_id :: binary(),
  83. sess_pid :: pid(),
  84. persistent :: boolean()
  85. }).
  86. -type mqtt_session() :: #mqtt_session{}.
  87. %%------------------------------------------------------------------------------
  88. %% MQTT Message
  89. %%------------------------------------------------------------------------------
  90. -type mqtt_msgid() :: binary() | undefined.
  91. -type mqtt_pktid() :: 1..16#ffff | undefined.
  92. -record(mqtt_message, {
  93. msgid :: mqtt_msgid(), %% Global unique message ID
  94. pktid :: mqtt_pktid(), %% PacketId
  95. topic :: binary(), %% Topic that the message is published to
  96. from :: binary() | atom(), %% ClientId of publisher
  97. qos = 0 :: 0 | 1 | 2, %% Message QoS
  98. retain = false :: boolean(), %% Retain flag
  99. dup = false :: boolean(), %% Dup flag
  100. sys = false :: boolean(), %% $SYS flag
  101. payload :: binary(), %% Payload
  102. timestamp :: erlang:timestamp() %% os:timestamp
  103. }).
  104. -type mqtt_message() :: #mqtt_message{}.
  105. %%------------------------------------------------------------------------------
  106. %% MQTT Alarm
  107. %%------------------------------------------------------------------------------
  108. -record(mqtt_alarm, {
  109. id :: binary(),
  110. severity :: warning | error | critical,
  111. title :: iolist() | binary(),
  112. summary :: iolist() | binary(),
  113. timestamp :: erlang:timestamp() %% Timestamp
  114. }).
  115. -type mqtt_alarm() :: #mqtt_alarm{}.
  116. %%------------------------------------------------------------------------------
  117. %% MQTT Plugin
  118. %%------------------------------------------------------------------------------
  119. -record(mqtt_plugin, {
  120. name,
  121. version,
  122. descr,
  123. config,
  124. active = false
  125. }).
  126. -type mqtt_plugin() :: #mqtt_plugin{}.
  127. %%------------------------------------------------------------------------------
  128. %% MQTT CLI Command
  129. %% For example: 'broker metrics'
  130. %%------------------------------------------------------------------------------
  131. -record(mqtt_cli, {
  132. name,
  133. action,
  134. args = [],
  135. opts = [],
  136. usage,
  137. descr
  138. }).
  139. -type mqtt_cli() :: #mqtt_cli{}.