summaryrefslogtreecommitdiff
path: root/src/manager.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-07-17 16:05:08 +0200
committerMarcel Holtmann <marcel@holtmann.org>2009-07-17 16:05:08 +0200
commit05f8d1bc5fe81a9024f5915d72f8338dbb7351a7 (patch)
tree3c9f8f7a8139c4572bad5eb12fcea15a98faba04 /src/manager.c
parent61b9ff90c79030359868cf9d68d55783d6eea33f (diff)
downloadconnman-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.c54
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,