@@ -217,190 +217,189 @@ class URLStreamESP32 : public AbstractURLStream {
217
217
http_config.cert_pem = (const char *)pem_cert;
218
218
http_config.cert_len = pem_cert_len;
219
219
} else {
220
- #if ESP_IDF_VERSION > ESP_IDF_VERSION_VAL(5, 3, 7) && defined(ARDUINO)
220
+ #if defined(ARDUINO) && ESP_IDF_VERSION > ESP_IDF_VERSION_VAL(5, 3, 7) && ESP_IDF_VERSION < ESP_IDF_VERSION_VAL(5, 4, 0)
221
221
http_config.crt_bundle_attach = arduino_esp_crt_bundle_attach;
222
222
#else
223
223
http_config.crt_bundle_attach = esp_crt_bundle_attach;
224
- #endif }
225
-
226
- switch (action) {
227
- case GET:
228
- http_config.method = HTTP_METHOD_GET;
229
- break ;
230
- case POST:
231
- http_config.method = HTTP_METHOD_POST;
232
- break ;
233
- case PUT:
234
- http_config.method = HTTP_METHOD_PUT;
235
- break ;
236
- case DELETE:
237
- http_config.method = HTTP_METHOD_DELETE;
238
- break ;
239
- default :
240
- LOGE (" Unsupported action: %d" , action);
241
- break ;
242
- }
224
+ #endif
225
+ }
243
226
244
- // Init only the first time
245
- if (client_handle == nullptr ) {
246
- client_handle = esp_http_client_init (&http_config);
247
- }
227
+ switch (action) {
228
+ case GET:
229
+ http_config.method = HTTP_METHOD_GET;
230
+ break ;
231
+ case POST:
232
+ http_config.method = HTTP_METHOD_POST;
233
+ break ;
234
+ case PUT:
235
+ http_config.method = HTTP_METHOD_PUT;
236
+ break ;
237
+ case DELETE:
238
+ http_config.method = HTTP_METHOD_DELETE;
239
+ break ;
240
+ default :
241
+ LOGE (" Unsupported action: %d" , action);
242
+ break ;
243
+ }
248
244
249
- // process header parameters
250
- if (!StrView (acceptMime).isEmpty ()) addRequestHeader (ACCEPT, acceptMime);
251
- if (!StrView (reqMime).isEmpty ()) addRequestHeader (CONTENT_TYPE, reqMime);
252
- List<HttpHeaderLine*>& lines = request.header ().getHeaderLines ();
253
- for (auto it = lines.begin (); it != lines.end (); ++it) {
254
- if ((*it)->active ) {
255
- esp_http_client_set_header (client_handle, (*it)->key .c_str (),
256
- (*it)->value .c_str ());
257
- }
258
- }
245
+ // Init only the first time
246
+ if (client_handle == nullptr ) {
247
+ client_handle = esp_http_client_init (&http_config);
248
+ }
259
249
260
- // Open http
261
- if (esp_http_client_open (client_handle, 0 ) != ESP_OK) {
262
- LOGE (" esp_http_client_open" );
263
- return false ;
250
+ // process header parameters
251
+ if (!StrView (acceptMime).isEmpty ()) addRequestHeader (ACCEPT, acceptMime);
252
+ if (!StrView (reqMime).isEmpty ()) addRequestHeader (CONTENT_TYPE, reqMime);
253
+ List<HttpHeaderLine*>& lines = request.header ().getHeaderLines ();
254
+ for (auto it = lines.begin (); it != lines.end (); ++it) {
255
+ if ((*it)->active ) {
256
+ esp_http_client_set_header (client_handle, (*it)->key .c_str (),
257
+ (*it)->value .c_str ());
264
258
}
259
+ }
265
260
266
- // Determine the result
267
- int content_length = esp_http_client_fetch_headers (client_handle);
268
- int status_code = esp_http_client_get_status_code (client_handle);
269
- LOGI (" status_code: %d / content_length: %d" , status_code, content_length);
261
+ // Open http
262
+ if (esp_http_client_open (client_handle, 0 ) != ESP_OK) {
263
+ LOGE (" esp_http_client_open" );
264
+ return false ;
265
+ }
270
266
271
- // Process post/put data
272
- StrView data (reqData);
273
- if (!data.isEmpty ()) {
274
- write ((const uint8_t *)reqData, data.length ());
275
- }
267
+ // Determine the result
268
+ int content_length = esp_http_client_fetch_headers (client_handle);
269
+ int status_code = esp_http_client_get_status_code (client_handle);
270
+ LOGI (" status_code: %d / content_length: %d" , status_code, content_length);
276
271
277
- return status_code == 200 ;
278
- }
279
- // ends the request
280
- virtual void end () override {
281
- esp_http_client_close (client_handle);
282
- esp_http_client_cleanup (client_handle);
272
+ // Process post/put data
273
+ StrView data (reqData);
274
+ if (!data.isEmpty ()) {
275
+ write ((const uint8_t *)reqData, data.length ());
283
276
}
284
277
285
- // / Writes are not supported
286
- int availableForWrite () override { return 1024 ; }
278
+ return status_code == 200 ;
279
+ }
280
+ // ends the request
281
+ virtual void end () override {
282
+ esp_http_client_close (client_handle);
283
+ esp_http_client_cleanup (client_handle);
284
+ }
287
285
288
- // / Sets the ssid that will be used for logging in (when calling begin)
289
- virtual void setSSID ( const char * ssid) { this -> ssid = ssid ; }
286
+ // / Writes are not supported
287
+ int availableForWrite () override { return 1024 ; }
290
288
291
- // / Sets the password that will be used for logging in (when calling begin)
292
- virtual void setPassword (const char * password) {
293
- this ->password = password;
294
- }
289
+ // / Sets the ssid that will be used for logging in (when calling begin)
290
+ virtual void setSSID (const char * ssid) { this ->ssid = ssid; }
295
291
296
- // / Sets the power save mode (default false)!
297
- virtual void setPowerSave (bool ps) {
298
- IDF_WIFI.setPowerSave (ps ? WIFI_PS_MAX_MODEM : WIFI_PS_NONE);
299
- }
292
+ // / Sets the password that will be used for logging in (when calling begin)
293
+ virtual void setPassword (const char * password) { this ->password = password; }
300
294
301
- size_t write ( const uint8_t * data, size_t len) override {
302
- TRACED ();
303
- return esp_http_client_write (client_handle, ( const char *)data, len );
304
- }
295
+ // / Sets the power save mode (default false)!
296
+ virtual void setPowerSave ( bool ps) {
297
+ IDF_WIFI. setPowerSave (ps ? WIFI_PS_MAX_MODEM : WIFI_PS_NONE );
298
+ }
305
299
306
- size_t readBytes ( uint8_t * data, size_t len) override {
307
- TRACED ();
308
- return esp_http_client_read (client_handle, (char *)data, len);
309
- }
300
+ size_t write ( const uint8_t * data, size_t len) override {
301
+ TRACED ();
302
+ return esp_http_client_write (client_handle, (const char *)data, len);
303
+ }
310
304
311
- // / Adds/Updates a request header
312
- void addRequestHeader (const char * key, const char * value) override {
313
- TRACED ();
314
- request.addRequestHeader (key, value);
315
- }
316
- // / Provides a header entry
317
- const char * getReplyHeader (const char * key) override {
318
- return request.getReplyHeader (key);
319
- }
305
+ size_t readBytes (uint8_t * data, size_t len) override {
306
+ TRACED ();
307
+ return esp_http_client_read (client_handle, (char *)data, len);
308
+ }
320
309
321
- // / Define the Root PEM Certificate for SSL: Method compatible with Arduino
322
- // / WiFiClientSecure API
323
- void setCACert (const char * cert) override {
324
- int len = strlen (cert);
325
- setCACert ((const uint8_t *)cert, len + 1 );
326
- }
310
+ // / Adds/Updates a request header
311
+ void addRequestHeader (const char * key, const char * value) override {
312
+ TRACED ();
313
+ request.addRequestHeader (key, value);
314
+ }
315
+ // / Provides a header entry
316
+ const char * getReplyHeader (const char * key) override {
317
+ return request.getReplyHeader (key);
318
+ }
327
319
328
- // / Defines the read buffer size
329
- void setReadBufferSize (int size) { buffer_size = size; }
330
-
331
- // / Used for request and reply header parameters
332
- HttpRequest& httpRequest () override { return request; }
333
-
334
- // / Does nothing
335
- void setClient (Client & client) override {}
336
-
337
- protected:
338
- int id = 0 ;
339
- HttpRequest request;
340
- esp_http_client_handle_t client_handle = nullptr ;
341
- bool is_power_save = false ;
342
- const char * ssid = nullptr ;
343
- const char * password = nullptr ;
344
- int buffer_size = DEFAULT_BUFFER_SIZE;
345
- const uint8_t * pem_cert = nullptr ;
346
- int pem_cert_len = 0 ;
347
-
348
- // / Define the Root PEM Certificate for SSL: the last byte must be null, the
349
- // / len is including the ending null
350
- void setCACert (const uint8_t * cert, int len) {
351
- pem_cert_len = len;
352
- pem_cert = cert;
353
- // certificate must end with traling null
354
- assert (cert[len - 1 ] == 0 );
355
- }
320
+ // / Define the Root PEM Certificate for SSL: Method compatible with Arduino
321
+ // / WiFiClientSecure API
322
+ void setCACert (const char * cert) override {
323
+ int len = strlen (cert);
324
+ setCACert ((const uint8_t *)cert, len + 1 );
325
+ }
356
326
357
- static esp_err_t http_event_handler (esp_http_client_event_t * evt) {
358
- switch (evt->event_id ) {
359
- case HTTP_EVENT_ERROR:
360
- LOGI (" HTTP_EVENT_ERROR" );
361
- break ;
362
- case HTTP_EVENT_ON_CONNECTED:
363
- LOGD (" HTTP_EVENT_ON_CONNECTED" );
364
- break ;
365
- case HTTP_EVENT_HEADER_SENT:
366
- LOGD (" HTTP_EVENT_HEADER_SENT" );
367
- break ;
368
- case HTTP_EVENT_ON_HEADER:
369
- LOGI (" HTTP_EVENT_ON_HEADER, key=%s, value=%s" , evt->header_key ,
370
- evt->header_value );
371
- // store reply headers
372
- actualURLStreamESP32->request .reply ().put (evt->header_key ,
373
- evt->header_value );
374
- break ;
375
- case HTTP_EVENT_ON_DATA:
376
- LOGD (" HTTP_EVENT_ON_DATA, len=%d" , evt->data_len );
377
- break ;
378
- case HTTP_EVENT_ON_FINISH:
379
- LOGI (" HTTP_EVENT_ON_FINISH" );
380
- break ;
381
- case HTTP_EVENT_DISCONNECTED:
382
- LOGI (" HTTP_EVENT_DISCONNECTED" );
383
- break ;
327
+ // / Defines the read buffer size
328
+ void setReadBufferSize (int size) { buffer_size = size; }
329
+
330
+ // / Used for request and reply header parameters
331
+ HttpRequest& httpRequest () override { return request; }
332
+
333
+ // / Does nothing
334
+ void setClient (Client& client) override {}
335
+
336
+ protected:
337
+ int id = 0 ;
338
+ HttpRequest request;
339
+ esp_http_client_handle_t client_handle = nullptr ;
340
+ bool is_power_save = false ;
341
+ const char * ssid = nullptr ;
342
+ const char * password = nullptr ;
343
+ int buffer_size = DEFAULT_BUFFER_SIZE;
344
+ const uint8_t * pem_cert = nullptr ;
345
+ int pem_cert_len = 0 ;
346
+
347
+ // / Define the Root PEM Certificate for SSL: the last byte must be null, the
348
+ // / len is including the ending null
349
+ void setCACert (const uint8_t * cert, int len) {
350
+ pem_cert_len = len;
351
+ pem_cert = cert;
352
+ // certificate must end with traling null
353
+ assert (cert[len - 1 ] == 0 );
354
+ }
355
+
356
+ static esp_err_t http_event_handler (esp_http_client_event_t * evt) {
357
+ switch (evt->event_id ) {
358
+ case HTTP_EVENT_ERROR:
359
+ LOGI (" HTTP_EVENT_ERROR" );
360
+ break ;
361
+ case HTTP_EVENT_ON_CONNECTED:
362
+ LOGD (" HTTP_EVENT_ON_CONNECTED" );
363
+ break ;
364
+ case HTTP_EVENT_HEADER_SENT:
365
+ LOGD (" HTTP_EVENT_HEADER_SENT" );
366
+ break ;
367
+ case HTTP_EVENT_ON_HEADER:
368
+ LOGI (" HTTP_EVENT_ON_HEADER, key=%s, value=%s" , evt->header_key ,
369
+ evt->header_value );
370
+ // store reply headers
371
+ actualURLStreamESP32->request .reply ().put (evt->header_key ,
372
+ evt->header_value );
373
+ break ;
374
+ case HTTP_EVENT_ON_DATA:
375
+ LOGD (" HTTP_EVENT_ON_DATA, len=%d" , evt->data_len );
376
+ break ;
377
+ case HTTP_EVENT_ON_FINISH:
378
+ LOGI (" HTTP_EVENT_ON_FINISH" );
379
+ break ;
380
+ case HTTP_EVENT_DISCONNECTED:
381
+ LOGI (" HTTP_EVENT_DISCONNECTED" );
382
+ break ;
384
383
#if ESP_IDF_VERSION > ESP_IDF_VERSION_VAL(5, 3, 7)
385
- case HTTP_EVENT_REDIRECT:
386
- LOGI (" HTTP_EVENT_REDIRECT" );
387
- break ;
384
+ case HTTP_EVENT_REDIRECT:
385
+ LOGI (" HTTP_EVENT_REDIRECT" );
386
+ break ;
388
387
#endif
389
- }
390
- return ESP_OK;
391
388
}
392
- };
389
+ return ESP_OK;
390
+ }
391
+ };
393
392
394
- // / ICYStream
395
- using ICYStreamESP32 = ICYStreamT<URLStreamESP32>;
396
- using URLStreamBufferedESP32 = URLStreamBufferedT<URLStreamESP32>;
397
- using ICYStreamBufferedESP32 = URLStreamBufferedT<ICYStreamESP32>;
393
+ // / ICYStream
394
+ using ICYStreamESP32 = ICYStreamT<URLStreamESP32>;
395
+ using URLStreamBufferedESP32 = URLStreamBufferedT<URLStreamESP32>;
396
+ using ICYStreamBufferedESP32 = URLStreamBufferedT<ICYStreamESP32>;
398
397
399
398
// / Support URLStream w/o Arduino
400
399
#if !defined(ARDUINO)
401
- using URLStream = URLStreamESP32;
402
- using URLStreamBuffered = URLStreamBufferedESP32;
403
- using ICYStreamBuffered = ICYStreamBufferedESP32;
400
+ using URLStream = URLStreamESP32;
401
+ using URLStreamBuffered = URLStreamBufferedESP32;
402
+ using ICYStreamBuffered = ICYStreamBufferedESP32;
404
403
#endif
405
404
406
405
} // namespace audio_tools
0 commit comments