1 /* SPDX-License-Identifier: LGPL-2.1-or-later */
10 enum bus_match_node_type
{
15 /* The following are all different kinds of compare nodes */
17 BUS_MATCH_MESSAGE_TYPE
,
18 BUS_MATCH_DESTINATION
,
22 BUS_MATCH_PATH_NAMESPACE
,
24 BUS_MATCH_ARG_LAST
= BUS_MATCH_ARG
+ 63,
26 BUS_MATCH_ARG_PATH_LAST
= BUS_MATCH_ARG_PATH
+ 63,
27 BUS_MATCH_ARG_NAMESPACE
,
28 BUS_MATCH_ARG_NAMESPACE_LAST
= BUS_MATCH_ARG_NAMESPACE
+ 63,
30 BUS_MATCH_ARG_HAS_LAST
= BUS_MATCH_ARG_HAS
+ 63,
31 _BUS_MATCH_NODE_TYPE_MAX
,
32 _BUS_MATCH_NODE_TYPE_INVALID
= -EINVAL
,
35 struct bus_match_node
{
36 enum bus_match_node_type type
;
37 struct bus_match_node
*parent
, *next
, *prev
, *child
;
45 struct match_callback
*callback
;
48 /* If this is set, then the child is NULL */
54 struct bus_match_component
{
55 enum bus_match_node_type type
;
60 enum bus_match_scope
{
66 int bus_match_run(sd_bus
*bus
, struct bus_match_node
*root
, sd_bus_message
*m
);
68 int bus_match_add(struct bus_match_node
*root
, struct bus_match_component
*components
, unsigned n_components
, struct match_callback
*callback
);
69 int bus_match_remove(struct bus_match_node
*root
, struct match_callback
*callback
);
71 void bus_match_free(struct bus_match_node
*node
);
73 void bus_match_dump(FILE *out
, struct bus_match_node
*node
, unsigned level
);
75 const char* bus_match_node_type_to_string(enum bus_match_node_type t
, char buf
[], size_t l
);
76 enum bus_match_node_type
bus_match_node_type_from_string(const char *k
, size_t n
);
78 int bus_match_parse(const char *match
, struct bus_match_component
**ret_components
, unsigned *ret_n_components
);
79 void bus_match_parse_free(struct bus_match_component
*components
, unsigned n_components
);
80 char *bus_match_to_string(struct bus_match_component
*components
, unsigned n_components
);
82 enum bus_match_scope
bus_match_get_scope(const struct bus_match_component
*components
, unsigned n_components
);