X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-subcall.c;h=65bef2ff33c46475ca54e3912da9941b76e6eaaa;hb=e94995611bd4e05a2aac1c0ae7c7f0855137b78a;hp=4d18bee742460f68857d920c82813b489aa9cbe9;hpb=6518887513840471ea9c5af7e534787717e6bd82;p=src%2Fapp-framework-binder.git diff --git a/src/afb-subcall.c b/src/afb-subcall.c index 4d18bee7..65bef2ff 100644 --- a/src/afb-subcall.c +++ b/src/afb-subcall.c @@ -1,5 +1,5 @@ /* - * Copyright (C) 2016 "IoT.bzh" + * Copyright (C) 2016, 2017 "IoT.bzh" * Author: José Bollo * * Licensed under the Apache License, Version 2.0 (the "License"); @@ -99,18 +99,7 @@ static struct json_object *subcall_json(struct afb_subcall *subcall) static struct afb_arg subcall_get(struct afb_subcall *subcall, const char *name) { - struct afb_arg arg; - struct json_object *value; - - if (json_object_object_get_ex(subcall->args, name, &value)) { - arg.name = name; - arg.value = json_object_get_string(value); - } else { - arg.name = NULL; - arg.value = NULL; - } - arg.path = NULL; - return arg; + return afb_msg_json_get_arg(subcall->args, name); } static void subcall_emit(struct afb_subcall *subcall, int iserror, struct json_object *object) @@ -170,13 +159,23 @@ static void subcall_subcall(struct afb_subcall *subcall, const char *api, const afb_subcall(&subcall->context, api, verb, args, callback, closure, (struct afb_req){ .itf = &afb_subcall_req_itf, .closure = subcall }); } +void afb_subcall_internal_error(void (*callback)(void*, int, struct json_object*), void *closure) +{ + static struct json_object *obj; + + if (obj == NULL) + obj = afb_msg_json_reply_error("failed", "internal error", NULL, NULL); + + callback(closure, 1, obj); +} + void afb_subcall(struct afb_context *context, const char *api, const char *verb, struct json_object *args, void (*callback)(void*, int, struct json_object*), void *closure, struct afb_req req) { struct afb_subcall *subcall; subcall = calloc(1, sizeof *subcall); if (subcall == NULL) { - callback(closure, 1, afb_msg_json_reply_error("failed", "out of memory", NULL, NULL)); + afb_subcall_internal_error(callback, closure); return; } @@ -188,7 +187,7 @@ void afb_subcall(struct afb_context *context, const char *api, const char *verb, subcall->closure = closure; subcall->context = *context; afb_req_addref(req); - afb_apis_call_((struct afb_req){ .itf = &afb_subcall_req_itf, .closure = subcall }, &subcall->context, api, verb); + afb_apis_call((struct afb_req){ .itf = &afb_subcall_req_itf, .closure = subcall }, &subcall->context, api, verb); subcall_unref(subcall); }