Browse Source

Fit file chunks within the signed router packet limit

master
evgeny 2 days ago
parent
commit
4cabbc32f5
  1. 7
      src/media_delivery/file_transfer.c

7
src/media_delivery/file_transfer.c

@ -17,7 +17,7 @@
#define FT_DATA 2 /* tid:16, offset:8, bytes */ #define FT_DATA 2 /* tid:16, offset:8, bytes */
#define FT_DONE 3 /* tid:16 */ #define FT_DONE 3 /* tid:16 */
#define FT_REFUSE 4 /* tid:16 */ #define FT_REFUSE 4 /* tid:16 */
#define FT_CHUNK 32768u #define FT_CHUNK 8192u /* Вместе с подписью и полным путём помещается в кодограмму router (16 КиБ). */
#define FT_MAX_OPS 16 #define FT_MAX_OPS 16
struct file_transfer { struct file_transfer {
@ -114,7 +114,7 @@ static void ft_pump(void* arg) {
op->pump = NULL; op->pump = NULL;
if (!op->up || op->receiving) return; if (!op->up || op->receiving) return;
struct file_transfer* ft = op->ft; 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)) { 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); etcp_router_on_send_ready(ft->inst, op->group, op->peer, ETCP_RT_ID_FILE_TRANSFER, &op->waiter, ft_ready, op);
return; return;
@ -130,7 +130,8 @@ static void ft_pump(void* arg) {
return; return;
} }
int error = ft_send(ft, op->group, op->peer, FT_DATA, body, 24 + n); 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->offset += n;
op->progress_tb = get_time_tb(); op->progress_tb = get_time_tb();
} }

Loading…
Cancel
Save