Files
dat-thang/inc/sleep_replication.h
T

44 lines
1.8 KiB
C
Raw Normal View History

2026-10-19 00:12:36 -04:00
#ifndef SLEEP_REPLICATION_H
#define SLEEP_REPLICATION_H
#include <stddef.h>
#include <stdint.h>
#include "sleep_feed.h"
#include "sleep_bitfield.h"
#include "sleep_proof.h"
#define SLEEP_REPLICATION_QUEUE 128u
typedef struct sleep_replication_request { uint64_t index; uint64_t bytes; int hash; int nodes; } sleep_replication_request_t;
typedef struct sleep_replication {
sleep_feed_t *feed;
uint64_t channel;
uint64_t remote_length;
sleep_bitfield_t remote_bitfield;
sleep_replication_request_t requests[SLEEP_REPLICATION_QUEUE];
size_t request_head, request_count;
int live, uploading, downloading;
} sleep_replication_t;
int sleep_replication_init(sleep_replication_t *replication,
sleep_feed_t *feed, uint64_t channel);
int sleep_replication_have(sleep_replication_t *replication,
uint64_t start, uint64_t length);
int sleep_replication_unhave(sleep_replication_t *replication,
uint64_t start, uint64_t length);
int sleep_replication_want(sleep_replication_t *replication,
uint64_t start, uint64_t length);
int sleep_replication_request(sleep_replication_t *replication,
const sleep_replication_request_t *request);
int sleep_replication_next(sleep_replication_t *replication,
sleep_replication_request_t *request);
int sleep_replication_complete(sleep_replication_t *replication,
uint64_t index);
int sleep_replication_is_requested(const sleep_replication_t *replication,
uint64_t index);
int sleep_replication_unwant(sleep_replication_t *replication,
uint64_t start, uint64_t length);
void sleep_replication_clear_requests(sleep_replication_t *replication);
int sleep_replication_receive(sleep_replication_t *replication,
const uint8_t *block, size_t block_len,
const sleep_proof_t *proof,
const uint8_t feed_public_key[32]);
#endif