8
8
* please support Adafruit and open-source hardware by purchasing
9
9
* products from Adafruit!
10
10
*
11
- * Copyright (c) Brent Rubell 2020-2021 for Adafruit Industries.
11
+ * Copyright (c) Brent Rubell 2020-2024 for Adafruit Industries.
12
12
*
13
13
* MIT license, all text here must be included in any redistribution.
14
14
*
25
25
#include " Arduino.h"
26
26
#include " WiFi.h"
27
27
#include " WiFiMulti.h"
28
- #include < WiFiClientSecure.h>
28
+ #include < NetworkClient.h>
29
+ #include < NetworkClientSecure.h>
29
30
extern Wippersnapper WS;
30
31
31
32
/* ***************************************************************************/
@@ -44,7 +45,6 @@ class Wippersnapper_ESP32 : public Wippersnapper {
44
45
Wippersnapper_ESP32 () : Wippersnapper() {
45
46
_ssid = 0 ;
46
47
_pass = 0 ;
47
- _mqtt_client = new WiFiClientSecure;
48
48
}
49
49
50
50
/* *************************************************************************/
@@ -53,8 +53,10 @@ class Wippersnapper_ESP32 : public Wippersnapper {
53
53
*/
54
54
/* *************************************************************************/
55
55
~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;
58
60
}
59
61
60
62
/* *******************************************************/
@@ -156,18 +158,24 @@ class Wippersnapper_ESP32 : public Wippersnapper {
156
158
*/
157
159
/* *******************************************************/
158
160
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 );
163
171
} 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 );
165
178
}
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 );
171
179
}
172
180
173
181
/* *******************************************************/
@@ -198,37 +206,40 @@ class Wippersnapper_ESP32 : public Wippersnapper {
198
206
const char *connectionType () { return " ESP32" ; }
199
207
200
208
protected:
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
205
216
206
217
const char *_aio_root_ca_staging =
207
218
" -----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 "
232
243
" -----END CERTIFICATE-----\n " ; // /< Root certificate for io.adafruit.us
233
244
234
245
const char *_aio_root_ca_prod =
0 commit comments