With the logic of connmanctl, this requires GetProperties() method to be
supported on Peer API side.
---
client/commands.c | 66 ++++++++++++++++++++++++++++++++++++++++++++++---------
1 file changed, 56 insertions(+), 10 deletions(-)
diff --git a/client/commands.c b/client/commands.c
index 7881c98..9c01fd5 100644
--- a/client/commands.c
+++ b/client/commands.c
@@ -289,8 +289,8 @@ static int peers_list(DBusMessageIter *iter,
return 0;
}
-static int services_properties(DBusMessageIter *iter, const char *error,
- void *user_data)
+static int object_properties(DBusMessageIter *iter,
+ const char *error, void *user_data)
{
char *path = user_data;
char *str;
@@ -357,18 +357,34 @@ static int cmd_services(char *args[], int num, struct
connman_option *options)
path = g_strdup_printf("/net/connman/service/%s", service_name);
return __connmanctl_dbus_method_call(connection, CONNMAN_SERVICE, path,
"net.connman.Service", "GetProperties",
- services_properties, path, NULL, NULL);
+ object_properties, path, NULL, NULL);
}
static int cmd_peers(char *args[], int num, struct connman_option *options)
{
- if (num > 1)
+ char *peer_name = NULL;
+ char *path;
+
+ if (num > 2)
return -E2BIG;
- return __connmanctl_dbus_method_call(connection,
- CONNMAN_SERVICE, CONNMAN_PATH,
- "net.connman.Manager", "GetPeers",
- peers_list, NULL, NULL, NULL);
+ if (num == 2)
+ peer_name = args[1];
+
+ if (!peer_name) {
+ return __connmanctl_dbus_method_call(connection,
+ CONNMAN_SERVICE, CONNMAN_PATH,
+ "net.connman.Manager", "GetPeers",
+ peers_list, NULL, NULL, NULL);
+ }
+
+ if (check_dbus_name(peer_name) == false)
+ return -EINVAL;
+
+ path = g_strdup_printf("/net/connman/peer/%s", peer_name);
+ return __connmanctl_dbus_method_call(connection, CONNMAN_SERVICE,
+ path, "net.connman.Peer", "GetProperties",
+ object_properties, path, NULL, NULL);
}
static int technology_print(DBusMessageIter *iter, const char *error,
@@ -1840,6 +1856,36 @@ static char *lookup_service_arg(const char *text, int
state)
return lookup_service(text, state);
}
+static char *lookup_peer(const char *text, int state)
+{
+ static GHashTableIter iter;
+ gpointer key, value;
+ static int len = 0;
+
+ if (state == 0) {
+ g_hash_table_iter_init(&iter, peer_hash);
+ len = strlen(text);
+ }
+
+ while (g_hash_table_iter_next(&iter, &key, &value)) {
+ const char *peer = key;
+ if (strncmp(text, peer, len) == 0)
+ return strdup(peer);
+ }
+
+ return NULL;
+}
+
+static char *lookup_peer_arg(const char *text, int state)
+{
+ if (__connmanctl_input_calc_level() > 1) {
+ __connmanctl_input_lookup_end();
+ return NULL;
+ }
+
+ return lookup_peer(text, state);
+}
+
static char *lookup_technology(const char *text, int state)
{
static int len = 0;
@@ -2064,8 +2110,8 @@ static const struct {
lookup_tether },
{ "services", "[<service>]", service_options, cmd_services,
"Display services", lookup_service_arg },
- { "peers", NULL, NULL, cmd_peers,
- "Display peers", NULL },
+ { "peers", "[peer]", NULL, cmd_peers,
+ "Display peers", lookup_peer_arg },
{ "scan", "<technology>", NULL, cmd_scan,
"Scans for new services for given technology",
lookup_technology_arg },
--
1.8.3.2
_______________________________________________
connman mailing list
[email protected]
https://lists.connman.net/mailman/listinfo/connman