]> git.ipfire.org Git - thirdparty/systemd.git/blame - src/libsystemd/sd-bus/bus-match.h
tmpfiles: accurately report creation results
[thirdparty/systemd.git] / src / libsystemd / sd-bus / bus-match.h
CommitLineData
392d5b37
LP
1/*-*- Mode: C; c-basic-offset: 8; indent-tabs-mode: nil -*-*/
2
3#pragma once
4
5/***
6 This file is part of systemd.
7
8 Copyright 2013 Lennart Poettering
9
10 systemd is free software; you can redistribute it and/or modify it
11 under the terms of the GNU Lesser General Public License as published by
12 the Free Software Foundation; either version 2.1 of the License, or
13 (at your option) any later version.
14
15 systemd is distributed in the hope that it will be useful, but
16 WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
18 Lesser General Public License for more details.
19
20 You should have received a copy of the GNU Lesser General Public License
21 along with systemd; If not, see <http://www.gnu.org/licenses/>.
22***/
23
24#include "hashmap.h"
25
26#include "sd-bus.h"
27
28enum bus_match_node_type {
29 BUS_MATCH_ROOT,
30 BUS_MATCH_VALUE,
31 BUS_MATCH_LEAF,
32
33 /* The following are all different kinds of compare nodes */
392d5b37 34 BUS_MATCH_SENDER,
ae7bed3f 35 BUS_MATCH_MESSAGE_TYPE,
392d5b37
LP
36 BUS_MATCH_DESTINATION,
37 BUS_MATCH_INTERFACE,
38 BUS_MATCH_MEMBER,
39 BUS_MATCH_PATH,
40 BUS_MATCH_PATH_NAMESPACE,
41 BUS_MATCH_ARG,
42 BUS_MATCH_ARG_LAST = BUS_MATCH_ARG + 63,
43 BUS_MATCH_ARG_PATH,
44 BUS_MATCH_ARG_PATH_LAST = BUS_MATCH_ARG_PATH + 63,
45 BUS_MATCH_ARG_NAMESPACE,
46 BUS_MATCH_ARG_NAMESPACE_LAST = BUS_MATCH_ARG_NAMESPACE + 63,
47 _BUS_MATCH_NODE_TYPE_MAX,
48 _BUS_MATCH_NODE_TYPE_INVALID = -1
49};
50
51struct bus_match_node {
52 enum bus_match_node_type type;
53 struct bus_match_node *parent, *next, *prev, *child;
54
55 union {
56 struct {
392d5b37 57 char *str;
7286037f 58 uint8_t u8;
392d5b37
LP
59 } value;
60 struct {
19befb2d 61 struct match_callback *callback;
392d5b37
LP
62 } leaf;
63 struct {
64 /* If this is set, then the child is NULL */
65 Hashmap *children;
66 } compare;
67 };
68};
69
c7819669
LP
70struct bus_match_component {
71 enum bus_match_node_type type;
72 uint8_t value_u8;
73 char *value_str;
74};
75
eb01ba5d 76int bus_match_run(sd_bus *bus, struct bus_match_node *root, sd_bus_message *m);
392d5b37 77
19befb2d
LP
78int bus_match_add(struct bus_match_node *root, struct bus_match_component *components, unsigned n_components, struct match_callback *callback);
79int bus_match_remove(struct bus_match_node *root, struct match_callback *callback);
80
81int bus_match_find(struct bus_match_node *root, struct bus_match_component *components, unsigned n_components, sd_bus_message_handler_t callback, void *userdata, struct match_callback **ret);
392d5b37
LP
82
83void bus_match_free(struct bus_match_node *node);
84
85void bus_match_dump(struct bus_match_node *node, unsigned level);
86
87const char* bus_match_node_type_to_string(enum bus_match_node_type t, char buf[], size_t l);
88enum bus_match_node_type bus_match_node_type_from_string(const char *k, size_t n);
c7819669
LP
89
90int bus_match_parse(const char *match, struct bus_match_component **_components, unsigned *_n_components);
91void bus_match_parse_free(struct bus_match_component *components, unsigned n_components);
53461b74 92char *bus_match_to_string(struct bus_match_component *components, unsigned n_components);