2 * Copyright (C) 2016, 2017 "IoT.bzh"
3 * Author: José Bollo <jose.bollo@iot.bzh>
5 * Licensed under the Apache License, Version 2.0 (the "License");
6 * you may not use this file except in compliance with the License.
7 * You may obtain a copy of the License at
9 * http://www.apache.org/licenses/LICENSE-2.0
11 * Unless required by applicable law or agreed to in writing, software
12 * distributed under the License is distributed on an "AS IS" BASIS,
13 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 * See the License for the specific language governing permissions and
15 * limitations under the License.
21 * Retrieves the common systemd's event loop of AFB
22 * 'daemon' MUST be the daemon given in interface when activating the binding.
24 static inline struct sd_event *afb_daemon_get_event_loop_v1(struct afb_daemon daemon)
26 return daemon.itf->get_event_loop(daemon.closure);
30 * Retrieves the common systemd's user/session d-bus of AFB
31 * 'daemon' MUST be the daemon given in interface when activating the binding.
33 static inline struct sd_bus *afb_daemon_get_user_bus_v1(struct afb_daemon daemon)
35 return daemon.itf->get_user_bus(daemon.closure);
39 * Retrieves the common systemd's system d-bus of AFB
40 * 'daemon' MUST be the daemon given in interface when activating the binding.
42 static inline struct sd_bus *afb_daemon_get_system_bus_v1(struct afb_daemon daemon)
44 return daemon.itf->get_system_bus(daemon.closure);
48 * Broadcasts widely the event of 'name' with the data 'object'.
49 * 'object' can be NULL.
50 * 'daemon' MUST be the daemon given in interface when activating the binding.
52 * For convenience, the function calls 'json_object_put' for 'object'.
53 * Thus, in the case where 'object' should remain available after
54 * the function returns, the function 'json_object_get' shall be used.
56 * Returns the count of clients that received the event.
58 static inline int afb_daemon_broadcast_event_v1(struct afb_daemon daemon, const char *name, struct json_object *object)
60 return daemon.itf->event_broadcast(daemon.closure, name, object);
64 * Creates an event of 'name' and returns it.
65 * 'daemon' MUST be the daemon given in interface when activating the binding.
67 static inline struct afb_event afb_daemon_make_event_v1(struct afb_daemon daemon, const char *name)
69 return daemon.itf->event_make(daemon.closure, name);
73 * Send a message described by 'fmt' and following parameters
74 * to the journal for the verbosity 'level'.
76 * 'file' and 'line' are indicators of position of the code in source files
77 * (see macros __FILE__ and __LINE__).
79 * 'daemon' MUST be the daemon given in interface when activating the binding.
81 * 'level' is defined by syslog standard:
82 * EMERGENCY 0 System is unusable
83 * ALERT 1 Action must be taken immediately
84 * CRITICAL 2 Critical conditions
85 * ERROR 3 Error conditions
86 * WARNING 4 Warning conditions
87 * NOTICE 5 Normal but significant condition
88 * INFO 6 Informational
89 * DEBUG 7 Debug-level messages
91 static inline void afb_daemon_verbose_v1(struct afb_daemon daemon, int level, const char *file, int line, const char *fmt, ...) __attribute__((format(printf, 5, 6)));
92 static inline void afb_daemon_verbose_v1(struct afb_daemon daemon, int level, const char *file, int line, const char *fmt, ...)
96 daemon.itf->vverbose_v1(daemon.closure, level, file, line, fmt, args);
101 * Send a message described by 'fmt' and following parameters
102 * to the journal for the verbosity 'level'.
104 * 'file', 'line' and 'func' are indicators of position of the code in source files
105 * (see macros __FILE__, __LINE__ and __func__).
107 * 'daemon' MUST be the daemon given in interface when activating the binding.
109 * 'level' is defined by syslog standard:
110 * EMERGENCY 0 System is unusable
111 * ALERT 1 Action must be taken immediately
112 * CRITICAL 2 Critical conditions
113 * ERROR 3 Error conditions
114 * WARNING 4 Warning conditions
115 * NOTICE 5 Normal but significant condition
116 * INFO 6 Informational
117 * DEBUG 7 Debug-level messages
119 static inline void afb_daemon_verbose2_v1(struct afb_daemon daemon, int level, const char *file, int line, const char *func, const char *fmt, ...) __attribute__((format(printf, 6, 7)));
120 static inline void afb_daemon_verbose2_v1(struct afb_daemon daemon, int level, const char *file, int line, const char *func, const char *fmt, ...)
124 daemon.itf->vverbose_v2(daemon.closure, level, file, line, func, fmt, args);
129 * Get the root directory file descriptor. This file descriptor can
130 * be used with functions 'openat', 'fstatat', ...
132 static inline int afb_daemon_rootdir_get_fd_v1(struct afb_daemon daemon)
134 return daemon.itf->rootdir_get_fd(daemon.closure);
138 * Opens 'filename' within the root directory with 'flags' (see function openat)
139 * using the 'locale' definition (example: "jp,en-US") that can be NULL.
140 * Returns the file descriptor or -1 in case of error.
142 static inline int afb_daemon_rootdir_open_locale_v1(struct afb_daemon daemon, const char *filename, int flags, const char *locale)
144 return daemon.itf->rootdir_open_locale(daemon.closure, filename, flags, locale);
148 * Queue the job defined by 'callback' and 'argument' for being executed asynchronously
149 * in this thread (later) or in an other thread.
150 * If 'group' is not NUL, the jobs queued with a same value (as the pointer value 'group')
151 * are executed in sequence in the order of there submission.
152 * If 'timeout' is not 0, it represent the maximum execution time for the job in seconds.
153 * At first, the job is called with 0 as signum and the given argument.
154 * The job is executed with the monitoring of its time and some signals like SIGSEGV and
155 * SIGFPE. When a such signal is catched, the job is terminated and reexecuted but with
156 * signum being the signal number (SIGALRM when timeout expired).
158 * Returns 0 in case of success or -1 in case of error.
160 static inline int afb_daemon_queue_job_v1(struct afb_daemon daemon, void (*callback)(int signum, void *arg), void *argument, void *group, int timeout)
162 return daemon.itf->queue_job(daemon.closure, callback, argument, group, timeout);