From: Felix Fietkau Date: Tue, 18 Feb 2014 14:03:44 +0000 (+0100) Subject: examples/client: receive data from the passed file descriptor X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fubus.git;a=commitdiff_plain;h=54926994e219b4bc6f8b2d18a4c8cc28a828eca2;ds=sidebyside examples/client: receive data from the passed file descriptor Signed-off-by: Felix Fietkau --- diff --git a/examples/client.c b/examples/client.c index 32ff9d3..4d6b6ec 100644 --- a/examples/client.c +++ b/examples/client.c @@ -14,6 +14,8 @@ #include #include +#include + #include "libubus.h" static struct ubus_context *ctx; @@ -57,8 +59,42 @@ static struct uloop_timeout notify_timer = { .cb = test_client_notify_cb, }; +static void test_client_fd_data_cb(struct ustream *s, int bytes) +{ + char *data, *sep; + int len; + + data = ustream_get_read_buf(s, &len); + if (len < 1) + return; + + sep = strchr(data, '\n'); + if (!sep) + return; + + *sep = 0; + fprintf(stderr, "Got line: %s\n", data); + ustream_consume(s, sep + 1 - data); +} + +static void test_client_fd_cb(struct ubus_request *req, int fd) +{ + static struct ustream_fd test_fd; + + fprintf(stderr, "Got fd from the server, watching...\n"); + + test_fd.stream.notify_read = test_client_fd_data_cb; + ustream_fd_init(&test_fd, fd); +} + +static void test_client_complete_cb(struct ubus_request *req, int ret) +{ + fprintf(stderr, "completed request, ret: %d\n", ret); +} + static void client_main(void) { + static struct ubus_request req; uint32_t id; int ret; @@ -77,6 +113,14 @@ static void client_main(void) blobmsg_add_u32(&b, "id", test_client_object.id); ubus_invoke(ctx, id, "watch", b.head, NULL, 0, 3000); test_client_notify_cb(¬ify_timer); + + blob_buf_init(&b, 0); + blobmsg_add_string(&b, "msg", "blah"); + ubus_invoke_async(ctx, id, "hello", b.head, &req); + req.fd_cb = test_client_fd_cb; + req.complete_cb = test_client_complete_cb; + ubus_complete_request_async(ctx, &req); + uloop_run(); }