+static int
+service_handle_event(struct ubus_context *ctx, struct ubus_object *obj,
+ struct ubus_request_data *req, const char *method,
+ struct blob_attr *msg)
+{
+ struct blob_attr *tb[__EVENT_MAX];
+
+ if (!msg)
+ return UBUS_STATUS_INVALID_ARGUMENT;
+
+ blobmsg_parse(event_policy, __EVENT_MAX, tb, blob_data(msg), blob_len(msg));
+ if (!tb[EVENT_TYPE] || !tb[EVENT_DATA])
+ return UBUS_STATUS_INVALID_ARGUMENT;
+
+ trigger_event(blobmsg_get_string(tb[EVENT_TYPE]), tb[EVENT_DATA]);
+
+ return 0;
+}
+
+enum {
+ TRIGGER_ATTR,
+ __TRIGGER_MAX
+};
+
+static const struct blobmsg_policy trigger_policy[__TRIGGER_MAX] = {
+ [TRIGGER_ATTR] = { .name = "triggers", .type = BLOBMSG_TYPE_ARRAY },
+};
+
+static int service_handle_trigger(struct ubus_context *ctx, struct ubus_object *obj,
+ struct ubus_request_data *req, const char *method,
+ struct blob_attr *msg)
+{
+ struct blob_attr *tb[__TRIGGER_MAX];
+
+ if (!msg)
+ return UBUS_STATUS_INVALID_ARGUMENT;
+
+ blobmsg_parse(trigger_policy, __TRIGGER_MAX, tb, blob_data(msg), blob_len(msg));
+ if (!tb[TRIGGER_ATTR])
+ return UBUS_STATUS_INVALID_ARGUMENT;
+
+ trigger_add(tb[TRIGGER_ATTR], NULL);
+
+ return 0;
+}
+