char rx[2048], tx[2048];
const char *file_remote = args->file_remote;
char *val, *end;
+ bool freeze_block = false;
sock = -1;
ret = -1;
if (timeouts || ackblock == block) {
if (!timeouts) {
- if (block < UINT16_MAX) {
+ if (!freeze_block) {
++block;
}
}
if (ackblock != -1 && ++errors > 5) {
- fprintf(stderr, "Protocol error; bailing out.\n");
- ret = -1;
- goto cleanup;
+ if (ackblock == UINT16_MAX && block == 0 && !freeze_block) {
+ /* work around the 32 MiB limit if block rollover is not
+ * supported, by transmitting all remaining packets as
+ * block #65535 - reported working on a Netgear D7000.
+ */
+ block = UINT16_MAX;
+ freeze_block = true;
+ errors = 0;
+ printf("Transmitting rest of file as block %d.\n", block);
+ } else {
+ fprintf(stderr, "Protocol error; bailing out.\n");
+ ret = -1;
+ goto cleanup;
+ }
}
}