X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-api-dbus.c;h=eeadb9cfe980ad6c92655741215f592f262d254c;hb=9e8fda2954d951ea819dbddfe5afe466b2306074;hp=1aad8635cc868fa0a941ae1966c40810fd2a87ce;hpb=5928e8fc14c2edabc0bc104fff7542819e06d45a;p=src%2Fapp-framework-binder.git diff --git a/src/afb-api-dbus.c b/src/afb-api-dbus.c index 1aad8635..eeadb9cf 100644 --- a/src/afb-api-dbus.c +++ b/src/afb-api-dbus.c @@ -29,7 +29,7 @@ #include -#include "afb-common.h" +#include "afb-systemd.h" #include "afb-session.h" #include "afb-msg-json.h" @@ -113,7 +113,7 @@ static struct api_dbus *make_api_dbus_3(int system, const char *path, size_t pat goto error2; } api->api++; - if (!afb_api_is_valid_name(api->api)) { + if (!afb_api_is_valid_name(api->api, 1)) { errno = EINVAL; goto error2; } @@ -128,7 +128,7 @@ static struct api_dbus *make_api_dbus_3(int system, const char *path, size_t pat } /* choose the bus */ - sdbus = (system ? afb_common_get_system_bus : afb_common_get_user_bus)(); + sdbus = (system ? afb_systemd_get_system_bus : afb_systemd_get_user_bus)(); if (sdbus == NULL) goto error2; @@ -332,7 +332,7 @@ static void api_dbus_client_call(void *closure, struct afb_xreq *xreq) /* creates the message */ msg = NULL; - rc = sd_bus_message_new_method_call(api->sdbus, &msg, api->name, api->path, api->name, xreq->verb); + rc = sd_bus_message_new_method_call(api->sdbus, &msg, api->name, api->path, api->name, xreq->request.verb); if (rc < 0) goto error; @@ -382,7 +382,7 @@ static struct dbus_event *api_dbus_client_event_search(struct api_dbus *api, int struct dbus_event *ev; ev = api->client.events; - while (ev != NULL && (ev->id != id || 0 != strcmp(afb_evt_event_fullname(ev->eventid), name))) + while (ev != NULL && (ev->id != id || 0 != strcmp(afb_evt_eventid_fullname(ev->eventid), name))) ev = ev->next; return ev; @@ -403,7 +403,7 @@ static void api_dbus_client_event_create(struct api_dbus *api, int id, const cha /* no conflict, try to add it */ ev = malloc(sizeof *ev); if (ev != NULL) { - ev->eventid = afb_evt_create_event(name); + ev->eventid = afb_evt_eventid_create(name); if (ev->eventid == NULL) free(ev); else { @@ -440,7 +440,7 @@ static void api_dbus_client_event_drop(struct api_dbus *api, int id, const char *prv = ev->next; /* destroys the event */ - afb_evt_event_unref(ev->eventid); + afb_evt_eventid_unref(ev->eventid); free(ev); } @@ -459,7 +459,7 @@ static void api_dbus_client_event_push(struct api_dbus *api, int id, const char /* destroys the event */ object = json_tokener_parse(data); - afb_evt_push(ev->eventid, object); + afb_evt_eventid_push(ev->eventid, object); } /* subscribes an event */ @@ -848,9 +848,9 @@ static int dbus_req_subscribe(struct afb_xreq *xreq, struct afb_eventid *eventid uint64_t msgid; int rc; - rc = afb_evt_add_watch(dreq->listener->listener, eventid); + rc = afb_evt_eventid_add_watch(dreq->listener->listener, eventid); sd_bus_message_get_cookie(dreq->message, &msgid); - afb_api_dbus_server_event_send(dreq->listener->origin, 'S', afb_evt_event_fullname(eventid), afb_evt_event_id(eventid), "", msgid); + afb_api_dbus_server_event_send(dreq->listener->origin, 'S', afb_evt_eventid_fullname(eventid), afb_evt_eventid_id(eventid), "", msgid); return rc; } @@ -861,18 +861,32 @@ static int dbus_req_unsubscribe(struct afb_xreq *xreq, struct afb_eventid *event int rc; sd_bus_message_get_cookie(dreq->message, &msgid); - afb_api_dbus_server_event_send(dreq->listener->origin, 'U', afb_evt_event_fullname(eventid), afb_evt_event_id(eventid), "", msgid); - rc = afb_evt_remove_watch(dreq->listener->listener, eventid); + afb_api_dbus_server_event_send(dreq->listener->origin, 'U', afb_evt_eventid_fullname(eventid), afb_evt_eventid_id(eventid), "", msgid); + rc = afb_evt_eventid_remove_watch(dreq->listener->listener, eventid); return rc; } +static void dbus_req_subcall( + struct afb_xreq *xreq, + const char *api, + const char *verb, + struct json_object *args, + void (*callback)(void*, int, struct json_object*), + void *cb_closure) +{ + ERROR("DBUS API doesn't support subcalls, info: %s/%s(%s)", api, verb, json_object_to_json_string(args)); + callback(cb_closure, 1, afb_msg_json_reply_error("error", "subcall isn't supported", NULL, NULL)); + json_object_put(args); +} + const struct afb_xreq_query_itf afb_api_dbus_xreq_itf = { .json = dbus_req_json, .success = dbus_req_success, .fail = dbus_req_fail, .unref = dbus_req_destroy, .subscribe = dbus_req_subscribe, - .unsubscribe = dbus_req_unsubscribe + .unsubscribe = dbus_req_unsubscribe, + .subcall = dbus_req_subcall }; /******************* server part **********************************/ @@ -985,8 +999,8 @@ static int api_dbus_server_on_object_called(sd_bus_message *message, void *userd dreq->json = json_object_new_string(dreq->request); } dreq->listener = listener; - dreq->xreq.api = api->api; - dreq->xreq.verb = method; + dreq->xreq.request.api = api->api; + dreq->xreq.request.verb = method; afb_xreq_process(&dreq->xreq, api->server.apiset); return 1;