X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-stub-ws.c;h=693a0d0c03e4aec8a7036ba7ef135ae77931080b;hb=d35293b1f03edc446900dcdcce941c83178271d7;hp=1f0a3e682e79a8208b1802ba40a954a81013dcec;hpb=159c895986f2358d6df8bb5804cc4419cc6b457f;p=src%2Fapp-framework-binder.git diff --git a/src/afb-stub-ws.c b/src/afb-stub-ws.c index 1f0a3e68..693a0d0c 100644 --- a/src/afb-stub-ws.c +++ b/src/afb-stub-ws.c @@ -33,9 +33,8 @@ #include #include -#include -#include +#include #include "afb-common.h" @@ -102,8 +101,8 @@ struct server_req { struct client_event { struct client_event *next; - struct afb_event event; - int eventid; + struct afb_eventid *eventid; + int id; int refcount; }; @@ -204,26 +203,26 @@ static void server_req_subcall_cb(struct afb_xreq *xreq, const char *api, const ERROR("error while sending subcall"); } -static int server_req_subscribe_cb(struct afb_xreq *xreq, struct afb_event event) +static int server_req_subscribe_cb(struct afb_xreq *xreq, struct afb_eventid *event) { int rc; struct server_req *wreq = CONTAINER_OF_XREQ(struct server_req, xreq); - rc = afb_evt_add_watch(wreq->stubws->listener, event); + rc = afb_evt_eventid_add_watch(wreq->stubws->listener, event); if (rc >= 0) - rc = afb_proto_ws_call_subscribe(wreq->call, afb_evt_event_name(event), afb_evt_event_id(event)); + rc = afb_proto_ws_call_subscribe(wreq->call, afb_evt_eventid_fullname(event), afb_evt_eventid_id(event)); if (rc < 0) ERROR("error while subscribing event"); return rc; } -static int server_req_unsubscribe_cb(struct afb_xreq *xreq, struct afb_event event) +static int server_req_unsubscribe_cb(struct afb_xreq *xreq, struct afb_eventid *event) { int rc, rc2; struct server_req *wreq = CONTAINER_OF_XREQ(struct server_req, xreq); - rc = afb_proto_ws_call_unsubscribe(wreq->call, afb_evt_event_name(event), afb_evt_event_id(event)); - rc2 = afb_evt_remove_watch(wreq->stubws->listener, event); + rc = afb_proto_ws_call_unsubscribe(wreq->call, afb_evt_eventid_fullname(event), afb_evt_eventid_id(event)); + rc2 = afb_evt_eventid_remove_watch(wreq->stubws->listener, event); if (rc >= 0 && rc2 < 0) rc = rc2; if (rc < 0) @@ -248,7 +247,7 @@ static struct client_event *client_event_search(struct afb_stub_ws *stubws, uint struct client_event *ev; ev = stubws->events; - while (ev != NULL && (ev->eventid != eventid || 0 != strcmp(afb_evt_event_name(ev->event), name))) + while (ev != NULL && (ev->id != eventid || 0 != strcmp(afb_evt_eventid_fullname(ev->eventid), name))) ev = ev->next; return ev; @@ -259,8 +258,8 @@ static void client_call_cb(void * closure, struct afb_xreq *xreq) { struct afb_stub_ws *stubws = closure; - afb_proto_ws_client_call(stubws->proto, xreq->verb, afb_xreq_json(xreq), afb_session_uuid(xreq->context.session), xreq); - afb_xreq_addref(xreq); + afb_proto_ws_client_call(stubws->proto, xreq->request.verb, afb_xreq_json(xreq), afb_session_uuid(xreq->context.session), xreq); + afb_xreq_unhooked_addref(xreq); } static void client_on_description_cb(void *closure, struct json_object *data) @@ -334,7 +333,7 @@ static void on_reply_success(void *closure, void *request, struct json_object *r struct afb_xreq *xreq = request; afb_xreq_success(xreq, result, *info ? info : NULL); - afb_xreq_unref(xreq); + afb_xreq_unhooked_unref(xreq); } static void on_reply_fail(void *closure, void *request, const char *status, const char *info) @@ -342,7 +341,7 @@ static void on_reply_fail(void *closure, void *request, const char *status, cons struct afb_xreq *xreq = request; afb_xreq_fail(xreq, status, *info ? info : NULL); - afb_xreq_unref(xreq); + afb_xreq_unhooked_unref(xreq); } static void on_event_create(void *closure, const char *event_name, int event_id) @@ -360,10 +359,10 @@ static void on_event_create(void *closure, const char *event_name, int event_id) /* no conflict, try to add it */ ev = malloc(sizeof *ev); if (ev != NULL) { - ev->event = afb_evt_create_event(event_name); - if (ev->event.closure != NULL) { + ev->eventid = afb_evt_eventid_create(event_name); + if (ev->eventid != NULL) { ev->refcount = 1; - ev->eventid = event_id; + ev->id = event_id; ev->next = stubws->events; stubws->events = ev; return; @@ -394,7 +393,7 @@ static void on_event_remove(void *closure, const char *event_name, int event_id) *prv = ev->next; /* destroys the event */ - afb_event_drop(ev->event); + afb_evt_eventid_unref(ev->eventid); free(ev); } @@ -409,7 +408,7 @@ static void on_event_subscribe(void *closure, void *request, const char *event_n if (ev == NULL) return; - if (afb_xreq_subscribe(xreq, ev->event) < 0) + if (afb_xreq_subscribe(xreq, ev->eventid) < 0) ERROR("can't subscribe: %m"); } @@ -424,7 +423,7 @@ static void on_event_unsubscribe(void *closure, void *request, const char *event if (ev == NULL) return; - if (afb_xreq_unsubscribe(xreq, ev->event) < 0) + if (afb_xreq_unsubscribe(xreq, ev->eventid) < 0) ERROR("can't unsubscribe: %m"); } @@ -436,7 +435,7 @@ static void on_event_push(void *closure, const char *event_name, int event_id, s /* check conflicts */ ev = client_event_search(stubws, event_id, event_name); if (ev) - afb_event_push(ev->event, data); + afb_evt_eventid_push(ev->eventid, data); else ERROR("unreadable push event"); } @@ -446,7 +445,7 @@ static void on_event_broadcast(void *closure, const char *event_name, struct jso afb_evt_broadcast(event_name, data); } -static void client_subcall_reply_cb(void *closure, int status, json_object *object) +static void client_subcall_reply_cb(void *closure, int status, json_object *object, struct afb_request *request) { struct afb_proto_ws_subcall *subcall = closure; afb_proto_ws_subcall_reply(subcall, status, object); @@ -480,11 +479,12 @@ static void on_call(void *closure, struct afb_proto_ws_call *call, const char *v /* init the context */ if (afb_context_connect(&wreq->xreq.context, sessionid, NULL) < 0) goto unconnected; + wreq->xreq.context.validated = 1; /* makes the call */ wreq->xreq.cred = afb_cred_addref(stubws->cred); - wreq->xreq.api = stubws->apiname; - wreq->xreq.verb = verb; + wreq->xreq.request.api = stubws->apiname; + wreq->xreq.request.verb = verb; wreq->xreq.json = args; afb_xreq_process(&wreq->xreq, stubws->apiset); return; @@ -543,12 +543,12 @@ static void on_describe(void *closure, struct afb_proto_ws_describe *describe) /*****************************************************/ static const struct afb_proto_ws_client_itf client_itf = -{ +{ .on_reply_success = on_reply_success, .on_reply_fail = on_reply_fail, .on_event_create = on_event_create, .on_event_remove = on_event_remove, - .on_event_subscribe = on_event_subscribe, + .on_event_subscribe = on_event_subscribe, .on_event_unsubscribe = on_event_unsubscribe, .on_event_push = on_event_push, .on_event_broadcast = on_event_broadcast, @@ -585,7 +585,7 @@ static void drop_all_events(struct afb_stub_ws *stubws) while (ev) { nxt = ev->next; - afb_event_drop(ev->event); + afb_evt_eventid_unref(ev->eventid); free(ev); ev = nxt; } @@ -611,9 +611,9 @@ static struct afb_stub_ws *afb_stub_ws_create(int fd, const char *apiname, struc errno = ENOMEM; else { if (client) - stubws->proto = afb_proto_ws_create_client(fd, &client_itf, stubws); + stubws->proto = afb_proto_ws_create_client(afb_common_get_event_loop(), fd, &client_itf, stubws); else - stubws->proto = afb_proto_ws_create_server(fd, &server_itf, stubws); + stubws->proto = afb_proto_ws_create_server(afb_common_get_event_loop(), fd, &server_itf, stubws); if (stubws->proto != NULL) { strcpy(stubws->apiname, apiname); stubws->apiset = afb_apiset_addref(apiset); @@ -680,7 +680,7 @@ struct afb_api afb_stub_ws_client_api(struct afb_stub_ws *stubws) assert(!stubws->listener); /* check client */ api.closure = stubws; api.itf = &ws_api_itf; - api.noconcurrency = 0; + api.group = NULL; return api; }