From 5dabfd89b01cd2dfe0af03c23684c6083d4647cf Mon Sep 17 00:00:00 2001 From: Marcel Holtmann Date: Tue, 30 Dec 2008 22:59:31 +0100 Subject: [PATCH] Add support for connecting and disconnecting networks --- src/network.c | 31 +++++++++++++++++++++++++++++-- 1 file changed, 29 insertions(+), 2 deletions(-) diff --git a/src/network.c b/src/network.c index 47c203f..3c4d6b8 100644 --- a/src/network.c +++ b/src/network.c @@ -42,6 +42,7 @@ struct connman_network { static DBusMessage *get_properties(DBusConnection *conn, DBusMessage *msg, void *data) { + struct connman_network *network = data; DBusMessage *reply; DBusMessageIter array, dict; @@ -58,6 +59,10 @@ static DBusMessage *get_properties(DBusConnection *conn, DBUS_TYPE_STRING_AS_STRING DBUS_TYPE_VARIANT_AS_STRING DBUS_DICT_ENTRY_END_CHAR_AS_STRING, &dict); + if (network->identifier != NULL) + connman_dbus_dict_append_variant(&dict, "Name", + DBUS_TYPE_STRING, &network->identifier); + dbus_message_iter_close_container(&array, &dict); return reply; @@ -87,16 +92,34 @@ static DBusMessage *set_property(DBusConnection *conn, static DBusMessage *do_connect(DBusConnection *conn, DBusMessage *msg, void *data) { + struct connman_network *network = data; + int err; + DBG("conn %p", conn); + if (network->driver && network->driver->connect) { + err = network->driver->connect(network); + if (err < 0 && err != -EINPROGRESS) + return __connman_error_failed(msg); + } + return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); } static DBusMessage *do_disconnect(DBusConnection *conn, DBusMessage *msg, void *data) { + struct connman_network *network = data; + int err; + DBG("conn %p", conn); + if (network->driver && network->driver->disconnect) { + err = network->driver->disconnect(network); + if (err < 0 && err != -EINPROGRESS) + return __connman_error_failed(msg); + } + return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); } @@ -123,6 +146,8 @@ static int register_interface(struct connman_element *element) { struct connman_network *network = element->network; + DBG("element %p name %s", element, element->name); + g_dbus_unregister_interface(connection, element->path, CONNMAN_NETWORK_INTERFACE); @@ -141,6 +166,8 @@ static int register_interface(struct connman_element *element) static void unregister_interface(struct connman_element *element) { + DBG("element %p name %s", element, element->name); + emit_networks_signal(); g_dbus_unregister_interface(connection, element->path, @@ -372,7 +399,7 @@ static int network_probe(struct connman_element *element) } } - if (!network->driver) + if (network->driver == NULL) return -ENODEV; err = register_interface(element); @@ -394,7 +421,7 @@ static void network_remove(struct connman_element *element) if (network == NULL) return; - if (!network->driver) + if (network->driver == NULL) return; unregister_interface(element); -- 2.7.4