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.
19 static struct ubus_context
*ctx
;
20 static struct blob_buf b
;
22 static void test_client_subscribe_cb(struct ubus_context
*ctx
, struct ubus_object
*obj
)
24 fprintf(stderr
, "Subscribers active: %d\n", obj
->has_subscribers
);
27 static struct ubus_object test_client_object
= {
28 .subscribe_cb
= test_client_subscribe_cb
,
31 static void test_client_notify_cb(struct uloop_timeout
*timeout
)
33 static int counter
= 0;
35 struct timeval tv1
, tv2
;
41 blobmsg_add_u32(&b
, "counter", counter
++);
43 gettimeofday(&tv1
, NULL
);
44 for (i
= 0; i
< max
; i
++)
45 err
= ubus_notify(ctx
, &test_client_object
, "ping", b
.head
, 1000);
46 gettimeofday(&tv2
, NULL
);
48 fprintf(stderr
, "Notify failed: %s\n", ubus_strerror(err
));
50 delta
= (tv2
.tv_sec
- tv1
.tv_sec
) * 1000000 + (tv2
.tv_usec
- tv1
.tv_usec
);
51 fprintf(stderr
, "Avg time per iteration: %ld usec\n", delta
/ max
);
53 uloop_timeout_set(timeout
, 1000);
56 static struct uloop_timeout notify_timer
= {
57 .cb
= test_client_notify_cb
,
60 static void client_main(void)
65 ret
= ubus_add_object(ctx
, &test_client_object
);
67 fprintf(stderr
, "Failed to add_object object: %s\n", ubus_strerror(ret
));
71 if (ubus_lookup_id(ctx
, "test", &id
)) {
72 fprintf(stderr
, "Failed to look up test object\n");
77 blobmsg_add_u32(&b
, "id", test_client_object
.id
);
78 ubus_invoke(ctx
, id
, "watch", b
.head
, NULL
, 0, 3000);
79 test_client_notify_cb(¬ify_timer
);
83 int main(int argc
, char **argv
)
85 const char *ubus_socket
= NULL
;
88 while ((ch
= getopt(argc
, argv
, "cs:")) != -1) {
103 ctx
= ubus_connect(ubus_socket
);
105 fprintf(stderr
, "Failed to connect to ubus\n");