diff --git a/lib/espMqttClient/src/Transport/ClientSecureSync.cpp b/lib/espMqttClient/src/Transport/ClientSecureSync.cpp index 295cfc5..a96a47e 100644 --- a/lib/espMqttClient/src/Transport/ClientSecureSync.cpp +++ b/lib/espMqttClient/src/Transport/ClientSecureSync.cpp @@ -13,61 +13,61 @@ the LICENSE file. namespace espMqttClientInternals { -ClientSecureSync::ClientSecureSync() -: client() { +ClientSecureSync::ClientSecureSync(WiFiClientSecure* wiFiClient) +: client(wiFiClient) { // empty } bool ClientSecureSync::connect(IPAddress ip, uint16_t port) { - bool ret = client.connect(ip, port); // implicit conversion of return code int --> bool + bool ret = client->connect(ip, port); // implicit conversion of return code int --> bool if (ret) { #if defined(ARDUINO_ARCH_ESP8266) - client.setNoDelay(true); + client->setNoDelay(true); #elif defined(ARDUINO_ARCH_ESP32) // Set TCP option directly to bypass lack of working setNoDelay for WiFiClientSecure int val = true; - client.setSocketOption(IPPROTO_TCP, TCP_NODELAY, &val, sizeof(int)); + client->setSocketOption(IPPROTO_TCP, TCP_NODELAY, &val, sizeof(int)); #endif } return ret; } bool ClientSecureSync::connect(const char* host, uint16_t port) { - bool ret = client.connect(host, port); // implicit conversion of return code int --> bool + bool ret = client->connect(host, port); // implicit conversion of return code int --> bool if (ret) { #if defined(ARDUINO_ARCH_ESP8266) - client.setNoDelay(true); + client->setNoDelay(true); #elif defined(ARDUINO_ARCH_ESP32) // Set TCP option directly to bypass lack of working setNoDelay for WiFiClientSecure int val = true; - client.setSocketOption(IPPROTO_TCP, TCP_NODELAY, &val, sizeof(int)); + client->setSocketOption(IPPROTO_TCP, TCP_NODELAY, &val, sizeof(int)); #endif } return ret; } size_t ClientSecureSync::write(const uint8_t* buf, size_t size) { - return client.write(buf, size); + return client->write(buf, size); } int ClientSecureSync::available() { - return client.available(); + return client->available(); } int ClientSecureSync::read(uint8_t* buf, size_t size) { - return client.read(buf, size); + return client->read(buf, size); } void ClientSecureSync::stop() { - client.stop(); + client->stop(); } bool ClientSecureSync::connected() { - return client.connected(); + return client->connected(); } bool ClientSecureSync::disconnected() { - return !client.connected(); + return !client->connected(); } } // namespace espMqttClientInternals diff --git a/lib/espMqttClient/src/Transport/ClientSecureSync.h b/lib/espMqttClient/src/Transport/ClientSecureSync.h index 8f8cfa1..4d62d97 100644 --- a/lib/espMqttClient/src/Transport/ClientSecureSync.h +++ b/lib/espMqttClient/src/Transport/ClientSecureSync.h @@ -18,7 +18,7 @@ namespace espMqttClientInternals { class ClientSecureSync : public Transport { public: - ClientSecureSync(); + ClientSecureSync(WiFiClientSecure* wiFiClient); bool connect(IPAddress ip, uint16_t port) override; bool connect(const char* host, uint16_t port) override; size_t write(const uint8_t* buf, size_t size) override; @@ -27,7 +27,7 @@ class ClientSecureSync : public Transport { void stop() override; bool connected() override; bool disconnected() override; - WiFiClientSecure client; + WiFiClientSecure* client; }; } // namespace espMqttClientInternals diff --git a/lib/espMqttClient/src/espMqttClient.cpp b/lib/espMqttClient/src/espMqttClient.cpp index 1a1e0f6..0753a0e 100644 --- a/lib/espMqttClient/src/espMqttClient.cpp +++ b/lib/espMqttClient/src/espMqttClient.cpp @@ -21,9 +21,9 @@ espMqttClient::espMqttClient() #if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32) #if defined(ARDUINO_ARCH_ESP32) -espMqttClientSecure::espMqttClientSecure(uint8_t priority, uint8_t core) +espMqttClientSecure::espMqttClientSecure(WiFiClientSecure* wiFiClient, uint8_t priority, uint8_t core) : MqttClientSetup(priority, core) -, _client() { +, _client(wiFiClient) { #else espMqttClientSecure::espMqttClientSecure() : _client() { @@ -32,53 +32,53 @@ espMqttClientSecure::espMqttClientSecure() } espMqttClientSecure& espMqttClientSecure::setInsecure() { - _client.client.setInsecure(); + _client.client->setInsecure(); return *this; } #if defined(ARDUINO_ARCH_ESP32) espMqttClientSecure& espMqttClientSecure::setCACert(const char* rootCA) { - _client.client.setCACert(rootCA); + _client.client->setCACert(rootCA); return *this; } espMqttClientSecure& espMqttClientSecure::setCertificate(const char* clientCa) { - _client.client.setCertificate(clientCa); + _client.client->setCertificate(clientCa); return *this; } espMqttClientSecure& espMqttClientSecure::setPrivateKey(const char* privateKey) { - _client.client.setPrivateKey(privateKey); + _client.client->setPrivateKey(privateKey); return *this; } espMqttClientSecure& espMqttClientSecure::setPreSharedKey(const char* pskIdent, const char* psKey) { - _client.client.setPreSharedKey(pskIdent, psKey); + _client.client->setPreSharedKey(pskIdent, psKey); return *this; } #elif defined(ARDUINO_ARCH_ESP8266) espMqttClientSecure& espMqttClientSecure::setFingerprint(const uint8_t fingerprint[20]) { - _client.client.setFingerprint(fingerprint); + _client.client->setFingerprint(fingerprint); return *this; } espMqttClientSecure& espMqttClientSecure::setTrustAnchors(const X509List *ta) { - _client.client.setTrustAnchors(ta); + _client.client->setTrustAnchors(ta); return *this; } espMqttClientSecure& espMqttClientSecure::setClientRSACert(const X509List *cert, const PrivateKey *sk) { - _client.client.setClientRSACert(cert, sk); + _client.client->setClientRSACert(cert, sk); return *this; } espMqttClientSecure& espMqttClientSecure::setClientECCert(const X509List *cert, const PrivateKey *sk, unsigned allowed_usages, unsigned cert_issuer_key_type) { - _client.client.setClientECCert(cert, sk, allowed_usages, cert_issuer_key_type); + _client.client->setClientECCert(cert, sk, allowed_usages, cert_issuer_key_type); return *this; } espMqttClientSecure& espMqttClientSecure::setCertStore(CertStoreBase *certStore) { - _client.client.setCertStore(certStore); + _client.client->setCertStore(certStore); return *this; } #endif diff --git a/lib/espMqttClient/src/espMqttClient.h b/lib/espMqttClient/src/espMqttClient.h index 08affc1..15b8634 100644 --- a/lib/espMqttClient/src/espMqttClient.h +++ b/lib/espMqttClient/src/espMqttClient.h @@ -41,7 +41,7 @@ protected: class espMqttClientSecure : public MqttClientSetup { public: #if defined(ARDUINO_ARCH_ESP32) - explicit espMqttClientSecure(uint8_t priority = 1, uint8_t core = 1); + explicit espMqttClientSecure(WiFiClientSecure* wiFiClient, uint8_t priority = 1, uint8_t core = 1); #else espMqttClientSecure(); #endif diff --git a/networkDevices/WifiDevice.cpp b/networkDevices/WifiDevice.cpp index 1154560..b7693b7 100644 --- a/networkDevices/WifiDevice.cpp +++ b/networkDevices/WifiDevice.cpp @@ -32,8 +32,7 @@ WifiDevice::WifiDevice(const String& hostname, Preferences* _preferences) _wifiClientSecure->setCertificate(_cert); _wifiClientSecure->setPrivateKey(_key); } - // TODO -// _mqttClient = new espMqttClient(*_wifiClientSecure); + _mqttClient = new espMqttClientSecure(_wifiClientSecure); } else { Log->println(F("MQTT without TLS."));