MQTTClient.h
Go to the documentation of this file.
1 /*******************************************************************************
2  * Copyright (c) 2009, 2020 IBM Corp. and others
3  *
4  * All rights reserved. This program and the accompanying materials
5  * are made available under the terms of the Eclipse Public License v2.0
6  * and Eclipse Distribution License v1.0 which accompany this distribution.
7  *
8  * The Eclipse Public License is available at
9  * https://www.eclipse.org/legal/epl-2.0/
10  * and the Eclipse Distribution License is available at
11  * http://www.eclipse.org/org/documents/edl-v10.php.
12  *
13  * Contributors:
14  * Ian Craggs - initial API and implementation and/or initial documentation
15  * Ian Craggs, Allan Stockdill-Mander - SSL updates
16  * Ian Craggs - multiple server connection support
17  * Ian Craggs - MQTT 3.1.1 support
18  * Ian Craggs - remove const from eyecatchers #168
19  *******************************************************************************/
20 
103 /*
105 */
106 #if !defined(MQTTCLIENT_H)
107 #define MQTTCLIENT_H
108 
109 #if defined(__cplusplus)
110  extern "C" {
111 #endif
112 
113 #include <stdio.h>
114 /*
116 */
117 
118 #include "MQTTExportDeclarations.h"
119 
120 #include "MQTTProperties.h"
121 #include "MQTTReasonCodes.h"
122 #include "MQTTSubscribeOpts.h"
123 #if !defined(NO_PERSISTENCE)
124 #include "MQTTClientPersistence.h"
125 #endif
126 
131 #define MQTTCLIENT_SUCCESS 0
132 
136 #define MQTTCLIENT_FAILURE -1
137 
138 /* error code -2 is MQTTCLIENT_PERSISTENCE_ERROR */
139 
143 #define MQTTCLIENT_DISCONNECTED -3
144 
148 #define MQTTCLIENT_MAX_MESSAGES_INFLIGHT -4
149 
152 #define MQTTCLIENT_BAD_UTF8_STRING -5
153 
156 #define MQTTCLIENT_NULL_PARAMETER -6
157 
162 #define MQTTCLIENT_TOPICNAME_TRUNCATED -7
163 
167 #define MQTTCLIENT_BAD_STRUCTURE -8
168 
171 #define MQTTCLIENT_BAD_QOS -9
172 
175 #define MQTTCLIENT_SSL_NOT_SUPPORTED -10
176 
179  #define MQTTCLIENT_BAD_MQTT_VERSION -11
180 
185 #define MQTTCLIENT_BAD_PROTOCOL -14
186 
189  #define MQTTCLIENT_BAD_MQTT_OPTION -15
190 
193  #define MQTTCLIENT_WRONG_MQTT_VERSION -16
194 
197  #define MQTTCLIENT_0_LEN_WILL_TOPIC -17
198 
199 
203 #define MQTTVERSION_DEFAULT 0
204 
207 #define MQTTVERSION_3_1 3
208 
211 #define MQTTVERSION_3_1_1 4
212 
215  #define MQTTVERSION_5 5
216 
219 #define MQTT_BAD_SUBSCRIBE 0x80
220 
224 typedef struct
225 {
227  char struct_id[4];
233 
234 #define MQTTClient_init_options_initializer { {'M', 'Q', 'T', 'G'}, 0, 0 }
235 
241 
246 typedef void* MQTTClient;
258 typedef int MQTTClient_token;
259 
266 typedef struct
267 {
269  char struct_id[4];
276  void* payload;
290  int qos;
309  int retained;
316  int dup;
320  int msgid;
326 
327 #define MQTTClient_message_initializer { {'M', 'Q', 'T', 'M'}, 1, 0, NULL, 0, 0, 0, 0, MQTTProperties_initializer }
328 
359 typedef int MQTTClient_messageArrived(void* context, char* topicName, int topicLen, MQTTClient_message* message);
360 
381 typedef void MQTTClient_deliveryComplete(void* context, MQTTClient_deliveryToken dt);
382 
398 typedef void MQTTClient_connectionLost(void* context, char* cause);
399 
428 LIBMQTT_API int MQTTClient_setCallbacks(MQTTClient handle, void* context, MQTTClient_connectionLost* cl,
430 
431 
441 typedef void MQTTClient_disconnected(void* context, MQTTProperties* properties,
442  enum MQTTReasonCodes reasonCode);
443 
457 LIBMQTT_API int MQTTClient_setDisconnected(MQTTClient handle, void* context, MQTTClient_disconnected* co);
458 
482 typedef void MQTTClient_published(void* context, int dt, int packet_type, MQTTProperties* properties,
483  enum MQTTReasonCodes reasonCode);
484 
485 LIBMQTT_API int MQTTClient_setPublished(MQTTClient handle, void* context, MQTTClient_published* co);
486 
531 LIBMQTT_API int MQTTClient_create(MQTTClient* handle, const char* serverURI, const char* clientId,
532  int persistence_type, void* persistence_context);
533 
535 typedef struct
536 {
538  char struct_id[4];
548 
549 #define MQTTClient_createOptions_initializer { {'M', 'Q', 'C', 'O'}, 0, MQTTVERSION_DEFAULT }
550 
595 LIBMQTT_API int MQTTClient_createWithOptions(MQTTClient* handle, const char* serverURI, const char* clientId,
596  int persistence_type, void* persistence_context, MQTTClient_createOptions* options);
597 
610 typedef struct
611 {
613  char struct_id[4];
619  const char* topicName;
621  const char* message;
625  int retained;
630  int qos;
632  struct
633  {
634  int len;
635  const void* data;
636  } payload;
638 
639 #define MQTTClient_willOptions_initializer { {'M', 'Q', 'T', 'W'}, 1, NULL, NULL, 0, 0, {0, NULL} }
640 
641 #define MQTT_SSL_VERSION_DEFAULT 0
642 #define MQTT_SSL_VERSION_TLS_1_0 1
643 #define MQTT_SSL_VERSION_TLS_1_1 2
644 #define MQTT_SSL_VERSION_TLS_1_2 3
645 
658 typedef struct
659 {
661  char struct_id[4];
662 
671 
673  const char* trustStore;
674 
678  const char* keyStore;
679 
683  const char* privateKey;
684 
686  const char* privateKeyPassword;
687 
696  const char* enabledCipherSuites;
697 
700 
706 
712  int verify;
713 
719  const char* CApath;
720 
725  int (*ssl_error_cb) (const char *str, size_t len, void *u);
726 
732 
738  unsigned int (*ssl_psk_cb) (const char *hint, char *identity, unsigned int max_identity_len, unsigned char *psk, unsigned int max_psk_len, void *u);
739 
745 
752 
760  const unsigned char *protos;
761 
766  unsigned int protos_len;
768 
769 #define MQTTClient_SSLOptions_initializer { {'M', 'Q', 'T', 'S'}, 5, NULL, NULL, NULL, NULL, NULL, 1, MQTT_SSL_VERSION_DEFAULT, 0, NULL, NULL, NULL, NULL, NULL, 0, NULL, 0 }
770 
778 typedef struct
779 {
780  const char* name;
781  const char* value;
783 
790 
805 typedef struct
806 {
808  char struct_id[4];
860  int reliable;
872  const char* username;
878  const char* password;
913  char* const* serverURIs;
925  struct
926  {
927  const char* serverURI;
928  int MQTTVersion;
930  } returned;
934  struct
935  {
936  int len;
937  const void* data;
938  } binarypwd;
943  /*
944  * MQTT V5 clean start flag. Only clears state at the beginning of the session.
945  */
952 
953 #define MQTTClient_connectOptions_initializer { {'M', 'Q', 'T', 'C'}, 7, 60, 1, 1, NULL, NULL, NULL, 30, 0, NULL,\
954 0, NULL, MQTTVERSION_DEFAULT, {NULL, 0, 0}, {0, NULL}, -1, 0, NULL}
955 
956 #define MQTTClient_connectOptions_initializer5 { {'M', 'Q', 'T', 'C'}, 7, 60, 0, 1, NULL, NULL, NULL, 30, 0, NULL,\
957 0, NULL, MQTTVERSION_5, {NULL, 0, 0}, {0, NULL}, -1, 1, NULL}
958 
959 #define MQTTClient_connectOptions_initializer_ws { {'M', 'Q', 'T', 'C'}, 7, 45, 1, 1, NULL, NULL, NULL, 30, 0, NULL,\
960 0, NULL, MQTTVERSION_DEFAULT, {NULL, 0, 0}, {0, NULL}, -1, 0, NULL}
961 
962 #define MQTTClient_connectOptions_initializer5_ws { {'M', 'Q', 'T', 'C'}, 7, 45, 0, 1, NULL, NULL, NULL, 30, 0, NULL,\
963 0, NULL, MQTTVERSION_5, {NULL, 0, 0}, {0, NULL}, -1, 1, NULL}
964 
986 
988 typedef struct MQTTResponse
989 {
990  int version; /* the version number of this structure */
991  enum MQTTReasonCodes reasonCode; /* the MQTT 5.0 reason code returned */
992  int reasonCodeCount; /* the number of reason codes. Used for subscribeMany5 and unsubscribeMany5 */
993  enum MQTTReasonCodes* reasonCodes; /* a list of reason codes. Used for subscribeMany5 and unsubscribeMany5 */
994  MQTTProperties* properties; /* optionally, the MQTT 5.0 properties returned */
995 } MQTTResponse;
996 
997 #define MQTTResponse_initializer {1, MQTTREASONCODE_SUCCESS, 0, NULL, NULL}
998 
1004 
1018  MQTTProperties* connectProperties, MQTTProperties* willProperties);
1019 
1038 LIBMQTT_API int MQTTClient_disconnect(MQTTClient handle, int timeout);
1039 
1040 LIBMQTT_API int MQTTClient_disconnect5(MQTTClient handle, int timeout, enum MQTTReasonCodes reason, MQTTProperties* props);
1041 
1049 LIBMQTT_API int MQTTClient_isConnected(MQTTClient handle);
1050 
1051 
1052 /* Subscribe is synchronous. QoS list parameter is changed on return to granted QoSs.
1053  Returns return code, MQTTCLIENT_SUCCESS == success, non-zero some sort of error (TBD) */
1054 
1068 LIBMQTT_API int MQTTClient_subscribe(MQTTClient handle, const char* topic, int qos);
1069 
1083 LIBMQTT_API MQTTResponse MQTTClient_subscribe5(MQTTClient handle, const char* topic, int qos,
1085 
1102 LIBMQTT_API int MQTTClient_subscribeMany(MQTTClient handle, int count, char* const* topic, int* qos);
1103 
1120 LIBMQTT_API MQTTResponse MQTTClient_subscribeMany5(MQTTClient handle, int count, char* const* topic,
1122 
1134 LIBMQTT_API int MQTTClient_unsubscribe(MQTTClient handle, const char* topic);
1135 
1146 LIBMQTT_API MQTTResponse MQTTClient_unsubscribe5(MQTTClient handle, const char* topic, MQTTProperties* props);
1147 
1159 LIBMQTT_API int MQTTClient_unsubscribeMany(MQTTClient handle, int count, char* const* topic);
1160 
1172 LIBMQTT_API MQTTResponse MQTTClient_unsubscribeMany5(MQTTClient handle, int count, char* const* topic, MQTTProperties* props);
1173 
1195 LIBMQTT_API int MQTTClient_publish(MQTTClient handle, const char* topicName, int payloadlen, const void* payload, int qos, int retained,
1196  MQTTClient_deliveryToken* dt);
1197 
1219 LIBMQTT_API MQTTResponse MQTTClient_publish5(MQTTClient handle, const char* topicName, int payloadlen, const void* payload,
1220  int qos, int retained, MQTTProperties* properties, MQTTClient_deliveryToken* dt);
1240 LIBMQTT_API int MQTTClient_publishMessage(MQTTClient handle, const char* topicName, MQTTClient_message* msg, MQTTClient_deliveryToken* dt);
1241 
1242 
1262 LIBMQTT_API MQTTResponse MQTTClient_publishMessage5(MQTTClient handle, const char* topicName, MQTTClient_message* msg,
1263  MQTTClient_deliveryToken* dt);
1264 
1280 LIBMQTT_API int MQTTClient_waitForCompletion(MQTTClient handle, MQTTClient_deliveryToken dt, unsigned long timeout);
1281 
1282 
1301 LIBMQTT_API int MQTTClient_getPendingDeliveryTokens(MQTTClient handle, MQTTClient_deliveryToken **tokens);
1302 
1309 LIBMQTT_API void MQTTClient_yield(void);
1310 
1342 LIBMQTT_API int MQTTClient_receive(MQTTClient handle, char** topicName, int* topicLen, MQTTClient_message** message,
1343  unsigned long timeout);
1344 
1356 
1365 LIBMQTT_API void MQTTClient_free(void* ptr);
1366 
1374 LIBMQTT_API void MQTTClient_destroy(MQTTClient* handle);
1375 
1376 
1378 {
1386 };
1387 
1388 
1395 
1396 
1405 typedef void MQTTClient_traceCallback(enum MQTTCLIENT_TRACE_LEVELS level, char* message);
1406 
1414 
1420 LIBMQTT_API const char* MQTTClient_strerror(int code);
1421 
1422 #ifdef __cplusplus
1423  }
1424 #endif
1425 
1426 #endif
1427 
LIBMQTT_API const char * MQTTClient_strerror(int code)
Definition: MQTTClient.c:2903
LIBMQTT_API void MQTTResponse_free(MQTTResponse response)
Definition: MQTTClient.c:620
LIBMQTT_API void MQTTClient_setTraceCallback(MQTTClient_traceCallback *callback)
Definition: MQTTClient.c:2861
LIBMQTT_API int MQTTClient_createWithOptions(MQTTClient *handle, const char *serverURI, const char *clientId, int persistence_type, void *persistence_context, MQTTClient_createOptions *options)
Definition: MQTTClient.c:364
LIBMQTT_API int MQTTClient_isConnected(MQTTClient handle)
Definition: MQTTClient.c:1930
MQTTReasonCodes
string topic
Definition: test2.py:8
MQTTProperties props
Definition: paho_c_pub.c:54
int MQTTClient_messageArrived(void *context, char *topicName, int topicLen, MQTTClient_message *message)
Definition: MQTTClient.h:359
void MQTTClient_connectionLost(void *context, char *cause)
Definition: MQTTClient.h:398
LIBMQTT_API int MQTTClient_waitForCompletion(MQTTClient handle, MQTTClient_deliveryToken dt, unsigned long timeout)
Definition: MQTTClient.c:2772
#define LIBMQTT_API
void MQTTClient_disconnected(void *context, MQTTProperties *properties, enum MQTTReasonCodes reasonCode)
Definition: MQTTClient.h:441
LIBMQTT_API int MQTTClient_unsubscribe(MQTTClient handle, const char *topic)
Definition: MQTTClient.c:2239
const char * enabledCipherSuites
Definition: MQTTClient.h:696
struct pubsub_opts opts
Definition: paho_c_pub.c:42
LIBMQTT_API int MQTTClient_disconnect(MQTTClient handle, int timeout)
Definition: MQTTClient.c:1908
LIBMQTT_API int MQTTClient_connect(MQTTClient handle, MQTTClient_connectOptions *options)
Definition: MQTTClient.c:1644
LIBMQTT_API int MQTTClient_create(MQTTClient *handle, const char *serverURI, const char *clientId, int persistence_type, void *persistence_context)
Definition: MQTTClient.c:507
enum MQTTReasonCodes * reasonCodes
Definition: MQTTClient.h:993
LIBMQTT_API void MQTTClient_destroy(MQTTClient *handle)
Definition: MQTTClient.c:556
LIBMQTT_API MQTTResponse MQTTClient_publishMessage5(MQTTClient handle, const char *topicName, MQTTClient_message *msg, MQTTClient_deliveryToken *dt)
Definition: MQTTClient.c:2401
enum MQTTReasonCodes reasonCode
Definition: MQTTClient.h:991
LIBMQTT_API MQTTResponse MQTTClient_subscribe5(MQTTClient handle, const char *topic, int qos, MQTTSubscribe_options *opts, MQTTProperties *props)
Definition: MQTTClient.c:2090
MQTTCLIENT_TRACE_LEVELS
Definition: MQTTClient.h:1377
LIBMQTT_API void MQTTClient_yield(void)
Definition: MQTTClient.c:2730
const char * value
Definition: MQTTClient.h:781
LIBMQTT_API int MQTTClient_setDisconnected(MQTTClient handle, void *context, MQTTClient_disconnected *co)
Definition: MQTTClient.c:682
const char * privateKey
Definition: MQTTClient.h:683
LIBMQTT_API void MQTTClient_free(void *ptr)
Definition: MQTTClient.c:612
LIBMQTT_API MQTTResponse MQTTClient_publish5(MQTTClient handle, const char *topicName, int payloadlen, const void *payload, int qos, int retained, MQTTProperties *properties, MQTTClient_deliveryToken *dt)
Definition: MQTTClient.c:2247
MQTTClient_SSLOptions * ssl
Definition: MQTTClient.h:895
LIBMQTT_API MQTTResponse MQTTClient_connect5(MQTTClient handle, MQTTClient_connectOptions *options, MQTTProperties *connectProperties, MQTTProperties *willProperties)
Definition: MQTTClient.c:1658
constexpr size_t count()
Definition: core.h:960
LIBMQTT_API int MQTTClient_disconnect5(MQTTClient handle, int timeout, enum MQTTReasonCodes reason, MQTTProperties *props)
Definition: MQTTClient.c:1919
This structure represents a persistent data store, used to store outbound and inbound messages...
struct MQTTResponse MQTTResponse
LIBMQTT_API MQTTClient_nameValue * MQTTClient_getVersionInfo(void)
Definition: MQTTClient.c:2867
int packet_type
Definition: test10.c:1111
LIBMQTT_API void MQTTClient_freeMessage(MQTTClient_message **msg)
Definition: MQTTClient.c:601
void MQTTClient_published(void *context, int dt, int packet_type, MQTTProperties *properties, enum MQTTReasonCodes reasonCode)
Definition: MQTTClient.h:482
int qos
Definition: test6.c:56
unsigned int protos_len
Definition: MQTTClient.h:766
const unsigned char * protos
Definition: MQTTClient.h:760
const char * topicName
Definition: MQTTClient.h:619
const char * keyStore
Definition: MQTTClient.h:678
LIBMQTT_API int MQTTClient_subscribe(MQTTClient handle, const char *topic, int qos)
Definition: MQTTClient.c:2104
void * MQTTClient
Definition: MQTTClient.h:246
LIBMQTT_API MQTTResponse MQTTClient_unsubscribe5(MQTTClient handle, const char *topic, MQTTProperties *props)
Definition: MQTTClient.c:2230
LIBMQTT_API int MQTTClient_subscribeMany(MQTTClient handle, int count, char *const *topic, int *qos)
Definition: MQTTClient.c:2075
const MQTTClient_nameValue * httpHeaders
Definition: MQTTClient.h:950
void MQTTClient_traceCallback(enum MQTTCLIENT_TRACE_LEVELS level, char *message)
Definition: MQTTClient.h:1405
MQTTProperties properties
Definition: MQTTClient.h:324
void MQTTClient_deliveryComplete(void *context, MQTTClient_deliveryToken dt)
Definition: MQTTClient.h:381
const char * trustStore
Definition: MQTTClient.h:673
int MQTTClient_token
Definition: MQTTClient.h:258
LIBMQTT_API int MQTTClient_getPendingDeliveryTokens(MQTTClient handle, MQTTClient_deliveryToken **tokens)
Definition: MQTTClient.c:2814
int reasonCodeCount
Definition: MQTTClient.h:992
LIBMQTT_API void MQTTClient_setTraceLevel(enum MQTTCLIENT_TRACE_LEVELS level)
Definition: MQTTClient.c:2855
LIBMQTT_API int MQTTClient_unsubscribeMany(MQTTClient handle, int count, char *const *topic)
Definition: MQTTClient.c:2222
int retained
Definition: test6.c:57
dictionary context
Definition: test2.py:57
const void * ptr(const T *p)
Definition: format.h:3610
LIBMQTT_API int MQTTClient_setPublished(MQTTClient handle, void *context, MQTTClient_published *co)
Definition: MQTTClient.c:723
int MQTTClient_deliveryToken
Definition: MQTTClient.h:257
LIBMQTT_API int MQTTClient_publish(MQTTClient handle, const char *topicName, int payloadlen, const void *payload, int qos, int retained, MQTTClient_deliveryToken *dt)
Definition: MQTTClient.c:2387
LIBMQTT_API int MQTTClient_receive(MQTTClient handle, char **topicName, int *topicLen, MQTTClient_message **message, unsigned long timeout)
Definition: MQTTClient.c:2674
const char * privateKeyPassword
Definition: MQTTClient.h:686
LIBMQTT_API int MQTTClient_setCallbacks(MQTTClient handle, void *context, MQTTClient_connectionLost *cl, MQTTClient_messageArrived *ma, MQTTClient_deliveryComplete *dc)
Definition: MQTTClient.c:1032
char *const * serverURIs
Definition: MQTTClient.h:913
LIBMQTT_API MQTTResponse MQTTClient_subscribeMany5(MQTTClient handle, int count, char *const *topic, int *qos, MQTTSubscribe_options *opts, MQTTProperties *props)
Definition: MQTTClient.c:1945
LIBMQTT_API void MQTTClient_global_init(MQTTClient_init_options *inits)
Definition: MQTTClient.c:85
const char * CApath
Definition: MQTTClient.h:719
const char * message
Definition: MQTTClient.h:621
const char * name
Definition: MQTTClient.h:780
LIBMQTT_API MQTTResponse MQTTClient_unsubscribeMany5(MQTTClient handle, int count, char *const *topic, MQTTProperties *props)
Definition: MQTTClient.c:2118
MQTTClient_willOptions * will
Definition: MQTTClient.h:866
LIBMQTT_API int MQTTClient_publishMessage(MQTTClient handle, const char *topicName, MQTTClient_message *msg, MQTTClient_deliveryToken *dt)
Definition: MQTTClient.c:2432
MQTTProperties * properties
Definition: MQTTClient.h:994
int len
Definition: utf-8.c:46
struct Options options


plotjuggler
Author(s): Davide Faconti
autogenerated on Sun Dec 6 2020 03:48:09