ubusd_event.c 965 B

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