1
0

mqtt_protocol.h 2.3 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182
  1. #ifndef HV_MQTT_PROTOCOL_H_
  2. #define HV_MQTT_PROTOCOL_H_
  3. #include "hexport.h"
  4. #define DEFAULT_MQTT_PORT 1883
  5. #define MQTT_PROTOCOL_V31 3
  6. #define MQTT_PROTOCOL_V311 4
  7. #define MQTT_PROTOCOL_V5 5 // Not yet supproted
  8. #define MQTT_PROTOCOL_NAME "MQTT"
  9. #define MQTT_PROTOCOL_NAME_v31 "MQIsdp"
  10. /*
  11. * connect flags
  12. * 0 1 2 3-4 5 6 7
  13. * reserved clean_session has_will will_qos will_retain has_password has_username
  14. */
  15. #define MQTT_CONN_CLEAN_SESSION 0x02
  16. #define MQTT_CONN_HAS_WILL 0x04
  17. #define MQTT_CONN_WILL_RETAIN 0x20
  18. #define MQTT_CONN_HAS_PASSWORD 0x40
  19. #define MQTT_CONN_HAS_USERNAME 0x80
  20. typedef enum {
  21. MQTT_TYPE_CONNECT = 1,
  22. MQTT_TYPE_CONNACK = 2,
  23. MQTT_TYPE_PUBLISH = 3,
  24. MQTT_TYPE_PUBACK = 4,
  25. MQTT_TYPE_PUBREC = 5,
  26. MQTT_TYPE_PUBREL = 6,
  27. MQTT_TYPE_PUBCOMP = 7,
  28. MQTT_TYPE_SUBSCRIBE = 8,
  29. MQTT_TYPE_SUBACK = 9,
  30. MQTT_TYPE_UNSUBSCRIBE = 10,
  31. MQTT_TYPE_UNSUBACK = 11,
  32. MQTT_TYPE_PINGREQ = 12,
  33. MQTT_TYPE_PINGRESP = 13,
  34. MQTT_TYPE_DISCONNECT = 14,
  35. } mqtt_type_e;
  36. typedef enum {
  37. MQTT_CONNACK_ACCEPTED = 0,
  38. MQTT_CONNACK_REFUSED_PROTOCOL_VERSION = 1,
  39. MQTT_CONNACK_REFUSED_IDENTIFIER_REJECTED = 2,
  40. MQTT_CONNACK_REFUSED_SERVER_UNAVAILABLE = 3,
  41. MQTT_CONNACK_REFUSED_BAD_USERNAME_PASSWORD = 4,
  42. MQTT_CONNACK_REFUSED_NOT_AUTHORIZED = 5,
  43. } mqtt_connack_e;
  44. typedef struct mqtt_head_s {
  45. unsigned char type: 4;
  46. unsigned char dup: 1;
  47. unsigned char qos: 2;
  48. unsigned char retain: 1;
  49. unsigned int length;
  50. } mqtt_head_t;
  51. typedef struct mqtt_message_s {
  52. unsigned int topic_len;
  53. const char* topic;
  54. unsigned int payload_len;
  55. const char* payload;
  56. unsigned char qos;
  57. unsigned char retain;
  58. } mqtt_message_t;
  59. BEGIN_EXTERN_C
  60. #define DEFAULT_MQTT_PACKAGE_MAX_LENGTH (1 << 28) // 256M
  61. HV_INLINE int mqtt_estimate_length(mqtt_head_t* head) {
  62. // 28 bits => 4*7 bits varint
  63. return 1 + 4 + head->length;
  64. }
  65. HV_EXPORT int mqtt_head_pack(mqtt_head_t* head, unsigned char buf[]);
  66. HV_EXPORT int mqtt_head_unpack(mqtt_head_t* head, const unsigned char* buf, int len);
  67. END_EXTERN_C
  68. #endif // HV_MQTT_PROTOCOL_H_