-static void client_reply_fail(struct afb_stub_ws *stubws, struct readbuf *rb)
-{
- struct client_call *call;
- const char *info, *status;
- uint32_t flags;
-
- /* retrieve the message data */
- if (!client_msg_call_get(stubws, rb, &call))
- return;
-
- if (readbuf_uint32(rb, &flags)
- && readbuf_string(rb, &status, NULL)
- && readbuf_string(rb, &info, NULL)) {
- call->xreq->context.flags = (unsigned)flags;
- afb_xreq_fail(call->xreq, status, *info ? info : NULL);
- } else {
- /* failing to have the answer */
- afb_xreq_fail(call->xreq, "error", "ws error");
- }
- client_call_destroy(call);
-}
-
-/* send a subcall reply */
-static void client_send_subcall_reply(struct client_subcall *subcall, int status, json_object *object)
-{
- int rc;
- struct writebuf wb = { .count = 0 };
- char ie = status < 0;
-
- if (!writebuf_char(&wb, CHAR_FOR_SUBCALL_REPLY)
- || !writebuf_uint32(&wb, subcall->subcallid)
- || !writebuf_char(&wb, ie)
- || !writebuf_object(&wb, object)) {
- /* write error ? */
- return;
- }
-
- rc = afb_ws_binary_v(subcall->stubws->ws, wb.iovec, wb.count);
- if (rc >= 0)
- return;
- ERROR("error while sending subcall reply");
-}
-
-/* callback for subcall reply */
-static void client_subcall_reply_cb(void *closure, int status, json_object *object)
-{
- client_send_subcall_reply(closure, status, object);
- free(closure);
-}
-
-/* received a subcall request */
-static void client_subcall(struct afb_stub_ws *stubws, struct readbuf *rb)
-{
- struct client_subcall *subcall;
- struct client_call *call;
- const char *api, *verb;
- uint32_t subcallid;
- struct json_object *object;
-
- subcall = malloc(sizeof *subcall);
- if (!subcall)
- return;
-
- /* retrieve the message data */
- if (!client_msg_call_get(stubws, rb, &call))
- return;
-
- if (readbuf_uint32(rb, &subcallid)
- && readbuf_string(rb, &api, NULL)
- && readbuf_string(rb, &verb, NULL)
- && readbuf_object(rb, &object)) {
- subcall->stubws = stubws;
- subcall->subcallid = subcallid;
- afb_xreq_subcall(call->xreq, api, verb, object, client_subcall_reply_cb, subcall);
- }
-}