diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2009-01-21 19:49:08 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-01-21 19:49:08 +0100 |
commit | 6265392bdc7c99f926114c5af3ccf008d8e45710 (patch) | |
tree | af76d9529db6e3220f1e2bb5ee6440474178844c /src | |
parent | 2c171d0621ec983c641525d33b6b6c8766e79cb8 (diff) | |
download | connman-6265392bdc7c99f926114c5af3ccf008d8e45710.tar.gz connman-6265392bdc7c99f926114c5af3ccf008d8e45710.tar.bz2 connman-6265392bdc7c99f926114c5af3ccf008d8e45710.zip |
Add support for special disconnected device state
Diffstat (limited to 'src')
-rw-r--r-- | src/device.c | 33 | ||||
-rw-r--r-- | src/network.c | 4 |
2 files changed, 37 insertions, 0 deletions
diff --git a/src/device.c b/src/device.c index a2a29beb..293055b5 100644 --- a/src/device.c +++ b/src/device.c @@ -36,6 +36,7 @@ struct connman_device { connman_bool_t powered; connman_bool_t carrier; connman_bool_t scanning; + connman_bool_t disconnected; connman_uint8_t priority; char *name; char *node; @@ -1187,6 +1188,9 @@ int connman_device_set_scanning(struct connman_device *device, if (device->connections > 0) return 0; + if (device->disconnected == TRUE) + return 0; + if (device->policy != CONNMAN_DEVICE_POLICY_AUTO) return 0; @@ -1196,6 +1200,35 @@ int connman_device_set_scanning(struct connman_device *device, } /** + * connman_device_set_disconnected: + * @device: device structure + * @disconnected: disconnected state + * + * Change disconnected state of device (only for device with networks) + */ +int connman_device_set_disconnected(struct connman_device *device, + connman_bool_t disconnected) +{ + DBG("driver %p disconnected %d", device, disconnected); + + switch (device->mode) { + case CONNMAN_DEVICE_MODE_UNKNOWN: + case CONNMAN_DEVICE_MODE_TRANSPORT_IP: + return -EINVAL; + case CONNMAN_DEVICE_MODE_NETWORK_SINGLE: + case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE: + break; + } + + if (device->disconnected == disconnected) + return -EALREADY; + + device->disconnected = disconnected; + + return 0; +} + +/** * connman_device_set_string: * @device: device structure * @key: unique identifier diff --git a/src/network.c b/src/network.c index 4a7b8f2d..45213a9b 100644 --- a/src/network.c +++ b/src/network.c @@ -245,6 +245,8 @@ static DBusMessage *do_connect(DBusConnection *conn, } else network->connected = TRUE; + connman_device_set_disconnected(network->device, FALSE); + return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); } @@ -272,6 +274,8 @@ static DBusMessage *do_disconnect(DBusConnection *conn, } else network->connected = FALSE; + connman_device_set_disconnected(network->device, TRUE); + return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); } |