mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-07-17 19:13:52 +08:00

Commit ID: 13018449 Add global "mqtt" to manage both "ESP-MQTT" and "IBM-MQTT". Using select the target MQTT to using like selecting SSL.
132 lines
3.6 KiB
C
132 lines
3.6 KiB
C
/*******************************************************************************
|
|
* Copyright (c) 2014, 2015 IBM Corp.
|
|
*
|
|
* All rights reserved. This program and the accompanying materials
|
|
* are made available under the terms of the Eclipse Public License v1.0
|
|
* and Eclipse Distribution License v1.0 which accompany this distribution.
|
|
*
|
|
* The Eclipse Public License is available at
|
|
* http://www.eclipse.org/legal/epl-v10.html
|
|
* and the Eclipse Distribution License is available at
|
|
* http://www.eclipse.org/org/documents/edl-v10.php.
|
|
*
|
|
* Contributors:
|
|
* Allan Stockdill-Mander - initial API and implementation and/or initial documentation
|
|
*******************************************************************************/
|
|
|
|
#ifndef MQTTFreeRTOS_H
|
|
#define MQTTFreeRTOS_H
|
|
|
|
#include "freertos/FreeRTOS.h"
|
|
#include "freertos/semphr.h"
|
|
#include "freertos/task.h"
|
|
|
|
#ifdef CONFIG_SSL_USING_MBEDTLS
|
|
#include "openssl/ssl.h"
|
|
#endif
|
|
|
|
#define OVER_TCP 0 // 0: MQTT over TCP
|
|
#define TLS_VERIFY_NONE 1 // 1: enable SSL/TLS, but there is no a certificate verify
|
|
#define TLS_VERIFY_PEER 2 // 2: enable SSL/TLS, and verify the MQTT broker certificate
|
|
#define TLS_VERIFY_CLIENT 3 // 3: enable SSL/TLS, and verify the MQTT broker certificate, and enable certificate for MQTT broker
|
|
|
|
typedef struct Timer {
|
|
TickType_t xTicksToWait;
|
|
TimeOut_t xTimeOut;
|
|
} Timer;
|
|
|
|
typedef struct Network Network;
|
|
|
|
struct Network {
|
|
int my_socket;
|
|
int (*mqttread)(Network *, unsigned char *, unsigned int, unsigned int);
|
|
int (*mqttwrite)(Network *, unsigned char *, unsigned int, unsigned int);
|
|
void (*disconnect)(Network *);
|
|
|
|
int read_count;
|
|
#ifdef CONFIG_SSL_USING_MBEDTLS
|
|
SSL_CTX *ctx;
|
|
SSL *ssl;
|
|
#endif
|
|
};
|
|
|
|
void TimerInit(Timer *);
|
|
char TimerIsExpired(Timer *);
|
|
void TimerCountdownMS(Timer *, unsigned int);
|
|
void TimerCountdown(Timer *, unsigned int);
|
|
int TimerLeftMS(Timer *);
|
|
|
|
typedef struct Mutex {
|
|
SemaphoreHandle_t sem;
|
|
} Mutex;
|
|
|
|
void MutexInit(Mutex *);
|
|
int MutexLock(Mutex *);
|
|
int MutexUnlock(Mutex *);
|
|
|
|
typedef struct Thread {
|
|
TaskHandle_t task;
|
|
} Thread;
|
|
|
|
int ThreadStart(Thread *, void (*fn)(void *), void *arg);
|
|
|
|
/**
|
|
* @brief Initialize the network structure
|
|
*
|
|
* @param m - network structure
|
|
*
|
|
* @return void
|
|
*/
|
|
void NetworkInit(Network *);
|
|
|
|
/**
|
|
* @brief connect with mqtt broker
|
|
*
|
|
* @param n - mqtt network struct
|
|
* @param addr - mqtt broker address
|
|
* @param port - mqtt broker port
|
|
*
|
|
* @return connect status
|
|
*/
|
|
int NetworkConnect(Network *n, char *addr, int port);
|
|
|
|
#ifdef CONFIG_SSL_USING_MBEDTLS
|
|
typedef struct ssl_ca_crt_key {
|
|
unsigned char *cacrt;
|
|
unsigned int cacrt_len;
|
|
unsigned char *cert;
|
|
unsigned int cert_len;
|
|
unsigned char *key;
|
|
unsigned int key_len;
|
|
} ssl_ca_crt_key_t;
|
|
|
|
/**
|
|
* @brief Initialize the network structure for SSL connection
|
|
*
|
|
* @param m - network structure
|
|
*
|
|
* @return void
|
|
*/
|
|
void NetworkInitSSL(Network *n);
|
|
|
|
/**
|
|
* @brief Use SSL to connect with mqtt broker
|
|
*
|
|
* @param n - mqtt network struct
|
|
* @param addr - mqtt broker address
|
|
* @param port - mqtt broker port
|
|
* @param ssl_cck - client CA, certificate and private key
|
|
* @param method - SSL context client method
|
|
* @param verify_mode - SSL verifying mode
|
|
* @param frag_len - SSL read buffer length
|
|
*
|
|
* @return connect status
|
|
*/
|
|
int NetworkConnectSSL(Network *n, char *addr, int port, ssl_ca_crt_key_t *ssl_cck, const SSL_METHOD *method, int verify_mode, unsigned int frag_len);
|
|
|
|
/*int NetworkConnectTLS(Network*, char*, int, SlSockSecureFiles_t*, unsigned char, unsigned int, char);*/
|
|
|
|
#endif
|
|
|
|
#endif
|