chiark / gitweb /
remove unused variable
[elogind.git] / src / libsystemd-bus / bus-match.h
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
28 enum 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 */
34         BUS_MATCH_SENDER,
35         BUS_MATCH_MESSAGE_TYPE,
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
51 struct bus_match_node {
52         enum bus_match_node_type type;
53         struct bus_match_node *parent, *next, *prev, *child;
54
55         union {
56                 struct {
57                         char *str;
58                         uint8_t u8;
59                 } value;
60                 struct {
61                         sd_bus_message_handler_t callback;
62                         void *userdata;
63                         unsigned last_iteration;
64                         uint64_t cookie;
65                 } leaf;
66                 struct {
67                         /* If this is set, then the child is NULL */
68                         Hashmap *children;
69                 } compare;
70         };
71 };
72
73 struct bus_match_component {
74         enum bus_match_node_type type;
75         uint8_t value_u8;
76         char *value_str;
77 };
78
79 int bus_match_run(sd_bus *bus, struct bus_match_node *root, sd_bus_message *m);
80
81 int bus_match_add(struct bus_match_node *root, struct bus_match_component *components, unsigned n_components, sd_bus_message_handler_t callback, void *userdata, uint64_t cookie, struct bus_match_node **ret);
82 int bus_match_remove(struct bus_match_node *root, struct bus_match_component *components, unsigned n_components, sd_bus_message_handler_t callback, void *userdata, uint64_t *cookie);
83
84 void bus_match_free(struct bus_match_node *node);
85
86 void bus_match_dump(struct bus_match_node *node, unsigned level);
87
88 const char* bus_match_node_type_to_string(enum bus_match_node_type t, char buf[], size_t l);
89 enum bus_match_node_type bus_match_node_type_from_string(const char *k, size_t n);
90
91 int bus_match_parse(const char *match, struct bus_match_component **_components, unsigned *_n_components);
92 void bus_match_parse_free(struct bus_match_component *components, unsigned n_components);
93 char *bus_match_to_string(struct bus_match_component *components, unsigned n_components);