summaryrefslogtreecommitdiff
path: root/src/biruda.c
diff options
context:
space:
mode:
authorAndreas Baumann <mail@andreasbaumann.cc>2014-11-13 19:31:03 +0100
committerAndreas Baumann <mail@andreasbaumann.cc>2014-11-13 19:31:03 +0100
commit7cffcc99678cb62c11f33bf6ff6979229754cbc7 (patch)
tree44fd9c53628283dde155e550a865b3bd216fb13e /src/biruda.c
parent7d239d4d733a00eb0d44b8a29d67c2ec312a1604 (diff)
downloadbiruda-7cffcc99678cb62c11f33bf6ff6979229754cbc7.tar.gz
biruda-7cffcc99678cb62c11f33bf6ff6979229754cbc7.tar.bz2
added a small built-in webserver
Diffstat (limited to 'src/biruda.c')
-rw-r--r--src/biruda.c41
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 );