diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2009-04-22 20:15:12 +0100 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-04-22 20:15:12 +0100 |
commit | c9db6015a16ec048d9ed4b439947a6919af882ce (patch) | |
tree | 26d53c6c2dde7fc10bd14c008831028f7faa5fc3 /src/service.c | |
parent | 4e8dfd85cc5f5c8a46fd3e4c25637588421a67e1 (diff) | |
download | connman-c9db6015a16ec048d9ed4b439947a6919af882ce.tar.gz connman-c9db6015a16ec048d9ed4b439947a6919af882ce.tar.bz2 connman-c9db6015a16ec048d9ed4b439947a6919af882ce.zip |
Add support for service connect and disconnect methods
Diffstat (limited to 'src/service.c')
-rw-r--r-- | src/service.c | 50 |
1 files changed, 50 insertions, 0 deletions
diff --git a/src/service.c b/src/service.c index 22c40570..57337bb9 100644 --- a/src/service.c +++ b/src/service.c @@ -284,13 +284,32 @@ static DBusMessage *connect_service(DBusConnection *conn, { struct connman_service *service = data; + if (service->network != NULL) { + int err; + + err = connman_network_connect(service->network); + if (err < 0 && err != -EINPROGRESS) + return __connman_error_failed(msg); + + service->state = CONNMAN_SERVICE_STATE_ASSOCIATION; + + state_changed(service); + + return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); + } + if (service->device != NULL) { + if (service->favorite == FALSE) + return __connman_error_no_carrier(msg); + if (__connman_device_connect(service->device) < 0) return __connman_error_failed(msg); service->state = CONNMAN_SERVICE_STATE_READY; state_changed(service); + + return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); } return __connman_error_not_supported(msg); @@ -301,13 +320,32 @@ static DBusMessage *disconnect_service(DBusConnection *conn, { struct connman_service *service = data; + if (service->network != NULL) { + int err; + + err = __connman_network_disconnect(service->network); + if (err < 0 && err != -EINPROGRESS) + return __connman_error_failed(msg); + + service->state = CONNMAN_SERVICE_STATE_DISCONNECT; + + state_changed(service); + + return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); + } + if (service->device != NULL) { + if (service->favorite == FALSE) + return __connman_error_no_carrier(msg); + if (__connman_device_connect(service->device) < 0) return __connman_error_failed(msg); service->state = CONNMAN_SERVICE_STATE_IDLE; state_changed(service); + + return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); } return __connman_error_not_supported(msg); @@ -321,6 +359,18 @@ static DBusMessage *remove_service(DBusConnection *conn, if (service->type == CONNMAN_SERVICE_TYPE_ETHERNET) return __connman_error_not_supported(msg); + if (service->network != NULL) { + int err; + + err = __connman_network_disconnect(service->network); + if (err < 0 && err != -EINPROGRESS) + return __connman_error_failed(msg); + + service->state = CONNMAN_SERVICE_STATE_DISCONNECT; + + state_changed(service); + } + connman_service_set_favorite(service, FALSE); return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); |