Browse Source

Define independent DM media metadata, receipts and custody contracts

master
evgeny 2 weeks ago
parent
commit
27fa3a4812
  1. 23
      src/dm/dm_mailbox_media.h
  2. 57
      src/dm/dm_media.h

23
src/dm/dm_mailbox_media.h

@ -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

57
src/dm/dm_media.h

@ -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…
Cancel
Save