summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRomain Forlot <romain.forlot@iot.bzh>2017-10-25 19:09:09 +0200
committerRomain Forlot <romain.forlot@iot.bzh>2017-10-25 19:09:09 +0200
commitf7344342f4c3277d3240b75d91df53c890e8fea3 (patch)
treee620ccd39b0d463cfc9669e331aaa75dc36cf29e
parentc0880c47de846ae2c93f5e257a4e83cae2fcfaae (diff)
Add action method to execute an action from its uid
Change-Id: Ic8f1d418db228ca8c646263b32a2431931a6a4be Signed-off-by: Romain Forlot <romain.forlot@iot.bzh>
-rw-r--r--ctl-lib/ctl-action.c24
-rw-r--r--ctl-lib/ctl-config.h1
2 files changed, 23 insertions, 2 deletions
diff --git a/ctl-lib/ctl-action.c b/ctl-lib/ctl-action.c
index 10eba09..bb4b874 100644
--- a/ctl-lib/ctl-action.c
+++ b/ctl-lib/ctl-action.c
@@ -25,17 +25,37 @@
#include "ctl-config.h"
PUBLIC int ActionLabelToIndex(CtlActionT*actions, const char* actionLabel) {
-
for (int idx = 0; actions[idx].uid; idx++) {
if (!strcasecmp(actionLabel, actions[idx].uid)) return idx;
}
return -1;
}
+PUBLIC void ActionExecUID(AFB_ReqT request, CtlConfigT *ctlConfig, const char *uid, json_object *queryJ)
+{
+ for(int i=0; ctlConfig->sections[i].key != NULL; i++)
+ {
+ if(ctlConfig->sections[i].actions)
+ {
+ for(int j=0; ctlConfig->sections[i].actions[j].uid != NULL; j++)
+ {
+ if(strcmp(ctlConfig->sections[i].actions[j].uid, uid) == 0)
+ {
+ CtlSourceT source;
+ source.uid = ctlConfig->sections[i].actions[j].uid;
+ source.api = ctlConfig->sections[i].actions[j].api;
+ source.request = request;
+
+ ActionExecOne(&source, &ctlConfig->sections[i].actions[j], queryJ);
+ }
+ }
+ }
+ }
+}
PUBLIC void ActionExecOne(CtlSourceT *source, CtlActionT* action, json_object *queryJ) {
int err;
-
+
switch (action->type) {
case CTL_TYPE_API:
{
diff --git a/ctl-lib/ctl-config.h b/ctl-lib/ctl-config.h
index 31b31d2..c3f5d4b 100644
--- a/ctl-lib/ctl-config.h
+++ b/ctl-lib/ctl-config.h
@@ -77,6 +77,7 @@ typedef enum {
// ctl-action.c
PUBLIC CtlActionT *ActionConfig(AFB_ApiT apiHandle, json_object *actionsJ, int exportApi);
+PUBLIC void ActionExecUID(AFB_ReqT request, CtlConfigT *ctlConfig, const char *uid, json_object *queryJ);
PUBLIC void ActionExecOne( CtlSourceT *source, CtlActionT* action, json_object *queryJ);
PUBLIC int ActionLoadOne(AFB_ApiT apiHandle, CtlActionT *action, json_object *, int exportApi);
PUBLIC int ActionLabelToIndex(CtlActionT* actions, const char* actionLabel);