Added support of WPA3-SAE security mode.
[platform/upstream/connman.git] / src / service.c
index ea61f32..d1ada48 100644 (file)
@@ -350,6 +350,8 @@ enum connman_service_security __connman_service_string2security(const char *str)
 #if defined TIZEN_EXT
        if (!strcmp(str, "rsn"))
                return CONNMAN_SERVICE_SECURITY_RSN;
+       if (!strcmp(str, "sae"))
+               return CONNMAN_SERVICE_SECURITY_SAE;
 #endif
 
        return CONNMAN_SERVICE_SECURITY_UNKNOWN;
@@ -370,6 +372,8 @@ static const char *security2string(enum connman_service_security security)
                return "psk";
        case CONNMAN_SERVICE_SECURITY_RSN:
                return "rsn";
+       case CONNMAN_SERVICE_SECURITY_SAE:
+               return "sae";
 #else
        case CONNMAN_SERVICE_SECURITY_RSN:
                return "psk";
@@ -2388,6 +2392,9 @@ static void append_security(DBusMessageIter *iter, void *user_data)
                case CONNMAN_SERVICE_SECURITY_PSK:
                case CONNMAN_SERVICE_SECURITY_WPA:
                case CONNMAN_SERVICE_SECURITY_RSN:
+#if defined TIZEN_EXT
+               case CONNMAN_SERVICE_SECURITY_SAE:
+#endif
                        str = "wps";
                        dbus_message_iter_append_basic(iter,
                                                DBUS_TYPE_STRING, &str);
@@ -3262,6 +3269,7 @@ static void append_wifi_ext_info(DBusMessageIter *dict,
        char country_code_buff[WIFI_COUNTRY_CODE_LEN + 1] = {0,};
        char *country_code_str = country_code_buff;
        unsigned char *country_code;
+       uint16_t connection_mode;
 
        ssid = connman_network_get_blob(network, "WiFi.SSID", &ssid_len);
        bssid = connman_network_get_bssid(network);
@@ -3272,6 +3280,7 @@ static void append_wifi_ext_info(DBusMessageIter *dict,
        passpoint = connman_network_get_bool(network, "WiFi.HS20AP");
        keymgmt = connman_network_get_keymgmt(network);
        country_code = connman_network_get_countrycode(network);
+       connection_mode = connman_network_get_connection_mode(network);
 
        snprintf(bssid_str, WIFI_BSSID_STR_LEN, "%02x:%02x:%02x:%02x:%02x:%02x",
                                bssid[0], bssid[1], bssid[2],
@@ -3299,6 +3308,8 @@ static void append_wifi_ext_info(DBusMessageIter *dict,
                                        DBUS_TYPE_UINT32, &keymgmt);
        connman_dbus_dict_append_basic(dict, "Country", DBUS_TYPE_STRING,
                                       &country_code_str);
+       connman_dbus_dict_append_basic(dict, "ConnMode",
+                                       DBUS_TYPE_UINT16, &connection_mode);
 
        str = connman_network_get_string(network, "WiFi.Security");
        if (str != NULL && g_str_equal(str, "ieee8021x") == TRUE) {
@@ -3338,29 +3349,31 @@ static void append_wifi_ext_info(DBusMessageIter *dict,
 
 static void append_bssid_info(DBusMessageIter *iter, void *user_data)
 {
-        GSList *bssid_list = NULL;
+       GSList *bssid_list = NULL;
        struct connman_network *network = user_data;
-        struct connman_bssids *bssids;
-        char bssid_buf[18] = {0,};
-        char *bssid_str = bssid_buf;
+       struct connman_bssids *bssids;
+       char bssid_buf[MAC_ADDRESS_LENGTH] = {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);
+       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;
+                       g_snprintf(bssid_buf, MAC_ADDRESS_LENGTH, "%02x:%02x:%02x:%02x:%02x:%02x",
+                                       bssids->bssid[0], bssids->bssid[1], bssids->bssid[2],
+                                       bssids->bssid[3], bssids->bssid[4], bssids->bssid[5]);
 
                        connman_dbus_dict_append_basic(iter, "BSSID",
-                                        DBUS_TYPE_STRING, &bssid_str);
+                                       DBUS_TYPE_STRING, &bssid_str);
 
-                        connman_dbus_dict_append_basic(iter, "Strength",
-                                        DBUS_TYPE_UINT16, &bssids->strength);
+                       connman_dbus_dict_append_basic(iter, "Strength",
+                                       DBUS_TYPE_UINT16, &bssids->strength);
 
-                        connman_dbus_dict_append_basic(iter, "Frequency",
-                                        DBUS_TYPE_UINT16, &bssids->frequency);
-                }
-        }
+                       connman_dbus_dict_append_basic(iter, "Frequency",
+                                       DBUS_TYPE_UINT16, &bssids->frequency);
+               }
+       }
 }
 #endif
 
@@ -4137,6 +4150,8 @@ int __connman_service_check_passphrase(enum connman_service_security security,
        case CONNMAN_SERVICE_SECURITY_PSK:
 #if defined TIZEN_EXT
        case CONNMAN_SERVICE_SECURITY_RSN:
+       /* TO CHECK: We need to check the key length supported by SAE */
+       case CONNMAN_SERVICE_SECURITY_SAE:
 #endif
                /* A raw key is always 64 bytes length,
                 * its content is in hex representation.
@@ -8201,6 +8216,9 @@ static int service_connect(struct connman_service *service)
                case CONNMAN_SERVICE_SECURITY_PSK:
                case CONNMAN_SERVICE_SECURITY_WPA:
                case CONNMAN_SERVICE_SECURITY_RSN:
+#if defined TIZEN_EXT
+               case CONNMAN_SERVICE_SECURITY_SAE:
+#endif
                        if (service->error == CONNMAN_SERVICE_ERROR_INVALID_KEY)
                                return -ENOKEY;
 
@@ -8271,6 +8289,9 @@ static int service_connect(struct connman_service *service)
                case CONNMAN_SERVICE_SECURITY_PSK:
                case CONNMAN_SERVICE_SECURITY_WPA:
                case CONNMAN_SERVICE_SECURITY_RSN:
+#if defined TIZEN_EXT
+               case CONNMAN_SERVICE_SECURITY_SAE:
+#endif
                        break;
                case CONNMAN_SERVICE_SECURITY_8021X:
                        prepare_8021x(service);
@@ -9022,6 +9043,8 @@ static enum connman_service_security convert_wifi_security(const char *security)
        else if (g_str_equal(security, "rsn"))
                return CONNMAN_SERVICE_SECURITY_RSN;
 #if defined TIZEN_EXT
+       else if (g_str_equal(security, "sae"))
+               return CONNMAN_SERVICE_SECURITY_SAE;
        else if (g_str_equal(security, "ft_psk") == TRUE)
                return CONNMAN_SERVICE_SECURITY_PSK;
        else if (g_str_equal(security, "ft_ieee8021x") == TRUE)