summaryrefslogtreecommitdiffstats
path: root/src/server/net.c
diff options
context:
space:
mode:
authorsr2012-08-25 18:59:12 +0200
committersr2012-08-25 18:59:12 +0200
commitcbf9d922fdbe19e65e8710dd72d6832e35144fc5 (patch)
tree19e09a155d2492ef43d8e708c3c5a979c033ebb4 /src/server/net.c
parent[*] Fix bug in serializer_get_* (diff)
downloaddnbd3-cbf9d922fdbe19e65e8710dd72d6832e35144fc5.tar.gz
dnbd3-cbf9d922fdbe19e65e8710dd72d6832e35144fc5.tar.xz
dnbd3-cbf9d922fdbe19e65e8710dd72d6832e35144fc5.zip
[KERNEL] Make it possible to receive push messages by the server
Diffstat (limited to 'src/server/net.c')
-rw-r--r--src/server/net.c11
1 files changed, 6 insertions, 5 deletions
diff --git a/src/server/net.c b/src/server/net.c
index bf680a3..a60b739 100644
--- a/src/server/net.c
+++ b/src/server/net.c
@@ -41,10 +41,11 @@
static char recv_request_header(int sock, dnbd3_request_t *request)
{
- // Read request heade from socket
- if (recv(sock, request, sizeof(*request), MSG_WAITALL) != sizeof(*request))
+ int ret;
+ // Read request header from socket
+ if ((ret = recv(sock, request, sizeof(*request), MSG_WAITALL)) != sizeof(*request))
{
- printf("[DEBUG] Error receiving request: Could not read message header\n");
+ printf("[DEBUG] Error receiving request: Could not read message header (%d)\n", ret);
return 0;
}
// Make sure all bytes are in the right order (endianness)
@@ -55,7 +56,7 @@ static char recv_request_header(int sock, dnbd3_request_t *request)
return 0;
}
// Payload sanity check
- if (request->size > MAX_PAYLOAD)
+ if (request->cmd != CMD_GET_BLOCK && request->size > MAX_PAYLOAD)
{
memlogf("[WARNING] Client tries to send a packet of type %d with %d bytes payload. Dropping client.", (int)request->cmd, (int)request->size);
return 0;
@@ -152,7 +153,6 @@ void *dnbd3_handle_query(void *dnbd3_client)
}
else
{
- printf("Payload len: %d\n", (int)request.size);
if (recv_request_payload(client->sock, request.size, &payload))
{
client_version = serializer_get_uint16(&payload);
@@ -179,6 +179,7 @@ void *dnbd3_handle_query(void *dnbd3_client)
}
else
{
+ serializer_reset_write(&payload);
serializer_put_uint16(&payload, PROTOCOL_VERSION);
serializer_put_string(&payload, image->low_name);
serializer_put_uint16(&payload, image->rid);