@@ -431,7 +431,36 @@ void WebServer::HTTPResponse::addHeader(const std::string& name, const std::stri
431
431
432
432
void WebServer::HTTPResponse::addHeader (std::string&& name, std::string&& value) {
433
433
m_headers[std::move (name)] = std::move (value);
434
- }
434
+ } // addHeader
435
+
436
+
437
+ /* *
438
+ * @brief Build a string representation of the headers.
439
+ * @return A string representation of the headers.
440
+ */
441
+ std::string WebServer::HTTPResponse::buildHeaders () {
442
+ std::string headers;
443
+ unsigned long headers_len = 0 ;
444
+
445
+ for (auto iter = m_headers.begin (); iter != m_headers.end (); iter++) {
446
+ if (iter != m_headers.begin ())
447
+ headers_len += 2 ;
448
+ headers_len += iter->first .length ();
449
+ headers_len += 2 ;
450
+ headers_len += iter->second .length ();
451
+ }
452
+ headers_len += 1 ;
453
+ headers.resize (headers_len); // Will not have to resize and recopy during the next loop, we have 2 loops but it still ends up being faster
454
+
455
+ for (auto iter = m_headers.begin (); iter != m_headers.end (); iter++) {
456
+ if (iter != m_headers.begin ())
457
+ headers += " \r\n " ;
458
+ headers += iter->first ;
459
+ headers += " : " ;
460
+ headers += iter->second ;
461
+ }
462
+ return headers;
463
+ } // buildHeaders
435
464
436
465
/* *
437
466
* @brief Send data to the HTTP caller.
@@ -444,6 +473,9 @@ void WebServer::HTTPResponse::sendData(const std::string& data) {
444
473
} // sendData
445
474
446
475
476
+
477
+
478
+
447
479
/* *
448
480
* @brief Send data to the HTTP caller.
449
481
* Send the data to the HTTP caller. No further data should be sent after this call.
@@ -458,56 +490,48 @@ void WebServer::HTTPResponse::sendData(const uint8_t* pData, size_t length) {
458
490
}
459
491
m_dataSent = true ;
460
492
461
- std::string headers;
462
- unsigned long headers_len = 0 ;
463
-
464
- for (auto iter = m_headers.begin (); iter != m_headers.end (); iter++) {
465
- if (iter != m_headers.begin ())
466
- headers_len += 2 ;
467
- headers_len += iter->first .length ();
468
- headers_len += 2 ;
469
- headers_len += iter->second .length ();
470
- }
471
- headers_len += 1 ;
472
- headers.resize (headers_len); // Will not have to resize and recopy during the next loop, we have 2 loops but it still ends up being faster
473
-
474
- for (auto iter = m_headers.begin (); iter != m_headers.end (); iter++) {
475
- if (iter != m_headers.begin ())
476
- headers += " \r\n " ;
477
- headers += iter->first ;
478
- headers += " : " ;
479
- headers += iter->second ;
480
- }
481
- mg_send_head (m_nc, m_status, length, headers.c_str ());
493
+ mg_send_head (m_nc, m_status, length, buildHeaders ().c_str ());
482
494
mg_send (m_nc, pData, length);
483
495
m_nc->flags |= MG_F_SEND_AND_CLOSE;
484
496
} // sendData
485
497
498
+
499
+ /* *
500
+ *
501
+ */
486
502
void WebServer::HTTPResponse::sendData (const char * pData, size_t length) {
487
503
sendData ((uint8_t *) pData, length);
488
504
} // sendData
489
505
506
+
507
+ /* *
508
+ *
509
+ */
490
510
void WebServer::HTTPResponse::sendChunkHead () {
491
511
if (m_dataSent) {
492
512
ESP_LOGE (tag, " HTTPResponse: Chunk headers already sent! Attempt to send again/more." );
493
513
}
494
514
m_dataSent = true ;
495
- mg_send_head (m_nc, m_status, -1 , m_headers .c_str ());
496
- }
515
+ mg_send_head (m_nc, m_status, -1 , buildHeaders () .c_str ());
516
+ } // sendChunkHead
497
517
518
+
519
+ /* *
520
+ *
521
+ */
498
522
void WebServer::HTTPResponse::sendChunk (const char * pData, size_t length) {
499
523
mg_send_http_chunk (m_nc, pData, length);
500
524
} // sendChunkHead
501
525
526
+
527
+ /* *
528
+ *
529
+ */
502
530
void WebServer::HTTPResponse::closeConnection () {
503
531
m_nc->flags |= MG_F_SEND_AND_CLOSE;
504
- }
532
+ } // closeConnection
505
533
506
534
507
- void WebServer::HTTPResponse::sendData (const char * pData, size_t length) {
508
- sendData ((uint8_t *) pData, length);
509
- }
510
-
511
535
/* *
512
536
* @brief Set the headers to be sent in the HTTP response.
513
537
* @param [in] headers The complete set of headers to send to the caller.
0 commit comments