libcortex
Event loop library following a "batteries included" approach
Loading...
Searching...
No Matches
sdbus.h
1#ifndef _CRTX_SDBUS_H
2#define _CRTX_SDBUS_H
3
4#ifdef __cplusplus
5extern "C" {
6#endif
7
8/*
9 * Mario Kicherer (dev@kicherer.org) 2016
10 *
11 */
12
13#include <systemd/sd-bus.h>
14
15#include "linkedlist.h"
16
17#define CRTX_DBUS_OBJECT_MANAGER_INTERFACE "org.freedesktop.DBus.ObjectManager"
18
19enum crtx_sdbus_type {
20 CRTX_SDBUS_TYPE_DEFAULT = 0,
21 CRTX_SDBUS_TYPE_USER,
22 CRTX_SDBUS_TYPE_SYSTEM,
23 CRTX_SDBUS_TYPE_SYSTEM_REMOTE,
24 CRTX_SDBUS_TYPE_SYSTEM_MACHINE,
25 CRTX_SDBUS_TYPE_CUSTOM,
26 CRTX_SDBUS_TYPE_MAX,
27};
28
30
32 sd_bus_slot *slot;
33
34 char *match_str;
35 char *event_type;
36
37 sd_bus_message_handler_t callback;
38 void *callback_data;
39
40 struct crtx_sdbus_listener *listener;
41};
42
44 struct crtx_sdbus_match match;
45
46 const char *peer;
47
48 void (*appear_cb)(struct crtx_sdbus_track *track, char *peer, char *new_name, void *userdata);
49 void (*disappear_cb)(struct crtx_sdbus_track *track, char *peer, char *new_name, void *userdata);
50 void *userdata;
51};
52
54 struct crtx_listener_base base;
55
56 enum crtx_sdbus_type bus_type;
57 char *name; // contains either the host name or machine name if bus_type is
58 // either CRTX_SDBUS_TYPE_SYSTEM_REMOTE or CRTX_SDBUS_TYPE_SYSTEM_MACHINE
59 sd_bus *bus;
60 int connection_signals;
61 struct crtx_sdbus_match connected_match;
62 sd_bus_message_handler_t connected_cb;
63 void *connected_cb_data;
64
65 char single_threaded;
66 unsigned int process_max_per_run; // break the sd_bus_process loop if number of processed events exceeds this value (0 means no limit)
67
68 const char *unique_name;
69
70 struct crtx_dll *matches;
71
72 void (*error_cb)(void *connected_cb_data);
73};
74
75void crtx_sdbus_trigger_event_processing(struct crtx_sdbus_listener *lstnr);
76int crtx_sdbus_call(struct crtx_sdbus_listener *lstnr, sd_bus_message *msg, sd_bus_message **reply, uint64_t timeout_us);
77int crtx_sdbus_get_property_async(sd_bus *bus, const char *service, const char *object_path, const char *interface, const char *name, sd_bus_message_handler_t callback, void *userdata, uint64_t usec);
78int crtx_sdbus_get_property_async_print_response(sd_bus_message *m, void *userdata, sd_bus_error *ret_error);
79
80int crtx_sd_bus_message_read_string(sd_bus_message *m, char **p);
81char crtx_sdbus_open_bus(sd_bus **bus, enum crtx_sdbus_type bus_type, char *name);
82void crtx_sdbus_print_msg(sd_bus_message *m, const char *sig);
83int crtx_sdbus_next_to_dict_item(sd_bus_message *msg, struct crtx_dict_item *ditem, char no_reduce);
84
85int crtx_sdbus_match_add(struct crtx_sdbus_listener *lstnr, struct crtx_sdbus_match *match);
86int crtx_sdbus_match_remove(struct crtx_sdbus_listener *lstnr, struct crtx_sdbus_match *match);
87int crtx_sdbus_track_add(struct crtx_sdbus_listener *lstnr, struct crtx_sdbus_track *track);
88int crtx_sdbus_track_remove(struct crtx_sdbus_listener *lstnr, struct crtx_sdbus_track *track);
89
90struct crtx_sdbus_listener *crtx_sdbus_get_default_listener(enum crtx_sdbus_type sdbus_type);
91int crtx_sdbus_get_objects_msg_async(struct crtx_sdbus_listener *lstnr, const char *service, sd_bus_message_handler_t callback, void *userdata, uint64_t timeout_us);
92int crtx_sdbus_get_objects(struct crtx_sdbus_listener *lstnr, const char *service, struct crtx_dict_item **objects);
93
94struct crtx_listener_base *crtx_sdbus_new_listener(void *options);
95CRTX_DECLARE_ALLOC_FUNCTION(sdbus)
96
97void crtx_sdbus_init();
98void crtx_sdbus_finish();
99
100#ifdef __cplusplus
101}
102#endif
103
104#endif
Definition dict.h:35
base structure of a listener
Definition core.h:186
Definition sdbus.h:53
Definition sdbus.h:31
Definition sdbus.h:43