From bd375330fe7e3d79495762bcc7c86d907a453aae Mon Sep 17 00:00:00 2001 From: =?utf8?q?Jos=C3=A9=20Bollo?= Date: Sun, 17 Apr 2016 18:14:23 +0200 Subject: [PATCH] cleaner http handling in main MIME-Version: 1.0 Content-Type: text/plain; charset=utf8 Content-Transfer-Encoding: 8bit Change-Id: I3e13b73910217082f32c5775adefb643b3a91baf Signed-off-by: José Bollo --- src/main.c | 122 +++++++++++++++++++++++++++++++------------------------------ 1 file changed, 62 insertions(+), 60 deletions(-) diff --git a/src/main.c b/src/main.c index 9977c7d4..d8065e42 100644 --- a/src/main.c +++ b/src/main.c @@ -74,8 +74,6 @@ #define SET_MODE 18 #define SET_READYFD 19 -static struct afb_hsrv *start(struct afb_config * config); - // Command line structure hold cli --command + help text typedef struct { int val; // command number within application @@ -486,6 +484,67 @@ static void daemonize(struct afb_config *config) fflush (stderr); } +/*--------------------------------------------------------- + | http server + | Handles the HTTP server + +--------------------------------------------------------- */ +static int init_http_server(struct afb_hsrv *hsrv, struct afb_config * config) +{ + int idx; + + if (!afb_hsrv_add_handler(hsrv, config->rootapi, afb_hswitch_websocket_switch, NULL, 20)) + return 0; + + if (!afb_hsrv_add_handler(hsrv, config->rootapi, afb_hswitch_apis, NULL, 10)) + return 0; + + for (idx = 0; idx < config->aliascount; idx++) + if (!afb_hsrv_add_alias (hsrv, config->aliasdir[idx].url, config->aliasdir[idx].path, 0)) + return 0; + + if (!afb_hsrv_add_alias(hsrv, "", config->rootdir, -10)) + return 0; + + if (!afb_hsrv_add_handler(hsrv, config->rootbase, afb_hswitch_one_page_api_redirect, NULL, -20)) + return 0; + + return 1; +} + +static struct afb_hsrv *start_http_server(struct afb_config * config) +{ + int rc; + struct afb_hsrv *hsrv; + + hsrv = afb_hsrv_create(); + if (hsrv == NULL) { + fprintf(stderr, "memory allocation failure\n"); + return NULL; + } + + if (!afb_hsrv_set_cache_timeout(hsrv, config->cacheTimeout) + || !init_http_server(hsrv, config)) { + fprintf (stderr, "Error: initialisation of httpd failed"); + afb_hsrv_put(hsrv); + return NULL; + } + + if (verbosity) { + fprintf (stderr, "AFB:notice Waiting port=%d rootdir=%s\n", config->httpdPort, config->rootdir); + fprintf (stderr, "AFB:notice Browser URL= http:/*localhost:%d\n", config->httpdPort); + } + + rc = afb_hsrv_start(hsrv, (uint16_t) config->httpdPort, 15); + if (!rc) { + fprintf (stderr, "Error: starting of httpd failed"); + afb_hsrv_put(hsrv); + return NULL; + } + + return hsrv; +} + + /*--------------------------------------------------------- | main | Parse option and launch action @@ -547,7 +606,7 @@ int main(int argc, char *argv[]) { } - hsrv = start (config); + hsrv = start_http_server(config); if (hsrv == NULL) exit(1); @@ -567,60 +626,3 @@ int main(int argc, char *argv[]) { return 0; } -static int init(struct afb_hsrv *hsrv, struct afb_config * config) -{ - int idx; - - if (!afb_hsrv_add_handler(hsrv, config->rootapi, afb_hswitch_websocket_switch, NULL, 20)) - return 0; - - if (!afb_hsrv_add_handler(hsrv, config->rootapi, afb_hswitch_apis, NULL, 10)) - return 0; - - for (idx = 0; idx < config->aliascount; idx++) - if (!afb_hsrv_add_alias (hsrv, config->aliasdir[idx].url, config->aliasdir[idx].path, 0)) - return 0; - - if (!afb_hsrv_add_alias(hsrv, "", config->rootdir, -10)) - return 0; - - if (!afb_hsrv_add_handler(hsrv, config->rootbase, afb_hswitch_one_page_api_redirect, NULL, -20)) - return 0; - - return 1; -} - -static struct afb_hsrv *start(struct afb_config * config) -{ - int rc; - struct afb_hsrv *hsrv; - - hsrv = afb_hsrv_create(); - if (hsrv == NULL) { - fprintf(stderr, "memory allocation failure\n"); - return NULL; - } - - if (!afb_hsrv_set_cache_timeout(hsrv, config->cacheTimeout) - || !init(hsrv, config)) { - fprintf (stderr, "Error: initialisation of httpd failed"); - afb_hsrv_put(hsrv); - return NULL; - } - - if (verbosity) { - fprintf (stderr, "AFB:notice Waiting port=%d rootdir=%s\n", config->httpdPort, config->rootdir); - fprintf (stderr, "AFB:notice Browser URL= http:/*localhost:%d\n", config->httpdPort); - } - - rc = afb_hsrv_start(hsrv, (uint16_t) config->httpdPort, 15); - if (!rc) { - fprintf (stderr, "Error: starting of httpd failed"); - afb_hsrv_put(hsrv); - return NULL; - } - - return hsrv; -} - - -- 2.16.6