blob: 77c87ed2b24865cb5c018b3b66f3e07f0344e4da [file] [log] [blame]
.TH "MQTTClient.h" 3 "Thu Sep 13 2018" "Paho MQTT C Client Library" \" -*- nroff -*-
.ad l
.nh
.SH NAME
MQTTClient.h
.SH SYNOPSIS
.br
.PP
\fC#include 'MQTTProperties\&.h'\fP
.br
\fC#include 'MQTTReasonCodes\&.h'\fP
.br
\fC#include 'MQTTSubscribeOpts\&.h'\fP
.br
\fC#include 'MQTTClientPersistence\&.h'\fP
.br
.SS "Data Structures"
.in +1c
.ti -1c
.RI "struct \fBMQTTClient_init_options\fP"
.br
.ti -1c
.RI "struct \fBMQTTClient_message\fP"
.br
.ti -1c
.RI "struct \fBMQTTClient_createOptions\fP"
.br
.ti -1c
.RI "struct \fBMQTTClient_willOptions\fP"
.br
.ti -1c
.RI "struct \fBMQTTClient_SSLOptions\fP"
.br
.ti -1c
.RI "struct \fBMQTTClient_connectOptions\fP"
.br
.ti -1c
.RI "struct \fBMQTTClient_nameValue\fP"
.br
.ti -1c
.RI "struct \fBMQTTResponse\fP"
.br
.in -1c
.SS "Macros"
.in +1c
.ti -1c
.RI "#define \fBMQTTCLIENT_SUCCESS\fP 0"
.br
.ti -1c
.RI "#define \fBMQTTCLIENT_FAILURE\fP \-1"
.br
.ti -1c
.RI "#define \fBMQTTCLIENT_DISCONNECTED\fP \-3"
.br
.ti -1c
.RI "#define \fBMQTTCLIENT_MAX_MESSAGES_INFLIGHT\fP \-4"
.br
.ti -1c
.RI "#define \fBMQTTCLIENT_BAD_UTF8_STRING\fP \-5"
.br
.ti -1c
.RI "#define \fBMQTTCLIENT_NULL_PARAMETER\fP \-6"
.br
.ti -1c
.RI "#define \fBMQTTCLIENT_TOPICNAME_TRUNCATED\fP \-7"
.br
.ti -1c
.RI "#define \fBMQTTCLIENT_BAD_STRUCTURE\fP \-8"
.br
.ti -1c
.RI "#define \fBMQTTCLIENT_BAD_QOS\fP \-9"
.br
.ti -1c
.RI "#define \fBMQTTCLIENT_SSL_NOT_SUPPORTED\fP \-10"
.br
.ti -1c
.RI "#define \fBMQTTCLIENT_BAD_MQTT_VERSION\fP \-11"
.br
.ti -1c
.RI "#define \fBMQTTCLIENT_BAD_PROTOCOL\fP \-14"
.br
.ti -1c
.RI "#define \fBMQTTCLIENT_BAD_MQTT_OPTION\fP \-15"
.br
.ti -1c
.RI "#define \fBMQTTCLIENT_WRONG_MQTT_VERSION\fP \-16"
.br
.ti -1c
.RI "#define \fBMQTTVERSION_DEFAULT\fP 0"
.br
.ti -1c
.RI "#define \fBMQTTVERSION_3_1\fP 3"
.br
.ti -1c
.RI "#define \fBMQTTVERSION_3_1_1\fP 4"
.br
.ti -1c
.RI "#define \fBMQTTVERSION_5\fP 5"
.br
.ti -1c
.RI "#define \fBMQTT_BAD_SUBSCRIBE\fP 0x80"
.br
.ti -1c
.RI "#define \fBMQTTClient_init_options_initializer\fP { {'M', 'Q', 'T', 'G'}, 0, 0 }"
.br
.ti -1c
.RI "#define \fBMQTTClient_message_initializer\fP { {'M', 'Q', 'T', 'M'}, 1, 0, NULL, 0, 0, 0, 0, \fBMQTTProperties_initializer\fP }"
.br
.ti -1c
.RI "#define \fBMQTTClient_createOptions_initializer\fP { {'M', 'Q', 'C', 'O'}, \fBMQTTVERSION_DEFAULT\fP }"
.br
.ti -1c
.RI "#define \fBMQTTClient_willOptions_initializer\fP { {'M', 'Q', 'T', 'W'}, 1, NULL, NULL, 0, 0, {0, NULL} }"
.br
.ti -1c
.RI "#define \fBMQTT_SSL_VERSION_DEFAULT\fP 0"
.br
.ti -1c
.RI "#define \fBMQTT_SSL_VERSION_TLS_1_0\fP 1"
.br
.ti -1c
.RI "#define \fBMQTT_SSL_VERSION_TLS_1_1\fP 2"
.br
.ti -1c
.RI "#define \fBMQTT_SSL_VERSION_TLS_1_2\fP 3"
.br
.ti -1c
.RI "#define \fBMQTTClient_SSLOptions_initializer\fP { {'M', 'Q', 'T', 'S'}, 3, NULL, NULL, NULL, NULL, NULL, 1, \fBMQTT_SSL_VERSION_DEFAULT\fP, 0, NULL, NULL, NULL }"
.br
.ti -1c
.RI "#define \fBMQTTClient_connectOptions_initializer\fP { {'M', 'Q', 'T', 'C'}, 6, 60, 1, 1, NULL, NULL, NULL, 30, 0, NULL, 0, NULL, \fBMQTTVERSION_DEFAULT\fP, {NULL, 0, 0}, {0, NULL}, \-1, 0}"
.br
.ti -1c
.RI "#define \fBMQTTClient_connectOptions_initializer5\fP { {'M', 'Q', 'T', 'C'}, 6, 60, 0, 1, NULL, NULL, NULL, 30, 0, NULL, 0, NULL, \fBMQTTVERSION_5\fP, {NULL, 0, 0}, {0, NULL}, \-1, 1}"
.br
.ti -1c
.RI "#define \fBMQTTResponse_initializer\fP {1, \fBMQTTREASONCODE_SUCCESS\fP, 0, NULL, NULL}"
.br
.in -1c
.SS "Typedefs"
.in +1c
.ti -1c
.RI "typedef void * \fBMQTTClient\fP"
.br
.ti -1c
.RI "typedef int \fBMQTTClient_deliveryToken\fP"
.br
.ti -1c
.RI "typedef int \fBMQTTClient_token\fP"
.br
.ti -1c
.RI "typedef int \fBMQTTClient_messageArrived\fP(void *context, char *topicName, int topicLen, \fBMQTTClient_message\fP *message)"
.br
.ti -1c
.RI "typedef void \fBMQTTClient_deliveryComplete\fP(void *context, \fBMQTTClient_deliveryToken\fP dt)"
.br
.ti -1c
.RI "typedef void \fBMQTTClient_connectionLost\fP(void *context, char *cause)"
.br
.ti -1c
.RI "typedef void \fBMQTTClient_disconnected\fP(void *context, \fBMQTTProperties\fP *properties, enum \fBMQTTReasonCodes\fP reasonCode)"
.br
.ti -1c
.RI "typedef void \fBMQTTClient_published\fP(void *context, int dt, int packet_type, \fBMQTTProperties\fP *properties, enum \fBMQTTReasonCodes\fP reasonCode)"
.br
.ti -1c
.RI "typedef struct \fBMQTTResponse\fP \fBMQTTResponse\fP"
.br
.ti -1c
.RI "typedef void \fBMQTTClient_traceCallback\fP(enum \fBMQTTCLIENT_TRACE_LEVELS\fP level, char *message)"
.br
.in -1c
.SS "Enumerations"
.in +1c
.ti -1c
.RI "enum \fBMQTTCLIENT_TRACE_LEVELS\fP { \fBMQTTCLIENT_TRACE_MAXIMUM\fP = 1, \fBMQTTCLIENT_TRACE_MEDIUM\fP, \fBMQTTCLIENT_TRACE_MINIMUM\fP, \fBMQTTCLIENT_TRACE_PROTOCOL\fP, \fBMQTTCLIENT_TRACE_ERROR\fP, \fBMQTTCLIENT_TRACE_SEVERE\fP, \fBMQTTCLIENT_TRACE_FATAL\fP }"
.br
.in -1c
.SS "Functions"
.in +1c
.ti -1c
.RI "void \fBMQTTClient_global_init\fP (\fBMQTTClient_init_options\fP *inits)"
.br
.ti -1c
.RI "int \fBMQTTClient_setCallbacks\fP (\fBMQTTClient\fP handle, void *context, \fBMQTTClient_connectionLost\fP *cl, \fBMQTTClient_messageArrived\fP *ma, \fBMQTTClient_deliveryComplete\fP *dc)"
.br
.ti -1c
.RI "int \fBMQTTClient_setDisconnected\fP (\fBMQTTClient\fP handle, void *context, \fBMQTTClient_disconnected\fP *co)"
.br
.ti -1c
.RI "int \fBMQTTClient_setPublished\fP (\fBMQTTClient\fP handle, void *context, \fBMQTTClient_published\fP *co)"
.br
.ti -1c
.RI "int \fBMQTTClient_create\fP (\fBMQTTClient\fP *handle, const char *serverURI, const char *clientId, int persistence_type, void *persistence_context)"
.br
.ti -1c
.RI "int \fBMQTTClient_createWithOptions\fP (\fBMQTTClient\fP *handle, const char *serverURI, const char *clientId, int persistence_type, void *persistence_context, \fBMQTTClient_createOptions\fP *options)"
.br
.ti -1c
.RI "\fBMQTTClient_nameValue\fP * \fBMQTTClient_getVersionInfo\fP (void)"
.br
.ti -1c
.RI "int \fBMQTTClient_connect\fP (\fBMQTTClient\fP handle, \fBMQTTClient_connectOptions\fP *options)"
.br
.ti -1c
.RI "void \fBMQTTResponse_free\fP (\fBMQTTResponse\fP response)"
.br
.ti -1c
.RI "\fBMQTTResponse\fP \fBMQTTClient_connect5\fP (\fBMQTTClient\fP handle, \fBMQTTClient_connectOptions\fP *options, \fBMQTTProperties\fP *connectProperties, \fBMQTTProperties\fP *willProperties)"
.br
.ti -1c
.RI "int \fBMQTTClient_disconnect\fP (\fBMQTTClient\fP handle, int timeout)"
.br
.ti -1c
.RI "int \fBMQTTClient_disconnect5\fP (\fBMQTTClient\fP handle, int timeout, enum \fBMQTTReasonCodes\fP reason, \fBMQTTProperties\fP *props)"
.br
.ti -1c
.RI "int \fBMQTTClient_isConnected\fP (\fBMQTTClient\fP handle)"
.br
.ti -1c
.RI "int \fBMQTTClient_subscribe\fP (\fBMQTTClient\fP handle, const char *topic, int qos)"
.br
.ti -1c
.RI "\fBMQTTResponse\fP \fBMQTTClient_subscribe5\fP (\fBMQTTClient\fP handle, const char *topic, int qos, \fBMQTTSubscribe_options\fP *opts, \fBMQTTProperties\fP *props)"
.br
.ti -1c
.RI "int \fBMQTTClient_subscribeMany\fP (\fBMQTTClient\fP handle, int count, char *const *topic, int *qos)"
.br
.ti -1c
.RI "\fBMQTTResponse\fP \fBMQTTClient_subscribeMany5\fP (\fBMQTTClient\fP handle, int count, char *const *topic, int *qos, \fBMQTTSubscribe_options\fP *opts, \fBMQTTProperties\fP *props)"
.br
.ti -1c
.RI "int \fBMQTTClient_unsubscribe\fP (\fBMQTTClient\fP handle, const char *topic)"
.br
.ti -1c
.RI "\fBMQTTResponse\fP \fBMQTTClient_unsubscribe5\fP (\fBMQTTClient\fP handle, const char *topic, \fBMQTTProperties\fP *props)"
.br
.ti -1c
.RI "int \fBMQTTClient_unsubscribeMany\fP (\fBMQTTClient\fP handle, int count, char *const *topic)"
.br
.ti -1c
.RI "\fBMQTTResponse\fP \fBMQTTClient_unsubscribeMany5\fP (\fBMQTTClient\fP handle, int count, char *const *topic, \fBMQTTProperties\fP *props)"
.br
.ti -1c
.RI "int \fBMQTTClient_publish\fP (\fBMQTTClient\fP handle, const char *topicName, int payloadlen, const void *payload, int qos, int retained, \fBMQTTClient_deliveryToken\fP *dt)"
.br
.ti -1c
.RI "\fBMQTTResponse\fP \fBMQTTClient_publish5\fP (\fBMQTTClient\fP handle, const char *topicName, int payloadlen, const void *payload, int qos, int retained, \fBMQTTProperties\fP *properties, \fBMQTTClient_deliveryToken\fP *dt)"
.br
.ti -1c
.RI "int \fBMQTTClient_publishMessage\fP (\fBMQTTClient\fP handle, const char *topicName, \fBMQTTClient_message\fP *msg, \fBMQTTClient_deliveryToken\fP *dt)"
.br
.ti -1c
.RI "\fBMQTTResponse\fP \fBMQTTClient_publishMessage5\fP (\fBMQTTClient\fP handle, const char *topicName, \fBMQTTClient_message\fP *msg, \fBMQTTClient_deliveryToken\fP *dt)"
.br
.ti -1c
.RI "int \fBMQTTClient_waitForCompletion\fP (\fBMQTTClient\fP handle, \fBMQTTClient_deliveryToken\fP dt, unsigned long timeout)"
.br
.ti -1c
.RI "int \fBMQTTClient_getPendingDeliveryTokens\fP (\fBMQTTClient\fP handle, \fBMQTTClient_deliveryToken\fP **tokens)"
.br
.ti -1c
.RI "void \fBMQTTClient_yield\fP (void)"
.br
.ti -1c
.RI "int \fBMQTTClient_receive\fP (\fBMQTTClient\fP handle, char **topicName, int *topicLen, \fBMQTTClient_message\fP **message, unsigned long timeout)"
.br
.ti -1c
.RI "void \fBMQTTClient_freeMessage\fP (\fBMQTTClient_message\fP **msg)"
.br
.ti -1c
.RI "void \fBMQTTClient_free\fP (void *ptr)"
.br
.ti -1c
.RI "void \fBMQTTClient_destroy\fP (\fBMQTTClient\fP *handle)"
.br
.ti -1c
.RI "void \fBMQTTClient_setTraceLevel\fP (enum \fBMQTTCLIENT_TRACE_LEVELS\fP level)"
.br
.ti -1c
.RI "void \fBMQTTClient_setTraceCallback\fP (\fBMQTTClient_traceCallback\fP *callback)"
.br
.ti -1c
.RI "const char * \fBMQTTClient_strerror\fP (int code)"
.br
.in -1c
.SH "Macro Definition Documentation"
.PP
.SS "#define MQTTCLIENT_SUCCESS 0"
Return code: No error\&. Indicates successful completion of an MQTT client operation\&.
.SS "#define MQTTCLIENT_FAILURE \-1"
Return code: A generic error code indicating the failure of an MQTT client operation\&.
.SS "#define MQTTCLIENT_DISCONNECTED \-3"
Return code: The client is disconnected\&.
.SS "#define MQTTCLIENT_MAX_MESSAGES_INFLIGHT \-4"
Return code: The maximum number of messages allowed to be simultaneously in-flight has been reached\&.
.SS "#define MQTTCLIENT_BAD_UTF8_STRING \-5"
Return code: An invalid UTF-8 string has been detected\&.
.SS "#define MQTTCLIENT_NULL_PARAMETER \-6"
Return code: A NULL parameter has been supplied when this is invalid\&.
.SS "#define MQTTCLIENT_TOPICNAME_TRUNCATED \-7"
Return code: The topic has been truncated (the topic string includes embedded NULL characters)\&. String functions will not access the full topic\&. Use the topic length value to access the full topic\&.
.SS "#define MQTTCLIENT_BAD_STRUCTURE \-8"
Return code: A structure parameter does not have the correct eyecatcher and version number\&.
.SS "#define MQTTCLIENT_BAD_QOS \-9"
Return code: A QoS value that falls outside of the acceptable range (0,1,2)
.SS "#define MQTTCLIENT_SSL_NOT_SUPPORTED \-10"
Return code: Attempting SSL connection using non-SSL version of library
.SS "#define MQTTCLIENT_BAD_MQTT_VERSION \-11"
Return code: unrecognized MQTT version
.SS "#define MQTTCLIENT_BAD_PROTOCOL \-14"
Return code: protocol prefix in serverURI should be tcp:// or ssl://
.SS "#define MQTTCLIENT_BAD_MQTT_OPTION \-15"
Return code: option not applicable to the requested version of MQTT
.SS "#define MQTTCLIENT_WRONG_MQTT_VERSION \-16"
Return code: call not applicable to the requested version of MQTT
.SS "#define MQTTVERSION_DEFAULT 0"
Default MQTT version to connect with\&. Use 3\&.1\&.1 then fall back to 3\&.1
.SS "#define MQTTVERSION_3_1 3"
MQTT version to connect with: 3\&.1
.SS "#define MQTTVERSION_3_1_1 4"
MQTT version to connect with: 3\&.1\&.1
.SS "#define MQTTVERSION_5 5"
MQTT version to connect with: 5
.SS "#define MQTT_BAD_SUBSCRIBE 0x80"
Bad return code from subscribe, as defined in the 3\&.1\&.1 specification
.SS "#define MQTTClient_init_options_initializer { {'M', 'Q', 'T', 'G'}, 0, 0 }"
.SS "#define MQTTClient_message_initializer { {'M', 'Q', 'T', 'M'}, 1, 0, NULL, 0, 0, 0, 0, \fBMQTTProperties_initializer\fP }"
.SS "#define MQTTClient_createOptions_initializer { {'M', 'Q', 'C', 'O'}, \fBMQTTVERSION_DEFAULT\fP }"
.SS "#define MQTTClient_willOptions_initializer { {'M', 'Q', 'T', 'W'}, 1, NULL, NULL, 0, 0, {0, NULL} }"
.SS "#define MQTT_SSL_VERSION_DEFAULT 0"
.SS "#define MQTT_SSL_VERSION_TLS_1_0 1"
.SS "#define MQTT_SSL_VERSION_TLS_1_1 2"
.SS "#define MQTT_SSL_VERSION_TLS_1_2 3"
.SS "#define MQTTClient_SSLOptions_initializer { {'M', 'Q', 'T', 'S'}, 3, NULL, NULL, NULL, NULL, NULL, 1, \fBMQTT_SSL_VERSION_DEFAULT\fP, 0, NULL, NULL, NULL }"
.SS "#define MQTTClient_connectOptions_initializer { {'M', 'Q', 'T', 'C'}, 6, 60, 1, 1, NULL, NULL, NULL, 30, 0, NULL, 0, NULL, \fBMQTTVERSION_DEFAULT\fP, {NULL, 0, 0}, {0, NULL}, \-1, 0}"
.SS "#define MQTTClient_connectOptions_initializer5 { {'M', 'Q', 'T', 'C'}, 6, 60, 0, 1, NULL, NULL, NULL, 30, 0, NULL, 0, NULL, \fBMQTTVERSION_5\fP, {NULL, 0, 0}, {0, NULL}, \-1, 1}"
.SS "#define MQTTResponse_initializer {1, \fBMQTTREASONCODE_SUCCESS\fP, 0, NULL, NULL}"
.SH "Typedef Documentation"
.PP
.SS "typedef void* \fBMQTTClient\fP"
A handle representing an MQTT client\&. A valid client handle is available following a successful call to \fBMQTTClient_create()\fP\&.
.SS "typedef int \fBMQTTClient_deliveryToken\fP"
A value representing an MQTT message\&. A delivery token is returned to the client application when a message is published\&. The token can then be used to check that the message was successfully delivered to its destination (see \fBMQTTClient_publish()\fP, \fBMQTTClient_publishMessage()\fP, \fBMQTTClient_deliveryComplete()\fP, \fBMQTTClient_waitForCompletion()\fP and \fBMQTTClient_getPendingDeliveryTokens()\fP)\&.
.SS "typedef int \fBMQTTClient_token\fP"
.SS "typedef int MQTTClient_messageArrived(void *context, char *topicName, int topicLen, \fBMQTTClient_message\fP *message)"
This is a callback function\&. The client application must provide an implementation of this function to enable asynchronous receipt of messages\&. The function is registered with the client library by passing it as an argument to \fBMQTTClient_setCallbacks()\fP\&. It is called by the client library when a new message that matches a client subscription has been received from the server\&. This function is executed on a separate thread to the one on which the client application is running\&.
.PP
\fBParameters:\fP
.RS 4
\fIcontext\fP A pointer to the \fIcontext\fP value originally passed to \fBMQTTClient_setCallbacks()\fP, which contains any application-specific context\&.
.br
\fItopicName\fP The topic associated with the received message\&.
.br
\fItopicLen\fP The length of the topic if there are one more NULL characters embedded in \fItopicName\fP, otherwise \fItopicLen\fP is 0\&. If \fItopicLen\fP is 0, the value returned by \fIstrlen(topicName)\fP can be trusted\&. If \fItopicLen\fP is greater than 0, the full topic name can be retrieved by accessing \fItopicName\fP as a byte array of length \fItopicLen\fP\&.
.br
\fImessage\fP The \fBMQTTClient_message\fP structure for the received message\&. This structure contains the message payload and attributes\&.
.RE
.PP
\fBReturns:\fP
.RS 4
This function must return a boolean value indicating whether or not the message has been safely received by the client application\&. Returning true indicates that the message has been successfully handled\&. Returning false indicates that there was a problem\&. In this case, the client library will reinvoke \fBMQTTClient_messageArrived()\fP to attempt to deliver the message to the application again\&.
.RE
.PP
.SS "typedef void MQTTClient_deliveryComplete(void *context, \fBMQTTClient_deliveryToken\fP dt)"
This is a callback function\&. The client application must provide an implementation of this function to enable asynchronous notification of delivery of messages\&. The function is registered with the client library by passing it as an argument to \fBMQTTClient_setCallbacks()\fP\&. It is called by the client library after the client application has published a message to the server\&. It indicates that the necessary handshaking and acknowledgements for the requested quality of service (see \fBMQTTClient_message\&.qos\fP) have been completed\&. This function is executed on a separate thread to the one on which the client application is running\&. \fBNote:\fP\fBMQTTClient_deliveryComplete()\fP is not called when messages are published at QoS0\&.
.PP
\fBParameters:\fP
.RS 4
\fIcontext\fP A pointer to the \fIcontext\fP value originally passed to \fBMQTTClient_setCallbacks()\fP, which contains any application-specific context\&.
.br
\fIdt\fP The \fBMQTTClient_deliveryToken\fP associated with the published message\&. Applications can check that all messages have been correctly published by matching the delivery tokens returned from calls to \fBMQTTClient_publish()\fP and \fBMQTTClient_publishMessage()\fP with the tokens passed to this callback\&.
.RE
.PP
.SS "typedef void MQTTClient_connectionLost(void *context, char *cause)"
This is a callback function\&. The client application must provide an implementation of this function to enable asynchronous notification of the loss of connection to the server\&. The function is registered with the client library by passing it as an argument to \fBMQTTClient_setCallbacks()\fP\&. It is called by the client library if the client loses its connection to the server\&. The client application must take appropriate action, such as trying to reconnect or reporting the problem\&. This function is executed on a separate thread to the one on which the client application is running\&.
.PP
\fBParameters:\fP
.RS 4
\fIcontext\fP A pointer to the \fIcontext\fP value originally passed to \fBMQTTClient_setCallbacks()\fP, which contains any application-specific context\&.
.br
\fIcause\fP The reason for the disconnection\&. Currently, \fIcause\fP is always set to NULL\&.
.RE
.PP
.SS "typedef void MQTTClient_disconnected(void *context, \fBMQTTProperties\fP *properties, enum \fBMQTTReasonCodes\fP reasonCode)"
This is a callback function, which will be called when the a disconnect packet is received from the server\&. This applies to MQTT V5 and above only\&.
.PP
\fBParameters:\fP
.RS 4
\fIcontext\fP A pointer to the \fIcontext\fP value originally passed to ::MQTTAsync_setDisconnected(), which contains any application-specific context\&.
.br
\fIproperties\fP The MQTT V5 properties received with the disconnect, if any\&.
.br
\fIreasonCode\fP The MQTT V5 reason code received with the disconnect\&. Currently, \fIcause\fP is always set to NULL\&.
.RE
.PP
.SS "typedef void MQTTClient_published(void *context, int dt, int packet_type, \fBMQTTProperties\fP *properties, enum \fBMQTTReasonCodes\fP reasonCode)"
This is a callback function, the MQTT V5 version of \fBMQTTClient_deliveryComplete()\fP\&. The client application must provide an implementation of this function to enable asynchronous notification of the completed delivery of messages\&. It is called by the client library after the client application has published a message to the server\&. It indicates that the necessary handshaking and acknowledgements for the requested quality of service (see \fBMQTTClient_message\&.qos\fP) have been completed\&. This function is executed on a separate thread to the one on which the client application is running\&. \fBNote:\fP It is not called when messages are published at QoS0\&.
.PP
\fBParameters:\fP
.RS 4
\fIcontext\fP A pointer to the \fIcontext\fP value originally passed to \fBMQTTClient_setCallbacks()\fP, which contains any application-specific context\&.
.br
\fIdt\fP The \fBMQTTClient_deliveryToken\fP associated with the published message\&. Applications can check that all messages have been correctly published by matching the delivery tokens returned from calls to \fBMQTTClient_publish()\fP and \fBMQTTClient_publishMessage()\fP with the tokens passed to this callback\&.
.br
\fIpacket_type\fP the last received packet type for this completion\&. For QoS 1 always PUBACK\&. For QoS 2 could be PUBREC or PUBCOMP\&.
.br
\fIproperties\fP the MQTT V5 properties returned with the last packet from the server
.br
\fIreasonCode\fP the reason code returned from the server
.RE
.PP
.SS "typedef struct \fBMQTTResponse\fP \fBMQTTResponse\fP"
.SS "typedef void MQTTClient_traceCallback(enum \fBMQTTCLIENT_TRACE_LEVELS\fP level, char *message)"
This is a callback function prototype which must be implemented if you want to receive trace information\&.
.PP
\fBParameters:\fP
.RS 4
\fIlevel\fP the trace level of the message returned
.br
\fImeesage\fP the trace message\&. This is a pointer to a static buffer which will be overwritten on each call\&. You must copy the data if you want to keep it for later\&.
.RE
.PP
.SH "Enumeration Type Documentation"
.PP
.SS "enum \fBMQTTCLIENT_TRACE_LEVELS\fP"
.PP
\fBEnumerator\fP
.in +1c
.TP
\fB\fIMQTTCLIENT_TRACE_MAXIMUM \fP\fP
.TP
\fB\fIMQTTCLIENT_TRACE_MEDIUM \fP\fP
.TP
\fB\fIMQTTCLIENT_TRACE_MINIMUM \fP\fP
.TP
\fB\fIMQTTCLIENT_TRACE_PROTOCOL \fP\fP
.TP
\fB\fIMQTTCLIENT_TRACE_ERROR \fP\fP
.TP
\fB\fIMQTTCLIENT_TRACE_SEVERE \fP\fP
.TP
\fB\fIMQTTCLIENT_TRACE_FATAL \fP\fP
.SH "Function Documentation"
.PP
.SS "void MQTTClient_global_init (\fBMQTTClient_init_options\fP * inits)"
Global init of mqtt library\&. Call once on program start to set global behaviour\&. do_openssl_init - if mqtt library should initialize OpenSSL (1) or rely on the caller to do it before using the library (0)
.SS "int MQTTClient_setCallbacks (\fBMQTTClient\fP handle, void * context, \fBMQTTClient_connectionLost\fP * cl, \fBMQTTClient_messageArrived\fP * ma, \fBMQTTClient_deliveryComplete\fP * dc)"
This function sets the callback functions for a specific client\&. If your client application doesn't use a particular callback, set the relevant parameter to NULL\&. Calling \fBMQTTClient_setCallbacks()\fP puts the client into multi-threaded mode\&. Any necessary message acknowledgements and status communications are handled in the background without any intervention from the client application\&. See \fBAsynchronous vs synchronous client applications\fP for more information\&.
.PP
\fBNote:\fP The MQTT client must be disconnected when this function is called\&.
.PP
\fBParameters:\fP
.RS 4
\fIhandle\fP A valid client handle from a successful call to \fBMQTTClient_create()\fP\&.
.br
\fIcontext\fP A pointer to any application-specific context\&. The the \fIcontext\fP pointer is passed to each of the callback functions to provide access to the context information in the callback\&.
.br
\fIcl\fP A pointer to an \fBMQTTClient_connectionLost()\fP callback function\&. You can set this to NULL if your application doesn't handle disconnections\&.
.br
\fIma\fP A pointer to an \fBMQTTClient_messageArrived()\fP callback function\&. This callback function must be specified when you call \fBMQTTClient_setCallbacks()\fP\&.
.br
\fIdc\fP A pointer to an \fBMQTTClient_deliveryComplete()\fP callback function\&. You can set this to NULL if your application publishes synchronously or if you do not want to check for successful delivery\&.
.RE
.PP
\fBReturns:\fP
.RS 4
\fBMQTTCLIENT_SUCCESS\fP if the callbacks were correctly set, \fBMQTTCLIENT_FAILURE\fP if an error occurred\&.
.RE
.PP
.SS "int MQTTClient_setDisconnected (\fBMQTTClient\fP handle, void * context, \fBMQTTClient_disconnected\fP * co)"
Sets the \fBMQTTClient_disconnected()\fP callback function for a client\&. This will be called if a disconnect packet is received from the server\&. Only valid for MQTT V5 and above\&.
.PP
\fBParameters:\fP
.RS 4
\fIhandle\fP A valid client handle from a successful call to \fBMQTTClient_create()\fP\&.
.br
\fIcontext\fP A pointer to any application-specific context\&. The the \fIcontext\fP pointer is passed to each of the callback functions to provide access to the context information in the callback\&.
.br
\fIco\fP A pointer to an \fBMQTTClient_disconnected()\fP callback function\&. NULL removes the callback setting\&.
.RE
.PP
\fBReturns:\fP
.RS 4
\fBMQTTCLIENT_SUCCESS\fP if the callbacks were correctly set, \fBMQTTCLIENT_FAILURE\fP if an error occurred\&.
.RE
.PP
.SS "int MQTTClient_setPublished (\fBMQTTClient\fP handle, void * context, \fBMQTTClient_published\fP * co)"
.SS "int MQTTClient_create (\fBMQTTClient\fP * handle, const char * serverURI, const char * clientId, int persistence_type, void * persistence_context)"
This function creates an MQTT client ready for connection to the specified server and using the specified persistent storage (see \fBMQTTClient_persistence\fP)\&. See also \fBMQTTClient_destroy()\fP\&.
.PP
\fBParameters:\fP
.RS 4
\fIhandle\fP A pointer to an \fBMQTTClient\fP handle\&. The handle is populated with a valid client reference following a successful return from this function\&.
.br
\fIserverURI\fP A null-terminated string specifying the server to which the client will connect\&. It takes the form \fIprotocol://host:port\fP\&. Currently, \fIprotocol\fP must be \fItcp\fP or \fIssl\fP\&. For \fIhost\fP, you can specify either an IP address or a host name\&. For instance, to connect to a server running on the local machines with the default MQTT port, specify \fItcp://localhost:1883\fP\&.
.br
\fIclientId\fP The client identifier passed to the server when the client connects to it\&. It is a null-terminated UTF-8 encoded string\&.
.br
\fIpersistence_type\fP The type of persistence to be used by the client:
.br
\fBMQTTCLIENT_PERSISTENCE_NONE\fP: Use in-memory persistence\&. If the device or system on which the client is running fails or is switched off, the current state of any in-flight messages is lost and some messages may not be delivered even at QoS1 and QoS2\&.
.br
\fBMQTTCLIENT_PERSISTENCE_DEFAULT\fP: Use the default (file system-based) persistence mechanism\&. Status about in-flight messages is held in persistent storage and provides some protection against message loss in the case of unexpected failure\&.
.br
\fBMQTTCLIENT_PERSISTENCE_USER\fP: Use an application-specific persistence implementation\&. Using this type of persistence gives control of the persistence mechanism to the application\&. The application has to implement the \fBMQTTClient_persistence\fP interface\&.
.br
\fIpersistence_context\fP If the application uses \fBMQTTCLIENT_PERSISTENCE_NONE\fP persistence, this argument is unused and should be set to NULL\&. For \fBMQTTCLIENT_PERSISTENCE_DEFAULT\fP persistence, it should be set to the location of the persistence directory (if set to NULL, the persistence directory used is the working directory)\&. Applications that use \fBMQTTCLIENT_PERSISTENCE_USER\fP persistence set this argument to point to a valid \fBMQTTClient_persistence\fP structure\&.
.RE
.PP
\fBReturns:\fP
.RS 4
\fBMQTTCLIENT_SUCCESS\fP if the client is successfully created, otherwise an error code is returned\&.
.RE
.PP
.SS "int MQTTClient_createWithOptions (\fBMQTTClient\fP * handle, const char * serverURI, const char * clientId, int persistence_type, void * persistence_context, \fBMQTTClient_createOptions\fP * options)"
A version of :\fBMQTTClient_create()\fP with additional options\&. This function creates an MQTT client ready for connection to the specified server and using the specified persistent storage (see \fBMQTTClient_persistence\fP)\&. See also \fBMQTTClient_destroy()\fP\&.
.PP
\fBParameters:\fP
.RS 4
\fIhandle\fP A pointer to an \fBMQTTClient\fP handle\&. The handle is populated with a valid client reference following a successful return from this function\&.
.br
\fIserverURI\fP A null-terminated string specifying the server to which the client will connect\&. It takes the form \fIprotocol://host:port\fP\&. Currently, \fIprotocol\fP must be \fItcp\fP or \fIssl\fP\&. For \fIhost\fP, you can specify either an IP address or a host name\&. For instance, to connect to a server running on the local machines with the default MQTT port, specify \fItcp://localhost:1883\fP\&.
.br
\fIclientId\fP The client identifier passed to the server when the client connects to it\&. It is a null-terminated UTF-8 encoded string\&.
.br
\fIpersistence_type\fP The type of persistence to be used by the client:
.br
\fBMQTTCLIENT_PERSISTENCE_NONE\fP: Use in-memory persistence\&. If the device or system on which the client is running fails or is switched off, the current state of any in-flight messages is lost and some messages may not be delivered even at QoS1 and QoS2\&.
.br
\fBMQTTCLIENT_PERSISTENCE_DEFAULT\fP: Use the default (file system-based) persistence mechanism\&. Status about in-flight messages is held in persistent storage and provides some protection against message loss in the case of unexpected failure\&.
.br
\fBMQTTCLIENT_PERSISTENCE_USER\fP: Use an application-specific persistence implementation\&. Using this type of persistence gives control of the persistence mechanism to the application\&. The application has to implement the \fBMQTTClient_persistence\fP interface\&.
.br
\fIpersistence_context\fP If the application uses \fBMQTTCLIENT_PERSISTENCE_NONE\fP persistence, this argument is unused and should be set to NULL\&. For \fBMQTTCLIENT_PERSISTENCE_DEFAULT\fP persistence, it should be set to the location of the persistence directory (if set to NULL, the persistence directory used is the working directory)\&. Applications that use \fBMQTTCLIENT_PERSISTENCE_USER\fP persistence set this argument to point to a valid \fBMQTTClient_persistence\fP structure\&.
.br
\fIoptions\fP additional options for the create\&.
.RE
.PP
\fBReturns:\fP
.RS 4
\fBMQTTCLIENT_SUCCESS\fP if the client is successfully created, otherwise an error code is returned\&.
.RE
.PP
.SS "\fBMQTTClient_nameValue\fP* MQTTClient_getVersionInfo (void)"
This function returns version information about the library\&. no trace information will be returned\&.
.PP
\fBReturns:\fP
.RS 4
an array of strings describing the library\&. The last entry is a NULL pointer\&.
.RE
.PP
.SS "int MQTTClient_connect (\fBMQTTClient\fP handle, \fBMQTTClient_connectOptions\fP * options)"
This function attempts to connect a previously-created client (see \fBMQTTClient_create()\fP) to an MQTT server using the specified options\&. If you want to enable asynchronous message and status notifications, you must call \fBMQTTClient_setCallbacks()\fP prior to \fBMQTTClient_connect()\fP\&.
.PP
\fBParameters:\fP
.RS 4
\fIhandle\fP A valid client handle from a successful call to \fBMQTTClient_create()\fP\&.
.br
\fIoptions\fP A pointer to a valid \fBMQTTClient_connectOptions\fP structure\&.
.RE
.PP
\fBReturns:\fP
.RS 4
\fBMQTTCLIENT_SUCCESS\fP if the client successfully connects to the server\&. An error code is returned if the client was unable to connect to the server\&. Error codes greater than 0 are returned by the MQTT protocol:
.br
.br
\fB1\fP: Connection refused: Unacceptable protocol version
.br
\fB2\fP: Connection refused: Identifier rejected
.br
\fB3\fP: Connection refused: Server unavailable
.br
\fB4\fP: Connection refused: Bad user name or password
.br
\fB5\fP: Connection refused: Not authorized
.br
\fB6-255\fP: Reserved for future use
.br
.RE
.PP
.SS "void MQTTResponse_free (\fBMQTTResponse\fP response)"
.SS "\fBMQTTResponse\fP MQTTClient_connect5 (\fBMQTTClient\fP handle, \fBMQTTClient_connectOptions\fP * options, \fBMQTTProperties\fP * connectProperties, \fBMQTTProperties\fP * willProperties)"
.SS "int MQTTClient_disconnect (\fBMQTTClient\fP handle, int timeout)"
This function attempts to disconnect the client from the MQTT server\&. In order to allow the client time to complete handling of messages that are in-flight when this function is called, a timeout period is specified\&. When the timeout period has expired, the client disconnects even if there are still outstanding message acknowledgements\&. The next time the client connects to the same server, any QoS 1 or 2 messages which have not completed will be retried depending on the cleansession settings for both the previous and the new connection (see \fBMQTTClient_connectOptions\&.cleansession\fP and \fBMQTTClient_connect()\fP)\&.
.PP
\fBParameters:\fP
.RS 4
\fIhandle\fP A valid client handle from a successful call to \fBMQTTClient_create()\fP\&.
.br
\fItimeout\fP The client delays disconnection for up to this time (in milliseconds) in order to allow in-flight message transfers to complete\&.
.RE
.PP
\fBReturns:\fP
.RS 4
\fBMQTTCLIENT_SUCCESS\fP if the client successfully disconnects from the server\&. An error code is returned if the client was unable to disconnect from the server
.RE
.PP
.SS "int MQTTClient_disconnect5 (\fBMQTTClient\fP handle, int timeout, enum \fBMQTTReasonCodes\fP reason, \fBMQTTProperties\fP * props)"
.SS "int MQTTClient_isConnected (\fBMQTTClient\fP handle)"
This function allows the client application to test whether or not a client is currently connected to the MQTT server\&.
.PP
\fBParameters:\fP
.RS 4
\fIhandle\fP A valid client handle from a successful call to \fBMQTTClient_create()\fP\&.
.RE
.PP
\fBReturns:\fP
.RS 4
Boolean true if the client is connected, otherwise false\&.
.RE
.PP
.SS "int MQTTClient_subscribe (\fBMQTTClient\fP handle, const char * topic, int qos)"
This function attempts to subscribe a client to a single topic, which may contain wildcards (see \fBSubscription wildcards\fP)\&. This call also specifies the \fBQuality of service\fP requested for the subscription (see also \fBMQTTClient_subscribeMany()\fP)\&.
.PP
\fBParameters:\fP
.RS 4
\fIhandle\fP A valid client handle from a successful call to \fBMQTTClient_create()\fP\&.
.br
\fItopic\fP The subscription topic, which may include wildcards\&.
.br
\fIqos\fP The requested quality of service for the subscription\&.
.RE
.PP
\fBReturns:\fP
.RS 4
\fBMQTTCLIENT_SUCCESS\fP if the subscription request is successful\&. An error code is returned if there was a problem registering the subscription\&.
.RE
.PP
.SS "\fBMQTTResponse\fP MQTTClient_subscribe5 (\fBMQTTClient\fP handle, const char * topic, int qos, \fBMQTTSubscribe_options\fP * opts, \fBMQTTProperties\fP * props)"
.SS "int MQTTClient_subscribeMany (\fBMQTTClient\fP handle, int count, char *const * topic, int * qos)"
This function attempts to subscribe a client to a list of topics, which may contain wildcards (see \fBSubscription wildcards\fP)\&. This call also specifies the \fBQuality of service\fP requested for each topic (see also \fBMQTTClient_subscribe()\fP)\&.
.PP
\fBParameters:\fP
.RS 4
\fIhandle\fP A valid client handle from a successful call to \fBMQTTClient_create()\fP\&.
.br
\fIcount\fP The number of topics for which the client is requesting subscriptions\&.
.br
\fItopic\fP An array (of length \fIcount\fP) of pointers to topics, each of which may include wildcards\&.
.br
\fIqos\fP An array (of length \fIcount\fP) of \fBQuality of service\fP values\&. qos[n] is the requested QoS for topic[n]\&.
.RE
.PP
\fBReturns:\fP
.RS 4
\fBMQTTCLIENT_SUCCESS\fP if the subscription request is successful\&. An error code is returned if there was a problem registering the subscriptions\&.
.RE
.PP
.SS "\fBMQTTResponse\fP MQTTClient_subscribeMany5 (\fBMQTTClient\fP handle, int count, char *const * topic, int * qos, \fBMQTTSubscribe_options\fP * opts, \fBMQTTProperties\fP * props)"
.SS "int MQTTClient_unsubscribe (\fBMQTTClient\fP handle, const char * topic)"
This function attempts to remove an existing subscription made by the specified client\&.
.PP
\fBParameters:\fP
.RS 4
\fIhandle\fP A valid client handle from a successful call to \fBMQTTClient_create()\fP\&.
.br
\fItopic\fP The topic for the subscription to be removed, which may include wildcards (see \fBSubscription wildcards\fP)\&.
.RE
.PP
\fBReturns:\fP
.RS 4
\fBMQTTCLIENT_SUCCESS\fP if the subscription is removed\&. An error code is returned if there was a problem removing the subscription\&.
.RE
.PP
.SS "\fBMQTTResponse\fP MQTTClient_unsubscribe5 (\fBMQTTClient\fP handle, const char * topic, \fBMQTTProperties\fP * props)"
.SS "int MQTTClient_unsubscribeMany (\fBMQTTClient\fP handle, int count, char *const * topic)"
This function attempts to remove existing subscriptions to a list of topics made by the specified client\&.
.PP
\fBParameters:\fP
.RS 4
\fIhandle\fP A valid client handle from a successful call to \fBMQTTClient_create()\fP\&.
.br
\fIcount\fP The number subscriptions to be removed\&.
.br
\fItopic\fP An array (of length \fIcount\fP) of pointers to the topics of the subscriptions to be removed, each of which may include wildcards\&.
.RE
.PP
\fBReturns:\fP
.RS 4
\fBMQTTCLIENT_SUCCESS\fP if the subscriptions are removed\&. An error code is returned if there was a problem removing the subscriptions\&.
.RE
.PP
.SS "\fBMQTTResponse\fP MQTTClient_unsubscribeMany5 (\fBMQTTClient\fP handle, int count, char *const * topic, \fBMQTTProperties\fP * props)"
.SS "int MQTTClient_publish (\fBMQTTClient\fP handle, const char * topicName, int payloadlen, const void * payload, int qos, int retained, \fBMQTTClient_deliveryToken\fP * dt)"
This function attempts to publish a message to a given topic (see also \fBMQTTClient_publishMessage()\fP)\&. An \fBMQTTClient_deliveryToken\fP is issued when this function returns successfully\&. If the client application needs to test for succesful delivery of QoS1 and QoS2 messages, this can be done either asynchronously or synchronously (see \fBAsynchronous vs synchronous client applications\fP, \fBMQTTClient_waitForCompletion\fP and \fBMQTTClient_deliveryComplete()\fP)\&.
.PP
\fBParameters:\fP
.RS 4
\fIhandle\fP A valid client handle from a successful call to \fBMQTTClient_create()\fP\&.
.br
\fItopicName\fP The topic associated with this message\&.
.br
\fIpayloadlen\fP The length of the payload in bytes\&.
.br
\fIpayload\fP A pointer to the byte array payload of the message\&.
.br
\fIqos\fP The \fBQuality of service\fP of the message\&.
.br
\fIretained\fP The retained flag for the message\&.
.br
\fIdt\fP A pointer to an \fBMQTTClient_deliveryToken\fP\&. This is populated with a token representing the message when the function returns successfully\&. If your application does not use delivery tokens, set this argument to NULL\&.
.RE
.PP
\fBReturns:\fP
.RS 4
\fBMQTTCLIENT_SUCCESS\fP if the message is accepted for publication\&. An error code is returned if there was a problem accepting the message\&.
.RE
.PP
.SS "\fBMQTTResponse\fP MQTTClient_publish5 (\fBMQTTClient\fP handle, const char * topicName, int payloadlen, const void * payload, int qos, int retained, \fBMQTTProperties\fP * properties, \fBMQTTClient_deliveryToken\fP * dt)"
.SS "int MQTTClient_publishMessage (\fBMQTTClient\fP handle, const char * topicName, \fBMQTTClient_message\fP * msg, \fBMQTTClient_deliveryToken\fP * dt)"
This function attempts to publish a message to a given topic (see also \fBMQTTClient_publish()\fP)\&. An \fBMQTTClient_deliveryToken\fP is issued when this function returns successfully\&. If the client application needs to test for succesful delivery of QoS1 and QoS2 messages, this can be done either asynchronously or synchronously (see \fBAsynchronous vs synchronous client applications\fP, \fBMQTTClient_waitForCompletion\fP and \fBMQTTClient_deliveryComplete()\fP)\&.
.PP
\fBParameters:\fP
.RS 4
\fIhandle\fP A valid client handle from a successful call to \fBMQTTClient_create()\fP\&.
.br
\fItopicName\fP The topic associated with this message\&.
.br
\fImsg\fP A pointer to a valid \fBMQTTClient_message\fP structure containing the payload and attributes of the message to be published\&.
.br
\fIdt\fP A pointer to an \fBMQTTClient_deliveryToken\fP\&. This is populated with a token representing the message when the function returns successfully\&. If your application does not use delivery tokens, set this argument to NULL\&.
.RE
.PP
\fBReturns:\fP
.RS 4
\fBMQTTCLIENT_SUCCESS\fP if the message is accepted for publication\&. An error code is returned if there was a problem accepting the message\&.
.RE
.PP
.SS "\fBMQTTResponse\fP MQTTClient_publishMessage5 (\fBMQTTClient\fP handle, const char * topicName, \fBMQTTClient_message\fP * msg, \fBMQTTClient_deliveryToken\fP * dt)"
.SS "int MQTTClient_waitForCompletion (\fBMQTTClient\fP handle, \fBMQTTClient_deliveryToken\fP dt, unsigned long timeout)"
This function is called by the client application to synchronize execution of the main thread with completed publication of a message\&. When called, \fBMQTTClient_waitForCompletion()\fP blocks execution until the message has been successful delivered or the specified timeout has expired\&. See \fBAsynchronous vs synchronous client applications\fP\&.
.PP
\fBParameters:\fP
.RS 4
\fIhandle\fP A valid client handle from a successful call to \fBMQTTClient_create()\fP\&.
.br
\fIdt\fP The \fBMQTTClient_deliveryToken\fP that represents the message being tested for successful delivery\&. Delivery tokens are issued by the publishing functions \fBMQTTClient_publish()\fP and \fBMQTTClient_publishMessage()\fP\&.
.br
\fItimeout\fP The maximum time to wait in milliseconds\&.
.RE
.PP
\fBReturns:\fP
.RS 4
\fBMQTTCLIENT_SUCCESS\fP if the message was successfully delivered\&. An error code is returned if the timeout expires or there was a problem checking the token\&.
.RE
.PP
.SS "int MQTTClient_getPendingDeliveryTokens (\fBMQTTClient\fP handle, \fBMQTTClient_deliveryToken\fP ** tokens)"
This function sets a pointer to an array of delivery tokens for messages that are currently in-flight (pending completion)\&.
.PP
\fBImportant note:\fP The memory used to hold the array of tokens is malloc()'d in this function\&. The client application is responsible for freeing this memory when it is no longer required\&.
.PP
\fBParameters:\fP
.RS 4
\fIhandle\fP A valid client handle from a successful call to \fBMQTTClient_create()\fP\&.
.br
\fItokens\fP The address of a pointer to an \fBMQTTClient_deliveryToken\fP\&. When the function returns successfully, the pointer is set to point to an array of tokens representing messages pending completion\&. The last member of the array is set to -1 to indicate there are no more tokens\&. If no tokens are pending, the pointer is set to NULL\&.
.RE
.PP
\fBReturns:\fP
.RS 4
\fBMQTTCLIENT_SUCCESS\fP if the function returns successfully\&. An error code is returned if there was a problem obtaining the list of pending tokens\&.
.RE
.PP
.SS "void MQTTClient_yield (void)"
When implementing a single-threaded client, call this function periodically to allow processing of message retries and to send MQTT keepalive pings\&. If the application is calling \fBMQTTClient_receive()\fP regularly, then it is not necessary to call this function\&.
.SS "int MQTTClient_receive (\fBMQTTClient\fP handle, char ** topicName, int * topicLen, \fBMQTTClient_message\fP ** message, unsigned long timeout)"
This function performs a synchronous receive of incoming messages\&. It should be used only when the client application has not set callback methods to support asynchronous receipt of messages (see \fBAsynchronous vs synchronous client applications\fP and \fBMQTTClient_setCallbacks()\fP)\&. Using this function allows a single-threaded client subscriber application to be written\&. When called, this function blocks until the next message arrives or the specified timeout expires (see also \fBMQTTClient_yield()\fP)\&.
.PP
\fBImportant note:\fP The application must free() the memory allocated to the topic and the message when processing is complete (see \fBMQTTClient_freeMessage()\fP)\&.
.PP
\fBParameters:\fP
.RS 4
\fIhandle\fP A valid client handle from a successful call to \fBMQTTClient_create()\fP\&.
.br
\fItopicName\fP The address of a pointer to a topic\&. This function allocates the memory for the topic and returns it to the application by setting \fItopicName\fP to point to the topic\&.
.br
\fItopicLen\fP The length of the topic\&. If the return code from this function is \fBMQTTCLIENT_TOPICNAME_TRUNCATED\fP, the topic contains embedded NULL characters and the full topic should be retrieved by using \fItopicLen\fP\&.
.br
\fImessage\fP The address of a pointer to the received message\&. This function allocates the memory for the message and returns it to the application by setting \fImessage\fP to point to the received message\&. The pointer is set to NULL if the timeout expires\&.
.br
\fItimeout\fP The length of time to wait for a message in milliseconds\&.
.RE
.PP
\fBReturns:\fP
.RS 4
\fBMQTTCLIENT_SUCCESS\fP or \fBMQTTCLIENT_TOPICNAME_TRUNCATED\fP if a message is received\&. \fBMQTTCLIENT_SUCCESS\fP can also indicate that the timeout expired, in which case \fImessage\fP is NULL\&. An error code is returned if there was a problem trying to receive a message\&.
.RE
.PP
.SS "void MQTTClient_freeMessage (\fBMQTTClient_message\fP ** msg)"
This function frees memory allocated to an MQTT message, including the additional memory allocated to the message payload\&. The client application calls this function when the message has been fully processed\&. \fBImportant note:\fP This function does not free the memory allocated to a message topic string\&. It is the responsibility of the client application to free this memory using the \fBMQTTClient_free()\fP library function\&.
.PP
\fBParameters:\fP
.RS 4
\fImsg\fP The address of a pointer to the \fBMQTTClient_message\fP structure to be freed\&.
.RE
.PP
.SS "void MQTTClient_free (void * ptr)"
This function frees memory allocated by the MQTT C client library, especially the topic name\&. This is needed on Windows when the client libary and application program have been compiled with different versions of the C compiler\&. It is thus good policy to always use this function when freeing any MQTT C client- allocated memory\&.
.PP
\fBParameters:\fP
.RS 4
\fIptr\fP The pointer to the client library storage to be freed\&.
.RE
.PP
.SS "void MQTTClient_destroy (\fBMQTTClient\fP * handle)"
This function frees the memory allocated to an MQTT client (see \fBMQTTClient_create()\fP)\&. It should be called when the client is no longer required\&.
.PP
\fBParameters:\fP
.RS 4
\fIhandle\fP A pointer to the handle referring to the \fBMQTTClient\fP structure to be freed\&.
.RE
.PP
.SS "void MQTTClient_setTraceLevel (enum \fBMQTTCLIENT_TRACE_LEVELS\fP level)"
This function sets the level of trace information which will be returned in the trace callback\&.
.PP
\fBParameters:\fP
.RS 4
\fIlevel\fP the trace level required
.RE
.PP
.SS "void MQTTClient_setTraceCallback (\fBMQTTClient_traceCallback\fP * callback)"
This function sets the trace callback if needed\&. If set to NULL, no trace information will be returned\&. The default trace level is MQTTASYNC_TRACE_MINIMUM\&.
.PP
\fBParameters:\fP
.RS 4
\fIcallback\fP a pointer to the function which will handle the trace information
.RE
.PP
.SS "const char* MQTTClient_strerror (int code)"
Returns a pointer to the string representation of the error or NULL\&.
.PP
Do not free after use\&. Returns NULL if the error code is unknown\&.
.SH "Author"
.PP
Generated automatically by Doxygen for Paho MQTT C Client Library from the source code\&.