summaryrefslogtreecommitdiffstats
path: root/src/server/net.c
diff options
context:
space:
mode:
authorSimon Rettberg2013-08-28 17:54:19 +0200
committerSimon Rettberg2013-08-28 17:54:19 +0200
commitbfdac5b274d8ca371307d2b4b417092ba25f11ab (patch)
treec62b57b0d56995057f152f1e1273dc3383a709a1 /src/server/net.c
parent[SERVER] On-the-fly transparent proxying (diff)
downloaddnbd3-bfdac5b274d8ca371307d2b4b417092ba25f11ab.tar.gz
dnbd3-bfdac5b274d8ca371307d2b4b417092ba25f11ab.tar.xz
dnbd3-bfdac5b274d8ca371307d2b4b417092ba25f11ab.zip
[SERVER] Copy CRC-32 list from uplink server if available
Split up helper.c, move file/disk related functions to fileutil.c Uplink: Make sure relayed requests are at least 1MiB
Diffstat (limited to 'src/server/net.c')
-rw-r--r--src/server/net.c7
1 files changed, 5 insertions, 2 deletions
diff --git a/src/server/net.c b/src/server/net.c
index 4e25564..cd38205 100644
--- a/src/server/net.c
+++ b/src/server/net.c
@@ -329,10 +329,13 @@ void *net_client_handler(void *dnbd3_client)
reply.cmd = CMD_GET_CRC32;
if ( image->crc32 == NULL ) {
reply.size = 0;
+ send_reply( client->sock, &reply, NULL );
} else {
- reply.size = IMGSIZE_TO_HASHBLOCKS(image->filesize) * 4;
+ const int size = reply.size = (IMGSIZE_TO_HASHBLOCKS(image->filesize) + 1) * sizeof(uint32_t);
+ send_reply( client->sock, &reply, NULL );
+ send( client->sock, &image->masterCrc32, sizeof(uint32_t), 0 );
+ send( client->sock, image->crc32, size - sizeof(uint32_t), 0 );
}
- send_reply( client->sock, &reply, image->crc32 );
break;
default: