/* * dm_mailbox.h — очередь offline-сообщений на суперузлах * * Суперузел общей группы хранит непрозрачное подписанное тело и повторяет * доставку при появлении маршрута до получателя, независимо от отправителя. * Копия удаляется только по квитанции получателя после commit в dm_core. * Квитанция сохраняется отдельно для повторов PUT и доставки отправителю. * * Сервис ETCP_RT_ID_DM_MAILBOX (0x35); контрольные пакеты подписаны router. */ #ifndef DM_MAILBOX_H #define DM_MAILBOX_H #include #include struct UTUN_INSTANCE; #ifdef __cplusplus extern "C" { #endif /* Жизненный цикл: init после chat_core_init, destroy перед chat_core_destroy. */ int dm_mailbox_init(struct UTUN_INSTANCE* inst); void dm_mailbox_destroy(struct UTUN_INSTANCE* inst); /* Поставить PUT выбранному доступному суперузлу общей с recipient группы. * 0 означает принятие router, хранение подтверждается отдельно на проводе. * До квитанции получателя источник сохраняет задачу в durable outbox. */ 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); вызов только из uasync. */ void dm_mailbox_receipt(struct UTUN_INSTANCE* inst, const uint8_t* receipt); #ifdef __cplusplus } #endif #endif /* DM_MAILBOX_H */