00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00085
00087
00088 #if defined(__cplusplus)
00089 extern "C" {
00090 #endif
00091
00092 #if !defined(MQTTASYNC_H)
00093 #define MQTTASYNC_H
00094
00095 #if defined(WIN32) || defined(WIN64)
00096 #define DLLImport __declspec(dllimport)
00097 #define DLLExport __declspec(dllexport)
00098 #else
00099 #define DLLImport extern
00100 #define DLLExport __attribute__ ((visibility ("default")))
00101 #endif
00102
00103 #include <stdio.h>
00104
00106
00107
00108 #if !defined(NO_PERSISTENCE)
00109 #include "MQTTClientPersistence.h"
00110 #endif
00111
00116 #define MQTTASYNC_SUCCESS 0
00117
00121 #define MQTTASYNC_FAILURE -1
00122
00123
00124
00125 #define MQTTASYNC_PERSISTENCE_ERROR -2
00126
00130 #define MQTTASYNC_DISCONNECTED -3
00131
00135 #define MQTTASYNC_MAX_MESSAGES_INFLIGHT -4
00136
00139 #define MQTTASYNC_BAD_UTF8_STRING -5
00140
00143 #define MQTTASYNC_NULL_PARAMETER -6
00144
00149 #define MQTTASYNC_TOPICNAME_TRUNCATED -7
00150
00154 #define MQTTASYNC_BAD_STRUCTURE -8
00155
00158 #define MQTTASYNC_BAD_QOS -9
00159
00162 #define MQTTASYNC_NO_MORE_MSGIDS -10
00163
00166 #define MQTTASYNC_OPERATION_INCOMPLETE -11
00167
00170 #define MQTTASYNC_MAX_BUFFERED_MESSAGES -12
00171
00174 #define MQTTASYNC_SSL_NOT_SUPPORTED -13
00175
00178 #define MQTTASYNC_BAD_PROTOCOL -14
00179
00180
00184 #define MQTTVERSION_DEFAULT 0
00185
00188 #define MQTTVERSION_3_1 3
00189
00192 #define MQTTVERSION_3_1_1 4
00193
00196 #define MQTT_BAD_SUBSCRIBE 0x80
00197
00198
00202 typedef struct
00203 {
00205 char struct_id[4];
00207 int struct_version;
00209 int do_openssl_init;
00210 } MQTTAsync_init_options;
00211
00212 #define MQTTAsync_init_options_initializer { {'M', 'Q', 'T', 'G'}, 0, 0 }
00213
00218 DLLExport void MQTTAsync_global_init(MQTTAsync_init_options* inits);
00219
00224 typedef void* MQTTAsync;
00234 typedef int MQTTAsync_token;
00235
00242 typedef struct
00243 {
00245 char struct_id[4];
00247 int struct_version;
00249 int payloadlen;
00251 void* payload;
00265 int qos;
00284 int retained;
00291 int dup;
00295 int msgid;
00296 } MQTTAsync_message;
00297
00298 #define MQTTAsync_message_initializer { {'M', 'Q', 'T', 'M'}, 0, 0, NULL, 0, 0, 0, 0 }
00299
00326 typedef int MQTTAsync_messageArrived(void* context, char* topicName, int topicLen, MQTTAsync_message* message);
00327
00346 typedef void MQTTAsync_deliveryComplete(void* context, MQTTAsync_token token);
00347
00363 typedef void MQTTAsync_connectionLost(void* context, char* cause);
00364
00365
00378 typedef void MQTTAsync_connected(void* context, char* cause);
00379
00380
00381
00383 typedef struct
00384 {
00386 MQTTAsync_token token;
00388 int code;
00390 const char *message;
00391 } MQTTAsync_failureData;
00392
00394 typedef struct
00395 {
00397 MQTTAsync_token token;
00399 union
00400 {
00402 int qos;
00404 int* qosList;
00406 struct
00407 {
00408 MQTTAsync_message message;
00409 char* destinationName;
00410 } pub;
00411
00412 struct
00413 {
00414 char* serverURI;
00415 int MQTTVersion;
00416 int sessionPresent;
00417 } connect;
00418 } alt;
00419 } MQTTAsync_successData;
00420
00431 typedef void MQTTAsync_onSuccess(void* context, MQTTAsync_successData* response);
00432
00443 typedef void MQTTAsync_onFailure(void* context, MQTTAsync_failureData* response);
00444
00445 typedef struct
00446 {
00448 char struct_id[4];
00450 int struct_version;
00456 MQTTAsync_onSuccess* onSuccess;
00462 MQTTAsync_onFailure* onFailure;
00468 void* context;
00474 MQTTAsync_token token;
00475 } MQTTAsync_responseOptions;
00476
00477 #define MQTTAsync_responseOptions_initializer { {'M', 'Q', 'T', 'R'}, 0, NULL, NULL, 0, 0 }
00478
00479
00508 DLLExport int MQTTAsync_setCallbacks(MQTTAsync handle, void* context, MQTTAsync_connectionLost* cl,
00509 MQTTAsync_messageArrived* ma, MQTTAsync_deliveryComplete* dc);
00510
00511
00524 DLLExport int MQTTAsync_setConnected(MQTTAsync handle, void* context, MQTTAsync_connected* co);
00525
00526
00535 DLLExport int MQTTAsync_reconnect(MQTTAsync handle);
00536
00537
00579 DLLExport int MQTTAsync_create(MQTTAsync* handle, const char* serverURI, const char* clientId,
00580 int persistence_type, void* persistence_context);
00581
00582 typedef struct
00583 {
00585 char struct_id[4];
00587 int struct_version;
00589 int sendWhileDisconnected;
00591 int maxBufferedMessages;
00592 } MQTTAsync_createOptions;
00593
00594 #define MQTTAsync_createOptions_initializer { {'M', 'Q', 'C', 'O'}, 0, 0, 100 }
00595
00596
00597 DLLExport int MQTTAsync_createWithOptions(MQTTAsync* handle, const char* serverURI, const char* clientId,
00598 int persistence_type, void* persistence_context, MQTTAsync_createOptions* options);
00599
00612 typedef struct
00613 {
00615 char struct_id[4];
00619 int struct_version;
00621 const char* topicName;
00623 const char* message;
00627 int retained;
00632 int qos;
00634 struct
00635 {
00636 int len;
00637 const void* data;
00638 } payload;
00639 } MQTTAsync_willOptions;
00640
00641 #define MQTTAsync_willOptions_initializer { {'M', 'Q', 'T', 'W'}, 1, NULL, NULL, 0, 0, { 0, NULL } }
00642
00643 #define MQTT_SSL_VERSION_DEFAULT 0
00644 #define MQTT_SSL_VERSION_TLS_1_0 1
00645 #define MQTT_SSL_VERSION_TLS_1_1 2
00646 #define MQTT_SSL_VERSION_TLS_1_2 3
00647
00660 typedef struct
00661 {
00663 char struct_id[4];
00665 int struct_version;
00666
00668 const char* trustStore;
00669
00673 const char* keyStore;
00674
00678 const char* privateKey;
00680 const char* privateKeyPassword;
00681
00690 const char* enabledCipherSuites;
00691
00693 int enableServerCertAuth;
00694
00699 int sslVersion;
00700
00706 int verify;
00707
00713 const char* CApath;
00714 } MQTTAsync_SSLOptions;
00715
00716 #define MQTTAsync_SSLOptions_initializer { {'M', 'Q', 'T', 'S'}, 2, NULL, NULL, NULL, NULL, NULL, 1, MQTT_SSL_VERSION_DEFAULT, 0, NULL }
00717
00723 typedef struct
00724 {
00726 char struct_id[4];
00734 int struct_version;
00745 int keepAliveInterval;
00767 int cleansession;
00771 int maxInflight;
00777 MQTTAsync_willOptions* will;
00783 const char* username;
00789 const char* password;
00793 int connectTimeout;
00797 int retryInterval;
00802 MQTTAsync_SSLOptions* ssl;
00808 MQTTAsync_onSuccess* onSuccess;
00814 MQTTAsync_onFailure* onFailure;
00820 void* context;
00824 int serverURIcount;
00833 char* const* serverURIs;
00840 int MQTTVersion;
00844 int automaticReconnect;
00848 int minRetryInterval;
00852 int maxRetryInterval;
00856 struct {
00857 int len;
00858 const void* data;
00859 } binarypwd;
00860 } MQTTAsync_connectOptions;
00861
00862
00863 #define MQTTAsync_connectOptions_initializer { {'M', 'Q', 'T', 'C'}, 5, 60, 1, 10, NULL, NULL, NULL, 30, 0,\
00864 NULL, NULL, NULL, NULL, 0, NULL, 0, 0, 1, 60, {0, NULL}}
00865
00886 DLLExport int MQTTAsync_connect(MQTTAsync handle, const MQTTAsync_connectOptions* options);
00887
00888
00889 typedef struct
00890 {
00892 char struct_id[4];
00894 int struct_version;
00899 int timeout;
00905 MQTTAsync_onSuccess* onSuccess;
00911 MQTTAsync_onFailure* onFailure;
00917 void* context;
00918 } MQTTAsync_disconnectOptions;
00919
00920 #define MQTTAsync_disconnectOptions_initializer { {'M', 'Q', 'T', 'D'}, 0, 0, NULL, NULL, NULL }
00921
00922
00941 DLLExport int MQTTAsync_disconnect(MQTTAsync handle, const MQTTAsync_disconnectOptions* options);
00942
00943
00951 DLLExport int MQTTAsync_isConnected(MQTTAsync handle);
00952
00953
00968 DLLExport int MQTTAsync_subscribe(MQTTAsync handle, const char* topic, int qos, MQTTAsync_responseOptions* response);
00969
00970
00988 DLLExport int MQTTAsync_subscribeMany(MQTTAsync handle, int count, char* const* topic, int* qos, MQTTAsync_responseOptions* response);
00989
01002 DLLExport int MQTTAsync_unsubscribe(MQTTAsync handle, const char* topic, MQTTAsync_responseOptions* response);
01003
01016 DLLExport int MQTTAsync_unsubscribeMany(MQTTAsync handle, int count, char* const* topic, MQTTAsync_responseOptions* response);
01017
01018
01037 DLLExport int MQTTAsync_send(MQTTAsync handle, const char* destinationName, int payloadlen, void* payload, int qos, int retained,
01038 MQTTAsync_responseOptions* response);
01039
01040
01056 DLLExport int MQTTAsync_sendMessage(MQTTAsync handle, const char* destinationName, const MQTTAsync_message* msg, MQTTAsync_responseOptions* response);
01057
01058
01077 DLLExport int MQTTAsync_getPendingTokens(MQTTAsync handle, MQTTAsync_token **tokens);
01078
01087 #define MQTTASYNC_TRUE 1
01088 DLLExport int MQTTAsync_isComplete(MQTTAsync handle, MQTTAsync_token token);
01089
01090
01101 DLLExport int MQTTAsync_waitForCompletion(MQTTAsync handle, MQTTAsync_token token, unsigned long timeout);
01102
01103
01114 DLLExport void MQTTAsync_freeMessage(MQTTAsync_message** msg);
01115
01124 DLLExport void MQTTAsync_free(void* ptr);
01125
01133 DLLExport void MQTTAsync_destroy(MQTTAsync* handle);
01134
01135
01136
01137 enum MQTTASYNC_TRACE_LEVELS
01138 {
01139 MQTTASYNC_TRACE_MAXIMUM = 1,
01140 MQTTASYNC_TRACE_MEDIUM,
01141 MQTTASYNC_TRACE_MINIMUM,
01142 MQTTASYNC_TRACE_PROTOCOL,
01143 MQTTASYNC_TRACE_ERROR,
01144 MQTTASYNC_TRACE_SEVERE,
01145 MQTTASYNC_TRACE_FATAL,
01146 };
01147
01148
01154 DLLExport void MQTTAsync_setTraceLevel(enum MQTTASYNC_TRACE_LEVELS level);
01155
01156
01165 typedef void MQTTAsync_traceCallback(enum MQTTASYNC_TRACE_LEVELS level, char* message);
01166
01173 DLLExport void MQTTAsync_setTraceCallback(MQTTAsync_traceCallback* callback);
01174
01175
01176 typedef struct
01177 {
01178 const char* name;
01179 const char* value;
01180 } MQTTAsync_nameValue;
01181
01188 DLLExport MQTTAsync_nameValue* MQTTAsync_getVersionInfo(void);
01189
01190
01747 #endif
01748
01749 #ifdef __cplusplus
01750 }
01751 #endif