docs(dm): complete mailbox and storage coordinator contracts

This commit is contained in:
evgeny committed 2026-10-27 01:06:45 +01:00
1 parent 2fe024fbbb
commit 1cfafc43a4
2 files changed
+22 -6

No files matched your search

+11 -3
View File
@@ -6,7 +6,13 @@
* Копия удаляется только по квитанции получателя после commit в dm_core.
* Квитанция сохраняется отдельно для повторов PUT и доставки отправителю.
*
* Сервис ETCP_RT_ID_DM_MAILBOX (0x35); контрольные пакеты подписаны router.
* Роль S — supernode=yes в подписанных adm_tags общей CHAT-группы A/B; storage её не заменяет.
* При PUT от A в одной транзакции фиксируются сообщение и, для file, задание dm_mailbox_media.
* Сервис ETCP_RT_ID_DM_MAILBOX (0x35); все пакеты подписаны router, числа native-endian:
* PUT=1 [recipient:8][message]; DELIVER=2 [message]; RECEIPT=3 [receipt:136]; STORED=4 [conv:8][seq:8].
* STORED подтверждает запись на S, только подписанная B квитанция подтверждает доставку сообщения.
* Текст не имеет TTL. Таймер 1с обрабатывает до 32 задач с retry_at через 5с.
* Входные буферы заимствуются на время вызова; их копией в пакете/SQLite владеет соответствующий owner.
*/
#ifndef DM_MAILBOX_H
@@ -37,10 +43,12 @@ void dm_mailbox_destroy(struct UTUN_INSTANCE* inst);
int dm_mailbox_put(struct UTUN_INSTANCE* inst, uint64_t recipient, uint64_t sender,
const uint8_t* msg, size_t msg_len);
/* Передать точную квитанцию всем доступным суперузлам общей группы сторон.
/* Попытаться передать точную квитанцию всем доступным суперузлам общих групп сторон.
* receipt — DM_RECEIPT_SIZE байт (см. dm_core.h), проверяется подпись получателя.
* Это попытка отправки текущим доступным S; собственную durable очередь пересылки вызов не создаёт.
* Источник продолжает повторять PUT до получения этой квитанции. */
* Источник продолжает повторять PUT до получения этой квитанции.
* На S сохранение receipt и удаление точного pending атомарны; повтор PUT возвращает receipt.
* Локальный S здесь пропускается; вызов нужен endpoint, а не для локального применения на S. */
void dm_mailbox_receipt(struct UTUN_INSTANCE* inst, const uint8_t* receipt);
#ifdef __cplusplus