| summaryrefslogtreecommitdiff |
diff options
| author | nsensfel <SpamShield0@noot-noot.org> | 2020-01-06 08:13:16 +0100 |
|---|---|---|
| committer | nsensfel <SpamShield0@noot-noot.org> | 2020-01-06 08:13:16 +0100 |
| commit | 11138ae4e8e3ed2f01156189923f7904c8f21591 (patch) | |
| tree | 72b724c397a685140a9dc37b6314b88f798be8da /src/server/handle_client.c | |
| parent | f9a06303ce72aa6697c17447dfef545db72c2407 (diff) | |
...
Diffstat (limited to 'src/server/handle_client.c')
| -rw-r--r-- | src/server/handle_client.c | 87 |
1 files changed, 87 insertions, 0 deletions
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 <errno.h> +#include <stdio.h> +#include <stdlib.h> +#include <string.h> + +/**** RELABSD *****************************************************************/ +#include <relabsd/debug.h> +#include <relabsd/server.h> + +/******************************************************************************/ +/**** 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; +} |


