From c8236373b112af602294bbf54d0e17967246bffc Mon Sep 17 00:00:00 2001 From: evgeny Date: Tue, 6 Oct 2026 11:25:18 +0200 Subject: [PATCH] Extend quota snapshots with file and directory counts --- src/member_files/protocol.c | 4 ++-- src/member_files/protocol.h | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/member_files/protocol.c b/src/member_files/protocol.c index d6655214..078bfcf1 100644 --- a/src/member_files/protocol.c +++ b/src/member_files/protocol.c @@ -68,7 +68,7 @@ int mf_encode(const struct mf_message* m, uint8_t* p, size_t cap) { return -1; } memset(p, 0, MF_WIRE_HEADER); - p[0] = 3; p[1] = m->kind; p[2] = m->command; p[3] = (uint8_t)m->status; p[4] = (uint8_t)(m->status >> 8); + p[0] = MF_PROTOCOL_VERSION; p[1] = m->kind; p[2] = m->command; p[3] = (uint8_t)m->status; p[4] = (uint8_t)(m->status >> 8); mf_put64(p + 5, m->request_id); mf_put64(p + 13, m->owner); mf_put64(p + 21, m->offset); mf_put64(p + 29, m->size); mf_put64(p + 37, m->cursor); memcpy(p + 45, m->version, 16); memcpy(p + 61, m->upload, 16); memcpy(p + 77, m->hash, 32); @@ -84,7 +84,7 @@ int mf_decode(const uint8_t* p, size_t n, struct mf_message* m) { if (!p || !m || n < MF_WIRE_HEADER) goto bad; size_t a = p[119] | ((size_t)p[120] << 8), b = p[121] | ((size_t)p[122] << 8); size_t d = p[123] | ((size_t)p[124] << 8); - if (p[0] != 3 || (p[1] != MF_REQUEST && p[1] != MF_RESPONSE) || p[2] < MF_LIST || p[2] > MF_QUOTA || + if (p[0] != MF_PROTOCOL_VERSION || (p[1] != MF_REQUEST && p[1] != MF_RESPONSE) || p[2] < MF_LIST || p[2] > MF_QUOTA || a > MF_PATH_MAX || b > MF_PATH_MAX || d > MF_BLOCK_SIZE || n != MF_WIRE_HEADER + a + b + d || memchr(p + MF_WIRE_HEADER, 0, a + b) || p[118] > 1) goto bad; memset(m, 0, sizeof(*m)); diff --git a/src/member_files/protocol.h b/src/member_files/protocol.h index e98815c8..72e67a19 100644 --- a/src/member_files/protocol.h +++ b/src/member_files/protocol.h @@ -15,12 +15,13 @@ extern "C" { #endif #define MF_BLOCK_SIZE 8192 +#define MF_PROTOCOL_VERSION 4 #define MF_PATH_MAX 1024 #define MF_NAME_MAX 255 #define MF_WIRE_HEADER 125 #define MF_WIRE_MAX (MF_WIRE_HEADER + 2 * MF_PATH_MAX + MF_BLOCK_SIZE) #define MF_ENTRY_HEADER 35 -#define MF_QUOTA_BYTES 24 /* used:u64, limit:u64, reserved:u64; все значения в байтах */ +#define MF_QUOTA_BYTES 40 /* used/limit/reserved в байтах, files/directories; пять u64 LE */ #define MF_IDLE_TB 100000ULL /* 10 секунд */ #define MF_REQUEST 1 #define MF_RESPONSE 2