2 changed files with 80 additions and 0 deletions
@ -0,0 +1,23 @@
|
||||
/* dm_mailbox_media — durable задания суперузла: размещение на M, доставка
|
||||
* метаданных получателю и удаление всех выданных копий до DELETE_ACK. |
||||
* Жизненный цикл принадлежит dm_mailbox, control принимает dm_media. |
||||
*/ |
||||
#ifndef DM_MAILBOX_MEDIA_H |
||||
#define DM_MAILBOX_MEDIA_H |
||||
|
||||
#include <stdint.h> |
||||
#include <stddef.h> |
||||
struct UTUN_INSTANCE; |
||||
struct dm_mb_media; |
||||
|
||||
struct dm_mb_media* dm_mailbox_media_create(struct UTUN_INSTANCE* inst); |
||||
void dm_mailbox_media_destroy(struct dm_mb_media* media); |
||||
/* Вызвать в транзакции PUT после проверки роли S и подписи сообщения. */ |
||||
int dm_mailbox_media_register(struct dm_mb_media* media, uint64_t group, uint64_t recipient, |
||||
const uint8_t* msg, size_t len); |
||||
void dm_mailbox_media_recv(struct dm_mb_media* media, uint64_t group, uint64_t source, |
||||
uint8_t cmd, const uint8_t* body, size_t len); |
||||
/* Отправить квитанцию всем доступным S общей группы, включая поздние копии. */ |
||||
void dm_mailbox_media_receipt(struct UTUN_INSTANCE* inst, const uint8_t* receipt); |
||||
|
||||
#endif |
||||
@ -0,0 +1,57 @@
|
||||
/* dm_media — файлы личных бесед и ограниченное ciphertext-хранилище M.
|
||||
* Шифрование/проверка в media_async, БД/сеть/публикация в uasync. |
||||
* dm_core вызывает track внутри своей транзакции. Квитанция файла независима |
||||
* от квитанции сообщения; создаётся после проверки, публикации и commit. |
||||
* Суперузлом и заданиями удаления владеет dm_mailbox_media. |
||||
*/ |
||||
#ifndef DM_MEDIA_H |
||||
#define DM_MEDIA_H |
||||
|
||||
#include <stdint.h> |
||||
#include <stddef.h> |
||||
|
||||
struct UTUN_INSTANCE; |
||||
|
||||
#define DM_MEDIA_DESC_SIZE 56 /* UUID:16, plaintext_size:8, SHA256(ciphertext):32 */ |
||||
#define DM_MEDIA_RECEIPT_SIZE 152 |
||||
#define DM_MEDIA_MAX_SIZE (1024ULL * 1024 * 1024) |
||||
|
||||
#define DM_MEDIA_OFFER 1 |
||||
#define DM_MEDIA_STORE 2 |
||||
#define DM_MEDIA_STORED 3 |
||||
#define DM_MEDIA_RECEIPT 4 |
||||
#define DM_MEDIA_DELETE 5 |
||||
#define DM_MEDIA_DELETE_ACK 6 |
||||
#define DM_MEDIA_EXPIRED 7 |
||||
#define DM_MEDIA_REJECT 8 |
||||
|
||||
int dm_media_init(struct UTUN_INSTANCE* inst); |
||||
/* quiesce до media_async_destroy; destroy после workers, до групп/core/mailbox. */ |
||||
void dm_media_quiesce(struct UTUN_INSTANCE* inst); |
||||
void dm_media_destroy(struct UTUN_INSTANCE* inst); |
||||
|
||||
/* Подготовить копию и enqueue file-сообщение асинхронно. 0=задача принята. */ |
||||
int dm_send_file(struct UTUN_INSTANCE* inst, const char* conv, const char* path, const char* display_name); |
||||
struct dm_file_req { |
||||
struct UTUN_INSTANCE* inst; |
||||
char conv[64]; |
||||
char path[1024]; |
||||
char name[256]; |
||||
}; |
||||
void dm_send_file_trampoline(void* arg); |
||||
|
||||
/* Внутри транзакции dm_core, 0=записано/точный повтор. Для text — пустая операция. */ |
||||
int dm_media_track(struct UTUN_INSTANCE* inst, int dir, const uint8_t* msg, size_t len); |
||||
const uint8_t* dm_message_media(const uint8_t* msg, size_t len); |
||||
uint64_t dm_media_cipher_size(uint64_t plain_size); |
||||
int dm_media_verify_receipt(struct UTUN_INSTANCE* inst, const uint8_t* receipt, const uint8_t* msg, size_t len); |
||||
int dm_media_accept_receipt(struct UTUN_INSTANCE* inst, const uint8_t* receipt); |
||||
|
||||
/* Общие операции control для endpoint/M и mailbox/S. Все пакеты подписаны. */ |
||||
int dm_media_send(struct UTUN_INSTANCE* inst, uint64_t group, uint64_t peer, |
||||
uint8_t cmd, const uint8_t* body, size_t len); |
||||
int dm_media_scope(struct UTUN_INSTANCE* inst, uint64_t group, uint64_t node, |
||||
const char* role, uint64_t author, uint64_t recipient); |
||||
void dm_media_notify(struct UTUN_INSTANCE* inst, uint64_t conv); |
||||
|
||||
#endif |
||||
Loading…
Reference in new issue