Added support of WPA3-SAE security mode.
[platform/upstream/connman.git] / src / service.c
index d6c0322..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);
@@ -3342,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
 
@@ -4141,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.
@@ -8205,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;
 
@@ -8275,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);
@@ -8607,8 +8624,15 @@ static int service_register(struct connman_service *service)
 
        DBG("path %s", service->path);
 
+#if defined TIZEN_EXT
+       service_load(service);
+       int ret = __connman_config_provision_service(service);
+       if (ret < 0)
+               DBG("Failed to provision service");
+#else
        if (__connman_config_provision_service(service) < 0)
                service_load(service);
+#endif
 
        g_dbus_register_interface(connection, service->path,
                                        CONNMAN_SERVICE_INTERFACE,
@@ -9019,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)