From 11138ae4e8e3ed2f01156189923f7904c8f21591 Mon Sep 17 00:00:00 2001 From: nsensfel Date: Mon, 6 Jan 2020 08:13:16 +0100 Subject: ... --- src/client.c | 2 +- src/config/parameters/parameters.c | 12 ++++-- src/server/communication_thread.c | 3 +- src/server/handle_client.c | 87 ++++++++++++++++++++++++++++++++++++++ 4 files changed, 97 insertions(+), 7 deletions(-) create mode 100644 src/server/handle_client.c (limited to 'src') diff --git a/src/client.c b/src/client.c index 4d1f659..c4c1148 100644 --- a/src/client.c +++ b/src/client.c @@ -144,7 +144,7 @@ static int send_commands } } - if (fputc('\0', socket) == EOF) + if (fputc('\n', socket) == EOF) { } diff --git a/src/config/parameters/parameters.c b/src/config/parameters/parameters.c index fa53b6a..e3328ca 100644 --- a/src/config/parameters/parameters.c +++ b/src/config/parameters/parameters.c @@ -394,13 +394,17 @@ void relabsd_parameters_print_usage (const char exec [const restrict static 1]) ":\n" "\t\t(Re)defines an axis.\n\n" - "\t[-m | --mod-axis] " - ":\n" - "\t\tModifies an axis (use + and - signs for the options).\n\n" + "\t[-m | --mod-axis] [+|-|=]:\n" + "\t\tModifies an axis.\n\n" "\t[-f | --config] " ":\n" - "\t\t(Re)defines an axis.\n", + "\t\t(Re)defines an axis.\n\n" + + "\t[-q | --quit]:\n" + "\t\tTerminates the targeted server instance.\n\n" + + ": [min|max|fuzz|flat|resolution]\n", exec ); } diff --git a/src/server/communication_thread.c b/src/server/communication_thread.c index 0f367da..cc91065 100644 --- a/src/server/communication_thread.c +++ b/src/server/communication_thread.c @@ -9,7 +9,6 @@ /******************************************************************************/ /**** LOCAL FUNCTIONS *********************************************************/ /******************************************************************************/ - static void main_loop (struct relabsd_server server [const static 1]) { int communication_socket, current_client_socket; @@ -87,7 +86,7 @@ static void main_loop (struct relabsd_server server [const static 1]) return -1; } - (void) handle_client(current_client_socket, server); + (void) relabsd_server_handle_client(current_client_socket, server); } } diff --git a/src/server/handle_client.c b/src/server/handle_client.c new file mode 100644 index 0000000..696725b --- /dev/null +++ b/src/server/handle_client.c @@ -0,0 +1,87 @@ +/**** POSIX *******************************************************************/ +/* + * To get the POSIX 'getline' function. + * We don't know what POSIX version is set by default. + */ +#define _POSIX_C_SOURCE 200809L + +#include +#include +#include +#include + +/**** RELABSD *****************************************************************/ +#include +#include + +/******************************************************************************/ +/**** LOCAL FUNCTIONS *********************************************************/ +/******************************************************************************/ +static void handle_input +( + const ssize_t input_size, + const char input [const static 1], + struct relabsd_server server [const static 1] +) +{ +} + +/******************************************************************************/ +/**** EXPORTED FUNCTIONS ******************************************************/ +/******************************************************************************/ +int relabsd_server_handle_client +( + const int socket, + struct relabsd_server server [const static 1] +) +{ + FILE * socket_as_file; + /* FIXME: reallocating at every new connection is kind of wasteful. */ + char * input; + ssize_t input_size; + + errno = 0; + socket_as_file = fdopen(socket, "r"); + + if (socket_as_file == ((FILE *) NULL)) + { + RELABSD_ERROR + ( + "Unable to open client socket as a FILE: %s.", + strerror(errno) + ); + + (void) close(socket); + + return -1; + } + + errno = 0; + + input_size = getline(&input, (size_t *) NULL, socket_as_file); + + if (input_size < 1) + { + RELABSD_ERROR + ( + "Unable to read line from client socket: %s.", + strerror(errno) + ); + + (void) free((void *) input); + + /* This also closes 'socket' */ + (void) fclose(socket_as_file); + + return -1; + } + + handle_input(input_size, input, server); + + (void) free((void *) input); + + /* This also closes 'socket' */ + (void) fclose(socket_as_file); + + return 0; +} -- cgit v1.2.3-70-g09d2