|
22 | 22 | #include "WebResponseImpl.h"
|
23 | 23 | #include "cbuf.h"
|
24 | 24 |
|
| 25 | +#ifdef ASYNCWEBSERVER_DEBUG_TRACE |
| 26 | +#define DEBUG_PRINTFP(fmt, ...) Serial.printf_P(PSTR("[%d]" fmt), millis(), ##__VA_ARGS__) |
| 27 | +#else |
| 28 | +#define DEBUG_PRINTFP(...) |
| 29 | +#endif |
| 30 | + |
25 | 31 | // Since ESP8266 does not link memchr by default, here's its implementation.
|
26 | 32 | void* memchr(void* ptr, int ch, size_t count)
|
27 | 33 | {
|
@@ -285,6 +291,7 @@ static void dealloc_vector(T& vec) {
|
285 | 291 |
|
286 | 292 | size_t AsyncAbstractResponse::_ack(AsyncWebServerRequest *request, size_t len, uint32_t time){
|
287 | 293 | (void)time;
|
| 294 | + DEBUG_PRINTFP("(%d) ack %d\n", (intptr_t) this, len); |
288 | 295 |
|
289 | 296 | if(!_sourceValid()){
|
290 | 297 | _state = RESPONSE_FAILED;
|
@@ -344,14 +351,13 @@ size_t AsyncAbstractResponse::_ack(AsyncWebServerRequest *request, size_t len, u
|
344 | 351 | auto old_space = _packet.capacity();
|
345 | 352 | auto max_block_size = ESP.getMaxFreeBlockSize() - 128;
|
346 | 353 | if ((old_space < outLen) || (outLen > max_block_size)) {
|
347 |
| - Serial.printf_P(PSTR("Space adjustment, have %d, want %d, avail %d\n"), old_space, outLen, max_block_size); |
| 354 | + DEBUG_PRINTFP("(%d) Space adjustment, have %d, want %d, avail %d\n", (intptr_t)this, old_space, outLen, max_block_size); |
348 | 355 | do {
|
349 | 356 | dealloc_vector(_packet);
|
350 |
| - Serial.printf_P(PSTR("Released buffer - capacity %d\n"), _packet.capacity()); |
351 | 357 | outLen = std::min(outLen, max_block_size);
|
352 | 358 | _packet.resize(outLen);
|
353 | 359 | max_block_size = ESP.getMaxFreeBlockSize() - 128;
|
354 |
| - Serial.printf_P(PSTR("Checking %d vs %d\n"), outLen, max_block_size); |
| 360 | + DEBUG_PRINTFP("(%d) Checking %d vs %d\n", (intptr_t)this, outLen, max_block_size); |
355 | 361 | } while (max_block_size < outLen);
|
356 | 362 | } else {
|
357 | 363 | _packet.resize(outLen);
|
@@ -390,18 +396,16 @@ size_t AsyncAbstractResponse::_ack(AsyncWebServerRequest *request, size_t len, u
|
390 | 396 | if(_packet.size()){
|
391 | 397 | auto acceptedLen = request->client()->write((const char*)_packet.data(), _packet.size());
|
392 | 398 | _writtenLength += acceptedLen;
|
393 |
| - _packet.erase(_packet.begin(), _packet.begin() + acceptedLen); // TODO - does this realloc?? |
| 399 | + _packet.erase(_packet.begin(), _packet.begin() + acceptedLen); |
394 | 400 | if (acceptedLen < outLen) {
|
395 | 401 | // Save the unsent block in cache
|
396 |
| - Serial.print(F("Incomplete write, ")); Serial.print(acceptedLen); Serial.print("/"); Serial.println(outLen); |
397 |
| - Serial.print(F("Heap: ")); Serial.print(ESP.getMaxFreeBlockSize()); Serial.print("/"); Serial.println(ESP.getFreeHeap()); |
398 |
| - Serial.println(request->client()->space()); |
| 402 | + DEBUG_PRINTFP("(%d) Incomplete write, %d/%d\nHeap: %d/%d\nSpace:%d\n", (intptr_t) this, acceptedLen, outLen, ESP.getMaxFreeBlockSize(), ESP.getFreeHeap(), request->client()->space()); |
399 | 403 | // Try again, with less
|
400 | 404 | acceptedLen = request->client()->write((const char*)_packet.data(), _packet.size()/2);
|
401 | 405 | _writtenLength += acceptedLen;
|
402 |
| - _packet.erase(_packet.begin(), _packet.begin() + acceptedLen); // TODO - does this realloc?? |
403 |
| - Serial.println(acceptedLen); |
| 406 | + _packet.erase(_packet.begin(), _packet.begin() + acceptedLen); |
404 | 407 | }
|
| 408 | + DEBUG_PRINTFP("(%d) Accepted: %d\n", (intptr_t) this, acceptedLen); |
405 | 409 | }
|
406 | 410 |
|
407 | 411 | if( (_chunked && readLen == 0) // Chunked mode, no more data
|
|
0 commit comments