mirror of
https://github.com/albfan/miraclecast.git
synced 2025-02-12 19:51:54 +00:00
miraclectl: add 'show-link' verb
The new show-link command lists detailed information of a given link. Useful for debugging and introspection. Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
This commit is contained in:
parent
27a74298e9
commit
a765bd29b8
1 changed files with 100 additions and 3 deletions
|
@ -280,6 +280,101 @@ static int verb_list(sd_bus *bus, char **args, unsigned int n)
|
|||
return 0;
|
||||
}
|
||||
|
||||
static int verb_show_link(sd_bus *bus, char **args, unsigned int n)
|
||||
{
|
||||
_cleanup_sd_bus_error_ sd_bus_error err = SD_BUS_ERROR_NULL;
|
||||
_cleanup_sd_bus_message_ sd_bus_message *m = NULL;
|
||||
_cleanup_free_ char *path = NULL, *name = NULL;
|
||||
_cleanup_free_ char *type = NULL, *iface = NULL, *fname = NULL;
|
||||
const char *t;
|
||||
int r;
|
||||
|
||||
name = sd_bus_label_escape(args[1]);
|
||||
if (!name)
|
||||
return log_ENOMEM();
|
||||
|
||||
path = shl_strcat("/org/freedesktop/miracle/link/", name);
|
||||
if (!path)
|
||||
return log_ENOMEM();
|
||||
|
||||
r = sd_bus_call_method(bus,
|
||||
"org.freedesktop.miracle",
|
||||
path,
|
||||
"org.freedesktop.DBus.Properties",
|
||||
"GetAll",
|
||||
&err,
|
||||
&m,
|
||||
"s", "org.freedesktop.miracle.Link");
|
||||
if (r < 0) {
|
||||
log_error("cannot retrieve link %s: %s",
|
||||
args[1], bus_error_message(&err, r));
|
||||
return r;
|
||||
}
|
||||
|
||||
r = sd_bus_message_enter_container(m, 'a', "{sv}");
|
||||
if (r < 0)
|
||||
return log_bus_parser(r);
|
||||
|
||||
while ((r = sd_bus_message_enter_container(m, 'e', "sv")) > 0) {
|
||||
r = sd_bus_message_read(m, "s", &t);
|
||||
if (r < 0)
|
||||
return log_bus_parser(r);
|
||||
|
||||
if (!strcmp(t, "Type")) {
|
||||
r = bus_message_read_basic_variant(m, "s", &t);
|
||||
if (r < 0)
|
||||
return log_bus_parser(r);
|
||||
|
||||
free(type);
|
||||
type = strdup(t);
|
||||
if (!type)
|
||||
return log_ENOMEM();
|
||||
} else if (!strcmp(t, "Interface")) {
|
||||
r = bus_message_read_basic_variant(m, "s", &t);
|
||||
if (r < 0)
|
||||
return log_bus_parser(r);
|
||||
|
||||
free(iface);
|
||||
iface = strdup(t);
|
||||
if (!iface)
|
||||
return log_ENOMEM();
|
||||
} else if (!strcmp(t, "Name")) {
|
||||
r = bus_message_read_basic_variant(m, "s", &t);
|
||||
if (r < 0)
|
||||
return log_bus_parser(r);
|
||||
|
||||
free(fname);
|
||||
fname = strdup(t);
|
||||
if (!fname)
|
||||
return log_ENOMEM();
|
||||
} else {
|
||||
r = sd_bus_message_skip(m, "v");
|
||||
if (r < 0)
|
||||
return log_bus_parser(r);
|
||||
}
|
||||
|
||||
r = sd_bus_message_exit_container(m);
|
||||
if (r < 0)
|
||||
return log_bus_parser(r);
|
||||
}
|
||||
if (r < 0)
|
||||
return log_bus_parser(r);
|
||||
|
||||
r = sd_bus_message_exit_container(m);
|
||||
if (r < 0)
|
||||
return log_bus_parser(r);
|
||||
|
||||
printf("Link=%s\n", args[1]);
|
||||
if (type)
|
||||
printf("Type=%s\n", type);
|
||||
if (iface)
|
||||
printf("Interface=%s\n", iface);
|
||||
if (fname)
|
||||
printf("Name=%s\n", fname);
|
||||
|
||||
return 0;
|
||||
}
|
||||
|
||||
static int verb_add_link(sd_bus *bus, char **args, unsigned int n)
|
||||
{
|
||||
_cleanup_sd_bus_error_ sd_bus_error err = SD_BUS_ERROR_NULL;
|
||||
|
@ -348,6 +443,7 @@ static int help(void)
|
|||
"\n"
|
||||
"Commands:\n"
|
||||
" list List managed links and their peers\n"
|
||||
" show-link LINK... Show details of given link\n"
|
||||
" add-link LINK... Start managing the given link\n"
|
||||
" remove-link LINK... Stop managing the given link\n"
|
||||
, program_invocation_short_name);
|
||||
|
@ -405,6 +501,7 @@ static int miraclectl_main(sd_bus *bus, int argc, char *argv[])
|
|||
int (*dispatch) (sd_bus *bus, char **args, unsigned int n);
|
||||
} verbs[] = {
|
||||
{ "list", LESS, 1, verb_list },
|
||||
{ "show-link", EQUAL, 2, verb_show_link },
|
||||
{ "add-link", EQUAL, 3, verb_add_link },
|
||||
{ "remove-link", EQUAL, 2, verb_remove_link },
|
||||
};
|
||||
|
|
Loading…
Reference in a new issue