Define independent DM media metadata, receipts and custody contracts
This commit is contained in:
1 parent
3d0ab35efe
commit
27fa3a4812
2 files changed
+80
No files matched your search
@@ -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
|
||||
Reference in new issue
Block a user