Add ApSelectionMethod config option
[platform/upstream/connman.git] / src / service.c
index bbb639a..bf5c11b 100755 (executable)
@@ -82,14 +82,11 @@ struct saved_profiles {
        GTimeVal modified;
        gchar *profile_name;
 };
-#endif
-#if defined TIZEN_EXT_INS
+
 static unsigned char invalid_bssid[WIFI_BSSID_LEN_MAX] = {
        0x00, 0x00, 0x00, 0x00, 0x00, 0x00
 };
-#endif
 
-#if defined TIZEN_EXT && defined TIZEN_EXT_INS
 enum connman_ins_preferred_freq {
        CONNMAN_INS_PREFERRED_FREQ_UNKNOWN,
        CONNMAN_INS_PREFERRED_FREQ_24GHZ,
@@ -115,7 +112,7 @@ struct connman_ins_settings {
 };
 
 static struct connman_ins_settings ins_settings;
-#endif /* defined TIZEN_EXT && defined TIZEN_EXT_INS */
+#endif /* defined TIZEN_EXT */
 
 struct connman_stats {
        bool valid;
@@ -237,12 +234,10 @@ struct connman_service {
 
        enum connman_dnsconfig_method dns_config_method_ipv4;
        enum connman_dnsconfig_method dns_config_method_ipv6;
-#endif
-#if defined TIZEN_EXT
+
        char *connector;
        char *c_sign_key;
        char *net_access_key;
-#if defined TIZEN_EXT_INS
        unsigned char last_connected_bssid[WIFI_BSSID_LEN_MAX];
        bool is_internet_connection;
        int assoc_reject_count;
@@ -252,7 +247,6 @@ struct connman_service {
        int score_security_priority;
        int score_internet_connection;
        int score_strength;
-#endif
        int ins_score;
 #endif
 #if defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET
@@ -830,7 +824,7 @@ static int connman_service_set_eapol_property(struct connman_service *service,
 }
 #endif
 
-#if defined TIZEN_EXT_INS
+#if defined TIZEN_EXT
 static void save_assoc_reject(gpointer key, gpointer value, gpointer user_data)
 {
        struct assoc_reject_data *assoc_rd = value;
@@ -1063,7 +1057,7 @@ done:
        g_key_file_free(keyfile);
        return err;
 }
-#endif /* defined TIZEN_EXT_INS */
+#endif /* defined TIZEN_EXT */
 
 static int service_load(struct connman_service *service)
 {
@@ -1074,7 +1068,7 @@ static int service_load(struct connman_service *service)
        bool autoconnect;
        unsigned int ssid_len;
        int err = 0;
-#if defined TIZEN_EXT_INS
+#if defined TIZEN_EXT
        bool internet_connection;
 #endif
 #if defined TIZEN_EXT && defined TIZEN_EXT_EAP_ON_ETHERNET
@@ -1164,45 +1158,47 @@ static int service_load(struct connman_service *service)
                        g_free(hex_ssid);
                }
 
-#if defined TIZEN_EXT_INS
-               /* Last connected BSSID */
-               if (service->network) {
-                       gchar *bssid_str;
-                       unsigned char last_connected_bssid[WIFI_BSSID_LEN_MAX];
-                       char **str_list;
-                       unsigned int i;
+#if defined TIZEN_EXT
+               if (TIZEN_INS_ENABLED) {
+                       /* Last connected BSSID */
+                       if (service->network) {
+                               gchar *bssid_str;
+                               unsigned char last_connected_bssid[WIFI_BSSID_LEN_MAX];
+                               char **str_list;
+                               unsigned int i;
 
-                       bssid_str = g_key_file_get_string(keyfile,
-                               service->identifier, "LastConnectedBSSID", NULL);
+                               bssid_str = g_key_file_get_string(keyfile,
+                                               service->identifier, "LastConnectedBSSID", NULL);
 
-                       if (bssid_str) {
-                               str_list = g_strsplit(bssid_str, ":", 0);
+                               if (bssid_str) {
+                                       str_list = g_strsplit(bssid_str, ":", 0);
 
-                               if (str_list) {
-                                       for (i = 0; i < WIFI_BSSID_LEN_MAX; i++)
-                                               last_connected_bssid[i] = strtol(str_list[i], NULL, 16);
+                                       if (str_list) {
+                                               for (i = 0; i < WIFI_BSSID_LEN_MAX; i++)
+                                                       last_connected_bssid[i] = strtol(str_list[i], NULL, 16);
 
-                                       memcpy(service->last_connected_bssid,
-                                               last_connected_bssid, WIFI_BSSID_LEN_MAX);
+                                               memcpy(service->last_connected_bssid,
+                                                               last_connected_bssid, WIFI_BSSID_LEN_MAX);
 
-                                       connman_network_set_last_connected_bssid(service->network,
-                                               last_connected_bssid);
+                                               connman_network_set_last_connected_bssid(service->network,
+                                                               last_connected_bssid);
 
-                                       g_strfreev(str_list);
-                               }
+                                               g_strfreev(str_list);
+                                       }
 
-                               g_free(bssid_str);
+                                       g_free(bssid_str);
+                               }
                        }
-               }
 
-               /* Internet connection */
-               internet_connection = g_key_file_get_boolean(keyfile,
-                               service->identifier, "InternetConnection", &error);
-               if (!error)
-                       service->is_internet_connection = internet_connection;
+                       /* Internet connection */
+                       internet_connection = g_key_file_get_boolean(keyfile,
+                                       service->identifier, "InternetConnection", &error);
+                       if (!error)
+                               service->is_internet_connection = internet_connection;
 
-               g_clear_error(&error);
-#endif /* defined TIZEN_EXT_INS */
+                       g_clear_error(&error);
+               }
+#endif /* defined TIZEN_EXT */
                /* fall through */
 
        case CONNMAN_SERVICE_TYPE_GADGET:
@@ -1479,7 +1475,7 @@ static int service_save(struct connman_service *service)
                if (service->network) {
                        const unsigned char *ssid;
                        unsigned int ssid_len = 0;
-#if defined TIZEN_EXT_INS
+#if defined TIZEN_EXT
                        GHashTable *assoc_reject_table;
 #endif
 
@@ -1511,69 +1507,70 @@ static int service_save(struct connman_service *service)
                        g_key_file_set_integer(keyfile, service->identifier,
                                                "Frequency", freq);
 
-#if defined TIZEN_EXT_INS
-                       /* Last connected BSSID */
-                       if (memcmp(service->last_connected_bssid, invalid_bssid, WIFI_BSSID_LEN_MAX)) {
-                               char *identifier = service->identifier;
-                               GString *bssid_str;
-                               unsigned int i;
+#if defined TIZEN_EXT
+                       if (TIZEN_INS_ENABLED) {
+                               /* Last connected BSSID */
+                               if (memcmp(service->last_connected_bssid, invalid_bssid, WIFI_BSSID_LEN_MAX)) {
+                                       char *identifier = service->identifier;
+                                       GString *bssid_str;
+                                       unsigned int i;
 
-                               bssid_str = g_string_sized_new(18);
-                               if (!bssid_str) {
-                                       err = -ENOMEM;
-                                       goto done;
-                               }
+                                       bssid_str = g_string_sized_new(18);
+                                       if (!bssid_str) {
+                                               err = -ENOMEM;
+                                               goto done;
+                                       }
 
-                               for (i = 0; i < WIFI_BSSID_LEN_MAX; i++) {
-                                       g_string_append_printf(bssid_str,
-                                                       "%02x", service->last_connected_bssid[i]);
-                                       if (i < WIFI_BSSID_LEN_MAX - 1)
-                                               g_string_append(bssid_str, ":");
-                               }
+                                       for (i = 0; i < WIFI_BSSID_LEN_MAX; i++) {
+                                               g_string_append_printf(bssid_str,
+                                                               "%02x", service->last_connected_bssid[i]);
+                                               if (i < WIFI_BSSID_LEN_MAX - 1)
+                                                       g_string_append(bssid_str, ":");
+                                       }
 
-                               g_key_file_set_string(keyfile, identifier,
+                                       g_key_file_set_string(keyfile, identifier,
                                                        "LastConnectedBSSID", bssid_str->str);
 
-                               DBG("last connected bssid[%s]", bssid_str->str);
+                                       DBG("last connected bssid[%s]", bssid_str->str);
 
-                               g_string_free(bssid_str, TRUE);
-                       }
-
-                       /* Assoc reject */
-                       assoc_reject_table = connman_network_get_assoc_reject_table(service->network);
-                       if (assoc_reject_table && g_hash_table_size(assoc_reject_table) > 0) {
-                               GString *assoc_reject_str;
-                               char **assoc_reject_list;
-                               guint assoc_reject_len;
-
-                               assoc_reject_str = g_string_new(NULL);
-                               if (!assoc_reject_str) {
-                                       err = -ENOMEM;
-                                       goto done;
+                                       g_string_free(bssid_str, TRUE);
                                }
 
-                               g_hash_table_foreach(assoc_reject_table, save_assoc_reject, assoc_reject_str);
+                               /* Assoc reject */
+                               assoc_reject_table = connman_network_get_assoc_reject_table(service->network);
+                               if (assoc_reject_table && g_hash_table_size(assoc_reject_table) > 0) {
+                                       GString *assoc_reject_str;
+                                       char **assoc_reject_list;
+                                       guint assoc_reject_len;
 
-                               assoc_reject_list = g_strsplit_set(assoc_reject_str->str, " ", 0);
-                               assoc_reject_len = g_strv_length(assoc_reject_list);
+                                       assoc_reject_str = g_string_new(NULL);
+                                       if (!assoc_reject_str) {
+                                               err = -ENOMEM;
+                                               goto done;
+                                       }
 
-                               g_key_file_set_string_list(keyfile, service->identifier,
-                                       "AssocReject", (const gchar **)assoc_reject_list, assoc_reject_len);
+                                       g_hash_table_foreach(assoc_reject_table, save_assoc_reject, assoc_reject_str);
 
-                               DBG("assoc reject table [%d]", assoc_reject_len);
+                                       assoc_reject_list = g_strsplit_set(assoc_reject_str->str, " ", 0);
+                                       assoc_reject_len = g_strv_length(assoc_reject_list);
 
-                               g_strfreev(assoc_reject_list);
-                               g_string_free(assoc_reject_str, TRUE);
-                       } else
-                               g_key_file_remove_key(keyfile, service->identifier, "AssocReject", NULL);
+                                       g_key_file_set_string_list(keyfile, service->identifier,
+                                                       "AssocReject", (const gchar **)assoc_reject_list, assoc_reject_len);
 
-                       /* Internet connection */
-                       g_key_file_set_boolean(keyfile, service->identifier,
-                                       "InternetConnection", service->is_internet_connection);
+                                       DBG("assoc reject table [%d]", assoc_reject_len);
 
-                       DBG("internet connection [%s]", service->is_internet_connection ? "true" : "false");
+                                       g_strfreev(assoc_reject_list);
+                                       g_string_free(assoc_reject_str, TRUE);
+                               } else
+                                       g_key_file_remove_key(keyfile, service->identifier, "AssocReject", NULL);
 
-#endif /* defined TIZEN_EXT_INS */
+                               /* Internet connection */
+                               g_key_file_set_boolean(keyfile, service->identifier,
+                                               "InternetConnection", service->is_internet_connection);
+
+                               DBG("internet connection [%s]", service->is_internet_connection ? "true" : "false");
+                       }
+#endif /* defined TIZEN_EXT */
                }
                /* fall through */
 
@@ -3155,33 +3152,32 @@ static void state_changed(struct connman_service *service)
 #if defined TIZEN_EXT
 static void connect_reason_changed(struct connman_service *service)
 {
-#if defined TIZEN_EXT_INS
        struct connman_device *device;
-#endif
+
        if (!service->path)
                return;
 
        if (!allow_property_changed(service))
                return;
 
-#if defined TIZEN_EXT_INS
-       if (service->connect_reason == CONNMAN_SERVICE_CONNECT_REASON_USER) {
-               device = connman_network_get_device(service->network);
-               if (device) {
-                       bool need_save = false;
+       if (TIZEN_INS_ENABLED) {
+               if (service->connect_reason == CONNMAN_SERVICE_CONNECT_REASON_USER) {
+                       device = connman_network_get_device(service->network);
+                       if (device) {
+                               bool need_save = false;
 
-                       need_save |= connman_device_set_last_user_selection_ident(device, service->identifier);
-                       need_save |= connman_device_set_last_user_selection_time(device, time(NULL));
+                               need_save |= connman_device_set_last_user_selection_ident(device, service->identifier);
+                               need_save |= connman_device_set_last_user_selection_time(device, time(NULL));
 
-                       DBG("last user selection ident[%s] time[%ld]",
-                               connman_device_get_last_user_selection_ident(device),
-                               connman_device_get_last_user_selection_time(device));
+                               DBG("last user selection ident[%s] time[%ld]",
+                                               connman_device_get_last_user_selection_ident(device),
+                                               connman_device_get_last_user_selection_time(device));
 
-                       if (need_save)
-                               connman_device_save_last_user_selection(device);
+                               if (need_save)
+                                       connman_device_save_last_user_selection(device);
+                       }
                }
        }
-#endif
 
        connman_dbus_property_changed_basic(service->path,
                                        CONNMAN_SERVICE_INTERFACE,
@@ -3189,9 +3185,7 @@ static void connect_reason_changed(struct connman_service *service)
                                        DBUS_TYPE_INT32,
                                        &service->connect_reason);
 }
-#endif /* defined TIZEN_EXT && defined TIZEN_EXT_INS */
 
-#if defined TIZEN_EXT
 static void disconnection_requested_changed(struct connman_service *service)
 {
        dbus_bool_t disconnection_requested;
@@ -3275,7 +3269,7 @@ static void strength_changed(struct connman_service *service)
                                        DBUS_TYPE_BYTE, &service->strength);
 }
 
-#if defined TIZEN_EXT_INS
+#if defined TIZEN_EXT
 static bool update_last_connected_bssid(struct connman_service *service)
 {
        const unsigned char *last_connected_bssid;
@@ -4711,7 +4705,7 @@ static void append_properties(DBusMessageIter *dict, dbus_bool_t limited,
                connman_network_append_acddbus(dict, service->network);
 }
 
-#if defined TIZEN_EXT && defined TIZEN_EXT_INS
+#if defined TIZEN_EXT
 static void append_ins_bssid_info(DBusMessageIter *iter, void *user_data)
 {
        GSList *bssid_list = NULL;
@@ -4802,7 +4796,7 @@ static void append_ins_properties(DBusMessageIter *dict,
                                append_ins_bssid_info, service->network);
        }
 }
-#endif /* defined TIZEN_EXT && defined TIZEN_EXT_INS */
+#endif /* defined TIZEN_EXT */
 
 static void append_struct_service(DBusMessageIter *iter,
                connman_dbus_append_cb_t function,
@@ -4841,7 +4835,7 @@ static void append_struct(gpointer value, gpointer user_data)
        append_struct_service(iter, append_dict_properties, service);
 }
 
-#if defined TIZEN_EXT && defined TIZEN_EXT_INS
+#if defined TIZEN_EXT
 static void append_dict_ins_properties(DBusMessageIter *dict, void *user_data)
 {
        struct connman_service *service = user_data;
@@ -4867,7 +4861,7 @@ void __connman_ins_list_struct(DBusMessageIter *iter)
 {
        g_list_foreach(service_list, append_ins_struct, iter);
 }
-#endif /* defined TIZEN_EXT && defined TIZEN_EXT_INS */
+#endif /* defined TIZEN_EXT */
 
 void __connman_service_list_struct(DBusMessageIter *iter)
 {
@@ -5122,7 +5116,7 @@ const char *connman_service_get_proxy_url(struct connman_service *service)
        return service->pac;
 }
 
-#if defined TIZEN_EXT_INS
+#if defined TIZEN_EXT
 void connman_service_set_internet_connection(struct connman_service *service,
                                                        bool internet_connection)
 {
@@ -5144,9 +5138,7 @@ bool connman_service_get_internet_connection(struct connman_service *service)
 
        return service->is_internet_connection;
 }
-#endif
 
-#if defined TIZEN_EXT
 DBusMessage *connman_service_create_dbus_service_reply(DBusMessage *msg,
                                                        struct connman_service *service)
 {
@@ -7951,12 +7943,10 @@ static void service_initialize(struct connman_service *service)
 
        service->wps = false;
        service->wps_advertizing = false;
-#if defined TIZEN_EXT_INS
+#if defined TIZEN_EXT
        memset(service->last_connected_bssid, 0, WIFI_BSSID_LEN_MAX);
        service->is_internet_connection = false;
        service->assoc_reject_count = 0;
-#endif
-#if defined TIZEN_EXT
        service->disconnection_requested = false;
        service->storage_reload = false;
        /*
@@ -8056,7 +8046,7 @@ void connman_service_unref_debug(struct connman_service *service,
        g_hash_table_remove(service_hash, service->identifier);
 }
 
-#if defined TIZEN_EXT && defined TIZEN_EXT_INS
+#if defined TIZEN_EXT
 static int calculate_score_last_user_selection(struct connman_service *service)
 {
        int score = 0;
@@ -8234,7 +8224,7 @@ static int calculate_score(struct connman_service *service)
        service->ins_score = score;
        return score;
 }
-#endif /* defined TIZEN_EXT && defined TIZEN_EXT_INS */
+#endif /* defined TIZEN_EXT */
 
 static gint service_compare(gconstpointer a, gconstpointer b);
 
@@ -8295,13 +8285,13 @@ static gint service_compare(gconstpointer a, gconstpointer b)
        struct connman_service *service_b = (void *) b;
        enum connman_service_state state_a, state_b;
        bool a_connected, b_connected;
-#if defined TIZEN_EXT && defined TIZEN_EXT_INS
+#if defined TIZEN_EXT
        int score_a;
        int score_b;
        gint strength = 0;
-#else /* defined TIZEN_EXT && defined TIZEN_EXT_INS */
+#else /* defined TIZEN_EXT */
        gint strength;
-#endif /* defined TIZEN_EXT && defined TIZEN_EXT_INS */
+#endif /* defined TIZEN_EXT */
 
        state_a = service_a->state;
        state_b = service_b->state;
@@ -8415,21 +8405,24 @@ static gint service_compare(gconstpointer a, gconstpointer b)
                        return 1;
        }
 
-#if defined TIZEN_EXT && defined TIZEN_EXT_INS
-       score_a = calculate_score(service_a);
-       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;
+#if defined TIZEN_EXT
+       if (TIZEN_INS_ENABLED) {
+               score_a = calculate_score(service_a);
+               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 */
+#else /* defined TIZEN_EXT */
        strength = (gint) service_b->strength - (gint) service_a->strength;
        if (strength)
                return strength;
-#endif /* defined TIZEN_EXT && defined TIZEN_EXT_INS */
+#endif /* defined TIZEN_EXT */
 
        return g_strcmp0(service_a->name, service_b->name);
 }
@@ -9431,8 +9424,8 @@ static int service_indicate_state(struct connman_service *service)
                        single_connected_tech(service);
 #endif
 
-#if defined TIZEN_EXT_INS
-               if (service->type == CONNMAN_SERVICE_TYPE_WIFI)
+#if defined TIZEN_EXT
+               if (TIZEN_INS_ENABLED && service->type == CONNMAN_SERVICE_TYPE_WIFI)
                        connman_service_set_internet_connection(service, true);
 #endif
                break;
@@ -10587,11 +10580,13 @@ static int service_register(struct connman_service *service)
 #if defined TIZEN_EXT
        int ret;
        service_load(service);
-#if defined TIZEN_EXT_INS
-       ret = service_ext_load(service);
-       if (ret == -ERANGE)
-               service_ext_save(service);
-#endif /* defined TIZEN_EXT_INS */
+
+       if (TIZEN_INS_ENABLED) {
+               ret = service_ext_load(service);
+               if (ret == -ERANGE)
+                       service_ext_save(service);
+       }
+
        ret = __connman_config_provision_service(service);
        if (ret < 0 && !simplified_log)
                DBG("Failed to provision service");
@@ -11254,9 +11249,6 @@ void __connman_service_update_from_network(struct connman_network *network)
        bool roaming;
        const char *name;
        bool stats_enable;
-#if defined TIZEN_EXT_INS
-       bool need_save = false;
-#endif
 
        service = connman_service_lookup_from_network(network);
        if (!service)
@@ -11313,13 +11305,18 @@ roaming:
        roaming_changed(service);
 
 sorting:
-#if defined TIZEN_EXT_INS
-       need_save |= update_last_connected_bssid(service);
-       need_save |= update_assoc_reject(service);
-       if (need_save) {
-               g_get_current_time((GTimeVal *)&service->modified);
-               service_ext_save(service);
-               need_sort = true;
+#if defined TIZEN_EXT
+       if (TIZEN_INS_ENABLED) {
+               bool need_save = false;
+
+               need_save |= update_last_connected_bssid(service);
+               need_save |= update_assoc_reject(service);
+
+               if (need_save) {
+                       g_get_current_time((GTimeVal *)&service->modified);
+                       service_ext_save(service);
+                       need_sort = true;
+               }
        }
 #endif
 
@@ -11505,7 +11502,7 @@ static struct connman_agent_driver agent_driver = {
        .context_unref  = agent_context_unref,
 };
 
-#if defined TIZEN_EXT && defined TIZEN_EXT_INS
+#if defined TIZEN_EXT
 static void ins_setting_init(void)
 {
        int i;
@@ -11596,7 +11593,7 @@ static void ins_setting_init(void)
        DBG("signal_level3_5ghz [%d]", ins_settings.signal_level3_5ghz);
        DBG("signal_level3_24ghz [%d]", ins_settings.signal_level3_24ghz);
 }
-#endif /* defined TIZEN_EXT && defined TIZEN_EXT_INS */
+#endif /* defined TIZEN_EXT */
 
 int __connman_service_init(void)
 {
@@ -11627,9 +11624,10 @@ int __connman_service_init(void)
 
        remove_unprovisioned_services();
 
-#if defined TIZEN_EXT && defined TIZEN_EXT_INS
-       ins_setting_init();
-#endif /* defined TIZEN_EXT && defined TIZEN_EXT_INS */
+#if defined TIZEN_EXT
+       if (TIZEN_INS_ENABLED)
+               ins_setting_init();
+#endif /* defined TIZEN_EXT */
 
        return 0;
 }