diff options
-rw-r--r-- | .gitignore | 1 | ||||
-rw-r--r-- | client/Makefile.am | 8 | ||||
-rw-r--r-- | client/main.c | 129 |
3 files changed, 138 insertions, 0 deletions
@@ -29,6 +29,7 @@ src/connman.ver src/connman.service scripts/connman scripts/dhclient-script +client/cm doc/*.bak doc/*.stamp doc/connman.* diff --git a/client/Makefile.am b/client/Makefile.am index 02742923..e198c8f8 100644 --- a/client/Makefile.am +++ b/client/Makefile.am @@ -1,2 +1,10 @@ +noinst_PROGRAMS = cm + +cm_SOURCES = main.c + +cm_LDADD = @DBUS_LIBS@ + +AM_CFLAGS = @DBUS_CFLAGS@ + MAINTAINERCLEANFILES = Makefile.in diff --git a/client/main.c b/client/main.c new file mode 100644 index 00000000..cb28257c --- /dev/null +++ b/client/main.c @@ -0,0 +1,129 @@ +/* + * + * Connection Manager + * + * Copyright (C) 2007-2008 Intel Corporation. All rights reserved. + * + * This program is free software; you can redistribute it and/or modify + * it under the terms of the GNU General Public License version 2 as + * published by the Free Software Foundation. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program; if not, write to the Free Software + * Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA + * + */ + +#ifdef HAVE_CONFIG_H +#include <config.h> +#endif + +#include <stdio.h> +#include <errno.h> +#include <stdlib.h> +#include <string.h> + +#include <dbus/dbus.h> + +#define CONNMAN_SERVICE "org.moblin.connman" + +#define CONNMAN_MANAGER_INTERFACE CONNMAN_SERVICE ".Manager" +#define CONNMAN_MANAGER_PATH "/" + +static const char *extract_state(DBusMessage *message) +{ + DBusMessageIter array, dict; + + dbus_message_iter_init(message, &array); + dbus_message_iter_recurse(&array, &dict); + + 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_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, "State") == 0) { + const char *val; + dbus_message_iter_get_basic(&value, &val); + return val; + } + + dbus_message_iter_next(&dict); + } + + return NULL; +} + +static int cmd_status(DBusConnection *connection) +{ + DBusMessage *message, *reply; + DBusError error; + const char *state; + + message = dbus_message_new_method_call(CONNMAN_SERVICE, + CONNMAN_MANAGER_PATH, + CONNMAN_MANAGER_INTERFACE, + "GetProperties"); + if (message == NULL) + return -ENOMEM; + + 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 -EIO; + } + + dbus_message_unref(message); + + dbus_error_init(&error); + + state = extract_state(reply); + + dbus_message_unref(reply); + + if (state == NULL) + return -EINVAL; + + printf("System is %s\n", state); + + return 0; +} + +int main(int argc, char *argv[]) +{ + DBusConnection *conn; + + conn = dbus_bus_get(DBUS_BUS_SYSTEM, NULL); + if (!conn) { + fprintf(stderr, "Can't get on system bus\n"); + exit(1); + } + + cmd_status(conn); + + dbus_connection_unref(conn); + + return 0; +} |