88 * please support Adafruit and open-source hardware by purchasing
99 * products from Adafruit!
1010 *
11- * Copyright (c) Brent Rubell 2020-2021 for Adafruit Industries.
11+ * Copyright (c) Brent Rubell 2020-2024 for Adafruit Industries.
1212 *
1313 * MIT license, all text here must be included in any redistribution.
1414 *
2525#include " Arduino.h"
2626#include " WiFi.h"
2727#include " WiFiMulti.h"
28- #include < WiFiClientSecure.h>
28+ #include < NetworkClient.h>
29+ #include < NetworkClientSecure.h>
2930extern Wippersnapper WS;
3031
3132/* ***************************************************************************/
@@ -44,7 +45,6 @@ class Wippersnapper_ESP32 : public Wippersnapper {
4445 Wippersnapper_ESP32 () : Wippersnapper() {
4546 _ssid = 0 ;
4647 _pass = 0 ;
47- _mqtt_client = new WiFiClientSecure;
4848 }
4949
5050 /* *************************************************************************/
@@ -53,8 +53,10 @@ class Wippersnapper_ESP32 : public Wippersnapper {
5353 */
5454 /* *************************************************************************/
5555 ~Wippersnapper_ESP32 () {
56- if (_mqtt_client)
57- delete _mqtt_client;
56+ if (_mqtt_client_secure)
57+ delete _mqtt_client_secure;
58+ if (_mqtt_client_insecure)
59+ delete _mqtt_client_insecure;
5860 }
5961
6062 /* *******************************************************/
@@ -156,18 +158,24 @@ class Wippersnapper_ESP32 : public Wippersnapper {
156158 */
157159 /* *******************************************************/
158160 void setupMQTTClient (const char *clientID) {
159- if (strcmp (WS._config .aio_url , " io.adafruit.com" ) == 0 ) {
160- _mqtt_client->setCACert (_aio_root_ca_prod);
161- } else if (strcmp (WS._config .aio_url , " io.adafruit.us" ) == 0 ) {
162- _mqtt_client->setCACert (_aio_root_ca_staging);
161+ if (strcmp (WS._config .aio_url , " io.adafruit.com" ) == 0 ||
162+ strcmp (WS._config .aio_url , " io.adafruit.us" ) == 0 ) {
163+ _mqtt_client_secure = new NetworkClientSecure ();
164+ _mqtt_client_secure->setCACert (
165+ strcmp (WS._config .aio_url , " io.adafruit.com" ) == 0
166+ ? _aio_root_ca_prod
167+ : _aio_root_ca_staging);
168+ WS._mqtt = new Adafruit_MQTT_Client (
169+ _mqtt_client_secure, WS._config .aio_url , WS._config .io_port , clientID,
170+ WS._config .aio_user , WS._config .aio_key );
163171 } else {
164- _mqtt_client->setInsecure ();
172+ // Insecure connections require a NetworkClient object rather than a
173+ // NetworkClientSecure object
174+ _mqtt_client_insecure = new NetworkClient ();
175+ WS._mqtt = new Adafruit_MQTT_Client (
176+ _mqtt_client_insecure, WS._config .aio_url , WS._config .io_port ,
177+ clientID, WS._config .aio_user , WS._config .aio_key );
165178 }
166-
167- // Construct MQTT client
168- WS._mqtt = new Adafruit_MQTT_Client (
169- _mqtt_client, WS._config .aio_url , WS._config .io_port , clientID,
170- WS._config .aio_user , WS._config .aio_key );
171179 }
172180
173181 /* *******************************************************/
@@ -198,37 +206,40 @@ class Wippersnapper_ESP32 : public Wippersnapper {
198206 const char *connectionType () { return " ESP32" ; }
199207
200208protected:
201- const char *_ssid; // /< WiFi SSID
202- const char *_pass; // /< WiFi password
203- WiFiClientSecure *_mqtt_client; // /< Pointer to a WiFi client object (TLS/SSL)
204- WiFiMulti _wifiMulti; // /< WiFiMulti object for multi-network mode
209+ const char *_ssid; // /< WiFi SSID
210+ const char *_pass; // /< WiFi password
211+ NetworkClientSecure
212+ *_mqtt_client_secure; // /< Pointer to a secure network client object
213+ NetworkClient
214+ *_mqtt_client_insecure; // /< Pointer to an insecure network client object
215+ WiFiMulti _wifiMulti; // /< WiFiMulti object for multi-network mode
205216
206217 const char *_aio_root_ca_staging =
207218 " -----BEGIN CERTIFICATE-----\n "
208- " MIIEZTCCA02gAwIBAgIQQAF1BIMUpMghjISpDBbN3zANBgkqhkiG9w0BAQsFADA/ \n "
209- " MSQwIgYDVQQKExtEaWdpdGFsIFNpZ25hdHVyZSBUcnVzdCBDby4xFzAVBgNVBAMT \n "
210- " DkRTVCBSb290IENBIFgzMB4XDTIwMTAwNzE5MjE0MFoXDTIxMDkyOTE5MjE0MFow \n "
211- " MjELMAkGA1UEBhMCVVMxFjAUBgNVBAoTDUxldCdzIEVuY3J5cHQxCzAJBgNVBAMT \n "
212- " AlIzMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAuwIVKMz2oJTTDxLs \n "
213- " jVWSw/iC8ZmmekKIp10mqrUrucVMsa+Oa/l1yKPXD0eUFFU1V4yeqKI5GfWCPEKp \n "
214- " Tm71O8Mu243AsFzzWTjn7c9p8FoLG77AlCQlh/o3cbMT5xys4Zvv2+Q7RVJFlqnB \n "
215- " U840yFLuta7tj95gcOKlVKu2bQ6XpUA0ayvTvGbrZjR8+muLj1cpmfgwF126cm/7 \n "
216- " gcWt0oZYPRfH5wm78Sv3htzB2nFd1EbjzK0lwYi8YGd1ZrPxGPeiXOZT/zqItkel \n "
217- " /xMY6pgJdz+dU/nPAeX1pnAXFK9jpP+Zs5Od3FOnBv5IhR2haa4ldbsTzFID9e1R \n "
218- " oYvbFQIDAQABo4IBaDCCAWQwEgYDVR0TAQH/BAgwBgEB/wIBADAOBgNVHQ8BAf8E \n "
219- " BAMCAYYwSwYIKwYBBQUHAQEEPzA9MDsGCCsGAQUFBzAChi9odHRwOi8vYXBwcy5p \n "
220- " ZGVudHJ1c3QuY29tL3Jvb3RzL2RzdHJvb3RjYXgzLnA3YzAfBgNVHSMEGDAWgBTE \n "
221- " p7Gkeyxx+tvhS5B1/8QVYIWJEDBUBgNVHSAETTBLMAgGBmeBDAECATA/BgsrBgEE \n "
222- " AYLfEwEBATAwMC4GCCsGAQUFBwIBFiJodHRwOi8vY3BzLnJvb3QteDEubGV0c2Vu \n "
223- " Y3J5cHQub3JnMDwGA1UdHwQ1MDMwMaAvoC2GK2h0dHA6Ly9jcmwuaWRlbnRydXN0 \n "
224- " LmNvbS9EU1RST09UQ0FYM0NSTC5jcmwwHQYDVR0OBBYEFBQusxe3WFbLrlAJQOYf \n "
225- " r52LFMLGMB0GA1UdJQQWMBQGCCsGAQUFBwMBBggrBgEFBQcDAjANBgkqhkiG9w0B \n "
226- " AQsFAAOCAQEA2UzgyfWEiDcx27sT4rP8i2tiEmxYt0l+PAK3qB8oYevO4C5z70kH \n "
227- " ejWEHx2taPDY/laBL21/WKZuNTYQHHPD5b1tXgHXbnL7KqC401dk5VvCadTQsvd8 \n "
228- " S8MXjohyc9z9/G2948kLjmE6Flh9dDYrVYA9x2O+hEPGOaEOa1eePynBgPayvUfL \n "
229- " qjBstzLhWVQLGAkXXmNs+5ZnPBxzDJOLxhF2JIbeQAcH5H0tZrUlo5ZYyOqA7s9p \n "
230- " O5b85o3AM/OJ+CktFBQtfvBhcJVd9wvlwPsk+uyOy2HI7mNxKKgsBTt375teA2Tw \n "
231- " UdHkhVNcsAKX1H7GNNLOEADksd86wuoXvg= =\n "
219+ " MIIEVzCCAj+gAwIBAgIRALBXPpFzlydw27SHyzpFKzgwDQYJKoZIhvcNAQELBQAw \n "
220+ " TzELMAkGA1UEBhMCVVMxKTAnBgNVBAoTIEludGVybmV0IFNlY3VyaXR5IFJlc2Vh \n "
221+ " cmNoIEdyb3VwMRUwEwYDVQQDEwxJU1JHIFJvb3QgWDEwHhcNMjQwMzEzMDAwMDAw \n "
222+ " WhcNMjcwMzEyMjM1OTU5WjAyMQswCQYDVQQGEwJVUzEWMBQGA1UEChMNTGV0J3Mg \n "
223+ " RW5jcnlwdDELMAkGA1UEAxMCRTYwdjAQBgcqhkjOPQIBBgUrgQQAIgNiAATZ8Z5G \n "
224+ " h/ghcWCoJuuj+rnq2h25EqfUJtlRFLFhfHWWvyILOR/VvtEKRqotPEoJhC6+QJVV \n "
225+ " 6RlAN2Z17TJOdwRJ+HB7wxjnzvdxEP6sdNgA1O1tHHMWMxCcOrLqbGL0vbijgfgw \n "
226+ " gfUwDgYDVR0PAQH/BAQDAgGGMB0GA1UdJQQWMBQGCCsGAQUFBwMCBggrBgEFBQcD \n "
227+ " ATASBgNVHRMBAf8ECDAGAQH/AgEAMB0GA1UdDgQWBBSTJ0aYA6lRaI6Y1sRCSNsj \n "
228+ " v1iU0jAfBgNVHSMEGDAWgBR5tFnme7bl5AFzgAiIyBpY9umbbjAyBggrBgEFBQcB \n "
229+ " AQQmMCQwIgYIKwYBBQUHMAKGFmh0dHA6Ly94MS5pLmxlbmNyLm9yZy8wEwYDVR0g \n "
230+ " BAwwCjAIBgZngQwBAgEwJwYDVR0fBCAwHjAcoBqgGIYWaHR0cDovL3gxLmMubGVu \n "
231+ " Y3Iub3JnLzANBgkqhkiG9w0BAQsFAAOCAgEAfYt7SiA1sgWGCIpunk46r4AExIRc \n "
232+ " MxkKgUhNlrrv1B21hOaXN/5miE+LOTbrcmU/M9yvC6MVY730GNFoL8IhJ8j8vrOL \n "
233+ " pMY22OP6baS1k9YMrtDTlwJHoGby04ThTUeBDksS9RiuHvicZqBedQdIF65pZuhp \n "
234+ " eDcGBcLiYasQr/EO5gxxtLyTmgsHSOVSBcFOn9lgv7LECPq9i7mfH3mpxgrRKSxH \n "
235+ " pOoZ0KXMcB+hHuvlklHntvcI0mMMQ0mhYj6qtMFStkF1RpCG3IPdIwpVCQqu8GV7 \n "
236+ " s8ubknRzs+3C/Bm19RFOoiPpDkwvyNfvmQ14XkyqqKK5oZ8zhD32kFRQkxa8uZSu \n "
237+ " h4aTImFxknu39waBxIRXE4jKxlAmQc4QjFZoq1KmQqQg0J/1JF8RlFvJas1VcjLv \n "
238+ " YlvUB2t6npO6oQjB3l+PNf0DpQH7iUx3Wz5AjQCi6L25FjyE06q6BZ/QlmtYdl/8 \n "
239+ " ZYao4SRqPEs/6cAiF+Qf5zg2UkaWtDphl1LKMuTNLotvsX99HP69V2faNyegodQ0 \n "
240+ " LyTApr/vT01YPE46vNsDLgK+4cL6TrzC/a4WcmF5SRJ938zrv/duJHLXQIku5v0+ \n "
241+ " EwOy59Hdm0PT/Er/84dDV0CSjdR/2XuZM3kpysSKLgD1cKiDA+IRguODCxfO9cyY \n "
242+ " Ig46v9mFmBvyH04 =\n "
232243 " -----END CERTIFICATE-----\n " ; // /< Root certificate for io.adafruit.us
233244
234245 const char *_aio_root_ca_prod =
0 commit comments