wolfmqtt/wolfmqttmqtt_client.h
Classes
Name | |
---|---|
struct | _MqttPkRead |
struct | _MqttSk |
struct | _MqttClient |
Types
Name | |
---|---|
enum | MqttClientFlags { MQTT_CLIENT_FLAG_IS_CONNECTED = 0x01 << 0, MQTT_CLIENT_FLAG_IS_TLS = 0x01 << 1, MQTT_CLIENT_FLAG_IS_DTLS = 0x01 << 2} |
enum | _MqttPkStat { MQTT_PK_BEGIN = 0, MQTT_PK_READ_HEAD, MQTT_PK_READ} |
typedef int()(struct _MqttClient client, MqttMessage *message, byte msg_new, byte msg_done) | MqttMsgCb Mqtt Message Callback. If the message payload is larger than the maximum RX buffer then this callback is called multiple times. If msg_new = 1 its a new message. The topic_name and topic_name length are only valid when msg_new = 1. If msg_new = 0 then we are receiving additional payload. Each callback populates the payload in MqttMessage.buffer. The MqttMessage.buffer_len is the size of the buffer payload. The MqttMessage.buffer_pos is the location in the total payload. The MqttMessage.total_len is the length of the complete payload message. If msg_done = 1 the entire publish payload has been received. |
typedef int()(MqttPublish publish) | MqttPublishCb Mqtt Publish Callback. If the publish payload is larger than the maximum TX buffer then this callback is called multiple times. This callback is executed from within a call to MqttPublish. It is expected to provide a buffer and it's size and return >=0 for success. Each callback populates the payload in MqttPublish.buffer. The MqttPublish.buffer_len is the size of the buffer payload. The MqttPublish.total_len is the length of the complete payload message. |
typedef enum _MqttPkStat | MqttPkStat |
typedef struct _MqttPkRead | MqttPkRead |
typedef struct _MqttSk | MqttSk |
typedef int()(struct _MqttClient client, int error_code, void *ctx) | MqttDisconnectCb |
typedef int()(struct _MqttClient client, MqttProp head, void ctx) | MqttPropertyCb |
typedef int()(word16 topicId, const char topicName, void *reg_ctx) | SN_ClientRegisterCb Mqtt-SN Register Callback. A GW sends a REGISTER message to a client if it wants to inform that client about the topic name and the assigned topic id that it will use later on when sending PUBLISH messages of the corresponding topic name. This callback allows the client to accept and save the new ID, or reject it if the ID is unknown. If the callback is not defined, then the regack will contain the "unsupported" return code. |
typedef struct _MqttClient | MqttClient |
Functions
Name | |
---|---|
WOLFMQTT_API word32 | MqttClient_Flags(struct _MqttClient * client, word32 mask, word32 flags) Sets flags in the MqttClient structure. To be used from the application before calling MqttClient_NetConnect. |
WOLFMQTT_API int | MqttClient_Init(MqttClient * client, MqttNet * net, MqttMsgCb msg_cb, byte * tx_buf, int tx_buf_len, byte * rx_buf, int rx_buf_len, int cmd_timeout_ms) Initializes the MqttClient structure. |
WOLFMQTT_API void | MqttClient_DeInit(MqttClient * client) Cleans up resources allocated to the MqttClient structure. |
WOLFMQTT_API int | MqttClient_SetDisconnectCallback(MqttClient * client, MqttDisconnectCb discb, void * ctx) Sets a disconnect callback with custom context. |
WOLFMQTT_API int | MqttClient_SetPropertyCallback(MqttClient * client, MqttPropertyCb propCb, void * ctx) Sets a property callback with custom context. |
WOLFMQTT_API int | MqttClient_Connect(MqttClient * client, MqttConnect * connect) Encodes and sends the MQTT Connect packet and waits for the Connect Acknowledgment packet. |
WOLFMQTT_API int | MqttClient_Publish(MqttClient * client, MqttPublish * publish) Encodes and sends the MQTT Publish packet and waits for the Publish response (if QoS > 0). If the total size of the payload is larger than the buffer size, it can be called successively to transmit the full payload. (if QoS > 0) |
WOLFMQTT_API int | MqttClient_Publish_ex(MqttClient * client, MqttPublish * publish, MqttPublishCb pubCb) Encodes and sends the MQTT Publish packet and waits for the Publish response (if QoS > 0). The callback function is used to copy the payload data, allowing the use of transmit buffers smaller than the total size of the payload. |
WOLFMQTT_API int | MqttClient_Publish_WriteOnly(MqttClient * client, MqttPublish * publish, MqttPublishCb pubCb) Same as MqttClient_Publish_ex, however this API will only perform writes and requires another thread to handle the read ACK processing using MqttClient_WaitMessage_ex. |
WOLFMQTT_API int | MqttClient_Subscribe(MqttClient * client, MqttSubscribe * subscribe) Encodes and sends the MQTT Subscribe packet and waits for the Subscribe Acknowledgment packet. |
WOLFMQTT_API int | MqttClient_Unsubscribe(MqttClient * client, MqttUnsubscribe * unsubscribe) Encodes and sends the MQTT Unsubscribe packet and waits for the Unsubscribe Acknowledgment packet. |
WOLFMQTT_API int | MqttClient_Ping(MqttClient * client) Encodes and sends the MQTT Ping Request packet and waits for the Ping Response packet. |
WOLFMQTT_API int | MqttClient_Ping_ex(MqttClient * client, MqttPing * ping) Encodes and sends the MQTT Ping Request packet and waits for the Ping Response packet. This version takes a MqttPing structure and can be used with non-blocking applications. |
WOLFMQTT_API int | MqttClient_Auth(MqttClient * client, MqttAuth * auth) Encodes and sends the MQTT Authentication Request packet and waits for the Ping Response packet. |
WOLFMQTT_API MqttProp * | MqttClient_PropsAdd(MqttProp ** head) Add a new property. Allocate a property structure and add it to the head of the list pointed to by head. To be used prior to calling packet command. |
WOLFMQTT_API int | MqttClient_PropsFree(MqttProp * head) Free property list. Deallocate the list pointed to by head. Must be used after the packet command that used MqttClient_Prop_Add. |
WOLFMQTT_API int | MqttClient_Disconnect(MqttClient * client) Encodes and sends the MQTT Disconnect packet (no response) |
WOLFMQTT_API int | MqttClient_Disconnect_ex(MqttClient * client, MqttDisconnect * disconnect) Encodes and sends the MQTT Disconnect packet (no response) |
WOLFMQTT_API int | MqttClient_WaitMessage(MqttClient * client, int timeout_ms) Waits for packets to arrive. Incoming publish messages will arrive via callback provided in MqttClient_Init. |
WOLFMQTT_API int | MqttClient_WaitMessage_ex(MqttClient * client, MqttObject * msg, int timeout_ms) Waits for packets to arrive. Incoming publish messages will arrive via callback provided in MqttClient_Init. |
WOLFMQTT_API int | MqttClient_CancelMessage(MqttClient * client, MqttObject * msg) In a multi-threaded and non-blocking mode this allows you to cancel an MQTT object that was previously submitted. |
WOLFMQTT_API int | MqttClient_IsMessageActive(MqttClient * client, MqttObject * msg) In a non_blocking mode this checks if the message has a read or write pending (state is not MQTT_MSG_BEGIN). |
WOLFMQTT_API int | MqttClient_NetConnect(MqttClient * client, const char * host, word16 port, int timeout_ms, int use_tls, MqttTlsCb cb) Performs network connect with TLS (if use_tls is non_zero value) Will perform the MqttTlsCb callback if use_tls is non-zero value. |
WOLFMQTT_API int | MqttClient_NetDisconnect(MqttClient * client) Performs a network disconnect. |
WOLFMQTT_API int | MqttClient_GetProtocolVersion(MqttClient * client) Gets number version of connected protocol version. |
WOLFMQTT_API const char * | MqttClient_GetProtocolVersionString(MqttClient * client) Gets string version of connected protocol version. |
WOLFMQTT_API const char * | MqttClient_ReturnCodeToString(int return_code) Performs lookup of the WOLFMQTT_API return values. |
WOLFMQTT_LOCAL int | MqttClient_RespList_Find(MqttClient * client, MqttPacketType packet_type, word16 packet_id, MqttPendResp ** retResp) |
WOLFMQTT_LOCAL void | MqttClient_RespList_Remove(MqttClient * client, MqttPendResp * rmResp) |
WOLFMQTT_LOCAL int | MqttClient_RespList_Add(MqttClient * client, MqttPacketType packet_type, word16 packet_id, MqttPendResp * newResp, void * packet_obj) |
WOLFMQTT_LOCAL int | MqttPacket_HandleNetError(MqttClient * client, int rc) |
Attributes
Name | |
---|---|
C |
Types Documentation
enum MqttClientFlags
Enumerator | Value | Description |
---|---|---|
MQTT_CLIENT_FLAG_IS_CONNECTED | 0x01 << 0 | |
MQTT_CLIENT_FLAG_IS_TLS | 0x01 << 1 | |
MQTT_CLIENT_FLAG_IS_DTLS | 0x01 << 2 |
enum _MqttPkStat
Enumerator | Value | Description |
---|---|---|
MQTT_PK_BEGIN | 0 | |
MQTT_PK_READ_HEAD | ||
MQTT_PK_READ |
typedef MqttMsgCb
typedef int(* MqttMsgCb) (struct _MqttClient *client, MqttMessage *message, byte msg_new, byte msg_done);
Mqtt Message Callback. If the message payload is larger than the maximum RX buffer then this callback is called multiple times. If msg_new = 1 its a new message. The topic_name and topic_name length are only valid when msg_new = 1. If msg_new = 0 then we are receiving additional payload. Each callback populates the payload in MqttMessage.buffer. The MqttMessage.buffer_len is the size of the buffer payload. The MqttMessage.buffer_pos is the location in the total payload. The MqttMessage.total_len is the length of the complete payload message. If msg_done = 1 the entire publish payload has been received.
Parameters:
- client Pointer to MqttClient structure
- message Pointer to MqttMessage structure that has been initialized with the payload properties
- msg_new If non-zero value then message is new and topic name / len is provided and valid.
- msg_done If non-zero value then we have received the entire message and payload.
Return: MQTT_CODE_SUCCESS to remain connected (other values will cause net disconnect - see enum MqttPacketResponseCodes)
typedef MqttPublishCb
typedef int(* MqttPublishCb) (MqttPublish *publish);
Mqtt Publish Callback. If the publish payload is larger than the maximum TX buffer then this callback is called multiple times. This callback is executed from within a call to MqttPublish. It is expected to provide a buffer and it's size and return >=0 for success. Each callback populates the payload in MqttPublish.buffer. The MqttPublish.buffer_len is the size of the buffer payload. The MqttPublish.total_len is the length of the complete payload message.
Parameters:
- publish Pointer to MqttPublish structure
Return: >= 0 Indicates success
typedef MqttPkStat
typedef enum _MqttPkStat MqttPkStat;
typedef MqttPkRead
typedef struct _MqttPkRead MqttPkRead;
typedef MqttSk
typedef struct _MqttSk MqttSk;
typedef MqttDisconnectCb
typedef int(* MqttDisconnectCb) (struct _MqttClient *client, int error_code, void *ctx);
typedef MqttPropertyCb
typedef int(* MqttPropertyCb) (struct _MqttClient *client, MqttProp *head, void *ctx);
typedef SN_ClientRegisterCb
typedef int(* SN_ClientRegisterCb) (word16 topicId, const char *topicName, void *reg_ctx);
Mqtt-SN Register Callback. A GW sends a REGISTER message to a client if it wants to inform that client about the topic name and the assigned topic id that it will use later on when sending PUBLISH messages of the corresponding topic name. This callback allows the client to accept and save the new ID, or reject it if the ID is unknown. If the callback is not defined, then the regack will contain the "unsupported" return code.
Parameters:
- topicId New topic ID value
- topicName Pointer to topic name
- reg_ctx Pointer to user context
Return: >= 0 Indicates acceptance
typedef MqttClient
typedef struct _MqttClient MqttClient;
Functions Documentation
function MqttClient_Flags
WOLFMQTT_API word32 MqttClient_Flags(
struct _MqttClient * client,
word32 mask,
word32 flags
)
Sets flags in the MqttClient structure. To be used from the application before calling MqttClient_NetConnect.
Parameters:
- client Pointer to MqttClient structure
- mask Flags to clear
- flags Flags to set
Return: Value of flags in the MqttClient structure
function MqttClient_Init
WOLFMQTT_API int MqttClient_Init(
MqttClient * client,
MqttNet * net,
MqttMsgCb msg_cb,
byte * tx_buf,
int tx_buf_len,
byte * rx_buf,
int rx_buf_len,
int cmd_timeout_ms
)
Initializes the MqttClient structure.
Parameters:
- client Pointer to MqttClient structure (uninitialized is okay)
- net Pointer to MqttNet structure that has been initialized with callback pointers and context
- msg_cb Pointer to message callback function
- tx_buf Pointer to transmit buffer used during encoding
- tx_buf_len Maximum length of the transmit buffer
- rx_buf Pointer to receive buffer used during decoding
- rx_buf_len Maximum length of the receive buffer
- cmd_timeout_ms Maximum command wait timeout in milliseconds
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_BAD_ARG (see enum MqttPacketResponseCodes)
function MqttClient_DeInit
WOLFMQTT_API void MqttClient_DeInit(
MqttClient * client
)
Cleans up resources allocated to the MqttClient structure.
Parameters:
- client Pointer to MqttClient structure
function MqttClient_SetDisconnectCallback
WOLFMQTT_API int MqttClient_SetDisconnectCallback(
MqttClient * client,
MqttDisconnectCb discb,
void * ctx
)
Sets a disconnect callback with custom context.
Parameters:
- client Pointer to MqttClient structure (uninitialized is okay)
- discb Pointer to disconnect callback function
- ctx Pointer to your own context
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_BAD_ARG (see enum MqttPacketResponseCodes)
function MqttClient_SetPropertyCallback
WOLFMQTT_API int MqttClient_SetPropertyCallback(
MqttClient * client,
MqttPropertyCb propCb,
void * ctx
)
Sets a property callback with custom context.
Parameters:
- client Pointer to MqttClient structure (uninitialized is okay)
- propCb Pointer to property callback function
- ctx Pointer to your own context
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_BAD_ARG (see enum MqttPacketResponseCodes)
function MqttClient_Connect
WOLFMQTT_API int MqttClient_Connect(
MqttClient * client,
MqttConnect * connect
)
Encodes and sends the MQTT Connect packet and waits for the Connect Acknowledgment packet.
Parameters:
- client Pointer to MqttClient structure
- connect Pointer to MqttConnect structure initialized with connect parameters
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_* (see enum MqttPacketResponseCodes)
Note: This is a blocking function that will wait for MqttNet.read
function MqttClient_Publish
WOLFMQTT_API int MqttClient_Publish(
MqttClient * client,
MqttPublish * publish
)
Encodes and sends the MQTT Publish packet and waits for the Publish response (if QoS > 0). If the total size of the payload is larger than the buffer size, it can be called successively to transmit the full payload. (if QoS > 0)
Parameters:
- client Pointer to MqttClient structure
- publish Pointer to MqttPublish structure initialized with message data Note: MqttPublish and MqttMessage are same structure.
See:
Return: MQTT_CODE_SUCCESS, MQTT_CODE_CONTINUE (for non-blocking) or MQTT_CODE_ERROR_* (see enum MqttPacketResponseCodes)
Note: This function that will wait for MqttNet.read to complete, timeout or MQTT_CODE_CONTINUE if non-blocking. If QoS level = 1 then will wait for PUBLISH_ACK. If QoS level = 2 then will wait for PUBLISH_REC then send PUBLISH_REL and wait for PUBLISH_COMP.
function MqttClient_Publish_ex
WOLFMQTT_API int MqttClient_Publish_ex(
MqttClient * client,
MqttPublish * publish,
MqttPublishCb pubCb
)
Encodes and sends the MQTT Publish packet and waits for the Publish response (if QoS > 0). The callback function is used to copy the payload data, allowing the use of transmit buffers smaller than the total size of the payload.
Parameters:
- client Pointer to MqttClient structure
- publish Pointer to MqttPublish structure initialized with message data Note: MqttPublish and MqttMessage are same structure.
- pubCb Function pointer to callback routine
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_* (see enum MqttPacketResponseCodes)
Note: This function that will wait for MqttNet.read to complete, timeout or MQTT_CODE_CONTINUE if non-blocking. If QoS level = 1 then will wait for PUBLISH_ACK. If QoS level = 2 then will wait for PUBLISH_REC then send PUBLISH_REL and wait for PUBLISH_COMP.
function MqttClient_Publish_WriteOnly
WOLFMQTT_API int MqttClient_Publish_WriteOnly(
MqttClient * client,
MqttPublish * publish,
MqttPublishCb pubCb
)
Same as MqttClient_Publish_ex, however this API will only perform writes and requires another thread to handle the read ACK processing using MqttClient_WaitMessage_ex.
Parameters:
- client Pointer to MqttClient structure
- publish Pointer to MqttPublish structure initialized with message data Note: MqttPublish and MqttMessage are same structure.
- pubCb Function pointer to callback routine
See:
Return: MQTT_CODE_SUCCESS, MQTT_CODE_CONTINUE (for non-blocking) or MQTT_CODE_ERROR_* (see enum MqttPacketResponseCodes)
Note: This function that will wait for MqttNet.read to complete, timeout or MQTT_CODE_CONTINUE if non-blocking. If QoS level = 1 then will wait for PUBLISH_ACK. If QoS level = 2 then will wait for PUBLISH_REC then send PUBLISH_REL and wait for PUBLISH_COMP.
function MqttClient_Subscribe
WOLFMQTT_API int MqttClient_Subscribe(
MqttClient * client,
MqttSubscribe * subscribe
)
Encodes and sends the MQTT Subscribe packet and waits for the Subscribe Acknowledgment packet.
Parameters:
- client Pointer to MqttClient structure
- subscribe Pointer to MqttSubscribe structure initialized with subscription topic list and desired QoS.
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_* (see enum MqttPacketResponseCodes)
Note: This is a blocking function that will wait for MqttNet.read
function MqttClient_Unsubscribe
WOLFMQTT_API int MqttClient_Unsubscribe(
MqttClient * client,
MqttUnsubscribe * unsubscribe
)
Encodes and sends the MQTT Unsubscribe packet and waits for the Unsubscribe Acknowledgment packet.
Parameters:
- client Pointer to MqttClient structure
- unsubscribe Pointer to MqttUnsubscribe structure initialized with topic list.
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_* (see enum MqttPacketResponseCodes)
Note: This is a blocking function that will wait for MqttNet.read
function MqttClient_Ping
WOLFMQTT_API int MqttClient_Ping(
MqttClient * client
)
Encodes and sends the MQTT Ping Request packet and waits for the Ping Response packet.
Parameters:
- client Pointer to MqttClient structure
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_* (see enum MqttPacketResponseCodes)
Note: This is a blocking function that will wait for MqttNet.read
function MqttClient_Ping_ex
WOLFMQTT_API int MqttClient_Ping_ex(
MqttClient * client,
MqttPing * ping
)
Encodes and sends the MQTT Ping Request packet and waits for the Ping Response packet. This version takes a MqttPing structure and can be used with non-blocking applications.
Parameters:
- client Pointer to MqttClient structure
- ping Pointer to MqttPing structure
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_* (see enum MqttPacketResponseCodes)
Note: This is a blocking function that will wait for MqttNet.read
function MqttClient_Auth
WOLFMQTT_API int MqttClient_Auth(
MqttClient * client,
MqttAuth * auth
)
Encodes and sends the MQTT Authentication Request packet and waits for the Ping Response packet.
Parameters:
- client Pointer to MqttClient structure
- auth Pointer to MqttAuth structure
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_* (see enum MqttPacketResponseCodes)
Note: This is a blocking function that will wait for MqttNet.read
function MqttClient_PropsAdd
WOLFMQTT_API MqttProp * MqttClient_PropsAdd(
MqttProp ** head
)
Add a new property. Allocate a property structure and add it to the head of the list pointed to by head. To be used prior to calling packet command.
Parameters:
- head Pointer-pointer to a property structure
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_BAD_ARG
function MqttClient_PropsFree
WOLFMQTT_API int MqttClient_PropsFree(
MqttProp * head
)
Free property list. Deallocate the list pointed to by head. Must be used after the packet command that used MqttClient_Prop_Add.
Parameters:
- head Pointer-pointer to a property structure
Return: MQTT_CODE_SUCCESS or -1 on error (and sets errno)
function MqttClient_Disconnect
WOLFMQTT_API int MqttClient_Disconnect(
MqttClient * client
)
Encodes and sends the MQTT Disconnect packet (no response)
Parameters:
- client Pointer to MqttClient structure
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_* (see enum MqttPacketResponseCodes)
Note: This is a non-blocking function that will try and send using MqttNet.write
function MqttClient_Disconnect_ex
WOLFMQTT_API int MqttClient_Disconnect_ex(
MqttClient * client,
MqttDisconnect * disconnect
)
Encodes and sends the MQTT Disconnect packet (no response)
Parameters:
- client Pointer to MqttClient structure
- disconnect Pointer to MqttDisconnect structure. NULL is valid.
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_* (see enum MqttPacketResponseCodes)
Note: This is a non-blocking function that will try and send using MqttNet.write
function MqttClient_WaitMessage
WOLFMQTT_API int MqttClient_WaitMessage(
MqttClient * client,
int timeout_ms
)
Waits for packets to arrive. Incoming publish messages will arrive via callback provided in MqttClient_Init.
Parameters:
- client Pointer to MqttClient structure
- timeout_ms Milliseconds until read timeout
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_* (see enum MqttPacketResponseCodes)
Note: This is a blocking function that will wait for MqttNet.read
function MqttClient_WaitMessage_ex
WOLFMQTT_API int MqttClient_WaitMessage_ex(
MqttClient * client,
MqttObject * msg,
int timeout_ms
)
Waits for packets to arrive. Incoming publish messages will arrive via callback provided in MqttClient_Init.
Parameters:
- client Pointer to MqttClient structure
- msg Pointer to MqttObject structure
- timeout_ms Milliseconds until read timeout
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_* (see enum MqttPacketResponseCodes)
Note: This is a blocking function that will wait for MqttNet.read
function MqttClient_CancelMessage
WOLFMQTT_API int MqttClient_CancelMessage(
MqttClient * client,
MqttObject * msg
)
In a multi-threaded and non-blocking mode this allows you to cancel an MQTT object that was previously submitted.
Parameters:
- client Pointer to MqttClient structure
- msg Pointer to MqttObject structure
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_* (see enum MqttPacketResponseCodes)
Note: This is a blocking function that will wait for MqttNet.read
function MqttClient_IsMessageActive
WOLFMQTT_API int MqttClient_IsMessageActive(
MqttClient * client,
MqttObject * msg
)
In a non-blocking mode this checks if the message has a read or write pending (state is not MQTT_MSG_BEGIN).
Parameters:
- client Pointer to MqttClient structure
- msg Pointer to MqttObject structure
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_* (see enum MqttPacketResponseCodes)
Note: This function assumes caller owns the object
function MqttClient_NetConnect
WOLFMQTT_API int MqttClient_NetConnect(
MqttClient * client,
const char * host,
word16 port,
int timeout_ms,
int use_tls,
MqttTlsCb cb
)
Performs network connect with TLS (if use_tls is non-zero value) Will perform the MqttTlsCb callback if use_tls is non-zero value.
Parameters:
- client Pointer to MqttClient structure
- host Address of the broker server
- port Optional custom port. If zero will use defaults
- timeout_ms Milliseconds until read timeout
- use_tls If non-zero value will connect with and use TLS for encryption of data
- cb A function callback for configuration of the SSL context certificate checking
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_* (see enum MqttPacketResponseCodes)
function MqttClient_NetDisconnect
WOLFMQTT_API int MqttClient_NetDisconnect(
MqttClient * client
)
Performs a network disconnect.
Parameters:
- client Pointer to MqttClient structure
Return: MQTT_CODE_SUCCESS or MQTT_CODE_ERROR_* (see enum MqttPacketResponseCodes)
function MqttClient_GetProtocolVersion
WOLFMQTT_API int MqttClient_GetProtocolVersion(
MqttClient * client
)
Gets number version of connected protocol version.
Parameters:
- client Pointer to MqttClient structure
Return: 4 (v3.1.1) or 5 (v5)
function MqttClient_GetProtocolVersionString
WOLFMQTT_API const char * MqttClient_GetProtocolVersionString(
MqttClient * client
)
Gets string version of connected protocol version.
Parameters:
- client Pointer to MqttClient structure
Return: String v3.1.1 or v5
function MqttClient_ReturnCodeToString
WOLFMQTT_API const char * MqttClient_ReturnCodeToString(
int return_code
)
Performs lookup of the WOLFMQTT_API return values.
Parameters:
- return_code The return value from a WOLFMQTT_API function
Return: String representation of the return code
function MqttClient_RespList_Find
WOLFMQTT_LOCAL int MqttClient_RespList_Find(
MqttClient * client,
MqttPacketType packet_type,
word16 packet_id,
MqttPendResp ** retResp
)
function MqttClient_RespList_Remove
WOLFMQTT_LOCAL void MqttClient_RespList_Remove(
MqttClient * client,
MqttPendResp * rmResp
)
function MqttClient_RespList_Add
WOLFMQTT_LOCAL int MqttClient_RespList_Add(
MqttClient * client,
MqttPacketType packet_type,
word16 packet_id,
MqttPendResp * newResp,
void * packet_obj
)
function MqttPacket_HandleNetError
WOLFMQTT_LOCAL int MqttPacket_HandleNetError(
MqttClient * client,
int rc
)
Attributes Documentation
variable C
C {
#endif
#if !defined(WOLFMQTT_USER_SETTINGS) && \
!defined(_WIN32) && !defined(USE_WINDOWS_API)
#include <wolfmqtt/options.h>
#endif
#include "wolfmqttmqtt_types.h"
#include "wolfmqttmqtt_packet.h"
#include "wolfmqttmqtt_socket.h"
#ifdef WOLFMQTT_SN
#include "wolfmqttmqtt_sn_packet.h"
#endif
#ifndef WOLFMQTT_USE_CB_ON_DISCONNECT
#undef WOLFMQTT_USE_CB_ON_DISCONNECT
#endif
#if defined(WOLFMQTT_PROPERTY_CB) && !defined(WOLFMQTT_V5)
#error "WOLFMQTT_V5 must be defined to use WOLFMQTT_PROPERTY_CB"
#endif
struct _MqttClient;
Source code
/* mqtt_client.h
*
* Copyright (C) 2006-2024 wolfSSL Inc.
*
* This file is part of wolfMQTT.
*
* wolfMQTT is free software; you can redistribute it and/or modify
* it under the terms of the GNU General Public License as published by
* the Free Software Foundation; either version 2 of the License, or
* (at your option) any later version.
*
* wolfMQTT is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
* GNU General Public License for more details.
*
* You should have received a copy of the GNU General Public License
* along with this program; if not, write to the Free Software
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1335, USA
*/
/* Implementation by: David Garske
* Based on specification for MQTT v3.1.1
* See http://mqtt.org/documentation for additional MQTT documentation.
*/
#ifndef WOLFMQTT_CLIENT_H
#define WOLFMQTT_CLIENT_H
#ifdef __cplusplus
extern "C" {
#endif
/* Windows uses the vs_settings.h file included vis mqtt_types.h */
#if !defined(WOLFMQTT_USER_SETTINGS) && \
!defined(_WIN32) && !defined(USE_WINDOWS_API)
/* If options.h is missing use the "./configure" script. Otherwise, copy
* the template "wolfmqtt/options.h.in" into "wolfmqtt/options.h" */
#include <wolfmqtt/options.h>
#endif
#include "wolfmqttmqtt_types.h"
#include "wolfmqttmqtt_packet.h"
#include "wolfmqttmqtt_socket.h"
#ifdef WOLFMQTT_SN
#include "wolfmqttmqtt_sn_packet.h"
#endif
/* This macro allows the disconnect callback to be triggered when
* MqttClient_Disconnect_ex is called. Normally the CB is only used to handle
* errors from MqttPacket_HandleNetError.
*/
#ifndef WOLFMQTT_USE_CB_ON_DISCONNECT
#undef WOLFMQTT_USE_CB_ON_DISCONNECT
/* #define WOLFMQTT_USE_CB_ON_DISCONNECT */
#endif
#if defined(WOLFMQTT_PROPERTY_CB) && !defined(WOLFMQTT_V5)
#error "WOLFMQTT_V5 must be defined to use WOLFMQTT_PROPERTY_CB"
#endif
struct _MqttClient;
typedef int (*MqttMsgCb)(struct _MqttClient *client, MqttMessage *message,
byte msg_new, byte msg_done);
typedef int (*MqttPublishCb)(MqttPublish* publish);
/* Client flags */
enum MqttClientFlags {
MQTT_CLIENT_FLAG_IS_CONNECTED = 0x01 << 0,
MQTT_CLIENT_FLAG_IS_TLS = 0x01 << 1,
MQTT_CLIENT_FLAG_IS_DTLS = 0x01 << 2
};
WOLFMQTT_API word32 MqttClient_Flags(struct _MqttClient *client, word32 mask, word32 flags);
typedef enum _MqttPkStat {
MQTT_PK_BEGIN = 0,
MQTT_PK_READ_HEAD,
MQTT_PK_READ
} MqttPkStat;
typedef struct _MqttPkRead {
MqttPkStat stat;
int header_len;
int remain_len;
int buf_len;
} MqttPkRead;
typedef struct _MqttSk {
int pos; /* position inside current buffer */
int len; /* length of current segment being sent */
int total; /* number bytes sent or received */
/* status bit for if client read or write is active */
byte isActive:1;
} MqttSk;
#ifdef WOLFMQTT_DISCONNECT_CB
typedef int (*MqttDisconnectCb)(struct _MqttClient* client, int error_code, void* ctx);
#endif
#ifdef WOLFMQTT_PROPERTY_CB
typedef int (*MqttPropertyCb)(struct _MqttClient* client, MqttProp* head, void* ctx);
#endif
#ifdef WOLFMQTT_SN
typedef int (*SN_ClientRegisterCb)(word16 topicId, const char* topicName, void *reg_ctx);
#endif
/* Client structure */
typedef struct _MqttClient {
word32 flags; /* MqttClientFlags */
int cmd_timeout_ms;
byte *tx_buf;
int tx_buf_len;
byte *rx_buf;
int rx_buf_len;
MqttNet *net; /* Pointer to network callbacks and context */
#ifdef ENABLE_MQTT_TLS
MqttTls tls; /* WolfSSL context for TLS */
#endif
MqttPkRead packet; /* publish packet state - protected by read lock */
MqttPublishResp packetAck; /* publish ACK - protected by write lock */
MqttSk read; /* read socket state - protected by read lock */
MqttSk write; /* write socket state - protected by write lock */
MqttMsgCb msg_cb;
MqttObject msg; /* generic incoming message used by MqttClient_WaitType */
#ifdef WOLFMQTT_SN
SN_Object msgSN;
SN_ClientRegisterCb reg_cb;
void *reg_ctx;
#endif
void* ctx; /* user supplied context for publish callbacks */
#ifdef WOLFMQTT_V5
word32 packet_sz_max; /* Server property */
byte max_qos; /* Server property */
byte retain_avail; /* Server property */
byte enable_eauth; /* Enhanced authentication */
byte protocol_level;
#endif
#ifdef WOLFMQTT_DISCONNECT_CB
MqttDisconnectCb disconnect_cb;
void *disconnect_ctx;
#endif
#ifdef WOLFMQTT_PROPERTY_CB
MqttPropertyCb property_cb;
void *property_ctx;
#endif
#ifdef WOLFMQTT_MULTITHREAD
wm_Sem lockSend;
wm_Sem lockRecv;
wm_Sem lockClient;
#ifdef ENABLE_MQTT_CURL
wm_Sem lockCURL;
#endif
struct _MqttPendResp* firstPendResp; /* protected with client lock */
struct _MqttPendResp* lastPendResp; /* protected with client lock */
#endif
#if defined(WOLFMQTT_NONBLOCK) && defined(WOLFMQTT_DEBUG_CLIENT)
int lastRc;
#endif
} MqttClient;
#ifdef WOLFMQTT_SN
#include "wolfmqttmqtt_sn_client.h"
#endif
/* Application Interfaces */
WOLFMQTT_API int MqttClient_Init(
MqttClient *client,
MqttNet *net,
MqttMsgCb msg_cb,
byte *tx_buf, int tx_buf_len,
byte *rx_buf, int rx_buf_len,
int cmd_timeout_ms);
WOLFMQTT_API void MqttClient_DeInit(MqttClient *client);
#ifdef WOLFMQTT_DISCONNECT_CB
WOLFMQTT_API int MqttClient_SetDisconnectCallback(
MqttClient *client,
MqttDisconnectCb discb,
void* ctx);
#endif
#ifdef WOLFMQTT_PROPERTY_CB
WOLFMQTT_API int MqttClient_SetPropertyCallback(
MqttClient *client,
MqttPropertyCb propCb,
void* ctx);
#endif
WOLFMQTT_API int MqttClient_Connect(
MqttClient *client,
MqttConnect *connect);
WOLFMQTT_API int MqttClient_Publish(
MqttClient *client,
MqttPublish *publish);
WOLFMQTT_API int MqttClient_Publish_ex(
MqttClient *client,
MqttPublish *publish,
MqttPublishCb pubCb);
#ifdef WOLFMQTT_MULTITHREAD
WOLFMQTT_API int MqttClient_Publish_WriteOnly(
MqttClient *client,
MqttPublish *publish,
MqttPublishCb pubCb);
#endif
WOLFMQTT_API int MqttClient_Subscribe(
MqttClient *client,
MqttSubscribe *subscribe);
WOLFMQTT_API int MqttClient_Unsubscribe(
MqttClient *client,
MqttUnsubscribe *unsubscribe);
WOLFMQTT_API int MqttClient_Ping(
MqttClient *client);
WOLFMQTT_API int MqttClient_Ping_ex(MqttClient *client, MqttPing* ping);
#ifdef WOLFMQTT_V5
WOLFMQTT_API int MqttClient_Auth(
MqttClient *client,
MqttAuth *auth);
WOLFMQTT_API MqttProp* MqttClient_PropsAdd(
MqttProp **head);
WOLFMQTT_API int MqttClient_PropsFree(
MqttProp *head);
#endif
WOLFMQTT_API int MqttClient_Disconnect(
MqttClient *client);
WOLFMQTT_API int MqttClient_Disconnect_ex(
MqttClient *client,
MqttDisconnect *disconnect);
WOLFMQTT_API int MqttClient_WaitMessage(
MqttClient *client,
int timeout_ms);
WOLFMQTT_API int MqttClient_WaitMessage_ex(
MqttClient *client,
MqttObject *msg,
int timeout_ms);
#if defined(WOLFMQTT_MULTITHREAD) || defined(WOLFMQTT_NONBLOCK)
WOLFMQTT_API int MqttClient_CancelMessage(
MqttClient *client,
MqttObject *msg);
#endif
#ifdef WOLFMQTT_NONBLOCK
WOLFMQTT_API int MqttClient_IsMessageActive(
MqttClient *client,
MqttObject *msg);
#endif /* WOLFMQTT_NONBLOCK */
WOLFMQTT_API int MqttClient_NetConnect(
MqttClient *client,
const char *host,
word16 port,
int timeout_ms,
int use_tls,
MqttTlsCb cb);
WOLFMQTT_API int MqttClient_NetDisconnect(
MqttClient *client);
WOLFMQTT_API int MqttClient_GetProtocolVersion(MqttClient *client);
WOLFMQTT_API const char* MqttClient_GetProtocolVersionString(MqttClient *client);
#ifndef WOLFMQTT_NO_ERROR_STRINGS
WOLFMQTT_API const char* MqttClient_ReturnCodeToString(
int return_code);
#else
#define MqttClient_ReturnCodeToString(x) \
"not compiled in"
#endif /* WOLFMQTT_NO_ERROR_STRINGS */
/* Internal functions */
#ifdef WOLFMQTT_MULTITHREAD
WOLFMQTT_LOCAL int MqttClient_RespList_Find(MqttClient *client,
MqttPacketType packet_type, word16 packet_id, MqttPendResp **retResp);
WOLFMQTT_LOCAL void MqttClient_RespList_Remove(MqttClient *client,
MqttPendResp *rmResp);
WOLFMQTT_LOCAL int MqttClient_RespList_Add(MqttClient *client,
MqttPacketType packet_type, word16 packet_id, MqttPendResp *newResp,
void *packet_obj);
#endif
WOLFMQTT_LOCAL int MqttPacket_HandleNetError(MqttClient *client, int rc);
#ifdef __cplusplus
} /* extern "C" */
#endif
#endif /* WOLFMQTT_CLIENT_H */
Updated on 2024-12-20 at 01:24:04 +0000