summaryrefslogtreecommitdiffstats
path: root/plugins/afm-main-plugin/afm-main-plugin.c
diff options
context:
space:
mode:
Diffstat (limited to 'plugins/afm-main-plugin/afm-main-plugin.c')
-rw-r--r--plugins/afm-main-plugin/afm-main-plugin.c91
1 files changed, 91 insertions, 0 deletions
diff --git a/plugins/afm-main-plugin/afm-main-plugin.c b/plugins/afm-main-plugin/afm-main-plugin.c
new file mode 100644
index 00000000..a1325008
--- /dev/null
+++ b/plugins/afm-main-plugin/afm-main-plugin.c
@@ -0,0 +1,91 @@
+/*
+ * Copyright (C) 2015 "IoT.bzh"
+ * Author "Fulup Ar Foll"
+ *
+ * This program is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * This program is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with this program. If not, see <http://www.gnu.org/licenses/>.
+ */
+
+
+#include "local-def.h"
+
+#include "utils-jbus.h"
+
+static const char _id_[] = "id";
+static struct jbus *jbus;
+
+static struct json_object *call_void(AFB_request *request)
+{
+ struct json_object *obj = jbus_call_sj_sync(jbus, request->api, "true");
+ request->errcode = obj ? MHD_HTTP_OK : MHD_HTTP_FAILED_DEPENDENCY;
+ return obj;
+}
+
+static struct json_object *call_appid(AFB_request *request)
+{
+ struct json_object *obj;
+ char *sid;
+ const char *id = getQueryValue(request, _id_);
+ if (id == NULL) {
+ request->errcode = MHD_HTTP_BAD_REQUEST;
+ return NULL;
+ }
+ if (0 >= asprintf(&sid, "\"%s\"", id)) {
+ request->errcode = MHD_HTTP_INTERNAL_SERVER_ERROR;
+ return NULL;
+ }
+ obj = jbus_call_sj_sync(jbus, request->api, sid);
+ free(sid);
+ request->errcode = obj ? MHD_HTTP_OK : MHD_HTTP_FAILED_DEPENDENCY;
+ return obj;
+}
+
+static struct json_object *call_runid(AFB_request *request)
+{
+ struct json_object *obj;
+ const char *id = getQueryValue(request, _id_);
+ if (id == NULL) {
+ request->errcode = MHD_HTTP_BAD_REQUEST;
+ return NULL;
+ }
+ obj = jbus_call_sj_sync(jbus, request->api, id);
+ request->errcode = obj ? MHD_HTTP_OK : MHD_HTTP_FAILED_DEPENDENCY;
+ return obj;
+}
+
+static AFB_restapi plug_apis[] =
+{
+ {"runnables", AFB_SESSION_CHECK, (AFB_apiCB)call_void, "Get list of runnable applications"},
+ {"detail" , AFB_SESSION_CHECK, (AFB_apiCB)call_appid, "Get the details for one application"},
+ {"start" , AFB_SESSION_CHECK, (AFB_apiCB)call_appid, "Start an application"},
+ {"terminate", AFB_SESSION_CHECK, (AFB_apiCB)call_runid, "Terminate a running application"},
+ {"stop" , AFB_SESSION_CHECK, (AFB_apiCB)call_runid, "Stop (pause) a running application"},
+ {"continue" , AFB_SESSION_CHECK, (AFB_apiCB)call_runid, "Continue (resume) a stopped application"},
+ {"runners" , AFB_SESSION_CHECK, (AFB_apiCB)call_void, "Get the list of running applications"},
+ {"state" , AFB_SESSION_CHECK, (AFB_apiCB)call_runid, "Get the state of a running application"},
+ {NULL}
+};
+
+static AFB_plugin plug_desc = {
+ .type = AFB_PLUGIN_JSON,
+ .info = "Application Framework Master Service",
+ .prefix = "afm-main",
+ .apis = plug_apis
+};
+
+AFB_plugin *pluginRegister()
+{
+ jbus = create_jbus(1, "/org/AGL/afm-main");
+ return jbus ? &plug_desc : NULL;
+}
+