DA: Fix build warnings
[platform/upstream/connman.git] / src / service.c
index 411b617..2437901 100755 (executable)
 #include <ctype.h>
 #include <stdint.h>
 
+#if defined TIZEN_EXT
+#pragma GCC diagnostic ignored "-Wdeprecated-declarations"
+#endif
+
 #include <connman/storage.h>
 #include <connman/setting.h>
 #include <connman/agent.h>
@@ -475,6 +479,10 @@ static const char *security2string(enum connman_service_security security)
 #endif
        case CONNMAN_SERVICE_SECURITY_8021X:
                return "ieee8021x";
+#if defined TIZEN_EXT
+       default:
+               break;
+#endif
        }
 
        return NULL;
@@ -828,6 +836,9 @@ static void save_assoc_reject(gpointer key, gpointer value, gpointer user_data)
        GSList *list;
        char *val_str;
 
+       if (!assoc_rd)
+               return;
+
        if (g_slist_length(assoc_rd->reject_time_list) < 1)
                return;
 
@@ -3196,7 +3207,7 @@ static void disconnection_requested_changed(struct connman_service *service)
 }
 
 void connman_service_set_disconnection_requested(struct connman_service *service,
-                                                bool disconnection_requested)
+                                               bool disconnection_requested)
 {
        if (service == NULL)
                return;
@@ -3204,6 +3215,47 @@ void connman_service_set_disconnection_requested(struct connman_service *service
        service->disconnection_requested = disconnection_requested;
        disconnection_requested_changed(service);
 }
+
+static void connman_service_emit_state(struct connman_service *service,
+                                               enum connman_service_state state)
+{
+       const char *str;
+       enum connman_service_state cur_state = service->state;
+
+       if (service->state != state)
+               service->state = state;
+
+       str = state2string(service->state);
+       if (!str) {
+               service->state = cur_state;
+               return;
+       }
+
+       DBG(" %s, %s", str, service->path);
+
+       connman_dbus_property_changed_basic(service->path,
+                               CONNMAN_SERVICE_INTERFACE, "State",
+                                               DBUS_TYPE_STRING, &str);
+
+       emit_state_changed_with_properties(service);
+       service->state = cur_state;
+}
+
+void connman_service_notify_reconnection(struct connman_service *service)
+{
+       if (!service)
+               return;
+
+       if (service->state != CONNMAN_SERVICE_STATE_READY &&
+                       service->state != CONNMAN_SERVICE_STATE_ONLINE)
+               return;
+
+       connman_service_emit_state(service, CONNMAN_SERVICE_STATE_CONFIGURATION);
+       connman_service_emit_state(service, CONNMAN_SERVICE_STATE_READY);
+
+       if (service->state == CONNMAN_SERVICE_STATE_ONLINE)
+               connman_service_emit_state(service, CONNMAN_SERVICE_STATE_ONLINE);
+}
 #endif
 
 static void strength_changed(struct connman_service *service)
@@ -3347,12 +3399,17 @@ static void append_security(DBusMessageIter *iter, void *user_data)
                        break;
 #if defined TIZEN_EXT
                case CONNMAN_SERVICE_SECURITY_OWE:
+               case CONNMAN_SERVICE_SECURITY_DPP:
 #endif
                case CONNMAN_SERVICE_SECURITY_UNKNOWN:
                case CONNMAN_SERVICE_SECURITY_NONE:
                case CONNMAN_SERVICE_SECURITY_WEP:
                case CONNMAN_SERVICE_SECURITY_8021X:
                        break;
+#if defined TIZEN_EXT
+               default:
+                       break;
+#endif
                }
 
                if (service->wps_advertizing) {
@@ -5071,7 +5128,7 @@ void connman_service_set_internet_connection(struct connman_service *service,
        if (service->is_internet_connection != internet_connection) {
                service->is_internet_connection = internet_connection;
 
-               g_get_current_time(&service->modified);
+               g_get_current_time((GTimeVal *)&service->modified);
                service_save(service);
        }
 }
@@ -5465,6 +5522,7 @@ int __connman_service_check_passphrase(enum connman_service_security security,
 #if defined TIZEN_EXT
        case CONNMAN_SERVICE_SECURITY_OWE:
        case CONNMAN_SERVICE_SECURITY_DPP:
+       default:
 #endif
                break;
        }
@@ -6307,8 +6365,10 @@ static void set_error(struct connman_service *service,
 {
        const char *str;
 
+#if !defined TIZEN_EXT
        if (service->error == error)
                return;
+#endif
 
        service->error = error;
 
@@ -8059,14 +8119,16 @@ static int calculate_score_last_connected(struct connman_service *service)
        frequency = connman_network_get_frequency(service->network);
 
        if (ins_settings.last_connected) {
-               if (g_strcmp0(last_connected_ident, service->identifier) == 0 &&
-                               (((frequency >= FREQ_RANGE_24GHZ_CHANNEL_1 &&
-                               frequency <= FREQ_RANGE_24GHZ_CHANNEL_14) &&
-                               service->strength >= ins_settings.signal_level3_24ghz) ||
-                               ((frequency >= FREQ_RANGE_5GHZ_CHANNEL_32 &&
-                               frequency <= FREQ_RANGE_5GHZ_CHANNEL_165) &&
-                               service->strength >= ins_settings.signal_level3_5ghz))) {
-                       score += ins_settings.last_connected_score;
+               if (ins_settings.last_connected) {
+                       if (g_strcmp0(last_connected_ident, service->identifier) == 0 &&
+                                       (((frequency >= FREQ_RANGE_24GHZ_CHANNEL_1 &&
+                                       frequency <= FREQ_RANGE_24GHZ_CHANNEL_14) &&
+                                       service->strength >= ins_settings.signal_level3_24ghz) ||
+                                       ((frequency >= FREQ_RANGE_5GHZ_CHANNEL_32 &&
+                                       frequency <= FREQ_RANGE_5GHZ_CHANNEL_165) &&
+                                       service->strength >= ins_settings.signal_level3_5ghz))) {
+                               score += ins_settings.last_connected_score;
+                       }
                }
        }
 
@@ -8216,6 +8278,7 @@ static gint service_compare(gconstpointer a, gconstpointer b)
 #if defined TIZEN_EXT && defined TIZEN_EXT_INS
        int score_a;
        int score_b;
+       gint strength = 0;
 #else /* defined TIZEN_EXT && defined TIZEN_EXT_INS */
        gint strength;
 #endif /* defined TIZEN_EXT && defined TIZEN_EXT_INS */
@@ -8342,6 +8405,11 @@ static gint service_compare(gconstpointer a, gconstpointer b)
        score_b = calculate_score(service_b);
        if (score_b != score_a)
                return score_b - score_a;
+       else if (score_b == score_a) {
+               strength = (gint) service_b->strength - (gint) service_a->strength;
+               if (strength)
+                       return strength;
+       }
 #else /* defined TIZEN_EXT && defined TIZEN_EXT_INS */
        strength = (gint) service_b->strength - (gint) service_a->strength;
        if (strength)
@@ -8351,30 +8419,10 @@ static gint service_compare(gconstpointer a, gconstpointer b)
        return g_strcmp0(service_a->name, service_b->name);
 }
 
-#if defined TIZEN_EXT && defined TIZEN_EXT_INS
-static void print_service_sort(gpointer data, gpointer user_data)
-{
-       struct connman_service *service = data;
-
-       if (service->type != CONNMAN_SERVICE_TYPE_WIFI)
-               return;
-
-       DBG("name[%-20s] total[%2d] last_usr[%2d] last_conn[%2d] "
-               "freq[%2d] sec[%2d] internet[%2d] strength[%2d]",
-               service->name, service->ins_score, service->score_last_user_selection,
-               service->score_last_connected, service->score_frequency,
-               service->score_security_priority, service->score_internet_connection,
-               service->score_strength);
-}
-#endif /* defined TIZEN_EXT && defined TIZEN_EXT_INS */
-
 static void service_list_sort(void)
 {
        if (service_list && service_list->next) {
                service_list = g_list_sort(service_list, service_compare);
-#if defined TIZEN_EXT && defined TIZEN_EXT_INS
-               g_list_foreach(service_list, print_service_sort, NULL);
-#endif /* defined TIZEN_EXT && defined TIZEN_EXT_INS */
                service_schedule_changed();
        }
 }
@@ -9147,6 +9195,50 @@ static void set_priority_connected_service(void)
 #endif
        }
 }
+
+static void emit_wifi_roaming_failure(struct connman_service *service,
+                                       enum connman_service_state new_state)
+{
+       if (connman_setting_get_bool("WifiRoaming") &&
+                       connman_network_get_bool(service->network, "WiFi.Roaming")) {
+               const char *cur_bssid;
+               const char *dst_bssid;
+               const char *ifname;
+               struct connman_device *device;
+
+               device = connman_network_get_device(service->network);
+               if (device) {
+                       ifname = connman_device_get_string(device, "Interface");
+                       cur_bssid = connman_network_get_string(service->network,
+                                               "WiFi.RoamingCurBSSID");
+                       dst_bssid = connman_network_get_string(service->network,
+                                               "WiFi.RoamingDstBSSID");
+               }
+
+               if (device && ifname && cur_bssid && dst_bssid) {
+                       switch(new_state) {
+                       case CONNMAN_SERVICE_STATE_UNKNOWN:
+                       case CONNMAN_SERVICE_STATE_ASSOCIATION:
+                       case CONNMAN_SERVICE_STATE_CONFIGURATION:
+                       case CONNMAN_SERVICE_STATE_READY:
+                       case CONNMAN_SERVICE_STATE_ONLINE:
+                               break;
+                       case CONNMAN_SERVICE_STATE_DISCONNECT:
+                       case CONNMAN_SERVICE_STATE_FAILURE:
+                       case CONNMAN_SERVICE_STATE_IDLE:
+                               __connman_technology_notify_roaming_state(ifname,
+                                               "failure", cur_bssid, dst_bssid);
+                               connman_network_set_bool(service->network,
+                                               "WiFi.Roaming", false);
+                               connman_network_set_string(service->network,
+                                               "WiFi.RoamingCurBSSID", NULL);
+                               connman_network_set_string(service->network,
+                                               "WiFi.RoamingDstBSSID", NULL);
+                               break;
+                       }
+               }
+       }
+}
 #endif
 
 static const char *get_dbus_sender(struct connman_service *service)
@@ -9353,6 +9445,8 @@ static int service_indicate_state(struct connman_service *service)
                proxy_changed(service);
 #if defined TIZEN_EXT
                }
+
+               emit_wifi_roaming_failure(service, new_state);
 #endif
 
                /*
@@ -9377,7 +9471,9 @@ static int service_indicate_state(struct connman_service *service)
                                                report_error_cb,
                                                get_dbus_sender(service),
                                                NULL);
+#if !defined TIZEN_EXT
                        goto notifier;
+#endif
                }
                service_complete(service);
                break;
@@ -9391,60 +9487,14 @@ static int service_indicate_state(struct connman_service *service)
 #else
        __connman_service_connect_default(service);
 #endif
-       /* Update Wi-Fi Roaming result */
-       if (connman_setting_get_bool("WifiRoaming") &&
-                       connman_network_get_bool(service->network, "WiFi.Roaming")) {
-               const char *cur_bssid;
-               const char *dst_bssid;
-               const char *ifname;
-               struct connman_device *device;
-
-               device = connman_network_get_device(service->network);
-               if (device) {
-                       ifname = connman_device_get_string(device, "Interface");
-                       cur_bssid = connman_network_get_string(service->network,
-                                               "WiFi.RoamingCurBSSID");
-                       dst_bssid = connman_network_get_string(service->network,
-                                               "WiFi.RoamingDstBSSID");
-               }
-
-               if (device && ifname && cur_bssid && dst_bssid) {
-                       switch(new_state) {
-                       case CONNMAN_SERVICE_STATE_UNKNOWN:
-                       case CONNMAN_SERVICE_STATE_ASSOCIATION:
-                       case CONNMAN_SERVICE_STATE_CONFIGURATION:
-                               break;
-                       case CONNMAN_SERVICE_STATE_READY:
-                       case CONNMAN_SERVICE_STATE_ONLINE:
-                               __connman_technology_notify_roaming_state(ifname,
-                                               "success", cur_bssid, dst_bssid);
-                               connman_network_set_bool(service->network,
-                                               "WiFi.Roaming", false);
-                               connman_network_set_string(service->network,
-                                               "WiFi.RoamingCurBSSID", NULL);
-                               connman_network_set_string(service->network,
-                                               "WiFi.RoamingDstBSSID", NULL);
-                               break;
-                       case CONNMAN_SERVICE_STATE_DISCONNECT:
-                       case CONNMAN_SERVICE_STATE_FAILURE:
-                       case CONNMAN_SERVICE_STATE_IDLE:
-                               __connman_technology_notify_roaming_state(ifname,
-                                               "failure", cur_bssid, dst_bssid);
-                               connman_network_set_bool(service->network,
-                                               "WiFi.Roaming", false);
-                               connman_network_set_string(service->network,
-                                               "WiFi.RoamingCurBSSID", NULL);
-                               connman_network_set_string(service->network,
-                                               "WiFi.RoamingDstBSSID", NULL);
-                               break;
-                       }
-               }
-       }
+       emit_wifi_roaming_failure(service, new_state);
 #endif
 
        __connman_connection_update_gateway();
 
+#if !defined TIZEN_EXT
 notifier:
+#endif
        if ((old_state == CONNMAN_SERVICE_STATE_ONLINE &&
                        new_state != CONNMAN_SERVICE_STATE_READY) ||
                (old_state == CONNMAN_SERVICE_STATE_READY &&
@@ -9471,6 +9521,20 @@ int __connman_service_indicate_error(struct connman_service *service,
        if (service->state == CONNMAN_SERVICE_STATE_FAILURE)
                return -EALREADY;
 
+#if defined TIZEN_EXT
+       /*
+        * change connman_service_error type
+        * from CONNMAN_SERVICE_ERROR_AUTH_FAILED to CONNMAN_SERVICE_ERROR_INVALID_KEY
+        * in case of SAE security type.
+        */
+       if (error == CONNMAN_SERVICE_ERROR_AUTH_FAILED &&
+               service->security == CONNMAN_SERVICE_SECURITY_SAE) {
+               DBG("SAE security auth failed, set error to invalid-key and ignore the service");
+               error = CONNMAN_SERVICE_ERROR_INVALID_KEY;
+               __connman_service_set_ignore(service, true);
+       }
+#endif
+
        set_error(service, error);
 
 /* default internet service: fix not cleared if pdp activation*/
@@ -10120,6 +10184,10 @@ static int service_connect(struct connman_service *service)
                                return -ENOKEY;
 
                        break;
+#if defined TIZEN_EXT
+               default:
+                       break;
+#endif
                }
                break;
        }
@@ -10146,6 +10214,10 @@ static int service_connect(struct connman_service *service)
                case CONNMAN_SERVICE_SECURITY_8021X:
                        prepare_8021x(service);
                        break;
+#if defined TIZEN_EXT
+               default:
+                       break;
+#endif
                }
 
                if (__connman_stats_service_register(service) == 0) {
@@ -11204,7 +11276,7 @@ sorting:
        need_save |= update_last_connected_bssid(service);
        need_save |= update_assoc_reject(service);
        if (need_save) {
-               g_get_current_time(&service->modified);
+               g_get_current_time((GTimeVal *)&service->modified);
                service_ext_save(service);
                need_sort = true;
        }