- struct iovec iov = STATIC_IOV(ctx->msgbuf.hdr);
-
- /* receive header + start attribute */
- iov.iov_len += sizeof(struct blob_attr);
- if (!recv_retry(ctx->sock.fd, &iov, wait))
- return false;
-
- iov.iov_len = blob_len(ctx->msgbuf.hdr.data);
- if (iov.iov_len > 0 && !recv_retry(ctx->sock.fd, &iov, true))
- return false;
-
- return ubus_validate_hdr(&ctx->msgbuf.hdr);
-}
-
-static bool ubus_get_status(struct ubus_msghdr *hdr, int *ret)
-{
- ubus_parse_msg(hdr->data);
-
- if (!attrbuf[UBUS_ATTR_STATUS])
- return false;
-
- *ret = blob_get_int32(attrbuf[UBUS_ATTR_STATUS]);
- return true;
-}
-
-static void ubus_process_req_data(struct ubus_request *req)
-{
- struct ubus_pending_data *data;
-
- while (!list_empty(&req->pending)) {
- data = list_first_entry(&req->pending,
- struct ubus_pending_data, list);
- list_del(&data->list);
- if (!req->cancelled)
- req->data_cb(req, data->type, data->data);
- free(data);
+ struct ubus_pending_msg *pending;
+
+ while (!list_empty(&ctx->pending)) {
+ pending = list_first_entry(&ctx->pending, struct ubus_pending_msg, list);
+ list_del(&pending->list);
+ ubus_process_msg(ctx, &pending->hdr);
+ free(pending);
+ if (ctx->stack_depth > 2)
+ break;