pass ubus_msg_buf to callback of internal object
[project/ubus.git] / ubusd_proto.c
index 6b068eb..caede10 100644 (file)
@@ -158,8 +158,7 @@ static void ubusd_send_obj(struct ubus_client *cl, struct ubus_msg_buf *ub, stru
 
        blob_buf_init(&b, 0);
 
-       if (obj->path.key)
-               blob_put_string(&b, UBUS_ATTR_OBJPATH, obj->path.key);
+       blob_put_string(&b, UBUS_ATTR_OBJPATH, obj->path.key);
        blob_put_int32(&b, UBUS_ATTR_OBJID, obj->id.id);
        blob_put_int32(&b, UBUS_ATTR_OBJTYPE, obj->type->id.id);
 
@@ -245,7 +244,7 @@ static int ubusd_handle_invoke(struct ubus_client *cl, struct ubus_msg_buf *ub,
        method = blob_data(attr[UBUS_ATTR_METHOD]);
 
        if (!obj->client)
-               return obj->recv_msg(cl, method, attr[UBUS_ATTR_DATA]);
+               return obj->recv_msg(cl, ub, method, attr[UBUS_ATTR_DATA]);
 
        ub->hdr.peer = cl->id.id;
        blob_buf_init(&b, 0);
@@ -487,6 +486,9 @@ void ubus_notify_subscription(struct ubus_object *obj)
        blob_put_int8(&b, UBUS_ATTR_ACTIVE, active);
 
        ub = ubus_msg_from_blob(false);
+       if (!ub)
+               return;
+
        ubus_msg_init(ub, UBUS_MSG_NOTIFY, ++obj->invoke_seq, 0);
        ubus_msg_send(obj->client, ub, true);
 }
@@ -500,8 +502,10 @@ void ubus_notify_unsubscribe(struct ubus_subscription *s)
        blob_put_int32(&b, UBUS_ATTR_TARGET, s->target->id.id);
 
        ub = ubus_msg_from_blob(false);
-       ubus_msg_init(ub, UBUS_MSG_UNSUBSCRIBE, ++s->subscriber->invoke_seq, 0);
-       ubus_msg_send(s->subscriber->client, ub, true);
+       if (ub != NULL) {
+               ubus_msg_init(ub, UBUS_MSG_UNSUBSCRIBE, ++s->subscriber->invoke_seq, 0);
+               ubus_msg_send(s->subscriber->client, ub, true);
+       }
 
        ubus_unsubscribe(s);
 }