restore encrypted mqtt functionality
This commit is contained in:
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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
|
||||||
|
|||||||
@@ -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."));
|
||||||
|
|||||||
Reference in New Issue
Block a user