123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187 |
- /*******************************************************************************
- * Copyright (c) 2009, 2022 IBM Corp. and others
- *
- * All rights reserved. This program and the accompanying materials
- * are made available under the terms of the Eclipse Public License v2.0
- * and Eclipse Distribution License v1.0 which accompany this distribution.
- *
- * The Eclipse Public License is available at
- * https://www.eclipse.org/legal/epl-2.0/
- * and the Eclipse Distribution License is available at
- * http://www.eclipse.org/org/documents/edl-v10.php.
- *
- * Contributors:
- * Ian Craggs - initial implementation and documentation
- *******************************************************************************/
- #if !defined(MQTTASYNCUTILS_H_)
- #define MQTTASYNCUTILS_H_
- #include "MQTTPacket.h"
- #include "Thread.h"
- #define URI_TCP "tcp://"
- #define URI_MQTT "mqtt://"
- #define URI_WS "ws://"
- #define URI_WSS "wss://"
- enum MQTTAsync_threadStates
- {
- STOPPED, STARTING, RUNNING, STOPPING
- };
- typedef struct
- {
- MQTTAsync_message* msg;
- char* topicName;
- int topicLen;
- unsigned int seqno; /* only used on restore */
- } qEntry;
- typedef struct
- {
- int type;
- MQTTAsync_onSuccess* onSuccess;
- MQTTAsync_onFailure* onFailure;
- MQTTAsync_onSuccess5* onSuccess5;
- MQTTAsync_onFailure5* onFailure5;
- MQTTAsync_token token;
- void* context;
- START_TIME_TYPE start_time;
- MQTTProperties properties;
- union
- {
- struct
- {
- int count;
- char** topics;
- int* qoss;
- MQTTSubscribe_options opts;
- MQTTSubscribe_options* optlist;
- } sub;
- struct
- {
- int count;
- char** topics;
- } unsub;
- struct
- {
- char* destinationName;
- int payloadlen;
- void* payload;
- int qos;
- int retained;
- } pub;
- struct
- {
- int internal;
- int timeout;
- enum MQTTReasonCodes reasonCode;
- } dis;
- struct
- {
- int currentURI;
- int MQTTVersion; /**< current MQTT version being used to connect */
- } conn;
- } details;
- } MQTTAsync_command;
- typedef struct MQTTAsync_struct
- {
- char* serverURI;
- int ssl;
- int websocket;
- Clients* c;
- /* "Global", to the client, callback definitions */
- MQTTAsync_connectionLost* cl;
- MQTTAsync_messageArrived* ma;
- MQTTAsync_deliveryComplete* dc;
- void* clContext; /* the context to be associated with the conn lost callback*/
- void* maContext; /* the context to be associated with the msg arrived callback*/
- void* dcContext; /* the context to be associated with the deliv complete callback*/
- MQTTAsync_connected* connected;
- void* connected_context; /* the context to be associated with the connected callback*/
- MQTTAsync_disconnected* disconnected;
- void* disconnected_context; /* the context to be associated with the disconnected callback*/
- MQTTAsync_updateConnectOptions* updateConnectOptions;
- void* updateConnectOptions_context;
- /* Each time connect is called, we store the options that were used. These are reused in
- any call to reconnect, or an automatic reconnect attempt */
- MQTTAsync_command connect; /* Connect operation properties */
- MQTTAsync_command disconnect; /* Disconnect operation properties */
- MQTTAsync_command* pending_write; /* Is there a socket write pending? */
- List* responses;
- unsigned int command_seqno;
- MQTTPacket* pack;
- /* added for offline buffering */
- MQTTAsync_createOptions* createOptions;
- int shouldBeConnected;
- int noBufferedMessages; /* the current number of buffered (publish) messages for this client */
- /* added for automatic reconnect */
- int automaticReconnect;
- int minRetryInterval;
- int maxRetryInterval;
- int serverURIcount;
- char** serverURIs;
- int connectTimeout;
- int currentInterval;
- int currentIntervalBase;
- START_TIME_TYPE lastConnectionFailedTime;
- int retrying;
- int reconnectNow;
- /* MQTT V5 properties */
- MQTTProperties* connectProps;
- MQTTProperties* willProps;
- } MQTTAsyncs;
- typedef struct
- {
- MQTTAsync_command command;
- MQTTAsyncs* client;
- unsigned int seqno; /* only used on restore */
- int not_restored;
- char* key; /* if not_restored, this holds the key */
- } MQTTAsync_queuedCommand;
- void MQTTAsync_lock_mutex(mutex_type amutex);
- void MQTTAsync_unlock_mutex(mutex_type amutex);
- void MQTTAsync_terminate(void);
- #if !defined(NO_PERSISTENCE)
- int MQTTAsync_restoreCommands(MQTTAsyncs* client);
- #endif
- int MQTTAsync_addCommand(MQTTAsync_queuedCommand* command, int command_size);
- void MQTTAsync_emptyMessageQueue(Clients* client);
- void MQTTAsync_freeResponses(MQTTAsyncs* m);
- void MQTTAsync_freeCommands(MQTTAsyncs* m);
- int MQTTAsync_unpersistCommandsAndMessages(Clients* c);
- void MQTTAsync_closeSession(Clients* client, enum MQTTReasonCodes reasonCode, MQTTProperties* props);
- int MQTTAsync_disconnect1(MQTTAsync handle, const MQTTAsync_disconnectOptions* options, int internal);
- int MQTTAsync_assignMsgId(MQTTAsyncs* m);
- int MQTTAsync_getNoBufferedMessages(MQTTAsyncs* m);
- void MQTTAsync_writeContinue(SOCKET socket);
- void MQTTAsync_writeComplete(SOCKET socket, int rc);
- void setRetryLoopInterval(int keepalive);
- void MQTTAsync_NULLPublishResponses(MQTTAsyncs* m);
- void MQTTAsync_NULLPublishCommands(MQTTAsyncs* m);
- #if defined(_WIN32) || defined(_WIN64)
- #else
- #define WINAPI
- #endif
- thread_return_type WINAPI MQTTAsync_sendThread(void* n);
- thread_return_type WINAPI MQTTAsync_receiveThread(void* n);
- #endif /* MQTTASYNCUTILS_H_ */
|