From: Daniel Wagner <[email protected]>
I don't think this is a good solution because the magic to choose the
right network for the service shouldn't be part of device. Maybe
passing the networks to service to select the right one would be
better?
---
src/device.c | 28 ++++++++++++++++++++++++++++
1 files changed, 28 insertions(+), 0 deletions(-)
diff --git a/src/device.c b/src/device.c
index a35ef65..d709f64 100644
--- a/src/device.c
+++ b/src/device.c
@@ -1108,6 +1108,8 @@ int connman_device_remove_network(struct connman_device
*device,
const char *identifier)
{
struct connman_network *network;
+ GHashTableIter iter;
+ gpointer key, value;
DBG("device %p identifier %s", device, identifier);
@@ -1119,6 +1121,32 @@ int connman_device_remove_network(struct connman_device
*device,
g_hash_table_remove(device->networks, identifier);
+ network = NULL;
+
+ g_hash_table_iter_init(&iter, device->networks);
+
+ while (g_hash_table_iter_next(&iter, &key, &value) == TRUE) {
+ struct connman_network *iter_network = value;
+ uint8_t strength, iter_strength;
+
+ if (network == NULL) {
+ network = iter_network;
+ continue;
+ }
+
+ strength = connman_network_get_strength(network);
+ iter_strength = connman_network_get_strength(iter_network);
+
+ if (iter_strength > strength)
+ network = iter_network;
+ }
+
+ if (network == NULL)
+ return 0;
+
+ __connman_device_set_network(device, network);
+ __connman_service_update_from_network(network);
+
return 0;
}
--
1.7.5.4
_______________________________________________
connman mailing list
[email protected]
http://lists.connman.net/listinfo/connman