| summaryrefslogtreecommitdiff |
diff options
| author | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-12-23 15:44:19 +0100 |
|---|---|---|
| committer | Nathanael Sensfelder <SpamShield0@MultiAgentSystems.org> | 2019-12-23 15:44:19 +0100 |
| commit | 390576c3839ee7abb845e27b7267de45495e6b2f (patch) | |
| tree | c481c37c868ccc65a3476f60b17369b21a90b79b /src/server/server.c | |
| parent | 4355548f79375a62bb5e3bb5695190d48e4c0bc3 (diff) | |
Starting to turn relabsd into a proper daemon...
Diffstat (limited to 'src/server/server.c')
| -rw-r--r-- | src/server/server.c | 113 |
1 files changed, 113 insertions, 0 deletions
diff --git a/src/server/server.c b/src/server/server.c new file mode 100644 index 0000000..debeb91 --- /dev/null +++ b/src/server/server.c @@ -0,0 +1,113 @@ +/**** RELABSD *****************************************************************/ +#include <relabsd/config.h> +#include <relabsd/debug.h> +#include <relabsd/server.h> + +#include <relabsd/config/parameters.h> + +/******************************************************************************/ +/**** LOCAL FUNCTIONS *********************************************************/ +/******************************************************************************/ +int initialize +( + struct relabsd_server server [const restrict static 1], + struct relabsd_parameters params [const static 1] +) +{ + server->parameters = params; + + if + ( + relabsd_physical_device_open + ( + relabsd_parameters_get_physical_device_name(params), + &(server->physical_device) + ) + < 0 + ) + { + return -1; + } + + if + ( + relabsd_virtual_device_create + ( + + &(server->virtual_device) + ) + < 0 + ) + { + relabsd_physical_device_close(&(server->physical_device)); + + return -2; + } + + if + ( + (relabsd_parameters_get_communication_node(params) != ((...) NULL)) + && (relabsd_server_spawn_communication_node(server) < 0) + ) + { + relabsd_virtual_device_destroy(&(server->virtual_device)); + relabsd_physical_device_close(&(server->physical_device)); + + return -3; + } + + return 0; +} + +void finalize (struct relabsd_server server [const static 1]) +{ + if (relabsd_parameters_get_communication_node(params) != ((...) NULL)) + { + relabsd_server_join_communication_node(&server); + } + + relabsd_virtual_device_destroy(&(server->virtual_device)); + relabsd_physical_device_close(&(server->physical_device)); + + return 0; +} + +/******************************************************************************/ +/**** EXPORTED FUNCTIONS ******************************************************/ +/******************************************************************************/ +int relabsd_server +( + const int argc, + const char * const argv [const restrict static argc], + struct relabsd_parameters params [const static 1] +) +{ + struct relabsd_server server; + + RELABSD_S_DEBUG(RELABSD_DEBUG_PROGRAM_FLOW, "Started server mode."); + + if (relabsd_parameters_parse_options(argc, argv, params) < 0) + { + return -1; + } + + if + ( + (relabsd_parameters_run_as_daemon(params)) + && (relabsd_server_create_daemon() < 0) + ) + { + return -2; + } + + (void) initialize(&server, params); + + (void) relabsd_server_conversion_loop(&server); + + finalize(&server); + + + RELABSD_S_DEBUG(RELABSD_DEBUG_PROGRAM_FLOW, "Completed server mode."); + + return 0; +} |


