X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fmain-afb-daemon.c;h=31bf4f76aaebe9e374d219a713e45affe7eec72a;hb=82a9d796219de863253b96340bb03c4506c8c676;hp=165d140087842a43d828244fb8a2284066b93323;hpb=29ae81fa15c6080fd27929f4cc78e1289cb920e9;p=src%2Fapp-framework-binder.git diff --git a/src/main-afb-daemon.c b/src/main-afb-daemon.c index 165d1400..31bf4f76 100644 --- a/src/main-afb-daemon.c +++ b/src/main-afb-daemon.c @@ -298,7 +298,7 @@ static int init_alias(void *closure, const char *spec) *path++ = 0; INFO("Alias for url=%s to path=%s", spec, path); return afb_hsrv_add_alias(hsrv, spec, afb_common_rootdir_get_fd(), path, - 0, 0); + 0, 1); } static int init_http_server(struct afb_hsrv *hsrv) @@ -340,14 +340,25 @@ static int init_http_server(struct afb_hsrv *hsrv) return 1; } +static int add_interface(void *closure, const char *value) +{ + struct afb_hsrv *hsrv = closure; + int rc; + + rc = afb_hsrv_add_interface(hsrv, value); + return rc > 0; +} + static struct afb_hsrv *start_http_server() { int rc; - const char *uploaddir, *rootdir; + const char *uploaddir, *rootdir, *errs; struct afb_hsrv *hsrv; int cache_timeout, http_port; + struct json_object *junk; - rc = wrap_json_unpack(main_config, "{ss ss si si}", + http_port = -1; + rc = wrap_json_unpack(main_config, "{ss ss si s?i}", "uploaddir", &uploaddir, "rootdir", &rootdir, "cache-eol", &cache_timeout, @@ -364,6 +375,7 @@ static struct afb_hsrv *start_http_server() ERROR("unable to fallback to upload directory %s", fallback_uploaddir); return NULL; } + uploaddir = fallback_uploaddir; } hsrv = afb_hsrv_create(); @@ -379,9 +391,6 @@ static struct afb_hsrv *start_http_server() return NULL; } - NOTICE("Waiting port=%d rootdir=%s", http_port, rootdir); - NOTICE("Browser URL= http://localhost:%d", http_port); - rc = afb_hsrv_start(hsrv, 15); if (!rc) { ERROR("starting of httpd failed"); @@ -389,9 +398,27 @@ static struct afb_hsrv *start_http_server() return NULL; } - rc = afb_hsrv_add_interface_tcp(hsrv, DEFAULT_BINDER_INTERFACE, (uint16_t) http_port); - if (!rc) { - ERROR("setting interface failed"); + NOTICE("Serving rootdir=%s uploaddir=%s", rootdir, uploaddir); + + /* check if port is set */ + if (http_port < 0) { + /* not set, check existing interfaces */ + if (!json_object_object_get_ex(main_config, "interface", &junk)) { + ERROR("No port and no interface "); + } + } else { + rc = afb_hsrv_add_interface_tcp(hsrv, DEFAULT_BINDER_INTERFACE, (uint16_t) http_port); + if (!rc) { + ERROR("setting interface failed"); + afb_hsrv_put(hsrv); + return NULL; + } + NOTICE("Browser URL= http://localhost:%d", http_port); + } + + errs = run_for_config_array_opt("interface", add_interface, hsrv); + if (errs) { + ERROR("setting interface %s failed", errs); afb_hsrv_put(hsrv); return NULL; } @@ -544,7 +571,7 @@ static char **instanciate_command_args(struct json_object *exec, const char *por static int execute_command() { - struct json_object *exec, *oport; + struct json_object *exec, *oport, *otok; struct sigaction siga; char port[20]; const char *token; @@ -579,7 +606,10 @@ static int execute_command() } else { /* instantiate arguments and environment */ - token = afb_session_initial_token(); + if (json_object_object_get_ex(main_config, "token", &otok)) + token = json_object_get_string(otok); + else + token = SUBST_STR"p"; args = instanciate_command_args(exec, port, token); if (args && instanciate_environ(port, token) >= 0) { /* run */ @@ -659,7 +689,7 @@ static void startup_call_current(struct startup_req *sreq) json = strchr(verb, ':'); if (json) { afb_xreq_init(&sreq->xreq, &startup_xreq_itf); - afb_context_init_validated(&sreq->xreq.context, sreq->session); + afb_context_init_validated(&sreq->xreq.context, sreq->session, NULL, NULL); sreq->api = strndup(api, verb - api); sreq->verb = strndup(verb + 1, json - verb - 1); sreq->xreq.request.called_api = sreq->api; @@ -769,7 +799,7 @@ static void start(int signum, void *arg) } /* initialize session handling */ - if (afb_session_init(max_session_count, session_timeout, token)) { + if (afb_session_init(max_session_count, session_timeout)) { ERROR("initialisation of session manager failed"); goto error; } @@ -801,7 +831,7 @@ static void start(int signum, void *arg) goto error; } if (addenv_int("AFB_PORT", http_port) - || addenv("AFB_TOKEN", afb_session_initial_token())) { + || addenv("AFB_TOKEN", token?:"")) { ERROR("can't set HTTP environment"); goto error; } @@ -894,7 +924,7 @@ static void start(int signum, void *arg) /* run the command */ afb_debug("start-exec"); - if (execute_command() < 0) + if (execute_command(http_port, token) < 0) goto error; /* ready */