Fix the return error
authorChengyi Zhao <chengyi1.zhao@archermind.com>
Thu, 19 Jun 2014 02:58:48 +0000 (10:58 +0800)
committerZhang zhengguang <zhengguang.zhang@intel.com>
Thu, 26 Jun 2014 06:16:36 +0000 (14:16 +0800)
src/include/wifi-internal.h
src/wifi-ap.c
src/wifi-internal.c
test/wifi_test.c

index ffa74e5a2ead90fb1633fb37f53ad2b5f8ba8174..0123350ed907e9d3439237d5c2716df26cdbdea2 100644 (file)
@@ -77,8 +77,8 @@ bool _wifi_libnet_foreach_found_hidden_aps(wifi_found_ap_cb callback, void *user
 
 int _wifi_libnet_open_profile(wifi_ap_h ap_h, wifi_connected_cb callback, void *user_data);
 int _wifi_libnet_close_profile(wifi_ap_h ap_h, wifi_disconnected_cb callback, void *user_data);
-int _wifi_libnet_connect_with_wps(wifi_ap_h ap, wifi_connected_cb callback, void *user_data);
-int _wifi_libnet_forget_ap(wifi_ap_h ap);
+int _wifi_libnet_connect_with_wps(wifi_ap_h ap_h, wifi_connected_cb callback, void *user_data);
+int _wifi_libnet_forget_ap(wifi_ap_h ap_h);
 
 int _wifi_set_power_on_off_cb(wifi_device_state_changed_cb callback, void *user_data);
 int _wifi_unset_power_on_off_cb(void);
@@ -97,6 +97,7 @@ net_wifi_connection_info_t *_wifi_get_conn_info(void);
 
 char *_wifi_get_ip_config_str(net_ip_config_type_t ip_config_type);
 net_ip_config_type_t _wifi_get_ip_config_type(const char *config);
+struct connman_service *_wifi_get_service_h(wifi_ap_h ap_h);
 
 #ifdef __cplusplus
 }
index e6b4c02fcecc6c678b645c92957da384d6778219..614c3fe67ce83235958a9a177f3b16f2a03ebd6b 100755 (executable)
@@ -155,9 +155,9 @@ EXPORT_API int wifi_ap_get_essid(wifi_ap_h ap, char** essid)
                return WIFI_ERROR_INVALID_PARAMETER;
        }
 
-       struct connman_service *service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        *essid = g_strdup(connman_service_get_name(service));
        if (*essid == NULL)
@@ -173,9 +173,9 @@ EXPORT_API int wifi_ap_get_bssid(wifi_ap_h ap, char** bssid)
                return WIFI_ERROR_INVALID_PARAMETER;
        }
 
-       struct connman_service *service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        *bssid = g_strdup(connman_service_get_bssid(service));
        if (*bssid == NULL)
@@ -191,9 +191,9 @@ EXPORT_API int wifi_ap_get_rssi(wifi_ap_h ap, int* rssi)
                return WIFI_ERROR_INVALID_PARAMETER;
        }
 
-       struct connman_service *service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        *rssi = connman_service_get_strength(service);
 
@@ -207,9 +207,9 @@ EXPORT_API int wifi_ap_get_frequency(wifi_ap_h ap, int* frequency)
                return WIFI_ERROR_INVALID_PARAMETER;
        }
 
-       struct connman_service *service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        *frequency = connman_service_get_frequency(service);
 
@@ -223,9 +223,9 @@ EXPORT_API int wifi_ap_get_max_speed(wifi_ap_h ap, int* max_speed)
                return WIFI_ERROR_INVALID_PARAMETER;
        }
 
-       struct connman_service *service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        *max_speed = connman_service_get_max_rate(service);
 
@@ -239,9 +239,9 @@ EXPORT_API int wifi_ap_is_favorite(wifi_ap_h ap, bool* favorite)
                return WIFI_ERROR_INVALID_PARAMETER;
        }
 
-       struct connman_service *service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        *favorite = connman_service_get_favorite(service);
 
@@ -258,9 +258,9 @@ EXPORT_API int wifi_ap_get_connection_state(wifi_ap_h ap,
 
        enum connman_service_state_type state_type;
 
-       struct connman_service *service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        state_type = _wifi_get_service_state_type(
                                        connman_service_get_state(service));
@@ -291,9 +291,9 @@ EXPORT_API int wifi_ap_wifi_get_ip_config_type(wifi_ap_h ap,
        }
 
        const struct service_ipv4 *ipv4_config;
-       struct connman_service *service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        ipv4_config = connman_service_get_ipv4_config(service);
 
@@ -338,9 +338,9 @@ EXPORT_API int wifi_ap_set_ip_config_type(wifi_ap_h ap,
 
        net_ip_config_type_t ip_config_type;
 
-       struct connman_service *service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        switch (type) {
        case WIFI_IP_CONFIG_TYPE_STATIC:
@@ -390,9 +390,9 @@ EXPORT_API int wifi_ap_get_ip_address(wifi_ap_h ap,
        }
 
        const struct service_ipv4 *ipv4;
-       struct connman_service *service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        ipv4 = connman_service_get_ipv4_info(service);
        *ip_address = ipv4->address;
@@ -418,9 +418,9 @@ EXPORT_API int wifi_ap_set_ip_address(wifi_ap_h ap,
                return WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
        }
 
-       struct connman_service *service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        struct service_ipv4 ipv4_config;
        memset(&ipv4_config, 0, sizeof(struct service_ipv4));
@@ -452,9 +452,9 @@ EXPORT_API int wifi_ap_get_subnet_mask(wifi_ap_h ap,
        }
 
        const struct service_ipv4 *ipv4;
-       struct connman_service *service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        ipv4 = connman_service_get_ipv4_info(service);
        *subnet_mask = ipv4->netmask;
@@ -480,9 +480,9 @@ EXPORT_API int wifi_ap_set_subnet_mask(wifi_ap_h ap,
                return WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
        }
 
-       struct connman_service *service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        struct service_ipv4 ipv4_config;
        memset(&ipv4_config, 0, sizeof(struct service_ipv4));
@@ -514,9 +514,9 @@ EXPORT_API int wifi_ap_get_gateway_address(wifi_ap_h ap,
        }
 
        const struct service_ipv4 *ipv4;
-       struct connman_service *service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        ipv4 = connman_service_get_ipv4_info(service);
        *gateway_address = ipv4->gateway;
@@ -542,9 +542,9 @@ EXPORT_API int wifi_ap_set_gateway_address(wifi_ap_h ap,
                return WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
        }
 
-       struct connman_service *service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        struct service_ipv4 ipv4_config;
        memset(&ipv4_config, 0, sizeof(struct service_ipv4));
@@ -594,6 +594,28 @@ EXPORT_API int wifi_ap_set_proxy_address(wifi_ap_h ap,
                return WIFI_ERROR_ADDRESS_FAMILY_NOT_SUPPORTED;
        }
 
+       struct service_proxy proxy_config;
+       memset(&proxy_config, 0, sizeof(struct service_proxy));
+
+       proxy_config.servers = g_try_new0(char*, 2);
+
+       struct connman_service *service = _wifi_get_service_h(ap);
+       if (!service)
+               return WIFI_ERROR_INVALID_PARAMETER;
+
+       proxy_config.method = connman_service_get_proxy_config(service)->method;
+
+       if (!g_strcmp0(proxy_config.method, "manual")) {
+               *proxy_config.servers = g_strdup(proxy_address);
+               connman_service_set_proxy_config(service, &proxy_config);
+               g_free(*proxy_config.servers);
+               g_free(proxy_config.servers);
+       } else if (!g_strcmp0(proxy_config.method, "auto")){
+               proxy_config.url = g_strdup(proxy_address);
+               connman_service_set_proxy_config(service, &proxy_config);
+               g_free(proxy_config.url);
+       }
+
        return WIFI_ERROR_NONE;
 }
 
@@ -615,6 +637,29 @@ EXPORT_API int wifi_ap_set_proxy_type(wifi_ap_h ap,
                return WIFI_ERROR_INVALID_PARAMETER;
        }
 
+       struct service_proxy proxy_config;
+       memset(&proxy_config, 0, sizeof(struct service_proxy));
+
+       struct connman_service *service = _wifi_get_service_h(ap);
+       if (!service)
+               return WIFI_ERROR_INVALID_PARAMETER;
+
+       switch (proxy_type) {
+       case WIFI_PROXY_TYPE_AUTO:
+               proxy_config.method = g_strdup("auto");
+               break;
+       case WIFI_PROXY_TYPE_MANUAL:
+               proxy_config.method = g_strdup("manual");
+               break;
+       case WIFI_PROXY_TYPE_DIRECT:
+               proxy_config.method = g_strdup("direct");
+               break;
+       }
+
+       connman_service_set_proxy_config(service, &proxy_config);
+
+       g_free(proxy_config.method);
+
        return 0;
 }
 
@@ -684,7 +729,9 @@ EXPORT_API int wifi_ap_is_passphrase_required(wifi_ap_h ap, bool* required)
                return WIFI_ERROR_INVALID_PARAMETER;
        }
 
-       struct connman_service *service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap);
+       if (!service)
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        if (connman_service_get_favorite(service)) {
                *required = false;
@@ -719,7 +766,10 @@ EXPORT_API int wifi_ap_set_passphrase(wifi_ap_h ap, const char* passphrase)
                return WIFI_ERROR_INVALID_PARAMETER;
        }
 
-       struct connman_service* service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap);
+       if (!service)
+               return WIFI_ERROR_INVALID_PARAMETER;
+
        net_wifi_connection_info_t wifi_conn_info;
        memset(&wifi_conn_info, 0, sizeof(net_wifi_connection_info_t));
 
index c9c3262daab8b6fd8f6c338f9ae08f93dbd1a254..b822dcaccc8a16e43c3f5d4d5082db78eb9c6769 100755 (executable)
@@ -366,7 +366,7 @@ static int __net_dbus_set_agent_passphrase(const char *path,
 
        if (NULL == passphrase || strlen(passphrase) <= 0) {
                WIFI_LOG(WIFI_ERROR, "Invalid param \n");
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
        }
 
        service_id = g_strrstr(path, "/") + 1;
@@ -388,9 +388,9 @@ static int __net_dbus_connect_service(wifi_ap_h ap_h,
 {
        net_err_t Error = NET_ERR_NONE;
 
-       struct connman_service *service = ap_h;
+       struct connman_service *service = _wifi_get_service_h(ap_h);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        if (g_strcmp0(wifi_connection_info->security, "ieee8021x") == 0) {
                /* Create the EAP config file
@@ -505,7 +505,7 @@ static int __net_open_connection_with_wifi_info(wifi_ap_h ap_h,
        default:
                WIFI_LOG(WIFI_ERROR, "Invalid security type\n");
 
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
        }
 
        Error = __net_dbus_connect_service(ap_h, &wifi_connection_info);
@@ -634,27 +634,17 @@ static void service_state_changed(struct connman_service *service,
        WIFI_LOG(WIFI_INFO, "name %s, state, %s", name, new_state);
 
        if (wifi_callbacks.connection_state_cb) {
-               GSList *list;
-               net_profile_info_t *info = NULL;
-               net_profile_info_t *profile_info = NULL;
                wifi_connection_state_e state =
                                connection_state_string2type(new_state);
+               wifi_ap_h ap;
 
-               for (list = ap_handle_list; list; list = list->next) {
-
-                       if (list == NULL)
-                               break;
-
-                       info = (net_profile_info_t *)list->data;
-                       if (strcmp(info->essid, name) == 0) {
-                               profile_info = info;
-                               break;
-                       }
-               }
+               wifi_ap_create(name, &ap);
 
                wifi_callbacks.connection_state_cb(state,
-                               (wifi_ap_h)profile_info,
+                               ap,
                                wifi_callbacks.connection_state_user_data);
+
+               wifi_ap_destroy(ap);
        }
 }
 
@@ -732,6 +722,24 @@ static void technology_added_callback(struct connman_technology *technology,
                                                user_data);
 }
 
+static void __connman_technology_powered_on_cb(
+                                       enum connman_lib_err_e result,
+                                       void *user_data)
+{
+       WIFI_LOG(WIFI_INFO, "callback: %d\n", result);
+
+       __libnet_activated_cb(connman_lib2capi_result(result));
+}
+
+static void __connman_technology_powered_off_cb(
+                                       enum connman_lib_err_e result,
+                                       void *user_data)
+{
+       WIFI_LOG(WIFI_INFO, "callback: %d\n", result);
+
+       __libnet_deactivated_cb(connman_lib2capi_result(result));
+}
+
 bool _wifi_libnet_init(void)
 {
        struct connman_technology *technology;
@@ -765,24 +773,6 @@ bool _wifi_libnet_deinit(void)
        return true;
 }
 
-static void __connman_technology_powered_on_cb(
-                                       enum connman_lib_err_e result,
-                                       void *user_data)
-{
-       WIFI_LOG(WIFI_INFO, "callback: %d\n", result);
-
-       __libnet_activated_cb(connman_lib2capi_result(result));
-}
-
-static void __connman_technology_powered_off_cb(
-                                       enum connman_lib_err_e result,
-                                       void *user_data)
-{
-       WIFI_LOG(WIFI_INFO, "callback: %d\n", result);
-
-       __libnet_deactivated_cb(connman_lib2capi_result(result));
-}
-
 int _wifi_activate(wifi_activated_cb callback, void *user_data)
 {
        if (winet_wifi_set_work_mode(WIFI_WORK_MODE_STATION) < 0)
@@ -823,9 +813,9 @@ int _wifi_deactivate(wifi_deactivated_cb callback, void *user_data)
 
 bool _wifi_libnet_check_ap_validity(wifi_ap_h ap_h)
 {
-       struct connman_service *service = ap_h;
+       struct connman_service *service = _wifi_get_service_h(ap_h);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        const char *name = connman_service_get_name(service);
 
@@ -1043,7 +1033,14 @@ bool _wifi_libnet_foreach_found_aps(wifi_found_ap_cb callback, void *user_data)
        }
 
        for (iter = connman_services_list; iter != NULL; iter = iter->next) {
-               rv = callback((wifi_ap_h)(iter->data), user_data);
+               wifi_ap_h ap;
+               struct connman_service *service = iter->data;
+               const char *essid = connman_service_get_name(service);
+
+               WIFI_LOG(WIFI_INFO, "essid is %s", essid);
+
+               wifi_ap_create(essid, &ap);
+               rv = callback(ap, user_data);
                if (rv == false) break;
        }
 
@@ -1060,7 +1057,10 @@ int _wifi_libnet_open_profile(wifi_ap_h ap_h, wifi_connected_cb callback,
                                                        void *user_data)
 {
        int rv = NET_ERR_NONE;
-       struct connman_service* service = ap_h;
+
+       struct connman_service *service = _wifi_get_service_h(ap_h);
+       if (!service)
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        __libnet_set_connected_cb(callback, user_data);
 
@@ -1080,9 +1080,9 @@ int _wifi_libnet_open_profile(wifi_ap_h ap_h, wifi_connected_cb callback,
 int _wifi_libnet_close_profile(wifi_ap_h ap_h,
                        wifi_disconnected_cb callback, void *user_data)
 {
-       struct connman_service *service = ap_h;
+       struct connman_service *service = _wifi_get_service_h(ap_h);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        __libnet_set_disconnected_cb(callback, user_data);
        connman_service_disconnect(service,
@@ -1095,9 +1095,9 @@ int _wifi_libnet_connect_with_wps(wifi_ap_h ap_h,
                                wifi_connected_cb callback, void *user_data)
 {
        int rv = NET_ERR_NONE;
-       struct connman_service *service = ap_h;
+       struct connman_service *service = _wifi_get_service_h(ap_h);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        __libnet_set_connected_cb(callback, user_data);
 
@@ -1113,13 +1113,13 @@ int _wifi_libnet_connect_with_wps(wifi_ap_h ap_h,
        return WIFI_ERROR_NONE;
 }
 
-int _wifi_libnet_forget_ap(wifi_ap_h ap)
+int _wifi_libnet_forget_ap(wifi_ap_h ap_h)
 {
 
        int rv = NET_ERR_NONE;
-       struct connman_service *service = ap;
+       struct connman_service *service = _wifi_get_service_h(ap_h);
        if (!service)
-               return NET_ERR_INVALID_PARAM;
+               return WIFI_ERROR_INVALID_PARAMETER;
 
        connman_service_remove(service);
 
@@ -1197,3 +1197,13 @@ int _wifi_unset_connection_state_cb()
 
        return WIFI_ERROR_NONE;
 }
+
+struct connman_service *_wifi_get_service_h(wifi_ap_h ap_h)
+{
+       struct connman_service *service =
+              connman_get_service(((net_profile_info_t *) ap_h)->essid);
+       if (!service)
+              return NULL;
+
+       return service;
+}
index 87b737fd4d9d32c870cda88d578cbde1a24449c2..e8d734cc622074075180c22c322be593751a1e2d 100644 (file)
@@ -232,11 +232,13 @@ static bool __test_found_ap_callback(wifi_ap_h ap, void *user_data)
        if (rv != WIFI_ERROR_NONE) {
                printf("Fail to get State [%s]\n", __test_convert_error_to_string(rv));
                g_free(ap_name);
+               wifi_ap_destroy(ap);
                return false;
        }
 
        printf("AP name : %s, state : %s\n", ap_name, __test_print_state(state));
        g_free(ap_name);
+       wifi_ap_destroy(ap);
 
        return true;
 }
@@ -268,6 +270,7 @@ static bool __test_found_connect_ap_callback(wifi_ap_h ap, void *user_data)
                        if (rv != WIFI_ERROR_NONE) {
                                printf("Fail to set passphrase : %s\n", __test_convert_error_to_string(rv));
                                g_free(ap_name);
+                               wifi_ap_destroy(ap);
                                return false;
                        }
                }
@@ -279,10 +282,12 @@ static bool __test_found_connect_ap_callback(wifi_ap_h ap, void *user_data)
                        printf("Success to connection request [%s]\n", ap_name);
 
                g_free(ap_name);
+               wifi_ap_destroy(ap);
                return false;
        }
 
        g_free(ap_name);
+       wifi_ap_destroy(ap);
        return true;
 }
 
@@ -306,10 +311,12 @@ static bool __test_found_connect_wps_callback(wifi_ap_h ap, void *user_data)
                        printf("Success to connection request [%s]\n", ap_name);
 
                g_free(ap_name);
+               wifi_ap_destroy(ap);
                return false;
        }
 
        g_free(ap_name);
+       wifi_ap_destroy(ap);
        return true;
 }
 
@@ -333,10 +340,12 @@ static bool __test_found_disconnect_ap_callback(wifi_ap_h ap, void *user_data)
                        printf("Success to disconnection request %s\n", ap_name);
 
                g_free(ap_name);
+               wifi_ap_destroy(ap);
                return false;
        }
 
        g_free(ap_name);
+       wifi_ap_destroy(ap);
        return true;
 }
 
@@ -360,10 +369,12 @@ static bool __test_found_forget_ap_callback(wifi_ap_h ap, void *user_data)
                        printf("Success to forget [%s]\n", ap_name);
 
                g_free(ap_name);
+               wifi_ap_destroy(ap);
                return false;
        }
 
        g_free(ap_name);
+       wifi_ap_destroy(ap);
        return true;
 }
 
@@ -400,6 +411,7 @@ static bool __test_found_eap_ap_callback(wifi_ap_h ap, void *user_data)
                if (rv != WIFI_ERROR_NONE) {
                        printf("Fail to set eap passphrase : %s\n", __test_convert_error_to_string(rv));
                        g_free(ap_name);
+                       wifi_ap_destroy(ap);
                        return false;
                }
 
@@ -409,6 +421,7 @@ static bool __test_found_eap_ap_callback(wifi_ap_h ap, void *user_data)
                if (rv != WIFI_ERROR_NONE) {
                        printf("Fail to get eap passphrase : %s\n", __test_convert_error_to_string(rv));
                        g_free(ap_name);
+                       wifi_ap_destroy(ap);
                        return false;
                }
 
@@ -422,10 +435,12 @@ static bool __test_found_eap_ap_callback(wifi_ap_h ap, void *user_data)
 
                g_free(ap_name);
                g_free(inputed_name);
+               wifi_ap_destroy(ap);
                return false;
        }
 
        g_free(ap_name);
+       wifi_ap_destroy(ap);
        return true;
 }
 
@@ -449,6 +464,7 @@ static bool __test_found_change_ip_method_callback(wifi_ap_h ap, void *user_data
                rv = scanf("%9d", &method);
                if (rv <= 0) {
                        g_free(ap_name);
+                       wifi_ap_destroy(ap);
                        return false;
                }
 
@@ -465,6 +481,7 @@ static bool __test_found_change_ip_method_callback(wifi_ap_h ap, void *user_data
                default:
                        printf("Invalid input!\n");
                        g_free(ap_name);
+                       wifi_ap_destroy(ap);
                        return false;
                }
 
@@ -534,10 +551,12 @@ static bool __test_found_change_ip_method_callback(wifi_ap_h ap, void *user_data
                }
 
                g_free(ap_name);
+               wifi_ap_destroy(ap);
                return false;
        }
 
        g_free(ap_name);
+       wifi_ap_destroy(ap);
        return true;
 }
 
@@ -563,6 +582,7 @@ static bool __test_found_change_proxy_method_callback(wifi_ap_h ap, void *user_d
                rv = scanf("%9d", &method);
                if (rv <= 0) {
                        g_free(ap_name);
+                       wifi_ap_destroy(ap);
                        return false;
                }
 
@@ -579,6 +599,7 @@ static bool __test_found_change_proxy_method_callback(wifi_ap_h ap, void *user_d
                default:
                        printf("Invalid input!\n");
                        g_free(ap_name);
+                       wifi_ap_destroy(ap);
                        return false;
                }
 
@@ -606,10 +627,12 @@ static bool __test_found_change_proxy_method_callback(wifi_ap_h ap, void *user_d
                }
 
                g_free(ap_name);
+               wifi_ap_destroy(ap);
                return false;
        }
 
        g_free(ap_name);
+       wifi_ap_destroy(ap);
        return true;
 }
 
@@ -742,6 +765,7 @@ static bool __test_found_print_ap_info_callback(wifi_ap_h ap, void *user_data)
 
                if (sec_type != WIFI_SECURITY_TYPE_EAP) {
                        g_free(ap_name);
+                       wifi_ap_destroy(ap);
                        return false;
                }
 
@@ -782,10 +806,12 @@ static bool __test_found_print_ap_info_callback(wifi_ap_h ap, void *user_data)
                        printf("Fail to get EAP private key file\n");
 
                g_free(ap_name);
+               wifi_ap_destroy(ap);
                return false;
        }
 
        g_free(ap_name);
+       wifi_ap_destroy(ap);
        return true;
 }