diff options
-rw-r--r-- | src/CMakeLists.txt | 1 | ||||
-rw-r--r-- | src/main.c | 7 | ||||
-rw-r--r-- | src/sd-fds.c | 70 | ||||
-rw-r--r-- | src/sd-fds.h | 24 |
4 files changed, 100 insertions, 2 deletions
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 ) ########################################### @@ -30,6 +30,8 @@ #include <systemd/sd-event.h> #include <systemd/sd-daemon.h> +#include <afb/afb-binding.h> + #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 <afb/afb-binding.h> +#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 <jose.bollo@iot.bzh> + + 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 <assert.h> +#include <string.h> +#include <errno.h> + +#include <systemd/sd-daemon.h> + +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 <jose.bollo@iot.bzh> + + 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); + |