diff options
| author | Johann Latocha | 2012-02-02 01:13:50 +0100 |
|---|---|---|
| committer | Johann Latocha | 2012-02-02 01:13:50 +0100 |
| commit | 37e4ed696b77455a738fa948b93498c8740721bc (patch) | |
| tree | 14306f376ef7132d2cac1624e3aafa8dbba035b0 /src/server/net.c | |
| parent | [SERVER] Close all client sockets on shutdown (diff) | |
| download | dnbd3-37e4ed696b77455a738fa948b93498c8740721bc.tar.gz dnbd3-37e4ed696b77455a738fa948b93498c8740721bc.tar.xz dnbd3-37e4ed696b77455a738fa948b93498c8740721bc.zip | |
[SERVER] Parsing config file with glib
[KERNEL] Bugfixes
[CLIENT] Using vid and rid
Diffstat (limited to 'src/server/net.c')
| -rw-r--r-- | src/server/net.c | 19 |
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); |
