summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-01-05 04:11:08 +0100
committerMarcel Holtmann <marcel@holtmann.org>2009-01-05 04:11:08 +0100
commitc795f784422e6b5ad03fe358b5ec6175826865b7 (patch)
tree4ab46cddb25edffc2ca881d34bb2845740bceb8a /src
parent71d46c63b8394c8bcf029186a7d2f43073512e92 (diff)
downloadconnman-c795f784422e6b5ad03fe358b5ec6175826865b7.tar.gz
connman-c795f784422e6b5ad03fe358b5ec6175826865b7.tar.bz2
connman-c795f784422e6b5ad03fe358b5ec6175826865b7.zip
Check connected state and improve disconnect
Diffstat (limited to 'src')
-rw-r--r--src/network.c14
1 files changed, 12 insertions, 2 deletions
diff --git a/src/network.c b/src/network.c
index 62dc4220..eed3c08d 100644
--- a/src/network.c
+++ b/src/network.c
@@ -167,11 +167,15 @@ static DBusMessage *do_connect(DBusConnection *conn,
DBG("conn %p", conn);
+ if (network->connected == TRUE)
+ return __connman_error_failed(msg);
+
if (network->driver && network->driver->connect) {
err = network->driver->connect(network);
if (err < 0 && err != -EINPROGRESS)
return __connman_error_failed(msg);
- }
+ } else
+ network->connected = TRUE;
return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
}
@@ -184,11 +188,17 @@ static DBusMessage *do_disconnect(DBusConnection *conn,
DBG("conn %p", conn);
+ if (network->connected == FALSE)
+ return __connman_error_failed(msg);
+
+ connman_element_unregister_children(&network->element);
+
if (network->driver && network->driver->disconnect) {
err = network->driver->disconnect(network);
if (err < 0 && err != -EINPROGRESS)
return __connman_error_failed(msg);
- }
+ } else
+ network->connected = FALSE;
return g_dbus_create_reply(msg, DBUS_TYPE_INVALID);
}