summaryrefslogtreecommitdiffstats
path: root/src/server/net.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/server/net.c')
-rw-r--r--src/server/net.c19
1 files changed, 8 insertions, 11 deletions
diff --git a/src/server/net.c b/src/server/net.c
index 2d6b9fc..4f0e5a4 100644
--- a/src/server/net.c
+++ b/src/server/net.c
@@ -24,7 +24,6 @@
#include <string.h>
#include <unistd.h>
#include <pthread.h>
-#include <sys/stat.h>
#include <fcntl.h>
#include <sys/socket.h>
#include <sys/sendfile.h>
@@ -32,13 +31,12 @@
#include <netinet/in.h>
#include "server.h"
-#include "hashtable.h"
+#include "utils.h"
void *dnbd3_handle_query(void *dnbd3_client)
{
dnbd3_client_t *client = (dnbd3_client_t *) (uintptr_t) dnbd3_client;
int image_file = -1;
- off_t filesize = 0;
dnbd3_request_t request;
dnbd3_reply_t reply;
uint16_t cmd;
@@ -56,21 +54,19 @@ void *dnbd3_handle_query(void *dnbd3_client)
case CMD_GET_SIZE:
pthread_spin_lock(&_spinlock); // because of reloading config
- image_file = open(dnbd3_ht_search(request.image_id), O_RDONLY);
+ dnbd3_image_t *image = dnbd3_get_image(request.vid, request.rid);
pthread_spin_unlock(&_spinlock);
- if (image_file < 0)
+ if (image)
{
- printf("ERROR: Client requested an unknown image id.\n");
- filesize = 0;
+ image_file = open(image->file, O_RDONLY);
+ reply.filesize = image->filesize;
}
else
{
- struct stat st;
- fstat(image_file, &st);
- filesize = st.st_size;
+ printf("ERROR: Client requested an unknown image id.\n");
+ reply.filesize = 0;
}
reply.cmd = request.cmd;
- reply.filesize = filesize;
send(client->sock, (char *) &reply, sizeof(dnbd3_reply_t), 0);
break;
@@ -94,6 +90,7 @@ void *dnbd3_handle_query(void *dnbd3_client)
}
close(client->sock);
+ close(image_file);
_dnbd3_clients = g_slist_remove(_dnbd3_clients, client);
free(client);
printf("INFO: Client %s exit\n", client->ip);