Add BSSID , signal strength and frequency list of the APs
[platform/upstream/connman.git] / src / service.c
index d0543ae..b042461 100755 (executable)
@@ -167,6 +167,10 @@ struct connman_service {
        char *keymgmt_type;
        int disconnect_reason;
        int assoc_status_code;
+       /*
+        * Only for EAP-FAST
+        */
+       char *phase1;
 #endif
 #ifdef TIZEN_EXT
        enum connman_dnsconfig_method dns_config_method_ipv4;
@@ -3226,6 +3230,9 @@ static void append_wifi_ext_info(DBusMessageIter *dict,
        const char *enc_mode;
        const char *str;
        gboolean passpoint;
+       char country_code_buff[WIFI_COUNTRY_CODE_LEN + 1] = {0,};
+       char *country_code_str = country_code_buff;
+       unsigned char *country_code;
 
        ssid = connman_network_get_blob(network, "WiFi.SSID", &ssid_len);
        bssid = connman_network_get_bssid(network);
@@ -3234,11 +3241,16 @@ static void append_wifi_ext_info(DBusMessageIter *dict,
        enc_mode = connman_network_get_enc_mode(network);
        passpoint = connman_network_get_bool(network, "WiFi.HS20AP");
        keymgmt = connman_network_get_keymgmt(network);
+       country_code = connman_network_get_countrycode(network);
 
        snprintf(bssid_str, WIFI_BSSID_STR_LEN, "%02x:%02x:%02x:%02x:%02x:%02x",
                                bssid[0], bssid[1], bssid[2],
                                bssid[3], bssid[4], bssid[5]);
 
+       snprintf(country_code_str, (WIFI_COUNTRY_CODE_LEN + 1), "%c%c",
+                country_code[0], country_code[1]);
+
+
        connman_dbus_dict_append_fixed_array(dict, "SSID",
                                        DBUS_TYPE_BYTE, &ssid, ssid_len);
        connman_dbus_dict_append_basic(dict, "BSSID",
@@ -3253,6 +3265,8 @@ static void append_wifi_ext_info(DBusMessageIter *dict,
                                        DBUS_TYPE_BOOLEAN, &passpoint);
        connman_dbus_dict_append_basic(dict, "Keymgmt",
                                        DBUS_TYPE_UINT32, &keymgmt);
+       connman_dbus_dict_append_basic(dict, "Country", DBUS_TYPE_STRING,
+                                      &country_code_str);
 
        str = connman_network_get_string(network, "WiFi.Security");
        if (str != NULL && g_str_equal(str, "ieee8021x") == TRUE) {
@@ -3289,6 +3303,33 @@ static void append_wifi_ext_info(DBusMessageIter *dict,
                                        DBUS_TYPE_STRING, &str);
        }
 }
+
+static void append_bssid_info(DBusMessageIter *iter, void *user_data)
+{
+        GSList *bssid_list = NULL;
+       struct connman_network *network = user_data;
+        struct connman_bssids *bssids;
+        char bssid_buf[18] = {0,};
+        char *bssid_str = bssid_buf;
+
+        bssid_list = (GSList *)connman_network_get_bssid_list(network);
+        if(bssid_list) {
+                GSList *list;
+                for (list = bssid_list; list; list = list->next) {
+                        bssids = (struct connman_bssids *)list->data;
+                        memcpy(bssid_str, bssids->bssid, 18);
+
+                       connman_dbus_dict_append_basic(iter, "BSSID",
+                                        DBUS_TYPE_STRING, &bssid_str);
+
+                        connman_dbus_dict_append_basic(iter, "Strength",
+                                        DBUS_TYPE_UINT16, &bssids->strength);
+
+                        connman_dbus_dict_append_basic(iter, "Frequency",
+                                        DBUS_TYPE_UINT16, &bssids->frequency);
+                }
+        }
+}
 #endif
 
 static void append_properties(DBusMessageIter *dict, dbus_bool_t limited,
@@ -3305,14 +3346,25 @@ static void append_properties(DBusMessageIter *dict, dbus_bool_t limited,
                connman_dbus_dict_append_basic(dict, "Frequency",
                                DBUS_TYPE_UINT16, &frequency);
        }
-       const void *wifi_vsie;
+
+       unsigned char *wifi_vsie;
        unsigned int wifi_vsie_len;
-       wifi_vsie = connman_network_get_blob(service->network, "WiFi.Vsie", &wifi_vsie_len);
-       if(wifi_vsie_len > 0) {
-               DBG("ConnMan, service->path=%s vsie length=%d", service->path, wifi_vsie_len);
+       GSList *vsie_list = NULL;
+
+       if (service->network)
+               vsie_list = (GSList *)connman_network_get_vsie_list(service->network);
+
+       if (vsie_list) {
+               DBG("ConnMan, service->path=%s No.of elements in list: %d", service->path, g_slist_length(vsie_list));
+               GSList *list;
+               for (list = vsie_list; list; list = list->next) {
+                       wifi_vsie = (unsigned char *)list->data;
+                       wifi_vsie_len = wifi_vsie[1] + 2;
+
+                       connman_dbus_dict_append_fixed_array(dict, "Vsie", DBUS_TYPE_BYTE,
+                                       &wifi_vsie, wifi_vsie_len);
+               }
        }
-       connman_dbus_dict_append_fixed_array(dict, "Vsie", DBUS_TYPE_BYTE,
-                       &wifi_vsie, wifi_vsie_len);
 #endif
 
        str = __connman_service_type2string(service->type);
@@ -3381,8 +3433,11 @@ static void append_properties(DBusMessageIter *dict, dbus_bool_t limited,
                break;
        case CONNMAN_SERVICE_TYPE_WIFI:
 #if defined TIZEN_EXT
-               if (service->network != NULL)
+               if (service->network != NULL) {
                        append_wifi_ext_info(dict, service->network);
+                       connman_dbus_dict_append_dict(dict, "BSSID.List",
+                                       append_bssid_info, service->network);
+               }
 
                connman_dbus_dict_append_dict(dict, "Ethernet",
                                                append_ethernet, service);
@@ -4096,6 +4151,7 @@ int __connman_service_set_passphrase(struct connman_service *service,
        /* The encrypted passphrase is used here
         * and validation is done by net-config before being encrypted.
         */
+       err = 0;
        if (service->security != CONNMAN_SERVICE_SECURITY_PSK &&
                        service->security != CONNMAN_SERVICE_SECURITY_RSN &&
                        service->security != CONNMAN_SERVICE_SECURITY_WEP)
@@ -7933,6 +7989,17 @@ static void prepare_8021x(struct connman_service *service)
        if (service->phase2)
                connman_network_set_string(service->network, "WiFi.Phase2",
                                                        service->phase2);
+
+#if defined TIZEN_EXT
+       if (service->keymgmt_type)
+               connman_network_set_string(service->network, "WiFi.KeymgmtType",
+                                                       service->keymgmt_type);
+
+       DBG("service->phase1 : %s", service->phase1);
+       if (service->phase1)
+               connman_network_set_string(service->network, "WiFi.Phase1",
+                                                       service->phase1);
+#endif
 }
 
 static int service_connect(struct connman_service *service)
@@ -8020,7 +8087,10 @@ static int service_connect(struct connman_service *service)
                        DBG("service eap: %s", service->eap);
                        if (g_str_equal(service->eap, "tls") ||
                                g_str_equal(service->eap, "sim") ||
-                               g_str_equal(service->eap, "aka"))
+                               g_str_equal(service->eap, "aka") ||
+                               g_str_equal(service->eap, "aka'") ||
+                               g_str_equal(service->eap, "pwd") ||
+                               g_str_equal(service->eap, "fast"))
                                break;
 #else
                        /*