| 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; +} | 


