code
This commit is contained in:
156
Plugins/MqttClient/Source/DTMqtt/MqttC/Clients.h
Normal file
156
Plugins/MqttClient/Source/DTMqtt/MqttC/Clients.h
Normal file
@ -0,0 +1,156 @@
|
||||
// Copyright 2023 Dexter.Wan. All Rights Reserved.
|
||||
// EMail: 45141961@qq.com
|
||||
|
||||
#if !defined(CLIENTS_H)
|
||||
#define CLIENTS_H
|
||||
|
||||
#include <stdint.h>
|
||||
#include "MQTTTime.h"
|
||||
#if defined(_WIN32) || defined(_WIN64)
|
||||
#include <winsock2.h>
|
||||
#endif
|
||||
#if defined(OPENSSL)
|
||||
#include <openssl/ssl.h>
|
||||
#endif
|
||||
#include "MQTTClient.h"
|
||||
#include "LinkedList.h"
|
||||
#include "MQTTClientPersistence.h"
|
||||
#include "Socket.h"
|
||||
|
||||
/**
|
||||
* Stored publication data to minimize copying
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
char *topic;
|
||||
int topiclen;
|
||||
char* payload;
|
||||
int payloadlen;
|
||||
int refcount;
|
||||
uint8_t mask[4];
|
||||
} Publications;
|
||||
|
||||
/**
|
||||
* Client publication message data
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
int qos;
|
||||
int retain;
|
||||
int msgid;
|
||||
int MQTTVersion;
|
||||
MQTTProperties properties;
|
||||
Publications *publish;
|
||||
START_TIME_TYPE lastTouch; /**> used for retry and expiry */
|
||||
char nextMessageType; /**> PUBREC, PUBREL, PUBCOMP */
|
||||
int len; /**> length of the whole structure+data */
|
||||
} Messages;
|
||||
|
||||
/**
|
||||
* Client will message data
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
char *topic;
|
||||
int payloadlen;
|
||||
void *payload;
|
||||
int retained;
|
||||
int qos;
|
||||
} willMessages;
|
||||
|
||||
typedef struct
|
||||
{
|
||||
SOCKET socket;
|
||||
START_TIME_TYPE lastSent;
|
||||
START_TIME_TYPE lastReceived;
|
||||
START_TIME_TYPE lastPing;
|
||||
#if defined(OPENSSL)
|
||||
SSL* ssl;
|
||||
SSL_CTX* ctx;
|
||||
char *https_proxy;
|
||||
char *https_proxy_auth;
|
||||
#endif
|
||||
char *http_proxy;
|
||||
char *http_proxy_auth;
|
||||
int websocket; /**< socket has been upgraded to use web sockets */
|
||||
char *websocket_key;
|
||||
const MQTTClient_nameValue* httpHeaders;
|
||||
} networkHandles;
|
||||
|
||||
|
||||
/* connection states */
|
||||
/** no connection in progress, see connected value */
|
||||
#define NOT_IN_PROGRESS 0x0
|
||||
/** TCP connection in progress */
|
||||
#define TCP_IN_PROGRESS 0x1
|
||||
/** SSL connection in progress */
|
||||
#define SSL_IN_PROGRESS 0x2
|
||||
/** Websocket connection in progress */
|
||||
#define WEBSOCKET_IN_PROGRESS 0x3
|
||||
/** TCP completed, waiting for MQTT ACK */
|
||||
#define WAIT_FOR_CONNACK 0x4
|
||||
/** Proxy connection in progress */
|
||||
#define PROXY_CONNECT_IN_PROGRESS 0x5
|
||||
/** Disconnecting */
|
||||
#define DISCONNECTING -2
|
||||
|
||||
/**
|
||||
* Data related to one client
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
char* clientID; /**< the string id of the client */
|
||||
const char* username; /**< MQTT v3.1 user name */
|
||||
int passwordlen; /**< MQTT password length */
|
||||
const void* password; /**< MQTT v3.1 binary password */
|
||||
unsigned int cleansession : 1; /**< MQTT V3 clean session flag */
|
||||
unsigned int cleanstart : 1; /**< MQTT V5 clean start flag */
|
||||
unsigned int connected : 1; /**< whether it is currently connected */
|
||||
unsigned int good : 1; /**< if we have an error on the socket we turn this off */
|
||||
unsigned int ping_outstanding : 1;
|
||||
unsigned int ping_due : 1; /**< we couldn't send a ping so we should send one when we can */
|
||||
signed int connect_state : 4;
|
||||
START_TIME_TYPE ping_due_time; /**< the time at which the ping should have been sent (ping_due) */
|
||||
networkHandles net; /**< network info for this client */
|
||||
int msgID; /**< the MQTT message id */
|
||||
int keepAliveInterval; /**< the MQTT keep alive interval */
|
||||
int retryInterval; /**< the MQTT retry interval for QoS > 0 */
|
||||
int maxInflightMessages; /**< the max number of inflight outbound messages we allow */
|
||||
willMessages* will; /**< the MQTT will message, if any */
|
||||
List* inboundMsgs; /**< inbound in flight messages */
|
||||
List* outboundMsgs; /**< outbound in flight messages */
|
||||
int connect_count; /**< the number of outbound messages on reconnect - to ensure we send them all */
|
||||
int connect_sent; /**< the current number of outbound messages on reconnect that we've sent */
|
||||
List* messageQueue; /**< inbound complete but undelivered messages */
|
||||
List* outboundQueue; /**< outbound queued messages */
|
||||
unsigned int qentry_seqno;
|
||||
void* phandle; /**< the persistence handle */
|
||||
MQTTClient_persistence* persistence; /**< a persistence implementation */
|
||||
MQTTPersistence_beforeWrite* beforeWrite; /**< persistence write callback */
|
||||
MQTTPersistence_afterRead* afterRead; /**< persistence read callback */
|
||||
void* beforeWrite_context; /**< context to be used with the persistence beforeWrite callbacks */
|
||||
void* afterRead_context; /**< context to be used with the persistence afterRead callback */
|
||||
void* context; /**< calling context - used when calling disconnect_internal */
|
||||
int MQTTVersion; /**< the version of MQTT being used, 3, 4 or 5 */
|
||||
int sessionExpiry; /**< MQTT 5 session expiry */
|
||||
char* httpProxy; /**< HTTP proxy */
|
||||
char* httpsProxy; /**< HTTPS proxy */
|
||||
#if defined(OPENSSL)
|
||||
MQTTClient_SSLOptions *sslopts; /**< the SSL/TLS connect options */
|
||||
SSL_SESSION* session; /**< SSL session pointer for fast handhake */
|
||||
#endif
|
||||
} Clients;
|
||||
|
||||
int clientIDCompare(void* a, void* b);
|
||||
int clientSocketCompare(void* a, void* b);
|
||||
|
||||
/**
|
||||
* Configuration data related to all clients
|
||||
*/
|
||||
typedef struct
|
||||
{
|
||||
const char* version;
|
||||
List* clients;
|
||||
} ClientStates;
|
||||
|
||||
#endif
|
Reference in New Issue
Block a user