X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafm-system-daemon.c;h=097913ab333ea28573c7aca9112515e6e69c5100;hb=2bbe66dda7fadf2d08a57e2b0e0fa8841a118c81;hp=b7f878fa33f87900b96db1fab2384d4889092b03;hpb=728bc162968a99f25dbe07ae8e48e53281f01253;p=src%2Fapp-framework-main.git diff --git a/src/afm-system-daemon.c b/src/afm-system-daemon.c index b7f878f..097913a 100644 --- a/src/afm-system-daemon.c +++ b/src/afm-system-daemon.c @@ -1,5 +1,5 @@ /* - Copyright 2015 IoT.bzh + Copyright 2015, 2016, 2017 IoT.bzh author: José Bollo @@ -24,11 +24,12 @@ #include #include -#include +#include #include "verbose.h" #include "utils-jbus.h" #include "utils-json.h" +#include "utils-systemd.h" #include "afm.h" #include "afm-db.h" #include "wgt-info.h" @@ -38,6 +39,20 @@ static const char appname[] = "afm-system-daemon"; static const char *rootdir = NULL; +static void version() +{ + printf( + "\n" + " %s version="AFM_VERSION"\n" + "\n" + " Copyright (C) 2015, 2016, 2017 \"IoT.bzh\"\n" + " AFB comes with ABSOLUTELY NO WARRANTY.\n" + " Licence Apache 2\n" + "\n", + appname + ); +} + static void usage() { printf( @@ -47,6 +62,7 @@ static void usage() " -d run as a daemon\n" " -q quiet\n" " -v verbose\n" + " -V version\n" "\n", appname ); @@ -58,6 +74,7 @@ static struct option options[] = { { "quiet", no_argument, NULL, 'q' }, { "verbose", no_argument, NULL, 'v' }, { "help", no_argument, NULL, 'h' }, + { "version", no_argument, NULL, 'V' }, { NULL, 0, NULL, 0 } }; @@ -68,11 +85,21 @@ const char error_bad_request[] = "\"bad request\""; const char error_not_found[] = "\"not found\""; const char error_cant_start[] = "\"can't start\""; +static void do_reloads() +{ +#ifndef LEGACY_MODE_WITHOUT_SYSTEMD + /* enforce daemon reload */ + systemd_daemon_reload(0); + systemd_unit_restart_name(0, "sockets.target"); +#endif +} + static void on_install(struct sd_bus_message *smsg, struct json_object *req, void *unused) { const char *wgtfile; const char *root; int force; + int reload; struct wgt_info *ifo; struct json_object *resp; @@ -82,14 +109,17 @@ static void on_install(struct sd_bus_message *smsg, struct json_object *req, voi wgtfile = json_object_get_string(req); root = rootdir; force = 0; + reload = 1; break; case json_type_object: wgtfile = j_string_at(req, "wgt", NULL); if (wgtfile != NULL) { root = j_string_at(req, "root", rootdir); force = j_boolean_at(req, "force", 0); + reload = j_boolean_at(req, "reload", 1); break; } + /*@fallthrough@*/ default: jbus_reply_error_s(smsg, error_bad_request); return; @@ -100,6 +130,10 @@ static void on_install(struct sd_bus_message *smsg, struct json_object *req, voi if (ifo == NULL) jbus_reply_error_s(smsg, "\"installation failed\""); else { + /* reload if needed */ + if (reload) + do_reloads(); + /* build the response */ resp = json_object_new_object(); if(!resp || !j_add_string(resp, "added", wgt_info_desc(ifo)->idaver)) @@ -133,6 +167,7 @@ static void on_uninstall(struct sd_bus_message *smsg, struct json_object *req, v root = j_string_at(req, "root", rootdir); break; } + /*@fallthrough@*/ default: jbus_reply_error_s(smsg, error_bad_request); return; @@ -167,11 +202,14 @@ int main(int ac, char **av) LOGAUTH(appname); /* interpretation of arguments */ - while ((i = getopt_long(ac, av, "hdqvr:", options, NULL)) >= 0) { + while ((i = getopt_long(ac, av, "hdqvVr:", options, NULL)) >= 0) { switch (i) { case 'h': usage(); return 0; + case 'V': + version(); + return 0; case 'q': if (verbosity) verbosity--;