diff options
author | José Bollo <jose.bollo@iot.bzh> | 2016-02-13 12:51:29 +0100 |
---|---|---|
committer | José Bollo <jose.bollo@iot.bzh> | 2016-02-13 15:25:04 +0100 |
commit | b61b97c4280c8cd5a34c69a35c954f9580462c45 (patch) | |
tree | 04d5073ce00c91d8aa49b1fcf07c8b5cc6b46035 /src/afm-user-daemon.c | |
parent | e906126c4e46ad9f3471aee208f096f55289ca03 (diff) |
afm-user-daemon: prepare to launch with mode
Change-Id: I0372eab2496c2fdb12144d68c0f041f5f1fd360e
Signed-off-by: José Bollo <jose.bollo@iot.bzh>
Diffstat (limited to 'src/afm-user-daemon.c')
-rw-r--r-- | src/afm-user-daemon.c | 75 |
1 files changed, 56 insertions, 19 deletions
diff --git a/src/afm-user-daemon.c b/src/afm-user-daemon.c index 8f8f381..09ec0b5 100644 --- a/src/afm-user-daemon.c +++ b/src/afm-user-daemon.c @@ -20,13 +20,16 @@ #include <stdio.h> #include <time.h> #include <getopt.h> +#include <string.h> #include <json.h> #include "verbose.h" #include "utils-jbus.h" +#include "utils-json.h" #include "afm.h" #include "afm-db.h" +#include "afm-launch-mode.h" #include "afm-run.h" static const char appname[] = "afm-user-daemon"; @@ -113,30 +116,64 @@ static void on_detail(struct jreq *jreq, struct json_object *obj) static void on_start(struct jreq *jreq, struct json_object *obj) { - const char *appid; - struct json_object *appli; + const char *appid, *modestr; + char *uri; + struct json_object *appli, *resp; int runid; char runidstr[20]; - - appid = getappid(obj); - INFO("method start called for %s", appid); - if (appid == NULL) + enum afm_launch_mode mode; + + /* get the parameters */ + mode = invalid_launch_mode; + if (j_read_string(obj, &appid)) { + mode = default_launch_mode; + } else if (j_read_string_at(obj, "id", &appid)) { + if (j_read_string_at(obj, "mode", &modestr)) { + mode = launch_mode_of_string(modestr); + } else { + mode = default_launch_mode; + } + } + if (!launch_mode_is_valid(mode)) { jbus_reply_error_s(jreq, error_bad_request); + return; + } + + /* get the application */ + INFO("method start called for %s mode=%s", appid, mode); + appli = afm_db_get_application(afdb, appid); + if (appli == NULL) { + jbus_reply_error_s(jreq, error_not_found); + return; + } + + /* launch the application */ + uri = NULL; + runid = afm_run_start(appli, mode, &uri); + if (runid <= 0) { + jbus_reply_error_s(jreq, error_cant_start); + free(uri); + return; + } + + if (uri == NULL) { + /* returns only the runid */ + snprintf(runidstr, sizeof runidstr, "%d", runid); + runidstr[sizeof runidstr - 1] = 0; + jbus_reply_s(jreq, runidstr); + return; + } + + /* returns the runid and its uri */ + resp = json_object_new_object(); + if (resp != NULL && j_add_integer(resp, "runid", runid) && j_add_string(resp, "uri", uri)) + jbus_reply_j(jreq, resp); else { - appli = afm_db_get_application(afdb, appid); - if (appli == NULL) - jbus_reply_error_s(jreq, error_not_found); - else { - runid = afm_run_start(appli); - if (runid <= 0) - jbus_reply_error_s(jreq, error_cant_start); - else { - snprintf(runidstr, sizeof runidstr, "%d", runid); - runidstr[sizeof runidstr - 1] = 0; - jbus_reply_s(jreq, runidstr); - } - } + afm_run_stop(runid); + jbus_reply_error_s(jreq, error_cant_start); } + json_object_put(resp); + free(uri); } static void on_stop(struct jreq *jreq, struct json_object *obj) |