service: Add helpers for removing nameservers and search domains
[framework/connectivity/connman.git] / src / technology.c
index 2b34f50..2edb48f 100644 (file)
@@ -2,7 +2,7 @@
  *
  *  Connection Manager
  *
- *  Copyright (C) 2007-2010  Intel Corporation. All rights reserved.
+ *  Copyright (C) 2007-2012  Intel Corporation. All rights reserved.
  *
  *  This program is free software; you can redistribute it and/or modify
  *  it under the terms of the GNU General Public License version 2 as
@@ -91,7 +91,7 @@ static void rfkill_check(gpointer key, gpointer value, gpointer user_data)
 
        /* Calling _technology_rfkill_add will update the tech. */
        if (rfkill->type == type)
-         __connman_technology_add_rfkill(rfkill->index, type,
+               __connman_technology_add_rfkill(rfkill->index, type,
                                rfkill->softblock, rfkill->hardblock);
 }
 
@@ -292,64 +292,73 @@ static const char *get_name(enum connman_service_type type)
        return NULL;
 }
 
-static void load_state(struct connman_technology *technology)
+static void save_state(struct connman_technology *technology)
 {
        GKeyFile *keyfile;
        gchar *identifier;
-       GError *error = NULL;
-       connman_bool_t enable;
 
        DBG("technology %p", technology);
 
        keyfile = __connman_storage_load_global();
-       /* Fallback on disabling technology if file not found. */
-       if (keyfile == NULL) {
-               technology->enable_persistent = FALSE;
-               return;
-       }
+       if (keyfile == NULL)
+               keyfile = g_key_file_new();
 
        identifier = g_strdup_printf("%s", get_name(technology->type));
        if (identifier == NULL)
                goto done;
 
-       enable = g_key_file_get_boolean(keyfile, identifier, "Enable", &error);
-       if (error == NULL)
-               technology->enable_persistent = enable;
-       else {
-               technology->enable_persistent = FALSE;
-               g_clear_error(&error);
-       }
+       g_key_file_set_boolean(keyfile, identifier, "Enable",
+                               technology->enable_persistent);
+
 done:
        g_free(identifier);
 
+       __connman_storage_save_global(keyfile);
+
        g_key_file_free(keyfile);
 
        return;
 }
 
-static void save_state(struct connman_technology *technology)
+static void load_state(struct connman_technology *technology)
 {
        GKeyFile *keyfile;
        gchar *identifier;
+       GError *error = NULL;
+       connman_bool_t enable;
 
        DBG("technology %p", technology);
 
        keyfile = __connman_storage_load_global();
-       if (keyfile == NULL)
-               keyfile = g_key_file_new();
+       /* Fallback on disabling technology if file not found. */
+       if (keyfile == NULL) {
+               if (technology->type == CONNMAN_SERVICE_TYPE_ETHERNET)
+                       /* We enable ethernet by default */
+                       technology->enable_persistent = TRUE;
+               else
+                       technology->enable_persistent = FALSE;
+               return;
+       }
 
        identifier = g_strdup_printf("%s", get_name(technology->type));
        if (identifier == NULL)
                goto done;
 
-       g_key_file_set_boolean(keyfile, identifier, "Enable",
-                               technology->enable_persistent);
+       enable = g_key_file_get_boolean(keyfile, identifier, "Enable", &error);
+       if (error == NULL)
+               technology->enable_persistent = enable;
+       else {
+               if (technology->type == CONNMAN_SERVICE_TYPE_ETHERNET)
+                       technology->enable_persistent = TRUE;
+               else
+                       technology->enable_persistent = FALSE;
 
+               save_state(technology);
+               g_clear_error(&error);
+       }
 done:
        g_free(identifier);
 
-       __connman_storage_save_global(keyfile);
-
        g_key_file_free(keyfile);
 
        return;
@@ -387,12 +396,12 @@ static connman_bool_t connman_technology_load_offlinemode()
        /* If there is a error, we enable offlinemode */
        keyfile = __connman_storage_load_global();
        if (keyfile == NULL)
-               return TRUE;
+               return FALSE;
 
        offlinemode = g_key_file_get_boolean(keyfile, "global",
                                                "OfflineMode", &error);
        if (error != NULL) {
-               offlinemode = TRUE;
+               offlinemode = FALSE;
                g_clear_error(&error);
        }
 
@@ -822,7 +831,7 @@ void __connman_technology_scan_stopped(struct connman_device *device)
                if (__connman_device_get_service_type(other_device) != type)
                        continue;
 
-               if (__connman_device_scanning(other_device))
+               if (connman_device_get_scanning(other_device) == TRUE)
                        count += 1;
        }
 
@@ -849,16 +858,20 @@ static DBusMessage *scan(DBusConnection *conn, DBusMessage *msg, void *data)
        return NULL;
 }
 
-static GDBusMethodTable technology_methods[] = {
-       { "GetProperties", "",   "a{sv}", get_properties },
-       { "SetProperty",   "sv", "",      set_property   },
-       { "Scan",          "",    "",     scan,
-                                               G_DBUS_METHOD_FLAG_ASYNC },
+static const GDBusMethodTable technology_methods[] = {
+       { GDBUS_DEPRECATED_METHOD("GetProperties",
+                       NULL, GDBUS_ARGS({ "properties", "a{sv}" }),
+                       get_properties) },
+       { GDBUS_METHOD("SetProperty",
+                       GDBUS_ARGS({ "name", "s" }, { "value", "v" }),
+                       NULL, set_property) },
+       { GDBUS_ASYNC_METHOD("Scan", NULL, NULL, scan) },
        { },
 };
 
-static GDBusSignalTable technology_signals[] = {
-       { "PropertyChanged", "sv" },
+static const GDBusSignalTable technology_signals[] = {
+       { GDBUS_SIGNAL("PropertyChanged",
+                       GDBUS_ARGS({ "name", "s" }, { "value", "v" })) },
        { },
 };
 
@@ -1088,7 +1101,7 @@ int __connman_technology_remove_device(struct connman_device *device)
                return -ENXIO;
        }
 
-       if (__connman_device_scanning(device))
+       if (connman_device_get_scanning(device) == TRUE)
                __connman_technology_scan_stopped(device);
 
        technology->device_list = g_slist_remove(technology->device_list,
@@ -1346,6 +1359,9 @@ int __connman_technology_init(void)
 
        global_offlinemode = connman_technology_load_offlinemode();
 
+       /* This will create settings file if it is missing */
+       connman_technology_save_offlinemode();
+
        return 0;
 }