#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"
#include "wgtpkg-install.h"
#include "wgtpkg-uninstall.h"
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(
" -d run as a daemon\n"
" -q quiet\n"
" -v verbose\n"
+ " -V version\n"
"\n",
appname
);
{ "quiet", no_argument, NULL, 'q' },
{ "verbose", no_argument, NULL, 'v' },
{ "help", no_argument, NULL, 'h' },
+ { "version", no_argument, NULL, 'V' },
{ NULL, 0, NULL, 0 }
};
const char error_not_found[] = "\"not found\"";
const char error_cant_start[] = "\"can't start\"";
+static void do_reloads()
+{
+ /* enforce daemon reload */
+ systemd_daemon_reload(0);
+ systemd_unit_restart_name(0, "sockets.target");
+}
+
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;
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;
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))
root = j_string_at(req, "root", rootdir);
break;
}
+ /*@fallthrough@*/
default:
jbus_reply_error_s(smsg, error_bad_request);
return;
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--;