X-Git-Url: http://git.maemo.org/git/?a=blobdiff_plain;f=src%2Fdevice.c;h=cd9105d0775953445c3455e0115f57786589bcf9;hb=19a74cb20534881988ed1009a761c999997f2ee4;hp=0af3ccd97ac459da0c12b6452e8054a91b33ed83;hpb=6c47db77851dcd782625ea9a43e9070da6d1ba13;p=connman diff --git a/src/device.c b/src/device.c index 0af3ccd..cd9105d 100644 --- a/src/device.c +++ b/src/device.c @@ -1361,6 +1361,7 @@ static void connect_known_network(struct connman_device *device) struct connman_network *network = NULL; GHashTableIter iter; gpointer key, value; + const char *name; unsigned int count = 0; DBG("device %p", device); @@ -1368,9 +1369,7 @@ static void connect_known_network(struct connman_device *device) g_hash_table_iter_init(&iter, device->networks); while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) { - connman_uint8_t old_priority, new_priority; connman_uint8_t old_strength, new_strength; - const char *name; count++; @@ -1386,25 +1385,11 @@ static void connect_known_network(struct connman_device *device) } } - if (connman_network_get_remember(value) == FALSE) - continue; - if (network == NULL) { network = value; continue; } - old_priority = connman_network_get_uint8(network, - CONNMAN_PROPERTY_ID_PRIORITY); - new_priority = connman_network_get_uint8(value, - CONNMAN_PROPERTY_ID_PRIORITY); - - if (new_priority != old_priority) { - if (new_priority > old_priority) - network = value; - continue; - } - old_strength = connman_network_get_uint8(network, CONNMAN_PROPERTY_ID_STRENGTH); new_strength = connman_network_get_uint8(value, @@ -1417,9 +1402,13 @@ static void connect_known_network(struct connman_device *device) if (network != NULL) { int err; - err = connman_network_connect(network); - if (err == 0 || err == -EINPROGRESS) - return; + name = connman_network_get_string(value, + CONNMAN_PROPERTY_ID_NAME); + if (name != NULL) { + err = __connman_network_connect(network); + if (err == 0 || err == -EINPROGRESS) + return; + } } if (count > 0) @@ -1448,9 +1437,6 @@ static gboolean remove_unavailable_network(gpointer key, gpointer value, if (connman_network_get_connected(network) == TRUE) return FALSE; - if (connman_network_get_remember(network) == TRUE) - return FALSE; - if (connman_network_get_available(network) == TRUE) return FALSE; @@ -1728,13 +1714,25 @@ void __connman_device_set_network(struct connman_device *device, { const char *name; + if (device->network == network) + return; + + if (device->network != NULL) + connman_network_unref(device->network); + if (network != NULL) { name = connman_network_get_string(network, CONNMAN_PROPERTY_ID_NAME); + g_free(device->last_network); device->last_network = g_strdup(name); - } - device->network = network; + device->network = connman_network_ref(network); + } else { + g_free(device->last_network); + device->last_network = NULL; + + device->network = NULL; + } } /** @@ -1865,7 +1863,7 @@ static struct connman_driver device_driver = { static int device_load(struct connman_device *device) { GKeyFile *keyfile; - gchar *pathname, *data = NULL; + gchar *pathname, *identifier, *data = NULL; gsize length; char *str; int val; @@ -1873,7 +1871,7 @@ static int device_load(struct connman_device *device) DBG("device %p", device); pathname = g_strdup_printf("%s/%s.conf", STORAGEDIR, - device->element.name); + __connman_profile_active_ident()); if (pathname == NULL) return -ENOMEM; @@ -1894,53 +1892,48 @@ static int device_load(struct connman_device *device) g_free(data); - str = g_key_file_get_string(keyfile, "Configuration", "Policy", NULL); + identifier = g_strdup_printf("device_%s", device->element.name); + if (identifier == NULL) + goto done; + + str = g_key_file_get_string(keyfile, identifier, "Policy", NULL); if (str != NULL) { device->policy = string2policy(str); g_free(str); } - val = g_key_file_get_integer(keyfile, "Configuration", - "Priority", NULL); - if (val > 0) - device->priority = val; - switch (device->mode) { case CONNMAN_DEVICE_MODE_UNKNOWN: case CONNMAN_DEVICE_MODE_TRANSPORT_IP: break; case CONNMAN_DEVICE_MODE_NETWORK_SINGLE: case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE: - val = g_key_file_get_integer(keyfile, "Configuration", + val = g_key_file_get_integer(keyfile, identifier, "ScanInterval", NULL); if (val > 0) device->scan_interval = val; break; } -#if 0 - str = g_key_file_get_string(keyfile, "Configuration", - "LastNetwork", NULL); - if (str != NULL) - device->last_network = str; -#endif - +done: g_key_file_free(keyfile); + g_free(identifier); + return 0; } static int device_save(struct connman_device *device) { GKeyFile *keyfile; - gchar *pathname, *data = NULL; + gchar *pathname, *identifier = NULL, *data = NULL; gsize length; const char *str; DBG("device %p", device); pathname = g_strdup_printf("%s/%s.conf", STORAGEDIR, - device->element.name); + __connman_profile_active_ident()); if (pathname == NULL) return -ENOMEM; @@ -1958,13 +1951,13 @@ static int device_save(struct connman_device *device) g_free(data); update: + identifier = g_strdup_printf("device_%s", device->element.name); + if (identifier == NULL) + goto done; + str = policy2string(device->policy); if (str != NULL) - g_key_file_set_string(keyfile, "Configuration", "Policy", str); - - if (device->priority > 0) - g_key_file_set_integer(keyfile, "Configuration", - "Priority", device->priority); + g_key_file_set_string(keyfile, identifier, "Policy", str); switch (device->mode) { case CONNMAN_DEVICE_MODE_UNKNOWN: @@ -1973,15 +1966,11 @@ update: case CONNMAN_DEVICE_MODE_NETWORK_SINGLE: case CONNMAN_DEVICE_MODE_NETWORK_MULTIPLE: if (device->scan_interval > 0) - g_key_file_set_integer(keyfile, "Configuration", + g_key_file_set_integer(keyfile, identifier, "ScanInterval", device->scan_interval); break; } - if (device->last_network != NULL) - g_key_file_set_string(keyfile, "Configuration", - "LastNetwork", device->last_network); - data = g_key_file_to_data(keyfile, &length, NULL); if (g_file_set_contents(pathname, data, length, NULL) == FALSE) @@ -1992,11 +1981,9 @@ done: g_key_file_free(keyfile); + g_free(identifier); g_free(pathname); - if (device->network != NULL) - __connman_storage_save_network(device->network); - return 0; }