1 /* SPDX-License-Identifier: LGPL-2.1+ */
8 enum bus_match_node_type
{
13 /* The following are all different kinds of compare nodes */
15 BUS_MATCH_MESSAGE_TYPE
,
16 BUS_MATCH_DESTINATION
,
20 BUS_MATCH_PATH_NAMESPACE
,
22 BUS_MATCH_ARG_LAST
= BUS_MATCH_ARG
+ 63,
24 BUS_MATCH_ARG_PATH_LAST
= BUS_MATCH_ARG_PATH
+ 63,
25 BUS_MATCH_ARG_NAMESPACE
,
26 BUS_MATCH_ARG_NAMESPACE_LAST
= BUS_MATCH_ARG_NAMESPACE
+ 63,
28 BUS_MATCH_ARG_HAS_LAST
= BUS_MATCH_ARG_HAS
+ 63,
29 _BUS_MATCH_NODE_TYPE_MAX
,
30 _BUS_MATCH_NODE_TYPE_INVALID
= -1
33 struct bus_match_node
{
34 enum bus_match_node_type type
;
35 struct bus_match_node
*parent
, *next
, *prev
, *child
;
43 struct match_callback
*callback
;
46 /* If this is set, then the child is NULL */
52 struct bus_match_component
{
53 enum bus_match_node_type type
;
58 enum bus_match_scope
{
64 int bus_match_run(sd_bus
*bus
, struct bus_match_node
*root
, sd_bus_message
*m
);
66 int bus_match_add(struct bus_match_node
*root
, struct bus_match_component
*components
, unsigned n_components
, struct match_callback
*callback
);
67 int bus_match_remove(struct bus_match_node
*root
, struct match_callback
*callback
);
69 void bus_match_free(struct bus_match_node
*node
);
71 void bus_match_dump(struct bus_match_node
*node
, unsigned level
);
73 const char* bus_match_node_type_to_string(enum bus_match_node_type t
, char buf
[], size_t l
);
74 enum bus_match_node_type
bus_match_node_type_from_string(const char *k
, size_t n
);
76 int bus_match_parse(const char *match
, struct bus_match_component
**_components
, unsigned *_n_components
);
77 void bus_match_parse_free(struct bus_match_component
*components
, unsigned n_components
);
78 char *bus_match_to_string(struct bus_match_component
*components
, unsigned n_components
);
80 enum bus_match_scope
bus_match_get_scope(const struct bus_match_component
*components
, unsigned n_components
);