- if (req->status_msg)
- ubus_req_complete_cb(req);
-
- return;
- }
-
- len = blob_raw_len(hdr->data);
- data = calloc(1, sizeof(*data) + len);
- if (!data)
- return;
-
- data->type = hdr->type;
- memcpy(data->data, hdr->data, len);
- list_add(&data->list, &req->pending);
-}
-
-static void ubus_process_msg(struct ubus_context *ctx, struct ubus_msghdr *hdr)
-{
- struct ubus_request *req;
-
- list_for_each_entry(req, &ctx->requests, list) {
- if (hdr->seq != req->seq || hdr->peer != req->peer)
- continue;
-
- switch(hdr->type) {
- case UBUS_MSG_STATUS:
- ubus_process_req_status(req, hdr);
- return;
- case UBUS_MSG_DATA:
- if (req->data_cb)
- ubus_req_data(req, hdr);
- break;
- default:
- DPRINTF("unknown message type: %d\n", hdr->type);
- break;
- }
- }
-}
+ req = container_of(ureq, struct ubus_lookup_request, req);
+ attr = ubus_parse_msg(msg);