mirror of
https://git.kernel.org/pub/scm/network/wireless/iwd.git
synced 2024-11-22 14:49:24 +01:00
client: Device show cmd
This commit is contained in:
parent
b3772259b5
commit
0ada918031
@ -138,6 +138,35 @@ struct proxy_interface *proxy_interface_find(const char *interface,
|
||||
return NULL;
|
||||
}
|
||||
|
||||
struct l_queue *proxy_interface_find_all(const char *interface,
|
||||
proxy_property_match_func_t function,
|
||||
const void *value)
|
||||
{
|
||||
const struct l_queue_entry *entry;
|
||||
struct l_queue *match = NULL;
|
||||
|
||||
if (!interface || !function || !value)
|
||||
return NULL;
|
||||
|
||||
for (entry = l_queue_get_entries(proxy_interfaces); entry;
|
||||
entry = entry->next) {
|
||||
struct proxy_interface *proxy = entry->data;
|
||||
|
||||
if (!interface_match_by_type_name(proxy->type, interface))
|
||||
continue;
|
||||
|
||||
if (!function(proxy->data, value))
|
||||
continue;
|
||||
|
||||
if (!match)
|
||||
match = l_queue_new();
|
||||
|
||||
l_queue_push_tail(match, proxy);
|
||||
}
|
||||
|
||||
return match;
|
||||
}
|
||||
|
||||
static struct l_queue *proxy_interface_find_by_path(const char *path)
|
||||
{
|
||||
const struct l_queue_entry *entry;
|
||||
|
@ -30,6 +30,8 @@ struct proxy_interface;
|
||||
#define IWD_NETWORK_INTERFACE "net.connman.iwd.Network"
|
||||
#define IWD_WSC_INTERFACE "net.connman.iwd.WiFiSimpleConfiguration"
|
||||
|
||||
typedef bool (*proxy_property_match_func_t) (const void *a, const void *b);
|
||||
|
||||
struct proxy_interface_property {
|
||||
const char *name;
|
||||
const char *type;
|
||||
@ -58,6 +60,10 @@ struct proxy_interface_type {
|
||||
struct proxy_interface *proxy_interface_find(const char *interface,
|
||||
const char *path);
|
||||
|
||||
struct l_queue *proxy_interface_find_all(const char *interface,
|
||||
proxy_property_match_func_t function,
|
||||
const void *value);
|
||||
|
||||
void *proxy_interface_get_data(const struct proxy_interface *proxy);
|
||||
const char *proxy_interface_get_interface(const struct proxy_interface *proxy);
|
||||
const char *proxy_interface_get_identity_str(
|
||||
|
@ -43,6 +43,10 @@ struct device {
|
||||
const struct proxy_interface *wsc;
|
||||
};
|
||||
|
||||
static void display_device(const struct device *device)
|
||||
{
|
||||
}
|
||||
|
||||
static const void *get_name(const void *data)
|
||||
{
|
||||
const struct device *device = data;
|
||||
@ -236,8 +240,48 @@ static struct proxy_interface_type device_interface_type = {
|
||||
.ops = &device_ops,
|
||||
};
|
||||
|
||||
static bool match_by_name(const void *a, const void *b)
|
||||
{
|
||||
const struct device *device = a;
|
||||
const char *name = b;
|
||||
|
||||
return !strcmp(device->name, name);
|
||||
}
|
||||
|
||||
static const struct proxy_interface *get_device_proxy_by_name(
|
||||
const char *device_name)
|
||||
{
|
||||
struct l_queue *match;
|
||||
struct proxy_interface *proxy = NULL;
|
||||
|
||||
if (!device_name)
|
||||
return NULL;
|
||||
|
||||
match = proxy_interface_find_all(device_interface_type.interface,
|
||||
match_by_name, device_name);
|
||||
|
||||
if (l_queue_length(match))
|
||||
proxy = l_queue_pop_head(match);
|
||||
else
|
||||
display("Device %s not found", device_name);
|
||||
|
||||
l_queue_destroy(match, NULL);
|
||||
|
||||
return proxy;
|
||||
}
|
||||
|
||||
static void cmd_show(const char *device_name, char *args)
|
||||
{
|
||||
struct device *device;
|
||||
const struct proxy_interface *proxy =
|
||||
get_device_proxy_by_name(device_name);
|
||||
|
||||
if (!proxy)
|
||||
return;
|
||||
|
||||
device = proxy_interface_get_data(proxy);
|
||||
|
||||
display_device(device);
|
||||
}
|
||||
|
||||
static void cmd_scan(const char *device_name, char *args)
|
||||
|
Loading…
Reference in New Issue
Block a user