88 lines
1.8 KiB
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;
|
|
}
|
|
*/
|