/* Copyright (c) 2022 Bert Melis. All rights reserved. API is based on the original work of Marvin Roger: https://github.com/marvinroger/async-mqtt-client This work is licensed under the terms of the MIT license. For a copy, see or the LICENSE file. */ #pragma once #if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32) #include "Transport/ClientSync.h" #include "Transport/ClientSecureSync.h" #elif defined(__linux__) #include "Transport/ClientPosix.h" #endif #include "MqttClientSetup.h" #if defined(ARDUINO_ARCH_ESP8266) class espMqttClient : public MqttClientSetup { public: espMqttClient(); protected: espMqttClientInternals::ClientSync _client; }; class espMqttClientSecure : public MqttClientSetup { public: espMqttClientSecure(); espMqttClientSecure & setInsecure(); espMqttClientSecure & setFingerprint(const uint8_t fingerprint[20]); espMqttClientSecure & setTrustAnchors(const X509List * ta); espMqttClientSecure & setClientRSACert(const X509List * cert, const PrivateKey * sk); espMqttClientSecure & setClientECCert(const X509List * cert, const PrivateKey * sk, unsigned allowed_usages, unsigned cert_issuer_key_type); espMqttClientSecure & setCertStore(CertStoreBase * certStore); protected: espMqttClientInternals::ClientSecureSync _client; }; #endif #if defined(ARDUINO_ARCH_ESP32) class espMqttClient : public MqttClientSetup { public: explicit espMqttClient(espMqttClientTypes::UseInternalTask useInternalTask); explicit espMqttClient(uint8_t priority = 1, uint8_t core = 1); protected: espMqttClientInternals::ClientSync _client; }; class espMqttClientSecure : public MqttClientSetup { public: explicit espMqttClientSecure(espMqttClientTypes::UseInternalTask useInternalTask); explicit espMqttClientSecure(uint8_t priority = 1, uint8_t core = 1); espMqttClientSecure & setInsecure(); espMqttClientSecure & setCACert(const char * rootCA); espMqttClientSecure & setCertificate(const char * clientCa); espMqttClientSecure & setPrivateKey(const char * privateKey); espMqttClientSecure & setPreSharedKey(const char * pskIdent, const char * psKey); protected: espMqttClientInternals::ClientSecureSync _client; }; #elif defined(__linux__) class espMqttClient : public MqttClientSetup { public: espMqttClient(); protected: espMqttClientInternals::ClientPosix _client; }; #elif defined(_WIN32) || defined(__APPLE__) class espMqttClient : public MqttClientSetup { public: espMqttClient(); }; #endif