diff options
author | Marcel Holtmann <marcel@holtmann.org> | 2009-08-07 10:23:13 -0700 |
---|---|---|
committer | Marcel Holtmann <marcel@holtmann.org> | 2009-08-07 10:23:13 -0700 |
commit | 15a9b7abf662910638662ffe11cf880f91baee12 (patch) | |
tree | bd63bf35881d137f428aced73f25404e71172fb0 /src | |
parent | d1a77982c2fb935a2e78b5582687c4ab40ff4a4f (diff) | |
download | connman-15a9b7abf662910638662ffe11cf880f91baee12.tar.gz connman-15a9b7abf662910638662ffe11cf880f91baee12.tar.bz2 connman-15a9b7abf662910638662ffe11cf880f91baee12.zip |
Add support for changing the AutoConnect value of services
Diffstat (limited to 'src')
-rw-r--r-- | src/service.c | 53 |
1 files changed, 53 insertions, 0 deletions
diff --git a/src/service.c b/src/service.c index 639ade87..dfb2149f 100644 --- a/src/service.c +++ b/src/service.c @@ -342,6 +342,33 @@ static void passphrase_changed(struct connman_service *service) g_dbus_send_message(connection, signal); } +static void autoconnect_changed(struct connman_service *service) +{ + DBusMessage *signal; + DBusMessageIter entry, value; + const char *key = "AutoConnect"; + + if (service->path == NULL) + return; + + signal = dbus_message_new_signal(service->path, + CONNMAN_SERVICE_INTERFACE, "PropertyChanged"); + if (signal == NULL) + return; + + dbus_message_iter_init_append(signal, &entry); + + dbus_message_iter_append_basic(&entry, DBUS_TYPE_STRING, &key); + + dbus_message_iter_open_container(&entry, DBUS_TYPE_VARIANT, + DBUS_TYPE_BOOLEAN_AS_STRING, &value); + dbus_message_iter_append_basic(&value, DBUS_TYPE_BOOLEAN, + &service->autoconnect); + dbus_message_iter_close_container(&entry, &value); + + g_dbus_send_message(connection, signal); +} + static DBusMessage *get_properties(DBusConnection *conn, DBusMessage *msg, void *user_data) { @@ -492,6 +519,25 @@ static DBusMessage *set_property(DBusConnection *conn, "WiFi.Passphrase", service->passphrase); __connman_storage_save_service(service); + } else if (g_str_has_prefix(name, "AutoConnect") == TRUE) { + connman_bool_t autoconnect; + + if (type != DBUS_TYPE_BOOLEAN) + return __connman_error_invalid_arguments(msg); + + if (service->favorite == FALSE) + return __connman_error_invalid_service(msg); + + dbus_message_iter_get_basic(&value, &autoconnect); + + if (service->autoconnect == autoconnect) + return g_dbus_create_reply(msg, DBUS_TYPE_INVALID); + + service->autoconnect = autoconnect; + + autoconnect_changed(service); + + __connman_storage_save_service(service); } else if (g_str_has_prefix(name, "IPv4.") == TRUE) { int err; @@ -2015,6 +2061,9 @@ static int service_load(struct connman_service *service) service->favorite = g_key_file_get_boolean(keyfile, service->identifier, "Favorite", NULL); + service->autoconnect = g_key_file_get_boolean(keyfile, + service->identifier, "AutoConnect", NULL); + str = g_key_file_get_string(keyfile, service->identifier, "Failure", NULL); if (str != NULL) { @@ -2124,6 +2173,10 @@ update: g_key_file_set_boolean(keyfile, service->identifier, "Favorite", service->favorite); + if (service->favorite == TRUE) + g_key_file_set_boolean(keyfile, service->identifier, + "AutoConnect", service->autoconnect); + if (service->state == CONNMAN_SERVICE_STATE_FAILURE) { const char *failure = error2string(service->error); if (failure != NULL) |