sparse-tools/include/bs_engine.h

97 lines
1.5 KiB
C

//
// Created by haraldwolff on 13.08.22.
//
#pragma once
#include <stdint.h>
#include <stdio.h>
#include <pthread.h>
#include <bs_types.h>
#include <bs_progress.h>
#include <bs_msg.h>
#include <merkle.h>
struct bs_engine {
tool_flags_t tool_flags;
bs_flags_t bs_flags;
bs_state_flags_t state_flags;
struct {
int32_t blocksize;
} parameters;
struct {
pthread_mutex_t mutex;
int af_family;
char hostname[256];
int port;
int listen;
int remote;
} comm;
struct {
pthread_mutex_t mutex;
char filename[FILENAME_MAX];
int handle;
long size;
char *mmap;
} file;
struct {
bs_progress_steps_t step;
time_t step_started;
time_t last_screen_refresh;
int32_t distance;
int32_t current;
} progress;
struct {
bs_msg_queue_t pool;
bs_msg_queue_t progress;
bs_msg_queue_t sync;
bs_msg_queue_t transfer;
} queues;
struct {
pthread_t comm;
pthread_t analyze;
pthread_t sync;
pthread_t transfer;
} threads;
struct {
uint64_t filesize;
} remote;
struct {
merkle_t *local;
merkle_t *remote;
pthread_mutex_t mutex;
pthread_cond_t sync;
int waiting_syncs;
} merkle;
};
int bs_engine_create(bs_engine_t **engine);
int bs_engine_init(bs_engine_t *engine);
int bs_engine_destroy(bs_engine_t *engine);
int bs_engine_open_file(bs_engine_t *engine);
int bs_engine_truncate_file(bs_engine_t *engine, long length);
int bs_engine_mmap_file(bs_engine_t *engine);
int bs_engine_unmap_file(bs_engine_t *engine);
void bs_engine_dump(bs_engine_t *engine);