2 * Copyright (C) 2011 Felix Fietkau <nbd@openwrt.org>
4 * This program is free software; you can redistribute it and/or modify
5 * it under the terms of the GNU Lesser General Public License version 2.1
6 * as published by the Free Software Foundation
8 * This program is distributed in the hope that it will be useful,
9 * but WITHOUT ANY WARRANTY; without even the implied warranty of
10 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
11 * GNU General Public License for more details.
18 static struct ubus_context
*ctx
;
19 static struct blob_buf b
;
21 static void test_client_subscribe_cb(struct ubus_context
*ctx
, struct ubus_object
*obj
)
23 fprintf(stderr
, "Subscribers active: %d\n", obj
->has_subscribers
);
26 static struct ubus_object test_client_object
= {
27 .subscribe_cb
= test_client_subscribe_cb
,
30 static void test_client_notify_cb(struct uloop_timeout
*timeout
)
32 static int counter
= 0;
36 blobmsg_add_u32(&b
, "counter", counter
++);
38 err
= ubus_notify(ctx
, &test_client_object
, "ping", b
.head
, 1000);
40 fprintf(stderr
, "Notify failed: %s\n", ubus_strerror(err
));
42 uloop_timeout_set(timeout
, 1000);
45 static struct uloop_timeout notify_timer
= {
46 .cb
= test_client_notify_cb
,
49 static void client_main(void)
54 ret
= ubus_add_object(ctx
, &test_client_object
);
56 fprintf(stderr
, "Failed to add_object object: %s\n", ubus_strerror(ret
));
60 if (ubus_lookup_id(ctx
, "test", &id
)) {
61 fprintf(stderr
, "Failed to look up test object\n");
66 blobmsg_add_u32(&b
, "id", test_client_object
.id
);
67 ubus_invoke(ctx
, id
, "watch", b
.head
, NULL
, 0, 3000);
68 test_client_notify_cb(¬ify_timer
);
72 int main(int argc
, char **argv
)
74 const char *ubus_socket
= NULL
;
77 while ((ch
= getopt(argc
, argv
, "cs:")) != -1) {
92 ctx
= ubus_connect(ubus_socket
);
94 fprintf(stderr
, "Failed to connect to ubus\n");