5 * Copyright (C) 2007-2009 Intel Corporation. All rights reserved.
7 * This program is free software; you can redistribute it and/or modify
8 * it under the terms of the GNU General Public License version 2 as
9 * published by the Free Software Foundation.
11 * This program is distributed in the hope that it will be useful,
12 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
14 * GNU General Public License for more details.
16 * You should have received a copy of the GNU General Public License
17 * along with this program; if not, write to the Free Software
18 * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
31 #include <dbus/dbus.h>
33 #define CONNMAN_SERVICE "org.moblin.connman"
35 #define CONNMAN_MANAGER_INTERFACE CONNMAN_SERVICE ".Manager"
36 #define CONNMAN_MANAGER_PATH "/"
38 static DBusMessage *get_properties(DBusConnection *connection)
40 DBusMessage *message, *reply;
43 message = dbus_message_new_method_call(CONNMAN_SERVICE,
45 CONNMAN_MANAGER_INTERFACE,
50 dbus_error_init(&error);
52 reply = dbus_connection_send_with_reply_and_block(connection,
55 if (dbus_error_is_set(&error) == TRUE) {
56 fprintf(stderr, "%s\n", error.message);
57 dbus_error_free(&error);
59 fprintf(stderr, "Failed to get properties\n");
60 dbus_message_unref(message);
64 dbus_message_unref(message);
69 static const char *extract_state(DBusMessage *message)
71 DBusMessageIter array, dict;
73 dbus_message_iter_init(message, &array);
74 dbus_message_iter_recurse(&array, &dict);
76 while (dbus_message_iter_get_arg_type(&dict) == DBUS_TYPE_DICT_ENTRY) {
77 DBusMessageIter entry, value;
80 dbus_message_iter_recurse(&dict, &entry);
81 dbus_message_iter_get_basic(&entry, &key);
83 dbus_message_iter_next(&entry);
85 dbus_message_iter_recurse(&entry, &value);
87 //type = dbus_message_iter_get_arg_type(&value);
88 //dbus_message_iter_get_basic(&value, &val);
90 if (strcmp(key, "State") == 0) {
92 dbus_message_iter_get_basic(&value, &val);
96 dbus_message_iter_next(&dict);
102 static void print_objects(DBusMessageIter *array)
104 DBusMessageIter value;
106 if (dbus_message_iter_get_arg_type(array) != DBUS_TYPE_ARRAY)
109 dbus_message_iter_recurse(array, &value);
111 while (dbus_message_iter_get_arg_type(&value) == DBUS_TYPE_OBJECT_PATH) {
114 dbus_message_iter_get_basic(&value, &path);
116 printf("%s\n", path);
118 dbus_message_iter_next(&value);
122 static void extract_devices(DBusMessage *message)
124 DBusMessageIter array, dict;
126 dbus_message_iter_init(message, &array);
127 dbus_message_iter_recurse(&array, &dict);
129 while (dbus_message_iter_get_arg_type(&dict) == DBUS_TYPE_DICT_ENTRY) {
130 DBusMessageIter entry, value;
133 dbus_message_iter_recurse(&dict, &entry);
134 dbus_message_iter_get_basic(&entry, &key);
136 dbus_message_iter_next(&entry);
138 dbus_message_iter_recurse(&entry, &value);
140 //type = dbus_message_iter_get_arg_type(&value);
141 //dbus_message_iter_get_basic(&value, &val);
143 if (strcmp(key, "Devices") == 0) {
144 print_objects(&value);
148 dbus_message_iter_next(&dict);
152 static int cmd_status(DBusConnection *connection)
154 DBusMessage *message;
157 message = get_properties(connection);
159 state = extract_state(message);
161 dbus_message_unref(message);
166 printf("System is %s\n", state);
171 static int cmd_devices(DBusConnection *connection)
173 DBusMessage *message;
175 message = get_properties(connection);
177 extract_devices(message);
179 dbus_message_unref(message);
184 static void usage(const char *program)
186 printf("ConnMan utility ver %s\n\n", VERSION);
189 "\t%s <command>\n\n", program);
197 int main(int argc, char *argv[])
199 DBusConnection *conn;
201 if (argc > 1 && strcmp(argv[1], "help") == 0) {
206 conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL);
208 fprintf(stderr, "Can't get on system bus\n");
213 if (strcmp(argv[1], "dev") == 0)
218 dbus_connection_unref(conn);