OTA: answer once the announced image size has arrived

The Arduino network client treats a half-closed connection as closed,
so the device's reply after the sender's EOF was lost. The header
already carries the image size: UpdateParser::complete() lets the
device finish and answer while the connection is open. ota_push.py
half-closes only if no answer comes within 3 s, for older firmware.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
Claude-Session: https://claude.ai/code/session_01EhqxQ49eCju4CzKYNjZzwT
This commit is contained in:
2026-10-03 21:39:35 +02:00
co-authored by Claude Opus 5.5
parent fa62a07993
commit 08b59eb203
4 changed files with 37 additions and 5 deletions
+4
View File
@@ -132,6 +132,10 @@ void UpdateService::install(UpdateSource& source, const char* via) {
if (incoming_.empty() && parser.state() == UpdateParser::State::Image) incoming_ = parser.version();
percent_ = parser.percent();
if (parser.state() == UpdateParser::State::Failed) break;
if (parser.complete()) { // all announced bytes are here: answer while the connection is open
ok = parser.end();
break;
}
}
if (!ok && parser.error().empty()) parser.end(); // e.g. a stall: abort the slot