From 6b2b09db8ee3cf88b09b59696d50b4fa2de79a72 Mon Sep 17 00:00:00 2001 From: José Bollo Date: Thu, 11 Apr 2019 13:09:56 +0200 Subject: Reordering of sample and tutorial bindings MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The main idea here is to install the sample and tutorial bindings in specific directory. This will at the end help to package parts of the binder. It also includes a simplification of CMakeLists files. Also fix an error in packaging rpm. Bug-AGL: SPEC-2165 Change-Id: I494cc753796848cde849de1c3596893c78fa228f Signed-off-by: José Bollo --- bindings/tutorials/tuto-2.c | 100 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 100 insertions(+) create mode 100644 bindings/tutorials/tuto-2.c (limited to 'bindings/tutorials/tuto-2.c') diff --git a/bindings/tutorials/tuto-2.c b/bindings/tutorials/tuto-2.c new file mode 100644 index 00000000..10797081 --- /dev/null +++ b/bindings/tutorials/tuto-2.c @@ -0,0 +1,100 @@ +#include +#include + +#define AFB_BINDING_VERSION 3 +#include + +afb_event_t event_login, event_logout; + +void login(afb_req_t req) +{ + json_object *args, *user, *passwd; + char *usr; + + args = afb_req_json(req); + if (!json_object_object_get_ex(args, "user", &user) + || !json_object_object_get_ex(args, "password", &passwd)) { + AFB_REQ_ERROR(req, "login, bad request: %s", json_object_get_string(args)); + afb_req_reply(req, NULL, "bad-request", NULL); + } else if (afb_req_context_get(req)) { + AFB_REQ_ERROR(req, "login, bad state, logout first"); + afb_req_reply(req, NULL, "bad-state", NULL); + } else if (strcmp(json_object_get_string(passwd), "please")) { + AFB_REQ_ERROR(req, "login, unauthorized: %s", json_object_get_string(args)); + afb_req_reply(req, NULL, "unauthorized", NULL); + } else { + usr = strdup(json_object_get_string(user)); + AFB_REQ_NOTICE(req, "login user: %s", usr); + afb_req_session_set_LOA(req, 1); + afb_req_context_set(req, usr, free); + afb_req_reply(req, NULL, NULL, NULL); + afb_event_push(event_login, json_object_new_string(usr)); + } +} + +void action(afb_req_t req) +{ + json_object *args, *val; + char *usr; + + args = afb_req_json(req); + usr = afb_req_context_get(req); + AFB_REQ_NOTICE(req, "action for user %s: %s", usr, json_object_get_string(args)); + if (json_object_object_get_ex(args, "subscribe", &val)) { + if (json_object_get_boolean(val)) { + AFB_REQ_NOTICE(req, "user %s subscribes to events", usr); + afb_req_subscribe(req, event_login); + afb_req_subscribe(req, event_logout); + } else { + AFB_REQ_NOTICE(req, "user %s unsubscribes to events", usr); + afb_req_unsubscribe(req, event_login); + afb_req_unsubscribe(req, event_logout); + } + } + afb_req_reply(req, json_object_get(args), NULL, NULL); +} + +void logout(afb_req_t req) +{ + char *usr; + + usr = afb_req_context_get(req); + AFB_REQ_NOTICE(req, "login user %s out", usr); + afb_event_push(event_logout, json_object_new_string(usr)); + afb_req_session_set_LOA(req, 0); + afb_req_context_clear(req); + afb_req_reply(req, NULL, NULL, NULL); +} + +int preinit(afb_api_t api) +{ + AFB_API_NOTICE(api, "preinit"); + return 0; +} + +int init(afb_api_t api) +{ + AFB_API_NOTICE(api, "init"); + event_login = afb_api_make_event(api, "login"); + event_logout = afb_api_make_event(api, "logout"); + if (afb_event_is_valid(event_login) && afb_event_is_valid(event_logout)) + return 0; + AFB_API_ERROR(api, "Can't create events"); + return -1; +} + +const afb_verb_t verbs[] = { + { .verb="login", .callback=login }, + { .verb="action", .callback=action, .session=AFB_SESSION_LOA_1 }, + { .verb="logout", .callback=logout, .session=AFB_SESSION_LOA_1 }, + { .verb=NULL } +}; + +const afb_binding_t afbBindingExport = { + .api = "tuto-2", + .specification = NULL, + .verbs = verbs, + .preinit = preinit, + .init = init, + .noconcurrency = 0 +}; \ No newline at end of file -- cgit 1.2.3-korg