diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2009-07-17 16:05:08 +0200 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-07-17 16:05:08 +0200 |
commit | 05f8d1bc5fe81a9024f5915d72f8338dbb7351a7 (patch) | |
tree | 3c9f8f7a8139c4572bad5eb12fcea15a98faba04 /src/manager.c | |
parent | 61b9ff90c79030359868cf9d68d55783d6eea33f (diff) | |
download | connman-05f8d1bc5fe81a9024f5915d72f8338dbb7351a7.tar.gz connman-05f8d1bc5fe81a9024f5915d72f8338dbb7351a7.tar.bz2 connman-05f8d1bc5fe81a9024f5915d72f8338dbb7351a7.zip |
Add full support for enable/disable technology methods
Diffstat (limited to 'src/manager.c')
-rw-r--r-- | src/manager.c | 54 |
1 files changed, 52 insertions, 2 deletions
diff --git a/src/manager.c b/src/manager.c index 4daca1c2..b92440dd 100644 --- a/src/manager.c +++ b/src/manager.c @@ -313,27 +313,77 @@ static DBusMessage *request_scan(DBusConnection *conn, static DBusMessage *enable_technology(DBusConnection *conn, DBusMessage *msg, void *data) { + enum connman_device_type type; const char *str; + int err; DBG("conn %p", conn); dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID); - return __connman_error_not_supported(msg); + if (g_strcmp0(str, "ethernet") == 0) + type = CONNMAN_DEVICE_TYPE_ETHERNET; + else if (g_strcmp0(str, "wifi") == 0) + type = CONNMAN_DEVICE_TYPE_WIFI; + else if (g_strcmp0(str, "wimax") == 0) + type = CONNMAN_DEVICE_TYPE_WIMAX; + else if (g_strcmp0(str, "bluetooth") == 0) + type = CONNMAN_DEVICE_TYPE_BLUETOOTH; + else if (g_strcmp0(str, "gps") == 0) + type = CONNMAN_DEVICE_TYPE_GPS; + else + return __connman_error_invalid_arguments(msg); + + err = __connman_element_enable_technology(type); + if (err < 0) { + if (err == -EINPROGRESS) { + connman_error("Invalid return code from enable"); + err = -EINVAL; + } + + return __connman_error_failed(msg, -err); + } + + return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); } static DBusMessage *disable_technology(DBusConnection *conn, DBusMessage *msg, void *data) { + enum connman_device_type type; const char *str; + int err; DBG("conn %p", conn); dbus_message_get_args(msg, NULL, DBUS_TYPE_STRING, &str, DBUS_TYPE_INVALID); - return __connman_error_not_supported(msg); + if (g_strcmp0(str, "ethernet") == 0) + type = CONNMAN_DEVICE_TYPE_ETHERNET; + else if (g_strcmp0(str, "wifi") == 0) + type = CONNMAN_DEVICE_TYPE_WIFI; + else if (g_strcmp0(str, "wimax") == 0) + type = CONNMAN_DEVICE_TYPE_WIMAX; + else if (g_strcmp0(str, "bluetooth") == 0) + type = CONNMAN_DEVICE_TYPE_BLUETOOTH; + else if (g_strcmp0(str, "gps") == 0) + type = CONNMAN_DEVICE_TYPE_GPS; + else + return __connman_error_invalid_arguments(msg); + + err = __connman_element_disable_technology(type); + if (err < 0) { + if (err == -EINPROGRESS) { + connman_error("Invalid return code from disable"); + err = -EINVAL; + } + + return __connman_error_failed(msg, -err); + } + + return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); } static DBusMessage *connect_service(DBusConnection *conn, |