- struct ubus_context *ctx = container_of(u, struct ubus_context, sock);
- struct ubus_msghdr *hdr = &ctx->msgbuf.hdr;
-
- while (get_next_msg(ctx, false))
- ubus_process_msg(ctx, hdr);
-}
-
-int ubus_complete_request(struct ubus_context *ctx, struct ubus_request *req)
-{
- struct ubus_msghdr *hdr = &ctx->msgbuf.hdr;
-
- if (!list_empty(&req->list))
- list_del(&req->list);
-
- while (1) {
- if (req->status_msg)
- return req->status_code;
-
- if (req->cancelled)
- return UBUS_STATUS_NO_DATA;
-
- if (!get_next_msg(ctx, true))
- return UBUS_STATUS_NO_DATA;
-
- if (hdr->seq != req->seq || hdr->peer != req->peer)
- goto skip;
-
- switch(hdr->type) {
- case UBUS_MSG_STATUS:
- return ubus_process_req_status(req, hdr);
- case UBUS_MSG_DATA:
- if (req->data_cb)
- ubus_req_data(req, hdr);
- continue;
- default:
- goto skip;
- }
-
-skip:
- ubus_process_msg(ctx, hdr);
- }
-}