X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;f=src%2Fafb-api-ws.c;h=7fbe5be18b0a59a0d87cf84f3883c1e8dd150be7;hb=f15ea770dd9b13a20331853a026091316984f9ca;hp=dffe12672c9d3eca6227733ccb17ed6cbfec6707;hpb=a221b08b008c3e3e63dccdbccbcdb7fe8aeb3481;p=src%2Fapp-framework-binder.git diff --git a/src/afb-api-ws.c b/src/afb-api-ws.c index dffe1267..7fbe5be1 100644 --- a/src/afb-api-ws.c +++ b/src/afb-api-ws.c @@ -33,10 +33,9 @@ #include #include "afb-api.h" #include "afb-apiset.h" -#include "afb-common.h" +#include "afb-systemd.h" #include "afb-stub-ws.h" #include "verbose.h" -#include "sd-fds.h" struct api_ws { @@ -73,7 +72,7 @@ static struct api_ws *api_ws_make(const char *path) while (length && path[length - 1] != '/' && path[length - 1] != ':') length = length - 1; api->api = &api->path[length]; - if (api->api == NULL || !afb_api_is_valid_name(api->api)) { + if (api->api == NULL || !afb_api_is_valid_name(api->api, 1)) { errno = EINVAL; goto error2; } @@ -169,7 +168,6 @@ static int api_ws_socket_inet(const char *path, int server) } freeaddrinfo(rai); return -1; - } static int api_ws_socket(const char *path, int server) @@ -178,7 +176,7 @@ static int api_ws_socket(const char *path, int server) /* check for systemd socket */ if (0 == strncmp(path, "sd:", 3)) - fd = sd_fds_for(path + 3); + fd = systemd_fds_for(path + 3); else { /* check for unix socket */ if (0 == strncmp(path, "unix:", 5)) @@ -204,7 +202,7 @@ static int api_ws_socket(const char *path, int server) /**********************************************************************************/ -int afb_api_ws_add_client(const char *path, struct afb_apiset *apiset) +int afb_api_ws_add_client(const char *path, struct afb_apiset *apiset, int strong) { struct api_ws *apiws; struct afb_stub_ws *stubws; @@ -239,7 +237,17 @@ error3: error2: free(apiws); error: - return -1; + return -!!strong; +} + +int afb_api_ws_add_client_strong(const char *path, struct afb_apiset *apiset) +{ + return afb_api_ws_add_client(path, apiset, 1); +} + +int afb_api_ws_add_client_weak(const char *path, struct afb_apiset *apiset) +{ + return afb_api_ws_add_client(path, apiset, 0); } static int api_ws_server_accept_client(struct api_ws *apiws, int fd) @@ -301,7 +309,7 @@ static int api_ws_server_connect(struct api_ws *apiws) ERROR("can't create socket %s", apiws->path); else { /* listen for service */ - rc = sd_event_add_io(afb_common_get_event_loop(), + rc = sd_event_add_io(afb_systemd_get_event_loop(), &apiws->listensrc, apiws->fd, EPOLLIN, api_ws_server_listen_callback, apiws); if (rc >= 0) @@ -318,7 +326,6 @@ int afb_api_ws_add_server(const char *path, struct afb_apiset *apiset) { int rc; struct api_ws *apiws; - struct afb_api api; /* creates the ws api object */ apiws = api_ws_make(path); @@ -326,7 +333,7 @@ int afb_api_ws_add_server(const char *path, struct afb_apiset *apiset) goto error; /* check api name */ - if (afb_apiset_get(apiset, apiws->api, &api)) { + if (!afb_apiset_lookup(apiset, apiws->api, 1)) { ERROR("Can't provide ws-server for %s: API %s doesn't exist", path, apiws->api); goto error2; }