From 4cabbc32f53380bd5b3f876fc82e41bcc9d0e31f Mon Sep 17 00:00:00 2001 From: evgeny Date: Thu, 1 Oct 2026 16:22:07 +0300 Subject: [PATCH] Fit file chunks within the signed router packet limit --- src/media_delivery/file_transfer.c | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/media_delivery/file_transfer.c b/src/media_delivery/file_transfer.c index d7c6358d..e19f893d 100644 --- a/src/media_delivery/file_transfer.c +++ b/src/media_delivery/file_transfer.c @@ -17,7 +17,7 @@ #define FT_DATA 2 /* tid:16, offset:8, bytes */ #define FT_DONE 3 /* tid:16 */ #define FT_REFUSE 4 /* tid:16 */ -#define FT_CHUNK 32768u +#define FT_CHUNK 8192u /* Вместе с подписью и полным путём помещается в кодограмму router (16 КиБ). */ #define FT_MAX_OPS 16 struct file_transfer { @@ -114,7 +114,7 @@ static void ft_pump(void* arg) { op->pump = NULL; if (!op->up || op->receiving) return; struct file_transfer* ft = op->ft; - for (unsigned i = 0; i < 1 && op->offset < op->size; i++) { + if (op->offset < op->size) { if (!etcp_router_send_q_has_room(ft->inst, op->group, op->peer, ETCP_RT_ID_FILE_TRANSFER)) { etcp_router_on_send_ready(ft->inst, op->group, op->peer, ETCP_RT_ID_FILE_TRANSFER, &op->waiter, ft_ready, op); return; @@ -130,7 +130,8 @@ static void ft_pump(void* arg) { return; } int error = ft_send(ft, op->group, op->peer, FT_DATA, body, 24 + n); - if (error) return; + if (error < 0) { ft_finish(op, -1); return; } + if (error > 0) return; op->offset += n; op->progress_tb = get_time_tb(); }