libubus: restore uloop_cancelled on timeout
[project/ubus.git] / libubus.h
index ad2db0c..94e5f95 100644 (file)
--- a/libubus.h
+++ b/libubus.h
@@ -34,11 +34,10 @@ struct ubus_event_handler;
 struct ubus_subscriber;
 struct ubus_notify_request;
 
-static inline struct blob_attr *
-ubus_msghdr_data(struct ubus_msghdr *hdr)
-{
-       return (struct blob_attr *) (hdr + 1);
-}
+struct ubus_msghdr_buf {
+       struct ubus_msghdr hdr;
+       struct blob_attr *data;
+};
 
 typedef void (*ubus_lookup_handler_t)(struct ubus_context *ctx,
                                      struct ubus_object_data *obj,
@@ -140,6 +139,7 @@ struct ubus_context {
        struct list_head pending;
 
        struct uloop_fd sock;
+       struct uloop_timeout pending_timer;
 
        uint32_t local_id;
        uint16_t request_seq;
@@ -147,10 +147,9 @@ struct ubus_context {
 
        void (*connection_lost)(struct ubus_context *ctx);
 
-       struct {
-               struct ubus_msghdr hdr;
-               char data[UBUS_MAX_MSGLEN];
-       } msgbuf;
+       struct ubus_msghdr_buf msgbuf;
+       uint32_t msgbuf_data_len;
+       int msgbuf_reduction_counter;
 };
 
 struct ubus_object_data {