summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJosé Bollo <jose.bollo@iot.bzh>2018-02-21 16:07:56 +0100
committerJosé Bollo <jose.bollo@iot.bzh>2018-02-21 16:07:56 +0100
commitf15ea770dd9b13a20331853a026091316984f9ca (patch)
tree47e16cfa111281f1efb92091d949ca961661ef1f
parentb182590a555afe093d2d6e5cdf3e1e2410d1a0f5 (diff)
afb-systemd: Integrate sd-fds features
Change-Id: I59d194ba675912a42922f0905933b1cea796c78a Signed-off-by: José Bollo <jose.bollo@iot.bzh>
-rw-r--r--src/CMakeLists.txt1
-rw-r--r--src/afb-api-ws.c3
-rw-r--r--src/afb-systemd.c39
-rw-r--r--src/afb-systemd.h3
-rw-r--r--src/main.c3
-rw-r--r--src/sd-fds.c70
-rw-r--r--src/sd-fds.h24
7 files changed, 43 insertions, 100 deletions
diff --git a/src/CMakeLists.txt b/src/CMakeLists.txt
index 436eaf02..4ef87853 100644
--- a/src/CMakeLists.txt
+++ b/src/CMakeLists.txt
@@ -64,7 +64,6 @@ ADD_LIBRARY(afb-lib STATIC
jobs.c
locale-root.c
process-name.c
- sd-fds.c
sig-monitor.c
subpath.c
verbose.c
diff --git a/src/afb-api-ws.c b/src/afb-api-ws.c
index 26d01932..7fbe5be1 100644
--- a/src/afb-api-ws.c
+++ b/src/afb-api-ws.c
@@ -36,7 +36,6 @@
#include "afb-systemd.h"
#include "afb-stub-ws.h"
#include "verbose.h"
-#include "sd-fds.h"
struct api_ws
{
@@ -177,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))
diff --git a/src/afb-systemd.c b/src/afb-systemd.c
index 4faa9fc7..575d9f1b 100644
--- a/src/afb-systemd.c
+++ b/src/afb-systemd.c
@@ -22,6 +22,7 @@
#include <systemd/sd-event.h>
#include <systemd/sd-bus.h>
+#include <systemd/sd-daemon.h>
#include "afb-systemd.h"
#include "jobs.h"
@@ -62,3 +63,41 @@ struct sd_bus *afb_systemd_get_system_bus()
return sdbusopen((void*)&result, (void*)sd_bus_open_system);
}
+static char **fds_names()
+{
+ static char *null;
+ static char **names;
+
+ int rc;
+
+ if (!names) {
+ rc = sd_listen_fds_with_names(1, &names);
+ if (rc <= 0) {
+ errno = -rc;
+ names = &null;
+ }
+ }
+ return names;
+}
+
+int systemd_fds_init()
+{
+ errno = 0;
+ fds_names();
+ return -!!errno;
+}
+
+int systemd_fds_for(const char *name)
+{
+ int idx;
+ char **names;
+
+ names = fds_names();
+ 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/afb-systemd.h b/src/afb-systemd.h
index 10f0fbac..ae8d61b0 100644
--- a/src/afb-systemd.h
+++ b/src/afb-systemd.h
@@ -24,4 +24,7 @@ extern struct sd_event *afb_systemd_get_event_loop();
extern struct sd_bus *afb_systemd_get_user_bus();
extern struct sd_bus *afb_systemd_get_system_bus();
+extern int systemd_fds_init();
+extern int systemd_fds_for(const char *name);
+
diff --git a/src/main.c b/src/main.c
index ff35b54b..e3f4251c 100644
--- a/src/main.c
+++ b/src/main.c
@@ -51,7 +51,6 @@
#include "afb-common.h"
#include "afb-monitor.h"
#include "afb-hook.h"
-#include "sd-fds.h"
#include "afb-debug.h"
#include "process-name.h"
#include "afb-supervision.h"
@@ -654,8 +653,6 @@ int main(int argc, char *argv[])
// let's run this program with a low priority
nice(20);
- sd_fds_init();
-
// ------------- Build session handler & init config -------
main_config = afb_config_parse_arguments(argc, argv);
if (main_config->name) {
diff --git a/src/sd-fds.c b/src/sd-fds.c
deleted file mode 100644
index d904954c..00000000
--- a/src/sd-fds.c
+++ /dev/null
@@ -1,70 +0,0 @@
-/*
- 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 = -!!rc;
- 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
deleted file mode 100644
index f2386a85..00000000
--- a/src/sd-fds.h
+++ /dev/null
@@ -1,24 +0,0 @@
-/*
- 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);
-