diff options
author | Romain Forlot <romain.forlot@iot.bzh> | 2017-10-25 19:09:09 +0200 |
---|---|---|
committer | Romain Forlot <romain.forlot@iot.bzh> | 2018-12-13 15:02:54 +0100 |
commit | 8b005882eda47decef8743061536db091e6b5303 (patch) | |
tree | e620ccd39b0d463cfc9669e331aaa75dc36cf29e | |
parent | a295417a17e97a4109afd41be335b1039edf894d (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.c | 24 | ||||
-rw-r--r-- | ctl-lib/ctl-config.h | 1 |
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); |