bc884cd2b346eb68d40d215e2a2e0d2097b196fd
3 static struct blob_buf b
;
4 static struct ubus_context
*ctx
;
6 static void receive_lookup(struct ubus_request
*req
, int type
, struct blob_attr
*msg
)
8 struct blob_attr
**attr
, *cur
;
12 attr
= ubus_parse_msg(msg
);
13 if (!attr
[UBUS_ATTR_OBJID
] || !attr
[UBUS_ATTR_OBJPATH
])
16 fprintf(stderr
, "'%s' @%08x\n",
17 (char *) blob_data(attr
[UBUS_ATTR_OBJPATH
]),
18 blob_get_int32(attr
[UBUS_ATTR_OBJID
]));
20 if (!attr
[UBUS_ATTR_SIGNATURE
])
23 blob_for_each_attr(cur
, attr
[UBUS_ATTR_SIGNATURE
], rem
) {
24 s
= blobmsg_format_json(cur
, false);
25 fprintf(stderr
, "\t%s\n", s
);
30 static int usage(char *prog
)
33 "Usage: %s <command> [arguments...]\n"
35 " - list [<path>] List objects\n"
36 " - call <path> <method> [<message>] Call an object method\n"
41 int main(int argc
, char **argv
)
43 struct ubus_request req
;
47 ctx
= ubus_connect(NULL
);
49 fprintf(stderr
, "Failed to connect to ubus\n");
55 return usage(argv
[0]);
59 if (!strcmp(cmd
, "list")) {
61 blob_put_string(&b
, UBUS_ATTR_OBJPATH
, argv
[2]);
63 ubus_start_request(ctx
, &req
, b
.head
, UBUS_MSG_LOOKUP
, 0);
64 req
.data_cb
= receive_lookup
;
65 } else if (!strcmp(cmd
, "call")) {
66 if (argc
< 4 || argc
> 5)
67 return usage(argv
[0]);
69 blob_put_string(&b
, UBUS_ATTR_OBJPATH
, argv
[2]);
70 blob_put_string(&b
, UBUS_ATTR_METHOD
, argv
[3]);
71 ubus_start_request(ctx
, &req
, b
.head
, UBUS_MSG_INVOKE
, 0);
73 return usage(argv
[0]);
76 ret
= ubus_complete_request(ctx
, &req
);
78 fprintf(stderr
, "Failed: %s\n", ubus_strerror(ret
));