#ifndef MQTT_PROTOCOL_H
#define MQTT_PROTOCOL_H
#define PROTOCOL_NAME_v31 "MQIsdp"
#define PROTOCOL_VERSION_v31 3
#define PROTOCOL_NAME "MQTT"
#define PROTOCOL_VERSION_v311 4
#define PROTOCOL_VERSION_v5 5
#define CMD_CONNECT 0x10U
#define CMD_CONNACK 0x20U
#define CMD_PUBLISH 0x30U
#define CMD_PUBACK 0x40U
#define CMD_PUBREC 0x50U
#define CMD_PUBREL 0x60U
#define CMD_PUBCOMP 0x70U
#define CMD_SUBSCRIBE 0x80U
#define CMD_SUBACK 0x90U
#define CMD_UNSUBSCRIBE 0xA0U
#define CMD_UNSUBACK 0xB0U
#define CMD_PINGREQ 0xC0U
#define CMD_PINGRESP 0xD0U
#define CMD_DISCONNECT 0xE0U
#define CMD_AUTH 0xF0U
#define CMD_WILL 0x100
enum mqtt311_connack_codes {
CONNACK_ACCEPTED = 0,
CONNACK_REFUSED_PROTOCOL_VERSION = 1,
CONNACK_REFUSED_IDENTIFIER_REJECTED = 2,
CONNACK_REFUSED_SERVER_UNAVAILABLE = 3,
CONNACK_REFUSED_BAD_USERNAME_PASSWORD = 4,
CONNACK_REFUSED_NOT_AUTHORIZED = 5,
};
enum mqtt5_return_codes {
MQTT_RC_SUCCESS = 0,
MQTT_RC_NORMAL_DISCONNECTION = 0,
MQTT_RC_GRANTED_QOS0 = 0,
MQTT_RC_GRANTED_QOS1 = 1,
MQTT_RC_GRANTED_QOS2 = 2,
MQTT_RC_DISCONNECT_WITH_WILL_MSG = 4,
MQTT_RC_NO_MATCHING_SUBSCRIBERS = 16,
MQTT_RC_NO_SUBSCRIPTION_EXISTED = 17,
MQTT_RC_CONTINUE_AUTHENTICATION = 24,
MQTT_RC_REAUTHENTICATE = 25,
MQTT_RC_UNSPECIFIED = 128,
MQTT_RC_MALFORMED_PACKET = 129,
MQTT_RC_PROTOCOL_ERROR = 130,
MQTT_RC_IMPLEMENTATION_SPECIFIC = 131,
MQTT_RC_UNSUPPORTED_PROTOCOL_VERSION = 132,
MQTT_RC_CLIENTID_NOT_VALID = 133,
MQTT_RC_BAD_USERNAME_OR_PASSWORD = 134,
MQTT_RC_NOT_AUTHORIZED = 135,
MQTT_RC_SERVER_UNAVAILABLE = 136,
MQTT_RC_SERVER_BUSY = 137,
MQTT_RC_BANNED = 138,
MQTT_RC_SERVER_SHUTTING_DOWN = 139,
MQTT_RC_BAD_AUTHENTICATION_METHOD = 140,
MQTT_RC_KEEP_ALIVE_TIMEOUT = 141,
MQTT_RC_SESSION_TAKEN_OVER = 142,
MQTT_RC_TOPIC_FILTER_INVALID = 143,
MQTT_RC_TOPIC_NAME_INVALID = 144,
MQTT_RC_PACKET_ID_IN_USE = 145,
MQTT_RC_PACKET_ID_NOT_FOUND = 146,
MQTT_RC_RECEIVE_MAXIMUM_EXCEEDED = 147,
MQTT_RC_TOPIC_ALIAS_INVALID = 148,
MQTT_RC_PACKET_TOO_LARGE = 149,
MQTT_RC_MESSAGE_RATE_TOO_HIGH = 150,
MQTT_RC_QUOTA_EXCEEDED = 151,
MQTT_RC_ADMINISTRATIVE_ACTION = 152,
MQTT_RC_PAYLOAD_FORMAT_INVALID = 153,
MQTT_RC_RETAIN_NOT_SUPPORTED = 154,
MQTT_RC_QOS_NOT_SUPPORTED = 155,
MQTT_RC_USE_ANOTHER_SERVER = 156,
MQTT_RC_SERVER_MOVED = 157,
MQTT_RC_SHARED_SUBS_NOT_SUPPORTED = 158,
MQTT_RC_CONNECTION_RATE_EXCEEDED = 159,
MQTT_RC_MAXIMUM_CONNECT_TIME = 160,
MQTT_RC_SUBSCRIPTION_IDS_NOT_SUPPORTED = 161,
MQTT_RC_WILDCARD_SUBS_NOT_SUPPORTED = 162,
};
enum mqtt5_property {
MQTT_PROP_PAYLOAD_FORMAT_INDICATOR = 1,
MQTT_PROP_MESSAGE_EXPIRY_INTERVAL = 2,
MQTT_PROP_CONTENT_TYPE = 3,
MQTT_PROP_RESPONSE_TOPIC = 8,
MQTT_PROP_CORRELATION_DATA = 9,
MQTT_PROP_SUBSCRIPTION_IDENTIFIER = 11,
MQTT_PROP_SESSION_EXPIRY_INTERVAL = 17,
MQTT_PROP_ASSIGNED_CLIENT_IDENTIFIER = 18,
MQTT_PROP_SERVER_KEEP_ALIVE = 19,
MQTT_PROP_AUTHENTICATION_METHOD = 21,
MQTT_PROP_AUTHENTICATION_DATA = 22,
MQTT_PROP_REQUEST_PROBLEM_INFORMATION = 23,
MQTT_PROP_WILL_DELAY_INTERVAL = 24,
MQTT_PROP_REQUEST_RESPONSE_INFORMATION = 25,
MQTT_PROP_RESPONSE_INFORMATION = 26,
MQTT_PROP_SERVER_REFERENCE = 28,
MQTT_PROP_REASON_STRING = 31,
MQTT_PROP_RECEIVE_MAXIMUM = 33,
MQTT_PROP_TOPIC_ALIAS_MAXIMUM = 34,
MQTT_PROP_TOPIC_ALIAS = 35,
MQTT_PROP_MAXIMUM_QOS = 36,
MQTT_PROP_RETAIN_AVAILABLE = 37,
MQTT_PROP_USER_PROPERTY = 38,
MQTT_PROP_MAXIMUM_PACKET_SIZE = 39,
MQTT_PROP_WILDCARD_SUB_AVAILABLE = 40,
MQTT_PROP_SUBSCRIPTION_ID_AVAILABLE = 41,
MQTT_PROP_SHARED_SUB_AVAILABLE = 42,
};
enum mqtt5_property_type {
MQTT_PROP_TYPE_BYTE = 1,
MQTT_PROP_TYPE_INT16 = 2,
MQTT_PROP_TYPE_INT32 = 3,
MQTT_PROP_TYPE_VARINT = 4,
MQTT_PROP_TYPE_BINARY = 5,
MQTT_PROP_TYPE_STRING = 6,
MQTT_PROP_TYPE_STRING_PAIR = 7
};
enum mqtt5_sub_options {
MQTT_SUB_OPT_NO_LOCAL = 0x04,
MQTT_SUB_OPT_RETAIN_AS_PUBLISHED = 0x08,
MQTT_SUB_OPT_SEND_RETAIN_ALWAYS = 0x00,
MQTT_SUB_OPT_SEND_RETAIN_NEW = 0x10,
MQTT_SUB_OPT_SEND_RETAIN_NEVER = 0x20,
};
#define MQTT_MAX_PAYLOAD 268435455U
#endif