sparse-tools/src/bs_recv_merkle.c

88 lines
1.8 KiB
C

//
// Created by haraldwolff on 07.08.22.
//
#include <blksync.h>
#include <hash.h>
#include <time.h>
/*
int bs_recv_merkle(bsync_engine_t *engine) {
int s;
uint64_t hash;
merkle_t *merkle;
s = bs_merkle_build(engine, &merkle);
if (s < 0){
fprintf(stderr, "failed to build merkle tree.\n");
}
if (engine->tool_flags & BS_DEBUG){
merkle_dump( merkle );
}
merkle_get(merkle, 0, 0, &hash);
if (bs_send(engine->remote, &hash, sizeof(uint64_t)) < 0)
return -EIO;
int d,n;
while (-1) {
if (
(bs_recv(engine->remote, &d, sizeof(int)) < 0) ||
(bs_recv(engine->remote, &n, sizeof(int)) < 0)
){
fprintf(stderr, "failed to read tree hash request.\n");
return -EIO;
}
if ((d==-1) && (n==-1))
break;
uint64_t *row;
merkle_get_row( merkle, d+1, &row, NULL);
if (bs_send(engine->remote, &row[n * merkle->parameters.n], merkle->parameters.n * sizeof(uint64_t)) < 0)
{
fprintf(stderr, "failed to send tree hashes for d=%d n=%d\n", d, n);
return -EIO;
}
}
char *block = malloc(engine->blocksize);
if (!block) {
fprintf(stderr, "out of memory allocating block buffer\n");
return -ENOMEM;
}
long offset = 0;
while (offset != -1){
if (bs_recv(engine->remote, &offset, sizeof(offset)) < 0){
fprintf(stderr, "could not receive block offset\n");
return -EIO;
}
if (offset == -1)
break;
long residue = engine->filesize - offset;
int size = residue > engine->blocksize ? engine->blocksize : residue;
if (bs_recv(engine->remote, block, size) < 0){
fprintf(stderr, "could not receive block at 0x%016lx\n", offset);
return -EIO;
}
if (write_block(engine, offset, block, size)<0){
fprintf(stderr, "could not write block at offset 0x%016lx\n", offset);
return -EIO;
}
}
free(block),
merkle_free(merkle);
return 0;
}
*/