From: José Bollo Date: Mon, 13 Mar 2017 14:49:11 +0000 (+0100) Subject: Beginning of integration as systemd service X-Git-Tag: dab_3.99.1~133 X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=commitdiff_plain;h=e2c431bcda7f057b4767c3e8142b9e0ca0d32bc6;p=src%2Fapp-framework-binder.git Beginning of integration as systemd service This allows to receive socket activation by names. Change-Id: I6896dec785e8d434da452ed2d1341016f6eadb60 Signed-off-by: José Bollo --- diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt index 08a22901..8d0121a5 100644 --- a/src/CMakeLists.txt +++ b/src/CMakeLists.txt @@ -81,6 +81,7 @@ ADD_LIBRARY(afb-lib STATIC locale-root.c verbose.c websock.c + sd-fds.c ) ########################################### diff --git a/src/main.c b/src/main.c index 4ae8af5e..f1ebd969 100644 --- a/src/main.c +++ b/src/main.c @@ -30,6 +30,8 @@ #include #include +#include + #include "afb-config.h" #include "afb-hswitch.h" #include "afb-apis.h" @@ -45,8 +47,7 @@ #include "verbose.h" #include "afb-common.h" #include "afb-hook.h" - -#include +#include "sd-fds.h" /* if SELF_PGROUP == 0 the launched command is the group leader @@ -359,6 +360,8 @@ int main(int argc, char *argv[]) LOGAUTH("afb-daemon"); + sd_fds_init(); + // ------------- Build session handler & init config ------- config = afb_config_parse_arguments(argc, argv); atexit(exit_handler); diff --git a/src/sd-fds.c b/src/sd-fds.c new file mode 100644 index 00000000..477da520 --- /dev/null +++ b/src/sd-fds.c @@ -0,0 +1,70 @@ +/* + Copyright 2017 IoT.bzh + + author: José Bollo + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#define _GNU_SOURCE + +#include +#include +#include + +#include + +static int init_done; +static char *null; +static char **names; + +int sd_fds_init() +{ + int rc; + + if (init_done) + rc = 0; + else { + init_done = 1; + rc = sd_listen_fds_with_names(1, &names); + if (rc < 0) { + errno = -rc; + rc = -1; + names = &null; + } + } + return rc; +} + +int sd_fds_count() +{ + int count; + + assert(init_done); + for (count = 0 ; names[count] != NULL ; count++); + return count; +} + +int sd_fds_for(const char *name) +{ + int idx; + + assert(init_done); + for (idx = 0 ; names[idx] != NULL ; idx++) + if (!strcmp(name, names[idx])) + return idx + SD_LISTEN_FDS_START; + + errno = ENOENT; + return -1; +} + diff --git a/src/sd-fds.h b/src/sd-fds.h new file mode 100644 index 00000000..f2386a85 --- /dev/null +++ b/src/sd-fds.h @@ -0,0 +1,24 @@ +/* + Copyright 2017 IoT.bzh + + author: José Bollo + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. +*/ + +#pragma once + +extern int sd_fds_init(); +extern int sd_fds_count(); +extern int sd_fds_for(const char *name); +