29#ifndef DETERMINISTICESPASYNCWEBSERVER_MQTT_SN_H
30#define DETERMINISTICESPASYNCWEBSERVER_MQTT_SN_H
34#if DETWS_ENABLE_MQTT_SN
39#define MQTTSN_LEN3_PREFIX 0x01
42#define MQTTSN_ADVERTISE 0x00
43#define MQTTSN_SEARCHGW 0x01
44#define MQTTSN_GWINFO 0x02
45#define MQTTSN_CONNECT 0x04
46#define MQTTSN_CONNACK 0x05
47#define MQTTSN_WILLTOPICREQ 0x06
48#define MQTTSN_WILLTOPIC 0x07
49#define MQTTSN_WILLMSGREQ 0x08
50#define MQTTSN_WILLMSG 0x09
51#define MQTTSN_REGISTER 0x0A
52#define MQTTSN_REGACK 0x0B
53#define MQTTSN_PUBLISH 0x0C
54#define MQTTSN_PUBACK 0x0D
55#define MQTTSN_PUBCOMP 0x0E
56#define MQTTSN_PUBREC 0x0F
57#define MQTTSN_PUBREL 0x10
58#define MQTTSN_SUBSCRIBE 0x12
59#define MQTTSN_SUBACK 0x13
60#define MQTTSN_UNSUBSCRIBE 0x14
61#define MQTTSN_UNSUBACK 0x15
62#define MQTTSN_PINGREQ 0x16
63#define MQTTSN_PINGRESP 0x17
64#define MQTTSN_DISCONNECT 0x18
67#define MQTTSN_FLAG_DUP 0x80
68#define MQTTSN_FLAG_QOS_MASK 0x60
69#define MQTTSN_FLAG_QOS_SHIFT 5
70#define MQTTSN_FLAG_RETAIN 0x10
71#define MQTTSN_FLAG_WILL 0x08
72#define MQTTSN_FLAG_CLEAN 0x04
73#define MQTTSN_FLAG_TOPICIDTYPE_MASK 0x03
76#define MQTTSN_TOPIC_NORMAL 0x00
77#define MQTTSN_TOPIC_PREDEFINED 0x01
78#define MQTTSN_TOPIC_SHORT 0x02
81#define MQTTSN_RC_ACCEPTED 0x00
82#define MQTTSN_RC_CONGESTION 0x01
83#define MQTTSN_RC_INVALID_TOPIC_ID 0x02
84#define MQTTSN_RC_NOT_SUPPORTED 0x03
86#define MQTTSN_PROTOCOL_ID 0x01
89uint8_t mqttsn_make_flags(
bool dup, uint8_t qos,
bool retain,
bool will,
bool clean, uint8_t topic_id_type);
94size_t mqttsn_build_connect(uint8_t *buf,
size_t cap, uint8_t flags, uint16_t duration,
const char *client_id);
97size_t mqttsn_build_register(uint8_t *buf,
size_t cap, uint16_t topic_id, uint16_t msg_id,
const char *topic_name);
100size_t mqttsn_build_regack(uint8_t *buf,
size_t cap, uint16_t topic_id, uint16_t msg_id, uint8_t ret_code);
103size_t mqttsn_build_publish(uint8_t *buf,
size_t cap, uint8_t flags, uint16_t topic_id, uint16_t msg_id,
104 const uint8_t *data,
size_t data_len);
107size_t mqttsn_build_puback(uint8_t *buf,
size_t cap, uint16_t topic_id, uint16_t msg_id, uint8_t ret_code);
110size_t mqttsn_build_subscribe_name(uint8_t *buf,
size_t cap, uint8_t flags, uint16_t msg_id,
const char *topic_name);
113size_t mqttsn_build_subscribe_id(uint8_t *buf,
size_t cap, uint8_t flags, uint16_t msg_id, uint16_t topic_id);
116size_t mqttsn_build_pingreq(uint8_t *buf,
size_t cap,
const char *client_id);
119size_t mqttsn_build_disconnect(uint8_t *buf,
size_t cap,
bool with_duration, uint16_t duration);
122size_t mqttsn_build_searchgw(uint8_t *buf,
size_t cap, uint8_t radius);
130 const uint8_t *payload;
139bool mqttsn_parse_header(
const uint8_t *buf,
size_t len, MqttsnHeader *out,
size_t *consumed);
142bool mqttsn_parse_connack(
const uint8_t *payload,
size_t len, uint8_t *ret_code);
143bool mqttsn_parse_regack(
const uint8_t *payload,
size_t len, uint16_t *topic_id, uint16_t *msg_id, uint8_t *ret_code);
144bool mqttsn_parse_puback(
const uint8_t *payload,
size_t len, uint16_t *topic_id, uint16_t *msg_id, uint8_t *ret_code);
145bool mqttsn_parse_suback(
const uint8_t *payload,
size_t len, uint8_t *flags, uint16_t *topic_id, uint16_t *msg_id,
147bool mqttsn_parse_publish(
const uint8_t *payload,
size_t len, uint8_t *flags, uint16_t *topic_id, uint16_t *msg_id,
148 const uint8_t **data,
size_t *data_len);
149bool mqttsn_parse_register(
const uint8_t *payload,
size_t len, uint16_t *topic_id, uint16_t *msg_id,
150 const char **topic_name,
size_t *topic_name_len);
User-facing configuration for DeterministicESPAsyncWebServer.