#ifndef SLEEP_FEED_H #define SLEEP_FEED_H #include #include #include "keys.h" typedef struct sleep_feed { char directory[1024]; char name[64]; uint8_t **blocks; size_t *lengths; uint8_t **proofs; size_t *proof_lengths; size_t length; size_t capacity; sleep_keypair_t keypair; int writable; int dirty; int remote_only; int persist_remote; } sleep_feed_t; int sleep_feed_open(sleep_feed_t *feed, const char *directory, const char *name, const sleep_keypair_t *keypair); /* Opens an in-memory, read-only feed replica using only its public key. */ int sleep_feed_open_remote(sleep_feed_t *feed, const char *directory, const char *name, const uint8_t public_key[32]); /* Merge verified cached remote blocks and persist subsequent received blocks. */ int sleep_feed_load_remote(sleep_feed_t *feed, const uint8_t public_key[32]); size_t sleep_feed_length(const sleep_feed_t *feed); int sleep_feed_read(const sleep_feed_t *feed, size_t index, uint8_t **data, size_t *length); int sleep_feed_append(sleep_feed_t *feed, const uint8_t *data, size_t length); /* Keeps already verified remote blocks and proofs in this session's memory. */ int sleep_feed_append_remote(sleep_feed_t *feed, size_t index, const uint8_t *data, size_t length, const uint8_t *proof, size_t proof_length); int sleep_feed_truncate(sleep_feed_t *feed, size_t length); int sleep_feed_has(const sleep_feed_t *feed, size_t index); int sleep_feed_byte_offset(const sleep_feed_t *feed, size_t index, uint64_t *offset); int sleep_feed_flush(sleep_feed_t *feed); void sleep_feed_close(sleep_feed_t *feed); #endif