summaryrefslogtreecommitdiff
path: root/client/main.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2008-12-22 14:42:03 +0100
committerMarcel Holtmann <marcel@holtmann.org>2008-12-22 14:42:03 +0100
commit72cf57e982f6da1e1bfe3147de4ca1c7d7dc8b89 (patch)
treee13d2499b6f47b861a4e6b9cd776864d0a86e220 /client/main.c
parentee6687c3d473d45ecb77bd221f4b4dcb7172117a (diff)
downloadconnman-72cf57e982f6da1e1bfe3147de4ca1c7d7dc8b89.tar.gz
connman-72cf57e982f6da1e1bfe3147de4ca1c7d7dc8b89.tar.bz2
connman-72cf57e982f6da1e1bfe3147de4ca1c7d7dc8b89.zip
Add command to list device objects
Diffstat (limited to 'client/main.c')
-rw-r--r--client/main.c144
1 files changed, 118 insertions, 26 deletions
diff --git a/client/main.c b/client/main.c
index cb28257c..bb1c39f4 100644
--- a/client/main.c
+++ b/client/main.c
@@ -35,6 +35,37 @@
#define CONNMAN_MANAGER_INTERFACE CONNMAN_SERVICE ".Manager"
#define CONNMAN_MANAGER_PATH "/"
+static DBusMessage *get_properties(DBusConnection *connection)
+{
+ DBusMessage *message, *reply;
+ DBusError error;
+
+ message = dbus_message_new_method_call(CONNMAN_SERVICE,
+ CONNMAN_MANAGER_PATH,
+ CONNMAN_MANAGER_INTERFACE,
+ "GetProperties");
+ if (message == NULL)
+ return NULL;
+
+ dbus_error_init(&error);
+
+ reply = dbus_connection_send_with_reply_and_block(connection,
+ message, -1, &error);
+ if (reply == NULL) {
+ if (dbus_error_is_set(&error) == TRUE) {
+ fprintf(stderr, "%s\n", error.message);
+ dbus_error_free(&error);
+ } else
+ fprintf(stderr, "Failed to get properties\n");
+ dbus_message_unref(message);
+ return NULL;
+ }
+
+ dbus_message_unref(message);
+
+ return reply;
+}
+
static const char *extract_state(DBusMessage *message)
{
DBusMessageIter array, dict;
@@ -68,40 +99,66 @@ static const char *extract_state(DBusMessage *message)
return NULL;
}
-static int cmd_status(DBusConnection *connection)
+static void print_objects(DBusMessageIter *array)
{
- DBusMessage *message, *reply;
- DBusError error;
- const char *state;
+ DBusMessageIter value;
- message = dbus_message_new_method_call(CONNMAN_SERVICE,
- CONNMAN_MANAGER_PATH,
- CONNMAN_MANAGER_INTERFACE,
- "GetProperties");
- if (message == NULL)
- return -ENOMEM;
+ if (dbus_message_iter_get_arg_type(array) != DBUS_TYPE_ARRAY)
+ return;
- dbus_error_init(&error);
+ dbus_message_iter_recurse(array, &value);
- reply = dbus_connection_send_with_reply_and_block(connection,
- message, -1, &error);
- if (reply == NULL) {
- if (dbus_error_is_set(&error) == TRUE) {
- fprintf(stderr, "%s\n", error.message);
- dbus_error_free(&error);
- } else
- fprintf(stderr, "Failed to get properties\n");
- dbus_message_unref(message);
- return -EIO;
+ while (dbus_message_iter_get_arg_type(&value) == DBUS_TYPE_OBJECT_PATH) {
+ const char *path;
+
+ dbus_message_iter_get_basic(&value, &path);
+
+ printf("%s\n", path);
+
+ dbus_message_iter_next(&value);
}
+}
- dbus_message_unref(message);
+static void extract_devices(DBusMessage *message)
+{
+ DBusMessageIter array, dict;
- dbus_error_init(&error);
+ dbus_message_iter_init(message, &array);
+ dbus_message_iter_recurse(&array, &dict);
- state = extract_state(reply);
+ while (dbus_message_iter_get_arg_type(&dict) == DBUS_TYPE_DICT_ENTRY) {
+ DBusMessageIter entry, value;
+ const char *key;
+
+ dbus_message_iter_recurse(&dict, &entry);
+ dbus_message_iter_get_basic(&entry, &key);
- dbus_message_unref(reply);
+ dbus_message_iter_next(&entry);
+
+ dbus_message_iter_recurse(&entry, &value);
+
+ //type = dbus_message_iter_get_arg_type(&value);
+ //dbus_message_iter_get_basic(&value, &val);
+
+ if (strcmp(key, "Devices") == 0) {
+ print_objects(&value);
+ return;
+ }
+
+ dbus_message_iter_next(&dict);
+ }
+}
+
+static int cmd_status(DBusConnection *connection)
+{
+ DBusMessage *message;
+ const char *state;
+
+ message = get_properties(connection);
+
+ state = extract_state(message);
+
+ dbus_message_unref(message);
if (state == NULL)
return -EINVAL;
@@ -111,17 +168,52 @@ static int cmd_status(DBusConnection *connection)
return 0;
}
+static int cmd_devices(DBusConnection *connection)
+{
+ DBusMessage *message;
+
+ message = get_properties(connection);
+
+ extract_devices(message);
+
+ dbus_message_unref(message);
+
+ return 0;
+}
+
+static void usage(const char *program)
+{
+ printf("ConnMan utility ver %s\n\n", VERSION);
+
+ printf("Usage:\n"
+ "\t%s <command>\n\n", program);
+
+ printf("Commands:\n"
+ "\thelp\n"
+ "\tdev\n"
+ "\n");
+}
+
int main(int argc, char *argv[])
{
DBusConnection *conn;
+ if (argc > 1 && strcmp(argv[1], "help") == 0) {
+ usage(argv[0]);
+ exit(0);
+ }
+
conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
if (!conn) {
fprintf(stderr, "Can't get on system bus\n");
exit(1);
}
- cmd_status(conn);
+ if (argc > 1) {
+ if (strcmp(argv[1], "dev") == 0)
+ cmd_devices(conn);
+ } else
+ cmd_status(conn);
dbus_connection_unref(conn);