Fix missing update of signal strength from scan results
authorMarcel Holtmann <marcel@holtmann.org>
Sat, 25 Jul 2009 14:49:24 +0000 (16:49 +0200)
committerMarcel Holtmann <marcel@holtmann.org>
Sat, 25 Jul 2009 14:49:24 +0000 (16:49 +0200)
src/connman.h
src/network.c
src/profile.c
src/service.c

index da8e838..2bbbf21 100644 (file)
@@ -267,6 +267,7 @@ const char *__connman_network_get_ident(struct connman_network *network);
 connman_bool_t __connman_network_get_weakness(struct connman_network *network);
 
 int __connman_profile_add_network(struct connman_network *network);
+int __connman_profile_update_network(struct connman_network *network);
 int __connman_profile_remove_network(struct connman_network *network);
 
 #include <connman/service.h>
@@ -285,6 +286,7 @@ void __connman_service_remove_from_device(struct connman_device *device);
 
 struct connman_service *__connman_service_lookup_from_network(struct connman_network *network);
 struct connman_service *__connman_service_create_from_network(struct connman_network *network);
+void __connman_service_update_from_network(struct connman_network *network);
 void __connman_service_remove_from_network(struct connman_network *network);
 
 unsigned int __connman_service_get_order(struct connman_service *service);
index 4567d9a..d29ebde 100644 (file)
@@ -546,9 +546,6 @@ void connman_network_set_group(struct connman_network *network,
        if (network->secondary == TRUE)
                return;
 
-       if (g_strcmp0(network->group, group) == 0)
-               return;
-
        switch (network->type) {
        case CONNMAN_NETWORK_TYPE_UNKNOWN:
        case CONNMAN_NETWORK_TYPE_VENDOR:
@@ -562,6 +559,12 @@ void connman_network_set_group(struct connman_network *network,
                break;
        }
 
+       if (g_strcmp0(network->group, group) == 0) {
+               if (group != NULL)
+                       __connman_profile_update_network(network);
+               return;
+       }
+
        if (network->group != NULL) {
                __connman_profile_remove_network(network);
 
index 881062a..63c2f44 100644 (file)
@@ -153,6 +153,15 @@ int __connman_profile_add_network(struct connman_network *network)
        return 0;
 }
 
+int __connman_profile_update_network(struct connman_network *network)
+{
+       DBG("network %p", network);
+
+       __connman_service_update_from_network(network);
+
+       return 0;
+}
+
 int __connman_profile_remove_network(struct connman_network *network)
 {
        DBG("network %p", network);
index b871b66..315a512 100644 (file)
@@ -1721,6 +1721,27 @@ struct connman_service *__connman_service_create_from_network(struct connman_net
        return service;
 }
 
+void __connman_service_update_from_network(struct connman_network *network)
+{
+       struct connman_service *service;
+       connman_uint8_t strength;
+
+       service = __connman_service_lookup_from_network(network);
+       if (service == NULL)
+               return;
+
+       if (service->network == NULL)
+               return;
+
+       strength = connman_network_get_uint8(service->network, "Strength");
+       if (strength == service->strength)
+               return;
+
+       service->strength = strength;
+
+       strength_changed(service);
+}
+
 void __connman_service_remove_from_network(struct connman_network *network)
 {
        struct connman_service *service;