Fix for set proxy config
authorChengyi Zhao <chengyi1.zhao@archermind.com>
Fri, 20 Jun 2014 03:35:32 +0000 (11:35 +0800)
committerZhang zhengguang <zhengguang.zhang@intel.com>
Thu, 26 Jun 2014 06:16:49 +0000 (14:16 +0800)
src/include/common.h
src/wifi-ap.c

index cb760e2e937ac98dc0db6ea26239f2d9a3479c72..2ae94fb01edd4a5db8197187f1795eb5524eab3f 100644 (file)
@@ -550,6 +550,7 @@ typedef struct
 {
        /** Profile name */
        char *essid;
+       wifi_proxy_type_e proxy_type;
 } net_profile_info_t;
 
 /**
index 614c3fe67ce83235958a9a177f3b16f2a03ebd6b..8acbc933e016fa0581ffde117391cc63f701a1c9 100755 (executable)
@@ -57,6 +57,7 @@ static void __wifi_init_ap(net_profile_info_t *profile_info,
                                                        const char *essid)
 {
        profile_info->essid = g_strdup(essid);
+       profile_info->proxy_type = WIFI_PROXY_TYPE_AUTO;
 }
 
 wifi_connection_state_e _wifi_convert_to_ap_state(
@@ -597,22 +598,26 @@ EXPORT_API int wifi_ap_set_proxy_address(wifi_ap_h ap,
        struct service_proxy proxy_config;
        memset(&proxy_config, 0, sizeof(struct service_proxy));
 
-       proxy_config.servers = g_try_new0(char*, 2);
+       proxy_config.servers = g_try_malloc0(sizeof(char*));
 
        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")) {
+       if (((net_profile_info_t *) ap)->proxy_type ==
+                                       WIFI_PROXY_TYPE_MANUAL) {
+               proxy_config.method = g_strdup("manual");
                *proxy_config.servers = g_strdup(proxy_address);
                connman_service_set_proxy_config(service, &proxy_config);
+               g_free(proxy_config.method);
                g_free(*proxy_config.servers);
                g_free(proxy_config.servers);
-       } else if (!g_strcmp0(proxy_config.method, "auto")){
+       } else if (((net_profile_info_t *) ap)->proxy_type ==
+                                       WIFI_PROXY_TYPE_AUTO) {
+               proxy_config.method = g_strdup("auto");
                proxy_config.url = g_strdup(proxy_address);
                connman_service_set_proxy_config(service, &proxy_config);
+               g_free(proxy_config.method);
                g_free(proxy_config.url);
        }
 
@@ -656,9 +661,12 @@ EXPORT_API int wifi_ap_set_proxy_type(wifi_ap_h ap,
                break;
        }
 
-       connman_service_set_proxy_config(service, &proxy_config);
-
-       g_free(proxy_config.method);
+       if (proxy_type == WIFI_PROXY_TYPE_DIRECT) {
+               connman_service_set_proxy_config(service, &proxy_config);
+               g_free(proxy_config.method);
+       } else {
+               ((net_profile_info_t *) ap)->proxy_type = proxy_type;
+       }
 
        return 0;
 }