da0aed80273ec89e505c102de5c098a418cd18da
[project/ubus.git] / ubusd_event.c
1 #include "ubusd.h"
2
3 static struct avl_tree patterns;
4 static struct ubus_object *event_obj;
5
6 struct event_pattern {
7         struct avl_node avl;
8
9         struct ubus_object *obj;
10         struct list_head list;
11
12         const char *path;
13 };
14
15 static void ubusd_delete_event_pattern(struct event_pattern *ev)
16 {
17         list_del(&ev->list);
18         avl_delete(&patterns, &ev->avl);
19         free(ev);
20 }
21
22 void ubusd_event_cleanup_object(struct ubus_object *obj)
23 {
24         struct event_pattern *ev;
25
26         while (!list_empty(&obj->event_patterns)) {
27                 ev = list_first_entry(&obj->event_patterns,
28                                       struct event_pattern, list);
29                 ubusd_delete_event_pattern(ev);
30         }
31 }
32
33 static int ubusd_event_recv(struct ubus_client *cl, const char *method, struct blob_attr *msg)
34 {
35         fprintf(stderr, "event: call to method '%s'\n", method);
36         return 0;
37 }
38
39 void ubusd_event_init(void)
40 {
41         ubus_init_string_tree(&patterns, true);
42         event_obj = ubusd_create_object_internal(NULL, UBUS_SYSTEM_OBJECT_EVENT);
43         event_obj->recv_msg = ubusd_event_recv;
44 }
45