restore encrypted mqtt functionality

This commit is contained in:
technyon
2023-01-28 10:23:26 +01:00
parent e439d67276
commit d96f22f7a3
5 changed files with 30 additions and 31 deletions

View File

@@ -13,61 +13,61 @@ the LICENSE file.
namespace espMqttClientInternals { namespace espMqttClientInternals {
ClientSecureSync::ClientSecureSync() ClientSecureSync::ClientSecureSync(WiFiClientSecure* wiFiClient)
: client() { : client(wiFiClient) {
// empty // empty
} }
bool ClientSecureSync::connect(IPAddress ip, uint16_t port) { 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 (ret) {
#if defined(ARDUINO_ARCH_ESP8266) #if defined(ARDUINO_ARCH_ESP8266)
client.setNoDelay(true); client->setNoDelay(true);
#elif defined(ARDUINO_ARCH_ESP32) #elif defined(ARDUINO_ARCH_ESP32)
// Set TCP option directly to bypass lack of working setNoDelay for WiFiClientSecure // Set TCP option directly to bypass lack of working setNoDelay for WiFiClientSecure
int val = true; int val = true;
client.setSocketOption(IPPROTO_TCP, TCP_NODELAY, &val, sizeof(int)); client->setSocketOption(IPPROTO_TCP, TCP_NODELAY, &val, sizeof(int));
#endif #endif
} }
return ret; return ret;
} }
bool ClientSecureSync::connect(const char* host, uint16_t port) { 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 (ret) {
#if defined(ARDUINO_ARCH_ESP8266) #if defined(ARDUINO_ARCH_ESP8266)
client.setNoDelay(true); client->setNoDelay(true);
#elif defined(ARDUINO_ARCH_ESP32) #elif defined(ARDUINO_ARCH_ESP32)
// Set TCP option directly to bypass lack of working setNoDelay for WiFiClientSecure // Set TCP option directly to bypass lack of working setNoDelay for WiFiClientSecure
int val = true; int val = true;
client.setSocketOption(IPPROTO_TCP, TCP_NODELAY, &val, sizeof(int)); client->setSocketOption(IPPROTO_TCP, TCP_NODELAY, &val, sizeof(int));
#endif #endif
} }
return ret; return ret;
} }
size_t ClientSecureSync::write(const uint8_t* buf, size_t size) { size_t ClientSecureSync::write(const uint8_t* buf, size_t size) {
return client.write(buf, size); return client->write(buf, size);
} }
int ClientSecureSync::available() { int ClientSecureSync::available() {
return client.available(); return client->available();
} }
int ClientSecureSync::read(uint8_t* buf, size_t size) { int ClientSecureSync::read(uint8_t* buf, size_t size) {
return client.read(buf, size); return client->read(buf, size);
} }
void ClientSecureSync::stop() { void ClientSecureSync::stop() {
client.stop(); client->stop();
} }
bool ClientSecureSync::connected() { bool ClientSecureSync::connected() {
return client.connected(); return client->connected();
} }
bool ClientSecureSync::disconnected() { bool ClientSecureSync::disconnected() {
return !client.connected(); return !client->connected();
} }
} // namespace espMqttClientInternals } // namespace espMqttClientInternals

View File

@@ -18,7 +18,7 @@ namespace espMqttClientInternals {
class ClientSecureSync : public Transport { class ClientSecureSync : public Transport {
public: public:
ClientSecureSync(); ClientSecureSync(WiFiClientSecure* wiFiClient);
bool connect(IPAddress ip, uint16_t port) override; bool connect(IPAddress ip, uint16_t port) override;
bool connect(const char* host, uint16_t port) override; bool connect(const char* host, uint16_t port) override;
size_t write(const uint8_t* buf, size_t size) override; size_t write(const uint8_t* buf, size_t size) override;
@@ -27,7 +27,7 @@ class ClientSecureSync : public Transport {
void stop() override; void stop() override;
bool connected() override; bool connected() override;
bool disconnected() override; bool disconnected() override;
WiFiClientSecure client; WiFiClientSecure* client;
}; };
} // namespace espMqttClientInternals } // namespace espMqttClientInternals

View File

@@ -21,9 +21,9 @@ espMqttClient::espMqttClient()
#if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32) #if defined(ARDUINO_ARCH_ESP8266) || defined(ARDUINO_ARCH_ESP32)
#if 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) : MqttClientSetup(priority, core)
, _client() { , _client(wiFiClient) {
#else #else
espMqttClientSecure::espMqttClientSecure() espMqttClientSecure::espMqttClientSecure()
: _client() { : _client() {
@@ -32,53 +32,53 @@ espMqttClientSecure::espMqttClientSecure()
} }
espMqttClientSecure& espMqttClientSecure::setInsecure() { espMqttClientSecure& espMqttClientSecure::setInsecure() {
_client.client.setInsecure(); _client.client->setInsecure();
return *this; return *this;
} }
#if defined(ARDUINO_ARCH_ESP32) #if defined(ARDUINO_ARCH_ESP32)
espMqttClientSecure& espMqttClientSecure::setCACert(const char* rootCA) { espMqttClientSecure& espMqttClientSecure::setCACert(const char* rootCA) {
_client.client.setCACert(rootCA); _client.client->setCACert(rootCA);
return *this; return *this;
} }
espMqttClientSecure& espMqttClientSecure::setCertificate(const char* clientCa) { espMqttClientSecure& espMqttClientSecure::setCertificate(const char* clientCa) {
_client.client.setCertificate(clientCa); _client.client->setCertificate(clientCa);
return *this; return *this;
} }
espMqttClientSecure& espMqttClientSecure::setPrivateKey(const char* privateKey) { espMqttClientSecure& espMqttClientSecure::setPrivateKey(const char* privateKey) {
_client.client.setPrivateKey(privateKey); _client.client->setPrivateKey(privateKey);
return *this; return *this;
} }
espMqttClientSecure& espMqttClientSecure::setPreSharedKey(const char* pskIdent, const char* psKey) { espMqttClientSecure& espMqttClientSecure::setPreSharedKey(const char* pskIdent, const char* psKey) {
_client.client.setPreSharedKey(pskIdent, psKey); _client.client->setPreSharedKey(pskIdent, psKey);
return *this; return *this;
} }
#elif defined(ARDUINO_ARCH_ESP8266) #elif defined(ARDUINO_ARCH_ESP8266)
espMqttClientSecure& espMqttClientSecure::setFingerprint(const uint8_t fingerprint[20]) { espMqttClientSecure& espMqttClientSecure::setFingerprint(const uint8_t fingerprint[20]) {
_client.client.setFingerprint(fingerprint); _client.client->setFingerprint(fingerprint);
return *this; return *this;
} }
espMqttClientSecure& espMqttClientSecure::setTrustAnchors(const X509List *ta) { espMqttClientSecure& espMqttClientSecure::setTrustAnchors(const X509List *ta) {
_client.client.setTrustAnchors(ta); _client.client->setTrustAnchors(ta);
return *this; return *this;
} }
espMqttClientSecure& espMqttClientSecure::setClientRSACert(const X509List *cert, const PrivateKey *sk) { espMqttClientSecure& espMqttClientSecure::setClientRSACert(const X509List *cert, const PrivateKey *sk) {
_client.client.setClientRSACert(cert, sk); _client.client->setClientRSACert(cert, sk);
return *this; return *this;
} }
espMqttClientSecure& espMqttClientSecure::setClientECCert(const X509List *cert, const PrivateKey *sk, unsigned allowed_usages, unsigned cert_issuer_key_type) { 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; return *this;
} }
espMqttClientSecure& espMqttClientSecure::setCertStore(CertStoreBase *certStore) { espMqttClientSecure& espMqttClientSecure::setCertStore(CertStoreBase *certStore) {
_client.client.setCertStore(certStore); _client.client->setCertStore(certStore);
return *this; return *this;
} }
#endif #endif

View File

@@ -41,7 +41,7 @@ protected:
class espMqttClientSecure : public MqttClientSetup { class espMqttClientSecure : public MqttClientSetup {
public: public:
#if defined(ARDUINO_ARCH_ESP32) #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 #else
espMqttClientSecure(); espMqttClientSecure();
#endif #endif

View File

@@ -32,8 +32,7 @@ WifiDevice::WifiDevice(const String& hostname, Preferences* _preferences)
_wifiClientSecure->setCertificate(_cert); _wifiClientSecure->setCertificate(_cert);
_wifiClientSecure->setPrivateKey(_key); _wifiClientSecure->setPrivateKey(_key);
} }
// TODO _mqttClient = new espMqttClientSecure(_wifiClientSecure);
// _mqttClient = new espMqttClient(*_wifiClientSecure);
} else } else
{ {
Log->println(F("MQTT without TLS.")); Log->println(F("MQTT without TLS."));