summaryrefslogtreecommitdiff
path: root/src/service.c
diff options
context:
space:
mode:
authorMarcel Holtmann <marcel@holtmann.org>2009-04-22 20:15:12 +0100
committerMarcel Holtmann <marcel@holtmann.org>2009-04-22 20:15:12 +0100
commitc9db6015a16ec048d9ed4b439947a6919af882ce (patch)
tree26d53c6c2dde7fc10bd14c008831028f7faa5fc3 /src/service.c
parent4e8dfd85cc5f5c8a46fd3e4c25637588421a67e1 (diff)
downloadconnman-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.c50
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);