|
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