1
0
Fork 0
mirror of https://github.com/albfan/miraclecast.git synced 2025-02-15 01:01:54 +00:00

ctl: parse wfd-subelements

Parse and show wfd-subelements.

Signed-off-by: David Herrmann <dh.herrmann@gmail.com>
This commit is contained in:
David Herrmann 2014-04-23 12:09:03 +02:00
parent e624d5f81a
commit d0a85ac46c
3 changed files with 99 additions and 1 deletions

View file

@ -40,6 +40,10 @@ static void ctl_peer_free(struct ctl_peer *p)
if (shl_dlist_linked(&p->list))
ctl_fn_peer_free(p);
free(p->wfd_subelements);
free(p->remote_address);
free(p->local_address);
free(p->interface);
free(p->friendly_name);
free(p->p2p_mac);
@ -87,7 +91,7 @@ static int ctl_peer_parse_properties(struct ctl_peer *p,
{
const char *t, *p2p_mac = NULL, *friendly_name = NULL;
const char *interface = NULL, *local_address = NULL;
const char *remote_address = NULL;
const char *remote_address = NULL, *wfd_subelements = NULL;
bool connected, connected_set = false;
char *tmp;
int r;
@ -137,6 +141,11 @@ static int ctl_peer_parse_properties(struct ctl_peer *p,
&remote_address);
if (r < 0)
return cli_log_parser(r);
} else if (!strcmp(t, "WfdSubelements")) {
r = bus_message_read_basic_variant(m, "s",
&wfd_subelements);
if (r < 0)
return cli_log_parser(r);
} else {
sd_bus_message_skip(m, "v");
}
@ -210,6 +219,16 @@ static int ctl_peer_parse_properties(struct ctl_peer *p,
}
}
if (wfd_subelements) {
tmp = strdup(wfd_subelements);
if (tmp) {
free(p->wfd_subelements);
p->wfd_subelements = tmp;
} else {
cli_ENOMEM();
}
}
return 0;
}
@ -315,6 +334,7 @@ static void ctl_link_free(struct ctl_link *l)
if (shl_dlist_linked(&l->list))
ctl_fn_link_free(l);
free(l->wfd_subelements);
free(l->friendly_name);
free(l->ifname);
@ -362,6 +382,7 @@ static int ctl_link_parse_properties(struct ctl_link *l,
sd_bus_message *m)
{
const char *t, *interface_name = NULL, *friendly_name = NULL;
const char *wfd_subelements = NULL;
unsigned int interface_index = 0;
bool p2p_scanning, p2p_scanning_set = false;
char *tmp;
@ -403,6 +424,11 @@ static int ctl_link_parse_properties(struct ctl_link *l,
return cli_log_parser(r);
p2p_scanning_set = true;
} else if (!strcmp(t, "WfdSubelements")) {
r = bus_message_read_basic_variant(m, "s",
&wfd_subelements);
if (r < 0)
return cli_log_parser(r);
} else {
sd_bus_message_skip(m, "v");
}
@ -444,6 +470,16 @@ static int ctl_link_parse_properties(struct ctl_link *l,
if (p2p_scanning_set)
l->p2p_scanning = p2p_scanning;
if (wfd_subelements) {
tmp = strdup(wfd_subelements);
if (tmp) {
free(l->wfd_subelements);
l->wfd_subelements = tmp;
} else {
cli_ENOMEM();
}
}
return 0;
}
@ -502,6 +538,61 @@ int ctl_link_set_friendly_name(struct ctl_link *l, const char *name)
return 0;
}
int ctl_link_set_wfd_subelements(struct ctl_link *l, const char *val)
{
_sd_bus_message_unref_ sd_bus_message *m = NULL;
_sd_bus_error_free_ sd_bus_error err = SD_BUS_ERROR_NULL;
_shl_free_ char *node = NULL;
int r;
if (!l)
return cli_EINVAL();
if (!strcmp(l->wfd_subelements, val))
return 0;
r = sd_bus_path_encode("/org/freedesktop/miracle/wifi/link",
l->label,
&node);
if (r < 0)
return cli_ERR(r);
r = sd_bus_message_new_method_call(l->w->bus,
&m,
"org.freedesktop.miracle.wifi",
node,
"org.freedesktop.DBus.Properties",
"Set");
if (r < 0)
return cli_log_create(r);
r = sd_bus_message_append(m, "ss",
"org.freedesktop.miracle.wifi.Link",
"WfdSubelements");
if (r < 0)
return cli_log_create(r);
r = sd_bus_message_open_container(m, 'v', "s");
if (r < 0)
return cli_log_create(r);
r = sd_bus_message_append(m, "s", val);
if (r < 0)
return cli_log_create(r);
r = sd_bus_message_close_container(m);
if (r < 0)
return cli_log_create(r);
r = sd_bus_call(l->w->bus, m, 0, &err, NULL);
if (r < 0) {
cli_error("cannot change WfdSubelements on link %s to %s: %s",
l->label, val, bus_error_message(&err, r));
return r;
}
return 0;
}
int ctl_link_set_p2p_scanning(struct ctl_link *l, bool val)
{
_sd_bus_message_unref_ sd_bus_message *m = NULL;

View file

@ -46,6 +46,7 @@ struct ctl_peer {
char *interface;
char *local_address;
char *remote_address;
char *wfd_subelements;
};
#define peer_from_dlist(_p) shl_dlist_entry((_p), struct ctl_peer, list);
@ -66,12 +67,14 @@ struct ctl_link {
unsigned int ifindex;
char *ifname;
char *friendly_name;
char *wfd_subelements;
bool p2p_scanning;
};
#define link_from_dlist(_l) shl_dlist_entry((_l), struct ctl_link, list);
int ctl_link_set_friendly_name(struct ctl_link *l, const char *name);
int ctl_link_set_wfd_subelements(struct ctl_link *l, const char *val);
int ctl_link_set_p2p_scanning(struct ctl_link *l, bool val);
struct ctl_wifi {

View file

@ -153,6 +153,8 @@ static int cmd_show(char **args, unsigned int n)
if (l->friendly_name && *l->friendly_name)
cli_printf("FriendlyName=%s\n", l->friendly_name);
cli_printf("P2PScanning=%d\n", l->p2p_scanning);
if (l->wfd_subelements && *l->wfd_subelements)
cli_printf("WfdSubelements=%s\n", l->wfd_subelements);
} else if (p) {
cli_printf("Peer=%s\n", p->label);
if (p->p2p_mac && *p->p2p_mac)
@ -166,6 +168,8 @@ static int cmd_show(char **args, unsigned int n)
cli_printf("LocalAddress=%s\n", p->local_address);
if (p->remote_address && *p->remote_address)
cli_printf("RemoteAddress=%s\n", p->remote_address);
if (p->wfd_subelements && *p->wfd_subelements)
cli_printf("WfdSubelements=%s\n", p->wfd_subelements);
} else {
cli_printf("Show what?\n");
return 0;