diff options
author | Andreas Baumann <mail@andreasbaumann.cc> | 2014-11-13 19:31:03 +0100 |
---|---|---|
committer | Andreas Baumann <mail@andreasbaumann.cc> | 2014-11-13 19:31:03 +0100 |
commit | 7cffcc99678cb62c11f33bf6ff6979229754cbc7 (patch) | |
tree | 44fd9c53628283dde155e550a865b3bd216fb13e /src/biruda.c | |
parent | 7d239d4d733a00eb0d44b8a29d67c2ec312a1604 (diff) | |
download | biruda-7cffcc99678cb62c11f33bf6ff6979229754cbc7.tar.gz biruda-7cffcc99678cb62c11f33bf6ff6979229754cbc7.tar.bz2 |
added a small built-in webserver
Diffstat (limited to 'src/biruda.c')
-rw-r--r-- | src/biruda.c | 41 |
1 files changed, 34 insertions, 7 deletions
diff --git a/src/biruda.c b/src/biruda.c index 57e2995..ae6d614 100644 --- a/src/biruda.c +++ b/src/biruda.c @@ -19,6 +19,7 @@ #include "master.h" #include "worker.h" #include "coordinator.h" +#include "webserver.h" #include "port.h" @@ -76,7 +77,7 @@ static int read_config( const char *filename, cfg_t **cfg ) CFG_SEC( "master", opts_master, CFGF_MULTI ), CFG_SEC( "coordinator", opts_coordinator, CFGF_MULTI ), CFG_SEC( "worker", opts_worker, CFGF_MULTI | CFGF_TITLE ), - CFG_SEC( "webserver", opts_webserver, 0 ), + CFG_SEC( "webserver", opts_webserver, CFGF_MULTI ), CFG_END( ) }; @@ -129,12 +130,14 @@ static void print_config( struct gengetopt_args_info *args_info, cfg_t *cfg ) } cfg_t *webserver_cfg = cfg_getnsec( cfg, "webserver", 0 ); - - puts( "Webserver:" ); - printf( " Host: %s\n", cfg_getstr( webserver_cfg, "host" ) ); - printf( " Port: %ld\n", cfg_getint( webserver_cfg, "port" ) ); - printf( " Number of threads: %ld\n", cfg_getint( webserver_cfg, "threads" ) ); - puts( "" ); + unsigned int has_webserver = cfg_size( cfg, "webserver" ); + if( has_webserver > 0 ) { + printf( "Webserver:\n" ); + printf( " Host: %s\n", cfg_getstr( webserver_cfg, "host" ) ); + printf( " Port: %ld\n", cfg_getint( webserver_cfg, "port" ) ); + printf( " Number of threads: %ld\n", cfg_getint( webserver_cfg, "threads" ) ); + puts( "" ); + } } static int create_master( cfg_t *cfg ) @@ -153,6 +156,14 @@ static int create_coordinator( cfg_t *cfg ) return coordinator_init( control ); } +static int create_webserver( cfg_t *cfg ) +{ + cfg_t *webserver_cfg = cfg_getnsec( cfg, "webserver", 0 ); + unsigned int port = cfg_getint( webserver_cfg, "port" ); + + return webserver_init( port ); +} + static volatile int got_terminate = 0; #ifdef _WIN32 @@ -225,6 +236,16 @@ int main( int argc, char *argv[] ) exit( EXIT_FAILURE ); } } + + unsigned int has_webserver = cfg_size( cfg, "webserver" ); + if( has_webserver ) { + if( create_webserver( cfg ) != 0 ) { + fprintf( stderr, "FATAL: Unable to create webserver thread!\n" ); + cfg_free( cfg ); + cmdline_parser_free( &args_info ); + exit( EXIT_FAILURE ); + } + } if( args_info.foreground_given ) { #ifdef _WIN32 @@ -245,6 +266,9 @@ int main( int argc, char *argv[] ) } } + if( has_webserver ) { + webserver_terminate( ); + } if( has_coordinator ) { coordinator_terminate( ); } @@ -258,6 +282,9 @@ int main( int argc, char *argv[] ) if( has_master ) { master_free( ); } + if( has_webserver ) { + webserver_free( ); + } cfg_free( cfg ); cmdline_parser_free( &args_info ); |