Preserve empty device content types with an explicit context flag

This commit is contained in:
evgeny committed 2026-11-03 12:39:46 +01:00
1 parent 4dc5e1b11c
commit a1dd1fda75
3 files changed
+14 -14

No files matched your search

+5 -4
View File
@@ -1,6 +1,6 @@
/* dm_protocol — единый разбор тела DEVICE/GROUPS и сертификатов адресатов.
* DEVICE сохраняет существующий формат. GROUPS занимает зарезервированный
* ct_len=0 и помещает типизированные стороны/адресатов перед настоящим ct.
* DEVICE сохраняет существующий формат, включая пустой content type. GROUPS
* ставит старший бит data_len и помещает контекст перед ciphertext.
* Тело подписывается целиком, включая снимок; parser не проверяет подпись автора.
* Указатели view заимствуют входной буфер. SQL-функция encode вызывается в uasync. */
#ifndef UTUN_DM_PROTOCOL_H
@@ -13,8 +13,9 @@ extern "C" {
#endif
#define DM_TARGET_PROOF_SIZE 137 /* node:LE64,side:u8,x:32,ed:32,member_sig:64. */
#define DM_CONTEXT_FLAG 0x8000u /* Старший бит uint16 data_len; фактическая длина не более1040. */
#define DM_CONTEXT_MAX (1 + 2 * DM_PARTY_WIRE_SIZE + 2 + DM_TARGET_MAX * DM_TARGET_PROOF_SIZE)
#define DM_BODY_MAX (33 + DM_CONTEXT_MAX + 1 + 255 + 2 + 1024 + 16 + 56 + 64)
#define DM_BODY_MAX (33 + 255 + 2 + DM_CONTEXT_MAX + 1024 + 16 + 56 + 64)
struct dm_message_view {
uint64_t conv, seq, timestamp, author; /* Общий префикс, native-endian. */
@@ -46,7 +47,7 @@ int dm_message_target(const struct dm_message_view* view, uint64_t node, uint8_t
/* 0/-1: прочитать node/side по индексу GROUPS-snapshot, без проверки подписи. */
int dm_message_target_at(const struct dm_message_view* view, unsigned index, struct dm_target* out);
/* 0/-1: сформировать контекст GROUPS (без префикса сообщения/нулевого ct_len).
/* 0/-1: сформировать контекст GROUPS (между data_len с флагом и ciphertext).
* VERSION=1:u8, parties:2*73,count:LE16,sorted certificates:count*137.
* Сторона 0 должна включать текущего отправителя. out меняется только при успехе;
* DM_CONTEXT_MAX достаточно. Источник включается, неизвестные устройства не ищутся. */