[T106][ZXW-22]7520V3SCV2.01.01.02P42U09_VEC_V0.8_AP_VEC origin source commit

Change-Id: Ic6e05d89ecd62fc34f82b23dcf306c93764aec4b
diff --git a/ap/app/goahead/interface5.0/wifi/Makefile b/ap/app/goahead/interface5.0/wifi/Makefile
new file mode 100755
index 0000000..1898061
--- /dev/null
+++ b/ap/app/goahead/interface5.0/wifi/Makefile
@@ -0,0 +1,68 @@
+# /*****************************************************************************
+#* °æÈ¨ËùÓÐ (C)2015, ÖÐÐËͨѶ¹É·ÝÓÐÏÞ¹«Ë¾¡£
+#* 
+#* ÎļþÃû³Æ:     Makefile
+#* Îļþ±êʶ:     Makefile
+#* ÄÚÈÝÕªÒª:     Makefile of ZTE applications
+#* ʹÓ÷½·¨:     void
+#* 
+#* ÐÞ¸ÄÈÕÆÚ        °æ±¾ºÅ      Ð޸ıê¼Ç        ÐÞ¸ÄÈË          ÐÞ¸ÄÄÚÈÝ
+#* -----------------------------------------------------------------------------
+#* 2015/11/26      V1.0        Create          ÇñÏèÓî          ´´½¨
+#* 
+# ******************************************************************************/
+
+#*******************************************************************************
+# include ZTE application makefile
+#*******************************************************************************
+#ifeq ($(LINUX_TYPE),uClinux)
+include $(zte_app_mak)
+#endif
+
+#*******************************************************************************
+# execute
+#*******************************************************************************
+#EXEC = libwebuiwifi.a
+
+#*******************************************************************************
+# objects
+#*******************************************************************************
+OBJS = zte_web_lan.o zte_web_mgmt_wifi.o zte_web_wlan_station.o zte_web_lan_utils.o
+
+SRC = zte_web_lan.c zte_web_mgmt_wifi.c zte_web_wlan_station.c zte_web_lan_utils.c
+
+#*******************************************************************************
+# include path
+#*******************************************************************************
+
+CFLAGS += -DCONFIG_CHINA_UNICOM -DWEBS -DUEMF -DOS="LINUX" -DLINUX \
+          -I. \
+		  -I$(zte_lib_path)/libnvram \
+		  -I$(zte_lib_path)/libezxml \
+		  -I$(zte_lib_path)/libmxml \
+		  -I../../../include \
+		  -I../../../wlan \
+		  -I$(zte_lib_path)/libsqlite \
+		  -I$(zte_lib_path)/libsoft_timer \
+		  -I../../../at_server \
+		  -I../../server \
+		  -I.. \
+		  -I../net \
+
+ifeq ($(CONFIG_USE_WEBUI_SECURITY),yes)
+CFLAGS	+= -DWEBS_SECURITY
+endif
+#*******************************************************************************
+# targets
+#*******************************************************************************
+
+#$(error ===================================>)
+	
+all: $(OBJS)
+	@echo "--------------------wifi build-----------------------"
+#$(RANLIB) $@
+%.o: %.c
+	$(CC) $(CFLAGS) $(INCLUDES) -c $< -Wl,--start-group $(LDLIBS) -Wl,--end-group
+
+clean:
+	-rm -f *.elf *.gdb *.o *.a
diff --git a/ap/app/goahead/interface5.0/wifi/zte_web_lan.c b/ap/app/goahead/interface5.0/wifi/zte_web_lan.c
new file mode 100755
index 0000000..f0dd1c3
--- /dev/null
+++ b/ap/app/goahead/interface5.0/wifi/zte_web_lan.c
@@ -0,0 +1,2112 @@
+
+/************************************************************************
+* °æÈ¨ËùÓÐ (C)2010, ÉîÛÚÊÐÖÐÐËͨѶ¹É·ÝÓÐÏÞ¹«Ë¾¡£
+*
+* ÎļþÃû³Æ£º zte_web_lan.c
+* Îļþ±êʶ£º
+* ÄÚÈÝÕªÒª£º
+* ÆäËü˵Ã÷£º
+* µ±Ç°°æ±¾£º V0.1
+* ×÷    Õߣº zyt
+* Íê³ÉÈÕÆÚ£º 2010-11-06
+*
+* Ð޸ļǼ1£º
+* ÐÞ¸ÄÄÚÈÝ£º³õʼ°æ±¾
+************************************************************************/
+
+/**************************************************************************
+* Ð޸ıàºÅ : й¦ÄÜ
+* ÐÞ ¸Ä ÈË : chenjie10092374
+* ÐÞ¸ÄÈÕÆÚ : 2014.6.24
+* ÐÞ¸ÄÄÚÈÝ : Ìí¼ÓÖ§³Öufi monitor¹¦ÄÜ´¦Àí´úÂë
+**************************************************************************/
+#include   <ctype.h>
+
+#include "zte_web_interface.h"
+#include "./net/zte_web_net_other.h"
+#include "netotherapi.h"
+
+#define WDS_DISABLE "0"
+#define WDS_ROOTAP "1"
+#define WDS_CLIENT "2"
+#define WDS_REPEATER "3"
+#define WIFI_MAX_STA_NUM 32 //kw 3
+
+
+#define NV_WRITE(nv_name, str, ret)  do{ ret = zte_web_write(nv_name, (char *)str);}while(0)
+
+static int zte_wlan_ssid1_basic_set(webs_t wp, unsigned int *wifi_set_flags);
+static int zte_lan_ssid1_security_set(webs_t wp, unsigned int *wifi_set_flags);
+static int zte_wlan_ssid2_basic_set(webs_t wp, unsigned int *wifi_set_flags);
+static int zte_lan_ssid2_security_set(webs_t wp, unsigned int *wifi_set_flags);
+
+static int get_random(unsigned char* buf, size_t len);
+
+
+enum {WIFI_COVERAGE_LEN = 16};
+/**
+ * @brief wifi share mode setting's struct
+ * @param wep_key_index
+ * @param wep_key1_mode
+ * @param wep_key2_mode
+ * @param wep_key3_mode
+ * @param wep_key4_mode
+ * @param wep_key1
+ * @param wep_key2
+ * @param wep_key3
+ * @param wep_key4
+ * @note
+ * @warning
+ */
+typedef struct {
+	uint8 wep_key_index[WF_WPS_KEY_INDEX_LEN];
+	uint8 wep_key1_mode[WF_KEY_MODE_LEN];
+	uint8 wep_key2_mode[WF_KEY_MODE_LEN];
+	uint8 wep_key3_mode[WF_KEY_MODE_LEN];
+	uint8 wep_key4_mode[WF_KEY_MODE_LEN];
+	uint8 wep_key1[WF_WEP_KEY_MAX_LEN];
+	uint8 wep_key2[WF_WEP_KEY_MAX_LEN];
+	uint8 wep_key3[WF_WEP_KEY_MAX_LEN];
+	uint8 wep_key4[WF_WEP_KEY_MAX_LEN];
+} zte_wifi_open_and_share_mode_s_type;
+/*wifi WPA/WPA2 mode setting*/
+typedef struct {
+	uint8 pre_share_key[WF_WPA_KEY_MAX_LEN];
+} zte_wifi_wpa_and_wpa2_mode_s_type;
+
+static char * str2upper(const char * in, char * out)
+{
+	char *p1 = in;
+	char  *p2 = out;
+	if (in == NULL || out == NULL) return NULL;
+
+	slog(MISC_PRINT, SLOG_DEBUG,"[%s]  in=%s\n", __FILE__, in);
+
+	while (*p1   != '\0') {
+		//if (isalpha(*p1)) {//cov m
+		if ((*p1) >= 'a' && (*p1) <= 'z') {
+			*p2   = toupper(*p1);
+		} else {
+			*p2  =  *p1;
+		}
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s]  UPPER = %c[%d],  Lower=%c[%d]\n", __FILE__, *p2, *p2, *p1, *p1);
+		p1++;
+		p2++;
+	}
+
+	*p2 = '\0';
+	return out;
+
+}
+
+static int validate_pin_code(unsigned long code)
+{
+	unsigned long accum = 0;
+	accum += 3 * ((code / 10000000) % 10);
+	accum += 1 * ((code / 1000000) % 10);
+	accum += 3 * ((code / 100000) % 10);
+	accum += 1 * ((code / 10000) % 10);
+	accum += 3 * ((code / 1000) % 10);
+	accum += 1 * ((code / 100) % 10);
+	accum += 3 * ((code / 10) % 10);
+	accum += 1 * ((code / 1) % 10);
+	return (0 == (accum % 10));
+}
+static int zte_Safe_valid_SpecialCharForSSID(char single_data)
+{
+	/*if(single_data == '&') return 0;
+	else if(single_data == '.') return 0;
+	else if(single_data == '`') return 0;
+	else if(single_data == '\\') return 0;
+	else*/
+	return 1;
+}
+
+
+static data_safe_result_type_t zte_Safe_noSpecialCharForSSID(char *str)
+{
+#if 0 //kw 3
+	int i = 0;
+	int len = 0;
+	if (NULL == str) {
+		return 0;
+	}
+
+	len = strlen(str);
+	for (i = 0; i < len; i++) {
+		if (zte_Safe_valid_SpecialCharForSSID(str[i]) != 0) {
+			continue;
+		} else {
+			return 0;
+		}
+	}
+#endif
+	return 1;
+}
+
+void wlan_set_change_ssid_key_status()
+{
+	ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_MMI, MSG_CMD_MODIFY_SSID_KEY, 0, NULL, 0);
+}
+
+
+void wifi_work_mode_set_basic()
+{
+	char m_ssid_enable[20] = {0};
+	char system_restore_flg[32] = {0};
+	char MAX_Access_num[16] = {0};
+	char m_MAX_Access_num[16] = {0};
+	char MAX_Station_num[16] = {0};
+
+	char num_buf[12] = {0};
+	char m_num_buf[12] = {0};
+	int max_sta_num = 0;
+	int max_num = 0;
+	int m_max_num = 0;
+	char max_access_bak[16] = {0};
+	char max_station_bak[16] = {0};
+	sc_cfg_get("MAX_Access_num_bbak", max_access_bak, sizeof(max_access_bak));
+	sc_cfg_get("MAX_Station_num_bak", max_station_bak, sizeof(max_station_bak));
+	slog(MISC_PRINT, SLOG_ERR,"MAX_Access_num_bbak:%s,MAX_Station_num_bak:%s\n",max_access_bak,max_station_bak);
+	if(strlen(max_station_bak) != 0 && strcmp(max_station_bak, "0")){	
+		sc_cfg_set("MAX_Station_num",max_station_bak);
+		sc_cfg_set("MAX_Station_num_bak","0");
+	}
+	if(strlen(max_access_bak) != 0 && strcmp(max_access_bak, "0")){
+		sc_cfg_set("MAX_Access_num", max_access_bak);	
+	}
+
+	//wifi workmode set
+	sc_cfg_get("m_ssid_enable", m_ssid_enable, sizeof(m_ssid_enable));
+	sc_cfg_get("system_restore_flg", system_restore_flg, sizeof(system_restore_flg));
+
+	if (!strcmp(m_ssid_enable, "1")) {
+		sc_cfg_set("AP_STARTMODE", "multi");
+		if (!strcmp(system_restore_flg, "first_restore")) {
+			sc_cfg_set("system_restore_flg", "not_first_restore");
+			slog(MISC_PRINT, SLOG_DEBUG,"is first config access num.....\n");
+
+			sc_cfg_get("MAX_Access_num", MAX_Access_num, sizeof(MAX_Access_num));
+			max_num = atoi(MAX_Access_num);
+			if (max_num > 1 && max_num < 33) {
+				sprintf(num_buf, "%d", max_num / 2);
+				slog(MISC_PRINT, SLOG_DEBUG,"num_buf = %s\n", num_buf);
+				zte_web_write("MAX_Access_num", num_buf);
+				zte_web_write("m_MAX_Access_num", num_buf);
+			}
+		}
+
+		sc_cfg_get("MAX_Station_num", MAX_Station_num, sizeof(MAX_Station_num));
+		sc_cfg_get("MAX_Access_num", MAX_Access_num, sizeof(MAX_Access_num));
+		sc_cfg_get("m_MAX_Access_num", m_MAX_Access_num, sizeof(m_MAX_Access_num));
+
+		zte_web_write("MAX_Access_num_bak", MAX_Access_num);
+
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s],MAX_Access_num_bak=%s\n", __FILE__, MAX_Access_num);
+
+		max_sta_num = atoi(MAX_Station_num);
+		max_num = atoi(MAX_Access_num);
+		m_max_num = atoi(m_MAX_Access_num);
+		if ((max_sta_num < 0 || max_sta_num > WIFI_MAX_STA_NUM) ||
+			(max_num < 0 || max_num > WIFI_MAX_STA_NUM)) { //kw 3
+			slog(MISC_PRINT, SLOG_ERR,"\n error max_sta_num parameter\n");
+			return;
+		}
+
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s],MAX_Station_num=%s,MAX_Access_num=%s,m_MAX_Access_num=%s\n", __FILE__, MAX_Station_num, MAX_Access_num, m_MAX_Access_num);
+		if (max_num == max_sta_num) {
+			sprintf(m_num_buf, "%d", max_sta_num / 2);
+			zte_web_write("MAX_Access_num", m_num_buf);
+			zte_web_write("m_MAX_Access_num", m_num_buf);
+		} else {
+			if (max_num < max_sta_num) { // ʵ¼ÊÉÏ£¬³ýÁ˵ÈÓÚ×î´óÖµ£¬¾ÍÊÇСÓÚ×î´óÖµ£¬´Ë´¦ÅжÏÎÞÒâÒå
+				m_max_num = max_sta_num - max_num;
+				sprintf(m_num_buf, "%d", m_max_num);
+				zte_web_write("m_MAX_Access_num", m_num_buf);
+			}
+
+		}
+
+	} else if (!strcmp(m_ssid_enable, "0")) {
+		sc_cfg_set("AP_STARTMODE", "standard");
+		sc_cfg_get("MAX_Access_num_bak", MAX_Access_num, sizeof(MAX_Access_num));
+		zte_web_write("MAX_Access_num", MAX_Access_num);
+	} else {
+		slog(MISC_PRINT, SLOG_ERR,"\n error wifi_work_mode_set parameter\n");
+		return;
+	}
+}
+
+void zte_lan_stop_apsta()
+{
+	zte_web_write("wifi_sta_connection", "0");
+	//zte_web_write("blc_switch", "00");
+	zte_web_write("user_initiate_disconnect", "0"); //Óû§Ö÷¶¯Á¬½Ó״̬£¬Í˳ö¸ÉԤģʽ
+	zte_web_write("manual_d_wifi", "0");
+
+	slog(MISC_PRINT, SLOG_NORMAL,"[zte_lan_stop_apsta]MSG_CMD_WIFI_STATION_CLOSE_OPEN_MSSID\n", 0, NULL);
+
+	//zte_send_message(MODULE_ID_WIFI, MSG_CMD_WIFI_STATION_CLOSE_OPEN_MSSID, 0,  NULL);
+	ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_STATION_CLOSE_OPEN_MSSID, 0, NULL, 0);
+}
+
+void zte_wlan_basic_set(webs_t wp)
+{
+	char_t *wifi_on = NULL, *old_wifi_on = NULL;
+	char_t *radio_off = NULL;
+	char_t  *wirelessmode = NULL, *old_wirelessmode = NULL;
+	char_t  *countrycode = NULL, *old_countrycode = NULL;
+	//char_t  *ssid = NULL, *old_ssid = NULL;
+	char_t  *broadcastssid = NULL, *old_broadcastssid = NULL ;
+	char_t  *channel = NULL, *old_channel = NULL;
+	//char_t *abg_rate = NULL,*old_abg_rate = NULL;
+	//char_t *NoForwarding = NULL,*old_NoForwarding = NULL;
+	char_t *MAX_Access_num = NULL, *old_MAX_Access_num = NULL;
+	char_t *m_ssid_enable = NULL, *old_m_ssid_enable = NULL;
+	//char_t *m_SSID = NULL,*old_m_SSID = NULL;
+	//char_t *m_HideSSID = NULL,*old_m_HideSSID = NULL;
+	//char_t *m_NoForwarding = NULL,*old_m_NoForwarding =NULL;
+	char_t *wifi_11n_cap = NULL, *old_wifi_11n_cap = NULL;
+	//char_t  *channel_JP = NULL, *old_channel_JP = NULL;
+	char_t  *wifi_band = NULL, *old_wifi_band = NULL;
+
+	//int Access_num = 0;
+	unsigned int wifi_set_flags = 0;
+	char wifi_set_flags_str[NV_ITEM_STRING_LEN_20] = {0};
+	char wifi_sta_connection[8] = {0};
+
+	zte_topsw_state_e_type nv_ret = ZTE_NVIO_DONE;
+	char nv_basic[NVIO_WIFI_MAX_LEN] = {0}; // for nv read and write
+//cov m
+#define NV_READ(nv_name, str, ret) do{ret = zte_web_read(nv_name, nv_basic); str = nv_basic;}while(0)
+	/*lint -e717*/
+	//#define NV_WRITE(nv_name, str, ret)  do{ ret = zte_web_write(nv_name, (char *)str);}while(0)
+
+	slog(WIFI_PRINT, SLOG_ERR, "zte_wlan_basic_set enter \n");
+
+	//reset wifi_set_flags
+	(void)zte_web_write(WIFI_NV_ITEM_WIFI_SET_FLAGS, "");
+
+	//wifiEnabled or not
+	memset(nv_basic, 0, sizeof(nv_basic));
+	wifi_on = websGetVar(wp, T("wifiEnabled"), NULL);
+	if (wifi_on != NULL) {
+		if (STR_EQUAL(wifi_on, "0")) {
+			slog(MISC_PRINT, SLOG_ERR, T("UFIx User disable WIFI swtich!\n"));
+		} else if (STR_EQUAL(wifi_on, "1")) {
+			slog(MISC_PRINT, SLOG_ERR, T("UFIx User enable WIFI swtich!\n"));
+		}
+		NV_READ("wifiEnabled", old_wifi_on, nv_ret);
+		printf("[%s:%s]old_wifi_on=%s, nv_ret=%d\n", __FILE__, __FUNCTION__, old_wifi_on, nv_ret);
+		//NV_READ("RadioOff", radio_off, nv_ret);
+		//printf("[%s:%s]radio_off=%s, nv_ret=%d",__FILE__, __FUNCTION__, radio_off,nv_ret);
+		if (!STR_EQUAL(wifi_on, old_wifi_on)) { //kw 3
+			//send_to_mc = TRUE;
+			wifi_set_flags |= ZTE_WLAN_ON_OFF_SET;
+			NV_WRITE("wifiEnabled", wifi_on, nv_ret);
+
+#if 0
+			if (STR_EQUAL(wifi_on, "0") && STR_EQUAL(radio_off, "1")) {
+				NV_WRITE("wifiEnabled", wifi_on, nv_ret);
+				NV_WRITE("RadioOff", wifi_on, nv_ret);
+				NV_WRITE("RadioOn", wifi_on, nv_ret);
+
+			} else if (STR_EQUAL(wifi_on, "1")) {
+				NV_WRITE("wifiEnabled", wifi_on, nv_ret);
+				NV_WRITE("RadioOn", wifi_on, nv_ret);
+			}
+#endif
+		}
+		printf("[%s:%s]wifi_on:[%s]\n", __FILE__, __FUNCTION__, wifi_on);
+	}
+
+	//wifiMode
+	memset(nv_basic, 0, sizeof(nv_basic));
+	wirelessmode = websGetVar(wp, T("wifiMode"), NULL);
+	if (wirelessmode != NULL) {
+		slog(MISC_PRINT, SLOG_ERR, T("UFIx User set WIFI advanced settings!\n"));
+		printf("[%s:%s]wirelessmode:%s\n", __FILE__, __FUNCTION__, wirelessmode);   /*lint !e26*/
+		NV_READ("WirelessMode", old_wirelessmode, nv_ret);
+		printf("[%s:%s]old_wirelessmode=%s, nv_ret=%d\n", __FILE__, __FUNCTION__, old_wirelessmode, nv_ret); /*lint !e26*/
+		if (!STR_EQUAL(wirelessmode, old_wirelessmode)) { //kw 3
+			wifi_set_flags |= ZTE_WLAN_WIRELESS_MODE_SET;
+			NV_WRITE("WirelessMode", wirelessmode, nv_ret);
+			printf("[%s:%s]wirelessmode is :%s\n", __FILE__, __FUNCTION__, wirelessmode);       /*lint !e26*/
+		}
+	}
+
+	/* country code*/
+	memset(nv_basic, 0, sizeof(nv_basic));
+	countrycode = websGetVar(wp, T("countryCode"), NULL);
+	if (countrycode != NULL) {
+#ifdef WEBS_SECURITY
+		zte_web_read("wifi_sta_connection", wifi_sta_connection);
+		if(wifi_sta_connection[0] == '1')
+		{
+			zte_write_result_to_web(wp, FAILURE);
+			return;
+		}
+#endif		
+		NV_READ("CountryCode", old_countrycode, nv_ret);
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]old_countrycode=%s, nv_ret=%d\n", __FILE__, __FUNCTION__, old_countrycode, nv_ret);  /*lint !e26*/
+		if (!STR_EQUAL(countrycode, old_countrycode)) { //kw 3
+			wifi_set_flags |= ZTE_WLAN_COUNTRY_SET;
+			NV_WRITE("CountryCode", countrycode, nv_ret);
+		}
+
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]countrycode:%s\n", __FILE__, __FUNCTION__, countrycode);         /*lint !e26*/
+	}
+
+#if 0  //²»ÊôÓڸ߼¶É䯵²ÎÊý
+	//broadcastSsidEnabled
+	memset(nv_basic, 0, sizeof(nv_basic));
+	broadcastssid = websGetVar(wp, T("broadcastSsidEnabled"), NULL);
+	if (broadcastssid != NULL) {
+		NV_READ("HideSSID", old_broadcastssid, nv_ret);
+		printf("[%s:%s]old_broadcastssid=%s, nv_ret=%d\n", __FILE__, __FUNCTION__, old_broadcastssid, nv_ret);  /*lint !e26*/
+		if ((nv_ret ==  ZTE_NVIO_DONE &&
+		     !STR_EQUAL(broadcastssid, old_broadcastssid)) ||
+		    (nv_ret !=  ZTE_NVIO_DONE)) {
+			//send_to_mc = TRUE;
+			wifi_set_flags |= ZTE_WLAN_BROADCAST_SET;
+			NV_WRITE("HideSSID", broadcastssid, nv_ret);
+		}
+		printf("[%s:%s]broadcastssid:%s\n", __FILE__, __FUNCTION__, broadcastssid);     /*lint !e26*/
+	}
+#endif
+	//selectedChannel
+	memset(nv_basic, 0, sizeof(nv_basic));
+	channel = websGetVar(wp, T("selectedChannel"), NULL);
+	if (channel != NULL) {
+		NV_READ("Channel", old_channel, nv_ret);
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]old_channel=%s, nv_ret=%d\n", __FILE__, __FUNCTION__, old_channel, nv_ret);  /*lint !e26*/
+		if (!STR_EQUAL(channel, old_channel)) { //kw 3
+			//send_to_mc = TRUE;
+			wifi_set_flags |= ZTE_WLAN_CHANNEL_SET;
+			NV_WRITE("Channel", channel, nv_ret);
+		}
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]channel:%s\n", __FILE__, __FUNCTION__, channel); /*lint !e26*/
+	}
+
+	//band setting
+	memset(nv_basic, 0, sizeof(nv_basic));
+	wifi_band = websGetVar(wp, T("wifi_band"), NULL);
+	if (wifi_band != NULL) {
+		NV_READ("wifi_band", old_wifi_band, nv_ret);
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]old_wifi_band=%s, nv_ret=%d\n", __FILE__, __FUNCTION__, old_wifi_band, nv_ret);      /*lint !e26*/
+		if (!STR_EQUAL(wifi_band, old_wifi_band)) { //kw 3
+			wifi_set_flags |= ZTE_WLAN_WIFI_BAND_SET;
+			NV_WRITE("wifi_band", wifi_band, nv_ret);
+		}
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]wifi_band:%s\n", __FILE__, __FUNCTION__, wifi_band);         /*lint !e26*/
+	}
+
+
+	//set wifi rate
+#if 0
+	memset(nv_basic, 0, sizeof(nv_basic));
+	abg_rate = websGetVar(wp, T("abg_rate"), NULL);
+	if (abg_rate != NULL) {
+		NV_READ("HT_MCS", old_abg_rate, nv_ret);
+		printf("old_abg_rate=%s, nv_ret=%d", old_abg_rate, nv_ret);  /*lint !e26*/
+		if ((nv_ret ==  ZTE_NVIO_DONE &&
+		     !STR_EQUAL(abg_rate, old_abg_rate)) ||
+		    (nv_ret !=  ZTE_NVIO_DONE)) {
+			wifi_set_flags |= ZTE_WLAN_DATA_RATE_SET;
+			NV_WRITE("HT_MCS", abg_rate, nv_ret);
+		}
+
+		printf("abg_rate:%s", abg_rate); /*lint !e26*/
+	}
+#endif
+
+#if 0 // not belong to RF parameters
+	//set  MAX_Access_num
+	memset(nv_basic, 0, sizeof(nv_basic));
+	MAX_Access_num = websGetVar(wp, T("MAX_Access_num"), NULL);
+	if (MAX_Access_num != NULL) {
+		NV_READ("MAX_Access_num", old_MAX_Access_num, nv_ret);
+		printf("[%s:%s]old_MAX_Access_num=%s, nv_ret=%d\n", __FILE__, __FUNCTION__, old_MAX_Access_num, nv_ret);    /*lint !e26*/
+		if ((nv_ret ==  ZTE_NVIO_DONE &&
+		     !STR_EQUAL(MAX_Access_num, old_MAX_Access_num)) ||
+		    (nv_ret !=  ZTE_NVIO_DONE)) {
+			wifi_set_flags |= ZTE_WLAN_MAX_ACCESS_NUM_SET;
+			NV_WRITE("MAX_Access_num", MAX_Access_num, nv_ret);
+			NV_WRITE("MAX_Access_num_user_set", "1", nv_ret);
+		}
+
+		printf("[%s:%s]MAX_Access_num:%s\n", __FILE__, __FUNCTION__, MAX_Access_num);   /*lint !e26*/
+	}
+#endif
+	//set  m_ssid_enable
+	memset(nv_basic, 0, sizeof(nv_basic));
+	m_ssid_enable = websGetVar(wp, T("m_ssid_enable"), NULL);
+	if (m_ssid_enable != NULL) {
+#if 1
+		NV_READ("m_ssid_enable", old_m_ssid_enable, nv_ret);
+		slog(MISC_PRINT, SLOG_DEBUG,"old_m_ssid_enable=%s, nv_ret=%d\n", old_m_ssid_enable, nv_ret);/*lint !e26*/
+		if (!STR_EQUAL(m_ssid_enable, old_m_ssid_enable)) { //kw 3
+			wifi_set_flags |= ZTE_WLAN_SET_AP_MSSID;
+			NV_WRITE("m_ssid_enable", m_ssid_enable, nv_ret);
+			wlan_set_change_ssid_key_status();//added by dujiajiao
+			wifi_work_mode_set_basic();
+		}
+#else
+		if (!strcmp(m_ssid_enable, "1")) {
+			NV_WRITE("m_ssid_enable", "0", nv_ret);
+		}
+#endif
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]m_ssid_enable:%s\n", __FILE__, __FUNCTION__, m_ssid_enable); /*lint !e26*/
+	}
+
+	//set  wifi_11n_cap
+	memset(nv_basic, 0, sizeof(nv_basic));
+	NV_READ("wifi_11n_cap", old_wifi_11n_cap, nv_ret);
+	slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]old_wifi_11n_cap=%s, nv_ret=%d\n", __FILE__, __FUNCTION__, old_wifi_11n_cap, nv_ret); /*lint !e26*/
+	wifi_11n_cap = websGetVar(wp, T("wifi_11n_cap"), NULL);
+	if (wifi_11n_cap != NULL) {
+		if (!STR_EQUAL(wifi_11n_cap, old_wifi_11n_cap)) { //kw 3
+			wifi_set_flags |= ZTE_WLAN_WIRELESS_MODE_SET;
+			NV_WRITE("wifi_11n_cap", wifi_11n_cap, nv_ret);
+		}
+
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]wifi_11n_cap:%s\n", __FILE__, __FUNCTION__, wifi_11n_cap);       /*lint !e26*/
+	}
+
+	//last, write the wifi_set_flags
+	(void)snprintf(wifi_set_flags_str, sizeof(wifi_set_flags_str) - 1, "%u", wifi_set_flags);
+	(void)zte_web_write(WIFI_NV_ITEM_WIFI_SET_FLAGS, wifi_set_flags_str);
+	slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]wifi_set_flags:[0x%x] to [%s]\n", __FILE__, __FUNCTION__, wifi_set_flags, wifi_set_flags_str); /*lint !e26*/
+
+	if (0 != wifi_set_flags) {
+		unsigned int  flags = 0;
+		UCHAR  flag_str[8] = {0};
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]send wifi para to wlan-server@basic_set\n", __FILE__, __FUNCTION__); /*lint !e26*/
+
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]m_ssid_enable=%s,wifi_on=%s\n", __FILE__, __FUNCTION__, m_ssid_enable, wifi_on); /*lint !e26*/
+
+		if (NULL != wifi_on && (wifi_set_flags & ZTE_WLAN_ON_OFF_SET)) {
+//¿ªÆôwifiʱºò£¬Èç¹ûͬʱ¿ªÆôMSSID£¬»¹ÊÇÖ»ÉèÖÿªÆôwifi µÄflags£¬ÒòΪMSSIDµÄnvÒѾ­ÉèÖùýÁË
+
+			if (0 == atoi(wifi_on))
+				flags = WIFI_ADVANCED_CLOSE;
+			else if (m_ssid_enable != NULL && 1 == atoi(m_ssid_enable)) { // ͬʱ¿ªÆômultisssid£¬ÒªÔ¤·Àapsta Ò»²¢¿ªÆôµÄÇé¿ö
+				flags = WIFI_ADVANCED_OPEN_VA01;
+			} else
+				flags = WIFI_ADVANCED_OPEN;
+
+		} else if (wifi_set_flags & ZTE_WLAN_SET_AP_MSSID) { // ÔÚwifi¿ª¹Ø¿ªÆôµÄ״̬Ï£¬¶Ô Multi SSID ½øÐпª¹ØÇл»
+			if (1 == atoi(m_ssid_enable))
+				flags = WIFI_ADVANCED_OPEN_VA1;
+			else
+				flags = WIFI_ADVANCED_CLOSE_MSSID;
+
+		} else { // ÉèÖø߼¶²ÎÊýÉ䯵
+			flags = WIFI_ADVANCED_RF;
+		}
+		snprintf(flag_str,sizeof(flag_str), "%d", flags);
+		zte_web_read("wifi_sta_connection", wifi_sta_connection);
+
+
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]m_ssid_enable=%s,wifi_on=%s\n", __FILE__, __FUNCTION__, m_ssid_enable, wifi_on); /*lint !e26*/
+
+//when open mssid , need close apsta at same time
+		if ((flags == WIFI_ADVANCED_OPEN_VA1) &&  atoi(wifi_sta_connection) == 1) {
+			zte_lan_stop_apsta();
+		} else {
+			//if(0 != zte_send_message(MODULE_ID_WIFI, MSG_CMD_WIFI_ADVANCED, strlen(flag_str)+1,  flag_str))
+			if (0 != ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_ADVANCED, strlen(flag_str) + 1, flag_str, 0)) {
+				zte_write_result_to_web(wp, FAILURE);
+				return;
+			}
+		}
+		slog(WIFI_PRINT, SLOG_ERR, "[%s:%s]wifi set cmd done! \n", __FILE__, __FUNCTION__); /*lint !e26*/
+	}
+	zte_write_result_to_web(wp, SUCCESS);
+
+}
+
+void zte_wlan_mac_filter_set(webs_t wp)
+{
+	char_t *ACL_mode = NULL;
+	char_t *old_ACL_mode = NULL;
+	char_t *wifi_mac_black_list = NULL;
+	char_t *wifi_mac_white_list = NULL;
+	char_t *old_wifi_mac_black_list = NULL;
+	char_t *old_wifi_mac_white_list = NULL;
+	char_t *wifi_hostname_black_list = NULL;
+	char_t *wifi_hostname_white_list = NULL;
+	unsigned int wifi_set_flags = 0;
+	char wifi_set_flags_str[NV_ITEM_STRING_LEN_20] = {0};
+	char accesscontrollist0[720] = {0};
+	zte_topsw_state_e_type nv_ret = ZTE_NVIO_DONE;
+	char nv_basic[NVIO_WIFI_MAX_LEN] = {0}; // for nv read and write
+	char nv_mac[720] = {0};
+//cov m
+#define NV_READ(nv_name, str, ret)  do{ret = zte_web_read(nv_name, nv_basic); str = nv_basic;}while(0)
+#define NV_READ_MAC(nv_name, str, ret)  do{ret = zte_web_read(nv_name, nv_mac); str = nv_mac;}while(0)
+	slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]zte_wlan_mac_filter_set.\n", __FILE__, __FUNCTION__); /*lint !e26*/
+	memset(nv_basic, 0, sizeof(nv_basic));
+	NV_READ("ACL_mode", old_ACL_mode, nv_ret);
+	ACL_mode = websGetVar(wp, T("ACL_mode"), T(""));
+
+	slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s] ACL_mode =%s,nv_ret = %d  old_ACL_mode = %s \n", __FILE__, __FUNCTION__, ACL_mode, nv_ret, old_ACL_mode);
+	if (ACL_mode != NULL) {
+		if (!strcmp(ACL_mode, "2")) {
+			slog(MISC_PRINT, SLOG_ERR, T("UFIx User enable black list!\n"));
+		} else if (!strcmp(ACL_mode, "0")) {
+			slog(MISC_PRINT, SLOG_ERR, T("UFIx User disable black list!\n"));
+		}
+		if (!STR_EQUAL(ACL_mode, old_ACL_mode)) { //kw 3
+			wifi_set_flags |= ZTE_WLAN_ACL_SET;
+			NV_WRITE("ACL_mode", ACL_mode, nv_ret);
+		}
+
+	} else {//klocwork
+		slog(MISC_PRINT, SLOG_ERR,"[%s:%s]ACL_mode:no such para.", __FILE__, __FUNCTION__); /*lint !e26*/
+		zte_write_result_to_web(wp, FAILURE);
+		return;
+	}
+
+	memset(nv_mac, 0, sizeof(nv_mac));
+	if (!strcmp(ACL_mode, "2")) {
+		char  black_list[720] = {0};
+		NV_READ_MAC("wifi_mac_black_list", old_wifi_mac_black_list, nv_ret);
+		wifi_mac_black_list = websGetVar(wp, T("wifi_mac_black_list"), T(""));
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s] wifi_mac_black_list = %s, old_wifi_mac_black_list=%s \n", __FILE__, wifi_mac_black_list, old_wifi_mac_black_list);
+		//cov m
+		if ((wifi_mac_black_list != NULL) && (strlen(wifi_mac_black_list) < sizeof(black_list))) {
+			str2upper(wifi_mac_black_list, black_list);
+			if (!STR_EQUAL(black_list, old_wifi_mac_black_list)) { //kw 3
+				wifi_set_flags |= ZTE_WLAN_ACL_SET;
+				NV_WRITE("wifi_mac_black_list", black_list, nv_ret);
+			}
+
+		}
+		wifi_hostname_black_list = websGetVar(wp, T("wifi_hostname_black_list"), T(""));
+		if (wifi_hostname_black_list != NULL)//klocwork
+			(void)zte_web_write("wifi_hostname_black_list", wifi_hostname_black_list);
+	} else if (!strcmp(ACL_mode, "1")) {
+		char  white_list[720] = {0};
+		NV_READ_MAC("wifi_mac_white_list", old_wifi_mac_white_list, nv_ret);
+		wifi_mac_white_list = websGetVar(wp, T("wifi_mac_white_list"), T(""));
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s] wifi_mac_white_list = %s,old_wifi_mac_white_list=%s \n", __FILE__,  wifi_mac_white_list, old_wifi_mac_white_list);
+		//cov m
+		if ((wifi_mac_white_list != NULL)  && (strlen(wifi_mac_white_list) < sizeof(white_list))) {
+			str2upper(wifi_mac_white_list, white_list);
+			if (!STR_EQUAL(white_list, old_wifi_mac_white_list)) { //kw 3
+				wifi_set_flags |= ZTE_WLAN_ACL_SET;
+				NV_WRITE("wifi_mac_white_list", white_list, nv_ret);
+			}
+
+		}
+		wifi_hostname_white_list = websGetVar(wp, T("wifi_hostname_white_list"), T(""));
+		if (wifi_hostname_white_list != NULL)//klocwork
+			(void)zte_web_write("wifi_hostname_white_list", wifi_hostname_white_list);
+	}
+	if ('\0' == *ACL_mode) {
+		slog(MISC_PRINT, SLOG_ERR,"[%s:%s]ACL_mode:invalid input para.", __FILE__, __FUNCTION__); /*lint !e26*/
+		zte_write_result_to_web(wp, FAILURE);
+		return;
+	}
+
+	//(void)zte_web_write("ACL_mode",ACL_mode);
+	//(void)zte_web_write("wifi_mac_black_list", wifi_mac_black_list);
+
+
+/*
+	if (!strcmp(ACL_mode, "2")) {
+		(void)zte_web_write("wifi_hostname_black_list", wifi_hostname_black_list);
+	} else if (!strcmp(ACL_mode, "1")) {
+		(void)zte_web_write("wifi_hostname_white_list", wifi_hostname_white_list);
+	}
+*/
+
+	slog(MISC_PRINT, SLOG_DEBUG,"[%s] wifi_mac_black_list=%s ,wifi_mac_white_list=%s, wifi_set_flags=%d\n",
+	       __FILE__, wifi_mac_black_list, wifi_mac_white_list, wifi_set_flags);
+
+	if (wifi_set_flags != 0) {
+		(void)snprintf(wifi_set_flags_str, sizeof(wifi_set_flags_str) - 1, "%u", wifi_set_flags);
+		(void)zte_web_write(WIFI_NV_ITEM_WIFI_SET_FLAGS, wifi_set_flags_str);
+		//zte_send_message(MODULE_ID_WIFI,MSG_CMD_WIFI_MAC,0,NULL);
+		ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_MAC, 0, NULL, 0);
+
+		slog(MISC_PRINT, SLOG_NORMAL,"[%s:%s] MSG_CMD_WIFI_MAC  send to wlan-server!\n", __FILE__, __FUNCTION__); /*lint !e26*/
+	} else {
+		slog(MISC_PRINT, SLOG_NORMAL,"[%s:%s]do not deal\n", __FILE__, __FUNCTION__);
+	}
+
+	zte_write_result_to_web(wp, SUCCESS);
+
+}
+
+void zte_wlan_wps_mode_set(webs_t wp)
+
+{
+	slog(MISC_PRINT, SLOG_ERR, T("UFIx User set wps mode!\n"));
+
+	char *wps_mode = NULL;
+	char *WPS_SSID = NULL;
+	char *wps_pin = NULL;
+
+//    char pinIsValidate[10] = {0};
+	char auth_mode[NV_ITEM_STRING_LEN_20] = {0};
+	char encrypType[WF_ENCRY_TYPE_LEN] = {0};
+	char wps_state[NV_ITEM_STRING_LEN_50] = {0};
+	int  pin_len = 0;
+	unsigned int wifi_set_flags = 0;
+	char wifi_set_flags_str[NV_ITEM_STRING_LEN_20] = {0};
+
+	char *wifi_wps_index = NULL;
+	char  wps_msg[16] = {0};
+
+	wps_mode = websGetVar(wp, T("wps_mode"), T(""));
+	WPS_SSID = websGetVar(wp, T("WPS_SSID"), T(""));
+	wifi_wps_index = websGetVar(wp, T("wifi_wps_index"), T(""));
+
+	slog(MISC_PRINT, SLOG_DEBUG,"[%s][%s] wifi_wps_index = %s\n", __FILE__, __FUNCTION__, wifi_wps_index);
+
+	if (('\0' == *wps_mode) || ('\0'  == *WPS_SSID)) {
+		slog(MISC_PRINT, SLOG_ERR,"[%s:%s]zte_lan_wps_set:invalid input para.\n wps_mode is [%s]\n WPS_SSID is [%s]", __FILE__, __FUNCTION__, wps_mode, WPS_SSID); /*lint !e26*/
+		zte_write_result_to_web(wp, FAILURE);
+		return;
+	}
+
+	(void) zte_web_read(NV_WIFI_WPS_STATE, wps_state);
+	if (0 == strcmp(wps_state, "1")) {
+		slog(MISC_PRINT, SLOG_ERR,"zte_lan_wps_set:invalid operate, wps in processing..");/*lint !e26*/
+		zte_write_result_to_web(wp, FAILURE);
+		return;
+	}
+
+	if (0 == strcmp(wps_mode, WPS_MODE_PBC)) {
+		(void)zte_web_write(NV_WIFI_WPS_STATE, "1");
+		(void)zte_web_write(NV_WIFI_WPS_MODE, wps_mode);
+		(void)zte_web_write(NV_WIFI_WPS_SSID, WPS_SSID);
+	} else if (0 == strcmp(wps_mode, WPS_MODE_PIN)) {
+		wps_pin = websGetVar(wp, T("wps_pin"), T(""));
+		//add by liuyingnan for server safe for xss attack start
+		if (DATA_NO_SAFE == zte_Safe_noSpecialChar(wps_pin)) {
+			slog(MISC_PRINT, SLOG_ERR,"[%s:%s]Get Data is no Safe:wps_pin:%s\n", __FILE__, __FUNCTION__, wps_pin); /*lint !e26*/
+			zte_write_result_to_web(wp, FAILURE);
+			return;
+		}
+
+		//printf(" ---- zte_wlan_wps_mode_set len is %s\n", wps_pin);
+		if (wps_pin == NULL) {
+			zte_write_result_to_web(wp, FAILURE);
+			return;
+		}
+
+		pin_len = strlen(wps_pin);
+		if ((pin_len == 0) || ((pin_len != 4) && (pin_len != 8))) {
+			zte_write_result_to_web(wp, FAILURE);
+			return;
+		}
+		int wps_pin_num = atoi(wps_pin);
+		if(wps_pin_num<0 || wps_pin_num> INT_MAX-1)
+		{
+			wps_pin_num = 0;
+		}
+		if ((pin_len == 8) && !validate_pin_code(wps_pin_num)) {
+			zte_write_result_to_web(wp, FAILURE);
+			slog(MISC_PRINT, SLOG_ERR,"%s PIN check failed\n", __FUNCTION__);
+			return;
+		}
+
+
+		//add by liuyingnan for server safe for xss attack end
+		(void)zte_web_write(NV_WIFI_WPS_STATE, "1");
+		(void)zte_web_write(NV_WIFI_WPS_MODE, wps_mode);
+		(void)zte_web_write(NV_WIFI_WPS_SSID, WPS_SSID);
+		(void)zte_web_write(NV_WIFI_WPS_PIN, wps_pin);
+	} else {
+		slog(MISC_PRINT, SLOG_ERR,"[%s][%s]invalid wps_mode[%s].", __FILE__, __FUNCTION__, wps_mode); /*lint !e26*/
+		zte_write_result_to_web(wp, FAILURE);
+		return;
+	}
+
+	wifi_set_flags |= ZTE_WLAN_WPS_SET;
+
+	//last, write the wifi_set_flags
+	(void)snprintf(wifi_set_flags_str, sizeof(wifi_set_flags_str) - 1, "%u", wifi_set_flags);
+	(void)zte_web_write(WIFI_NV_ITEM_WIFI_SET_FLAGS, wifi_set_flags_str);
+
+	slog(MISC_PRINT, SLOG_NORMAL,"[%s][%s] send to wlan-server wps cmd\n", __FILE__, __FUNCTION__);
+
+
+	if (wifi_wps_index != NULL) {
+		zte_web_write(NV_WIFI_WPS_INDEX, wifi_wps_index);
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s][%s] wifi_wps_index = %s\n", __FILE__, __FUNCTION__, wifi_wps_index);
+	}
+
+	//zte_send_message(MODULE_ID_WIFI,MSG_CMD_WIFI_WPS,0,NULL);
+	ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_WPS, 0, NULL, 0);
+	slog(MISC_PRINT, SLOG_DEBUG,"[%s][%s]wifi set cmd done!", __FILE__, __FUNCTION__); /*lint !e26*/
+	zte_write_result_to_web(wp, SUCCESS);
+}
+
+
+
+void zte_wlan_web_ssid1_set(webs_t wp)
+{
+	slog(MISC_PRINT, SLOG_DEBUG, T("UFIx User set WIFI SSID settings!\n"));
+
+	unsigned int wifi_set_flags = 0;
+	char wifi_set_flags_str[NV_ITEM_STRING_LEN_20] = {0};
+	zte_topsw_state_e_type ret = ZTE_NVIO_DONE;
+
+	(void)zte_web_write(WIFI_NV_ITEM_WIFI_SET_FLAGS, "");
+
+	slog(MISC_PRINT, SLOG_DEBUG,"zte_wlan_web_ssid1_set:+++++++++++++++++======\n");
+	if (FALSE == zte_wlan_ssid1_basic_set(wp, &wifi_set_flags)) {
+		slog(MISC_PRINT, SLOG_ERR,"zte_wlan_web_ssid1_set: zte_wlan_ssid1_basic_set failure .\n");/*lint !e26*/
+		zte_write_result_to_web(wp, FAILURE);
+		return;
+	}
+
+	if (-1 == zte_lan_ssid1_security_set(wp, &wifi_set_flags)) {
+		slog(MISC_PRINT, SLOG_ERR,"call zte_lan_ssid1_security_set failure .\n");/*lint !e26*/
+		zte_write_result_to_web(wp, FAILURE);
+		return;
+	}
+
+	(void)snprintf(wifi_set_flags_str, sizeof(wifi_set_flags_str) - 1, "%u", wifi_set_flags);
+	(void)zte_web_write(WIFI_NV_ITEM_WIFI_SET_FLAGS, wifi_set_flags_str);
+	slog(MISC_PRINT, SLOG_DEBUG,"zte_wlan_web_ssid1_set: wifi_set_flags [%u] to [%s].\n", wifi_set_flags, wifi_set_flags_str); /*lint !e26*/
+
+	if (0 != wifi_set_flags) {
+		slog(MISC_PRINT, SLOG_NORMAL,"send wifi para to wlan-server@ssid1\n");/*lint !e26*/
+		//zte_send_message(MODULE_ID_WIFI,MSG_CMD_WIFI_SSID,NULL,NULL);
+		ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_CFG_AP, 0, NULL, 0);
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s][%s]wifi set cmd done!", __FILE__, __FUNCTION__); /*lint !e26*/
+	}
+	zte_write_result_to_web(wp, SUCCESS);
+
+}
+
+
+
+void zte_wlan_ssid2_set(webs_t wp)
+{
+
+	unsigned int wifi_set_flags = 0;
+	char wifi_set_flags_str[NV_ITEM_STRING_LEN_20] = {0};
+	zte_topsw_state_e_type ret = ZTE_NVIO_DONE;
+
+	(void)zte_web_write(WIFI_NV_ITEM_WIFI_SET_FLAGS, "");
+
+	if (FALSE == zte_wlan_ssid2_basic_set(wp, &wifi_set_flags)) {
+		slog(MISC_PRINT, SLOG_ERR,"zte_wlan_ssid2_set: zte_wlan_ssid2_basic_set failure .");/*lint !e26*/
+		zte_write_result_to_web(wp, FAILURE);
+		return;
+	}
+
+	if (-1 == zte_lan_ssid2_security_set(wp, &wifi_set_flags)) {
+		slog(MISC_PRINT, SLOG_ERR,"call zte_lan_ssid2_security_set fail.\n .");/*lint !e26*/
+		zte_write_result_to_web(wp, FAILURE);
+		return;
+	}
+
+	(void)snprintf(wifi_set_flags_str, sizeof(wifi_set_flags_str) - 1, "%u", wifi_set_flags);
+	(void)zte_web_write(WIFI_NV_ITEM_WIFI_SET_FLAGS, wifi_set_flags_str);
+	slog(MISC_PRINT, SLOG_DEBUG,"zte_wlan_ssid2_set: wifi_set_flags [%u] to [%s].", wifi_set_flags, wifi_set_flags_str);
+
+	if (0 != wifi_set_flags) {
+		slog(MISC_PRINT, SLOG_NORMAL,"send wifi para to wlan-server@ssid2");/*lint !e26*/
+		//zte_send_message(MODULE_ID_WIFI,MSG_CMD_WIFI_SSID_M,NULL,NULL);
+		ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_CFG_AP2, 0, NULL, 0);
+		slog(MISC_PRINT, SLOG_DEBUG,"wifi set cmd done!");        /*lint !e26*/
+	}
+	zte_write_result_to_web(wp, SUCCESS);
+
+}
+
+
+
+/**********************************************************************
+* Function:        zte_wlan_sleep_set
+* Description:     to set the wifi sleep mode
+* Input:           http info
+* Output:
+* Return:           0:ok;-1:fail
+* Others:
+* Modify Date   Version     Author          Modification
+* -----------------------------------------------
+* 2012/07/11    V1.0        zhouti       first version
+**********************************************************************/
+void zte_wlan_sleep_set(webs_t wp)
+{
+	char_t *sleepMode = NULL;
+	//char_t *wifi_mac_black_list = NULL;
+	//char_t *wifi_hostname_black_list = NULL;
+	unsigned int wifi_set_flags = 0;
+	char wifi_set_flags_str[NV_ITEM_STRING_LEN_20] = {0};
+
+	slog(MISC_PRINT, SLOG_DEBUG,"[%s][%s]zte_wlan_sleep_set.", __FILE__, __FUNCTION__); /*lint !e26*/
+	//printf("zhouti zte_wlan_sleep_set------------------------\n");
+	sleepMode = websGetVar(wp, T("sysIdleTimeToSleep"), T(""));
+
+	if (NULL == sleepMode || '\0' == *sleepMode) {
+		slog(MISC_PRINT, SLOG_ERR,"sleepMode:invalid input para.");/*lint !e26*/
+		zte_write_result_to_web(wp, FAILURE);
+		return;
+	}
+	//printf("zhouti zte_wlan_sleep_set sleepMode is %s\n", sleepMode);
+	(void)zte_web_write("Sleep_interval", sleepMode);
+	// (void)zte_web_write("wifi_mac_black_list", wifi_mac_black_list);
+	// (void)zte_web_write("wifi_hostname_black_list", wifi_hostname_black_list);
+
+
+	wifi_set_flags |= ZTE_WLAN_SET_AP_SLEEPTIMER;
+
+	(void)snprintf(wifi_set_flags_str, sizeof(wifi_set_flags_str) - 1, "%u", wifi_set_flags);
+	(void)zte_web_write(WIFI_NV_ITEM_WIFI_SET_FLAGS, wifi_set_flags_str);
+
+	slog(MISC_PRINT, SLOG_NORMAL,"send wifi para to wlan-mac_filter_set@basic_set");/*lint !e26*/
+	//zte_send_message(MODULE_ID_WIFI, MSG_CMD_WIFI_SLEEP, 0, NULL);
+	ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_SLEEP, 0, NULL, 0);
+	//printf("wifi set cmd done!");/*lint !e26*/
+
+	zte_write_result_to_web(wp, SUCCESS);
+}
+
+static int check_web_input_wifi(char *str, int len)
+{
+	int i = 0;
+	if (str == NULL || len <= 0 || strlen(str) < len) {
+		return 0;
+	}
+	for (i = 0; i < len; i++) {
+		if (strchr("`$&*\\[];:\'\"<>,",str[i]) || !isprint(str[i])) {
+			return 0;
+		}
+	}
+	return 1;
+}
+
+/**********************************************************************
+* Function:        zte_wlan_coverage_set
+* Description:     to set the wifi coverage
+* Input:           http info
+* Output:
+* Return:
+* Others:
+* Modify Date   Version     Author          Modification
+* -----------------------------------------------
+* 2014/05/27    V1.0        zhouti       first version
+**********************************************************************/
+void zte_wlan_coverage_set(webs_t wp)
+{
+	char_t *wifi_coverage = NULL;
+	char_t old_wifi_coverage[WIFI_COVERAGE_LEN + 1] = {0};
+	unsigned int wifi_set_flags = 0;
+	char wifi_set_flags_str[NV_ITEM_STRING_LEN_20] = {0};
+	slog(MISC_PRINT, SLOG_DEBUG,"zte_wlan_coverage_set.");
+	//printf("zhouti zte_wlan_coverage_set------------------------\n");
+	wifi_coverage = websGetVar(wp, T(NV_WIFI_COVERAGE), T(""));
+
+	if (NULL == wifi_coverage || '\0' == *wifi_coverage) {
+		slog(MISC_PRINT, SLOG_ERR,"[%s][%s]coverage: invalid input para.", __FILE__, __FUNCTION__);
+		zte_write_result_to_web(wp, FAILURE);
+		return;
+	}
+	(void)zte_web_read(NV_WIFI_COVERAGE, old_wifi_coverage);
+	if (strcmp(wifi_coverage, old_wifi_coverage)) { //kw 3
+		(void)zte_web_write(NV_WIFI_COVERAGE, wifi_coverage);
+
+		wifi_set_flags |= ZTE_WLAN_POWER_SET;
+
+		(void)snprintf(wifi_set_flags_str, sizeof(wifi_set_flags_str) - 1, "%u", wifi_set_flags);
+		(void)zte_web_write(WIFI_NV_ITEM_WIFI_SET_FLAGS, wifi_set_flags_str);
+
+		slog(MISC_PRINT, SLOG_NORMAL,"send wifi para to wlan-mac_filter_set@basic_set");/*lint !e26*/
+		//zte_send_message(MODULE_ID_WIFI,MSG_CMD_WIFI_COVERAGE,0,NULL);
+		ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_COVERAGE, 0, NULL, 0);
+		//printf("wifi set cmd done!");/*lint !e26*/
+	}
+	zte_write_result_to_web(wp, SUCCESS);
+}
+
+static int zte_wlan_ssid1_basic_set(webs_t wp, unsigned int *wifi_set_flags)
+{
+
+	char_t  *ssid = NULL;
+	char_t  *broadcastssid = NULL ;
+	char_t  *NoForwarding = NULL ;
+	char_t *MAX_Access_num = NULL;
+	zte_topsw_state_e_type status = ZTE_NVIO_MAX;
+	char nv_tmp[NVIO_WIFI_MAX_LEN] = {0};
+	char_t  *wirelessmode = NULL;
+	char_t  *countrycode = NULL;
+	char_t  *channel = NULL;
+	char_t *wifi_11n_cap = NULL;
+	char_t  *wifi_band = NULL;
+	char_t  *show_qrcode_flag = NULL;//main ssid show qrcode flag
+
+	char wifi_sta_connection[8] = {0};
+
+	sc_cfg_get("wifi_sta_connection", wifi_sta_connection, sizeof(wifi_sta_connection));
+	slog(MISC_PRINT, SLOG_DEBUG,"[%s][%s]wifi_sta_connection=%s\n", __FILE__, __FUNCTION__, wifi_sta_connection);
+
+	//ssid
+	memset(nv_tmp, 0, sizeof(nv_tmp));
+	ssid = websGetVar(wp, T("ssid"), NULL);
+#ifdef WEBS_SECURITY
+		if(ssid && !check_web_input_wifi(ssid,strlen(ssid)))
+		{
+			slog(MISC_PRINT, SLOG_ERR,"[goahead]ssid1=%s\n",ssid);
+			return FALSE;
+		}
+#endif
+	if (ssid != NULL  && !(wp->flags & WEBS_XML_CLIENT_REQUEST)) {
+		(void)zte_web_read("SSID1", nv_tmp);
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]old_ssid=[%s], ssid=[%s]", __FILE__, __FUNCTION__, nv_tmp, ssid); /*lint !e26*/
+		//add by liuyingnan for server safe for xss attack start
+#if 0 //kw 3
+		if (DATA_NO_SAFE == zte_Safe_noSpecialCharForSSID(ssid)) {
+			slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]Get Data is no Safe:ssid:%s\n", __FILE__, __FUNCTION__, ssid); /*lint !e26*/
+			return FALSE;
+		}
+#endif
+		//add by liuyingnan for server safe for xss attack end
+		if (0 != strcmp(ssid, nv_tmp)) {
+			*wifi_set_flags |= ZTE_WLAN_SSID_SET;
+			status = zte_web_write("SSID1", ssid);
+			wlan_set_change_ssid_key_status();
+			if (ZTE_NVIO_DONE != status) {
+				slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]zte_wlan_ssid1_basic_set: write nv [SSID1] fail.", __FILE__, __FUNCTION__); /*lint !e26*/
+				return FALSE;
+			}
+		}
+	}
+
+	//broadcastSsidEnabled
+	memset(nv_tmp, 0, sizeof(nv_tmp));
+	broadcastssid = websGetVar(wp, T("broadcastSsidEnabled"), NULL);
+
+	if (broadcastssid != NULL   && !(wp->flags & WEBS_XML_CLIENT_REQUEST)) {
+		(void)zte_web_read("HideSSID", nv_tmp);
+		slog(MISC_PRINT, SLOG_DEBUG,"old_HideSSID=[%s], HideSSID=[%s]", nv_tmp, broadcastssid);  /*lint !e26*/
+		if (0 != strcmp(broadcastssid, nv_tmp)) {
+			*wifi_set_flags |= ZTE_WLAN_BROADCAST_SET;
+			status = zte_web_write("HideSSID", broadcastssid);
+			if (ZTE_NVIO_DONE != status) {
+				slog(MISC_PRINT, SLOG_DEBUG,"zte_wlan_ssid1_basic_set: write nv [HideSSID] fail.");/*lint !e26*/
+				return FALSE;
+			}
+		}
+	}
+
+#if 0
+	//set  NoForwarding(ap isolated)
+	memset(nv_tmp, 0, sizeof(nv_tmp));
+	NoForwarding = websGetVar(wp, T("NoForwarding"), NULL);
+	if (NoForwarding != NULL   && !(wp->flags & WEBS_XML_CLIENT_REQUEST)) {
+		(void)zte_web_read("NoForwarding", nv_tmp);
+		slog(MISC_PRINT, SLOG_DEBUG,"old_NoForwarding=[%s], NoForwarding=[%s]", nv_tmp, NoForwarding);/*lint !e26*/
+		if (0 != strcmp(NoForwarding, nv_tmp)) {
+			*wifi_set_flags |= ZTE_WLAN_AP_ISOLATION_SET;
+			status = zte_web_write("NoForwarding", NoForwarding);
+			if (ZTE_NVIO_DONE != status) {
+				slog(MISC_PRINT, SLOG_DEBUG,"zte_wlan_ssid1_basic_set: write nv [NoForwarding] fail.");/*lint !e26*/
+				return FALSE;
+			}
+		}
+	}
+#endif
+	//set  MAX_Access_num
+	memset(nv_tmp, 0, sizeof(nv_tmp));
+	MAX_Access_num = websGetVar(wp, T("MAX_Access_num"), NULL);
+	if (MAX_Access_num != NULL   && !(wp->flags & WEBS_XML_CLIENT_REQUEST)) {
+		(void)zte_web_read("MAX_Access_num", nv_tmp);
+
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s][%s]old_MAX_Access_num=[%s], MAX_Access_num=[%s]\n", __FILE__, __FUNCTION__, nv_tmp, MAX_Access_num);
+
+		if (0 != strcmp(MAX_Access_num, nv_tmp)) {
+			*wifi_set_flags |= ZTE_WLAN_MAX_ACCESS_NUM_SET;
+			zte_web_write("MAX_Access_num", MAX_Access_num); //kw 3		
+			zte_web_write("MAX_Access_num_user_set", "1");
+		}
+	}
+	//set  show_qrcode_flag
+	memset(nv_tmp, 0, sizeof(nv_tmp));
+	show_qrcode_flag = websGetVar(wp, T("show_qrcode_flag"), NULL);
+	if (show_qrcode_flag != NULL) {
+		(void)zte_web_read("show_qrcode_flag", nv_tmp);
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s][%s]ssid1:old_show_qrcode_flag=[%s], show_qrcode_flag=[%s]\n", __FILE__, __FUNCTION__, nv_tmp, show_qrcode_flag);
+
+		if (0 != strcmp(show_qrcode_flag, nv_tmp)) {
+			status = zte_web_write("show_qrcode_flag", show_qrcode_flag);
+			if (ZTE_NVIO_DONE != status) {
+				slog(MISC_PRINT, SLOG_DEBUG,"zte_wlan_ssid1_basic_set: write nv [show_qrcode_flag] fail.");/*lint !e26*/
+				return FALSE;
+			}
+		}
+	}
+
+
+
+#if 0
+	//wifiMode
+	memset(nv_tmp, 0, sizeof(nv_tmp));
+	wirelessmode = websGetVar(wp, T("wifiMode"), NULL);
+	if (wirelessmode != NULL && !(wp->flags & WEBS_XML_CLIENT_REQUEST)) {
+		printf("wirelessmode:%s", wirelessmode);    /*lint !e26*/
+		(void)zte_web_read("WirelessMode", nv_tmp);
+		printf("[%s][%s]old_WirelessMode=[%s], wirelessmode=[%s]", __FILE__, __FUNCTION__, nv_tmp, wirelessmode); /*lint !e26*/
+		if (0 != strcmp(wirelessmode, nv_tmp)) {
+			*wifi_set_flags |= ZTE_WLAN_WIRELESS_MODE_SET;
+			status = zte_web_write("WirelessMode", wirelessmode);
+			if (ZTE_NVIO_DONE != status) {
+				printf("zte_wlan_ssid1_basic_set: write nv [WirelessMode] fail.");/*lint !e26*/
+				return FALSE;
+			}
+		}
+	}
+
+	/* country code*/
+	memset(nv_tmp, 0, sizeof(nv_tmp));
+	countrycode = websGetVar(wp, T("countryCode"), NULL);
+	if (countrycode != NULL && !(wp->flags & WEBS_XML_CLIENT_REQUEST)) {
+		(void)zte_web_read("CountryCode", nv_tmp);
+		printf("[%s][%s]old_countrycode=%s, countrycode = %s", __FILE__, __FUNCTION__, nv_tmp, countrycode); /*lint !e26*/
+		if (0 != strcmp(countrycode, nv_tmp)) {
+			*wifi_set_flags |= ZTE_WLAN_COUNTRY_SET;
+			status = zte_web_write("CountryCode", countrycode);
+			if (ZTE_NVIO_DONE != status) {
+				printf("[%s][%s]zte_wlan_ssid1_basic_set: write nv [CountryCode] fail.", __FILE__, __FUNCTION__); /*lint !e26*/
+				return FALSE;
+			}
+		}
+	}
+
+	//selectedChannel
+	memset(nv_tmp, 0, sizeof(nv_tmp));
+	channel = websGetVar(wp, T("selectedChannel"), NULL);
+	if (channel != NULL && !(wp->flags & WEBS_XML_CLIENT_REQUEST)) {
+		(void)zte_web_read("Channel", nv_tmp);
+		printf("[%s][%s]old_channel=%s, channel = %s", __FILE__, __FUNCTION__, nv_tmp, channel); /*lint !e26*/
+		if (0 != strcmp(channel, nv_tmp)) {
+			*wifi_set_flags |= ZTE_WLAN_CHANNEL_SET;
+			status = zte_web_write("Channel", channel);
+			if (ZTE_NVIO_DONE != status) {
+				printf("zte_wlan_ssid1_basic_set: write nv [Channel] fail.");/*lint !e26*/
+				return FALSE;
+			}
+		}
+	}
+
+	//band setting
+	memset(nv_tmp, 0, sizeof(nv_tmp));
+	wifi_band = websGetVar(wp, T("wifi_band"), NULL);
+	if (wifi_band != NULL && !(wp->flags & WEBS_XML_CLIENT_REQUEST)) {
+		(void)zte_web_read("wifi_band", nv_tmp);
+		printf("[%s][%s]old_wifi_band=%s, wifi_band = %s", __FILE__, __FUNCTION__, nv_tmp, wifi_band); /*lint !e26*/
+		if (0 != strcmp(wifi_band, nv_tmp)) {
+			*wifi_set_flags |= ZTE_WLAN_WIFI_BAND_SET;
+			status = zte_web_write("wifi_band", channel);
+			if (ZTE_NVIO_DONE != status) {
+				printf("zte_wlan_ssid1_basic_set: write nv [wifi_band] fail.");/*lint !e26*/
+				return FALSE;
+			}
+		}
+	}
+
+	//set  wifi_11n_cap
+	memset(nv_tmp, 0, sizeof(nv_tmp));
+	wifi_11n_cap = websGetVar(wp, T("wifi_11n_cap"), NULL);
+	if (wifi_11n_cap != NULL && !(wp->flags & WEBS_XML_CLIENT_REQUEST)) {
+		(void)zte_web_read("wifi_11n_cap", nv_tmp);
+		printf("[%s][%s]old_wifi_11n_cap=%s, wifi_11n_cap=%s", __FILE__, __FUNCTION__, nv_tmp, wifi_11n_cap); /*lint !e26*/
+		if (0 != strcmp(wifi_11n_cap, nv_tmp)) {
+			*wifi_set_flags |= ZTE_WLAN_WIRELESS_MODE_SET;
+			status = zte_web_write("wifi_11n_cap", wifi_11n_cap);
+			if (ZTE_NVIO_DONE != status) {
+				printf("zte_wlan_ssid1_basic_set: write nv [wifi_11n_cap] fail.");/*lint !e26*/
+				return FALSE;
+			}
+		}
+	}
+#endif
+	slog(MISC_PRINT, SLOG_DEBUG,"zte_wlan_ssid1_basic_set:  wifi basic setup success.");/*lint !e26*/
+	return TRUE;
+
+}
+
+static int zte_wlan_ssid2_basic_set(webs_t wp, unsigned int *wifi_set_flags)
+{
+	char_t  *ssid = NULL;
+	char_t  *broadcastssid = NULL ;
+	char_t  *NoForwarding = NULL ;
+	char_t *MAX_Access_num = NULL;
+	char_t  *show_qrcode_flag = NULL;//guest ssid show qrcode flag
+	zte_topsw_state_e_type status = ZTE_NVIO_MAX;
+	char nv_tmp[NVIO_WIFI_MAX_LEN] = {0};
+
+	if ((NULL == wp) || (NULL == wifi_set_flags)) {
+		return FALSE;
+	}
+
+	//ssid
+	memset(nv_tmp, 0, sizeof(nv_tmp));
+	ssid = websGetVar(wp, T("m_SSID"), NULL);
+#ifdef WEBS_SECURITY
+		if(ssid && !check_web_input_wifi(ssid,strlen(ssid)))
+		{
+			slog(MISC_PRINT, SLOG_ERR,"[goahead]ssid2=%s\n",ssid);
+			return FALSE;
+		}
+#endif
+	if (ssid != NULL) {
+		//add by liuyingnan for server safe for xss attack start
+		if (DATA_NO_SAFE == zte_Safe_noSpecialChar(ssid)) {
+			slog(MISC_PRINT, SLOG_DEBUG,"Get Data is no Safe:ssid:%s\n", ssid); /*lint !e26*/
+			return FALSE;
+		}
+		//add by liuyingnan for server safe for xss attack end
+		(void)zte_web_read("m_SSID", nv_tmp);
+		slog(MISC_PRINT, SLOG_DEBUG,"old_m_SSID=[%s], m_SSID=[%s]", nv_tmp, ssid);    /*lint !e26*/
+		if (0 != strcmp(ssid, nv_tmp)) {
+			*wifi_set_flags |= ZTE_WLAN_SET_AP_MSSID;
+			status = zte_web_write("m_SSID", ssid);
+			wlan_set_change_ssid_key_status();//added by dujiajiao
+			if (ZTE_NVIO_DONE != status) {
+				slog(MISC_PRINT, SLOG_ERR,"zte_wlan_ssid2_basic_set: write nv [m_SSID] fail.");/*lint !e26*/
+				return FALSE;
+			}
+		}
+	}
+
+	//broadcastSsidEnabled
+	memset(nv_tmp, 0, sizeof(nv_tmp));
+	broadcastssid = websGetVar(wp, T("m_HideSSID"), NULL);
+	if (broadcastssid != NULL) {
+		(void)zte_web_read("m_HideSSID", nv_tmp);
+		slog(MISC_PRINT, SLOG_DEBUG,"old_m_HideSSID=[%s], m_HideSSID=[%s]", nv_tmp, broadcastssid);   /*lint !e26*/
+		if (0 != strcmp(broadcastssid, nv_tmp)) {
+			*wifi_set_flags |= ZTE_WLAN_SET_AP_MSSID;
+			status = zte_web_write("m_HideSSID", broadcastssid);
+			if (ZTE_NVIO_DONE != status) {
+				slog(MISC_PRINT, SLOG_ERR,"zte_wlan_ssid2_basic_set: write nv [m_HideSSID] fail.");/*lint !e26*/
+				return FALSE;
+			}
+		}
+	}
+
+
+	//set  NoForwarding
+	memset(nv_tmp, 0, sizeof(nv_tmp));
+	NoForwarding = websGetVar(wp, T("m_NoForwarding"), NULL);
+	if (NoForwarding != NULL) {
+		(void)zte_web_read("m_NoForwarding", nv_tmp);
+		slog(MISC_PRINT, SLOG_DEBUG,"old_m_NoForwarding=[%s], m_NoForwarding=[%s]", nv_tmp, NoForwarding);/*lint !e26*/
+		if (0 != strcmp(NoForwarding, nv_tmp)) {
+			*wifi_set_flags |= ZTE_WLAN_SET_AP_MSSID;
+			status = zte_web_write("m_NoForwarding", NoForwarding);
+			if (ZTE_NVIO_DONE != status) {
+				slog(MISC_PRINT, SLOG_ERR,"zte_wlan_ssid1_basic_set: write nv [m_NoForwarding] fail.");/*lint !e26*/
+				return FALSE;
+			}
+		}
+	}
+
+	//set  MAX_Access_num
+	memset(nv_tmp, 0, sizeof(nv_tmp));
+	MAX_Access_num = websGetVar(wp, T("m_MAX_Access_num"), NULL);
+	if (MAX_Access_num != NULL) {
+		(void)zte_web_read("m_MAX_Access_num", nv_tmp);
+		slog(MISC_PRINT, SLOG_DEBUG,"old_m_MAX_Access_num=[%s], m_MAX_Access_num=[%s]", nv_tmp, MAX_Access_num);/*lint !e26*/
+		if (0 != strcmp(MAX_Access_num, nv_tmp)) {
+			*wifi_set_flags |= ZTE_WLAN_SET_AP_MSSID;
+			status = zte_web_write("m_MAX_Access_num", MAX_Access_num);
+			if (ZTE_NVIO_DONE != status) {
+				slog(MISC_PRINT, SLOG_ERR,"zte_wlan_ssid2_basic_set: write nv [MAX_Access_num] fail.");/*lint !e26*/
+				return FALSE;
+			}
+		}
+	}
+
+	//set  show_qrcode_flag
+	memset(nv_tmp, 0, sizeof(nv_tmp));
+	show_qrcode_flag = websGetVar(wp, T("m_show_qrcode_flag"), NULL);
+	if (show_qrcode_flag != NULL) {
+		(void)zte_web_read("m_show_qrcode_flag", nv_tmp);
+		slog(MISC_PRINT, SLOG_DEBUG,"ssid2: old_show_qrcode_flag=[%s], show_qrcode_flag=[%s]", nv_tmp, show_qrcode_flag);/*lint !e26*/
+		if (0 != strcmp(show_qrcode_flag, nv_tmp)) {
+			status = zte_web_write("m_show_qrcode_flag", show_qrcode_flag);
+			if (ZTE_NVIO_DONE != status) {
+				slog(MISC_PRINT, SLOG_ERR,"zte_wlan_ssid2_basic_set: write nv [show_qrcode_flag] fail.");/*lint !e26*/
+				return FALSE;
+			}
+		}
+	}
+
+
+
+	slog(MISC_PRINT, SLOG_DEBUG,"zte_wlan_ssid2_basic_set:  wifi basic setup success.");/*lint !e26*/
+	return TRUE;
+
+}
+
+static int zte_lan_ssid1_security_set(webs_t wp, unsigned int *wifi_set_flags)
+{
+#define KEY_INDEX_MAX 5
+
+	char_t *security_mode = NULL;
+	char *encryp_type = NULL;
+	int i = 0;
+	char_t *pass_phrase_str = NULL;
+	//add by liuyingnan for Server safe start
+	int pass_phrase_str_decode_length = 0;
+	char_t *pass_phrase_str_decode = NULL;
+#ifdef WEBS_SECURITY
+	char_t *pass_phrase_b64_encode = NULL;
+#endif
+	char_t zte_pass_phrase_str[WIFI_PSW_DEFAULT_LENGTH] = {0};
+	int zte_pass_phrase_len = 0;
+	//add by liuyingnan for Server safe end
+
+	char_t *DefaultKeyID = NULL;
+	char_t * KeyType[KEY_INDEX_MAX];
+	char_t * KeyStr[KEY_INDEX_MAX];
+
+	char_t *cipher_str = NULL;
+	char_t wpa_encry_type[WF_ENCRY_TYPE_LEN] = {0};
+
+	zte_topsw_state_e_type nv_ret = ZTE_NVIO_DONE;    /*lint -e550*/
+
+	uint8 nv_au_mode[WF_AU_MODE_LEN] = {0};
+	uint8 nv_ecry_type[WF_ENCRY_TYPE_LEN] = {0};
+	char_t  psw[NV_ITEM_VALUE_DEFAULT_STRING_LEN] = {0};
+	//char nv_basic[NVIO_WIFI_MAX_LEN]={0}; // for nv read and write
+
+	/*lint -e717*/
+#define SECURITY_NV_WRITE(nv_name, str, ret)  do{ ret = zte_web_write(nv_name, (char *)str);}while(0)
+
+	memset(KeyType, 0, sizeof(KeyType)); //set 0
+	memset(KeyStr, 0, sizeof(KeyStr));     //set 0
+
+	if ((NULL == wp) || (NULL == wifi_set_flags)) {
+		slog(MISC_PRINT, SLOG_ERR,"[%s][%s]input para is null.\n", __FILE__, __FUNCTION__); /*lint !e26*/
+		return -1;
+	}
+
+	security_mode = websGetVar(wp, T("security_mode"), NULL);
+	if (security_mode != NULL) {
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s][%s]security_mode = [%s]", __FILE__, __FUNCTION__, security_mode); /*lint !e26*/
+
+		encryp_type = websGetVar(wp, T("security_shared_mode"), NULL);
+		if (NULL == encryp_type) {
+			slog(MISC_PRINT, SLOG_ERR,"encryp_type == NULL");/*lint !e26*/
+			return -1;
+		}
+
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s][%s]encryp_type = [%s]", __FILE__, __FUNCTION__, encryp_type); /*lint !e26*/
+
+		if (STR_EQUAL(security_mode, WF_AU_OPEN)  || STR_EQUAL(security_mode, WF_AU_SHARE)) {
+			if ((STR_EQUAL(security_mode, WF_AU_OPEN) && STR_EQUAL(encryp_type, WF_ENCRY_WEP)) ||
+			    (STR_EQUAL(security_mode, WF_AU_SHARE))) { //&&STR_EQUAL(wifi_encry_type, WF_AU_OPEN)) )
+				zte_wifi_open_and_share_mode_s_type nv_open_and_share_s;
+				memset(&nv_open_and_share_s, 0, sizeof(zte_wifi_open_and_share_mode_s_type));
+
+				//read nv
+				(void)zte_web_read("AuthMode", nv_au_mode);
+				(void)zte_web_read("EncrypType", nv_ecry_type);
+				(void)zte_web_read("DefaultKeyID", nv_open_and_share_s.wep_key_index);
+				(void)zte_web_read("Key1Str1", nv_open_and_share_s.wep_key1);
+				(void)zte_web_read("Key2Str1", nv_open_and_share_s.wep_key2);
+				(void)zte_web_read("Key3Str1", nv_open_and_share_s.wep_key3);
+				(void)zte_web_read("Key4Str1", nv_open_and_share_s.wep_key4);
+				(void)zte_web_read("Key1Type", nv_open_and_share_s.wep_key1_mode);
+				(void)zte_web_read("Key2Type", nv_open_and_share_s.wep_key2_mode);
+				(void)zte_web_read("Key3Type", nv_open_and_share_s.wep_key3_mode);
+				(void)zte_web_read("Key4Type", nv_open_and_share_s.wep_key4_mode);
+
+				DefaultKeyID = websGetVar(wp, T("wep_default_key"), "");
+				KeyStr[1] = websGetVar(wp, T("wep_key_1"), "");
+				KeyStr[2] = websGetVar(wp, T("wep_key_2"), "");
+				KeyStr[3] = websGetVar(wp, T("wep_key_3"), "");
+				KeyStr[4] = websGetVar(wp, T("wep_key_4"), "");
+				KeyType[1] = websGetVar(wp, T("WEP1Select"), "");
+				KeyType[2] = websGetVar(wp, T("WEP2Select"), "");
+				KeyType[3] = websGetVar(wp, T("WEP3Select"), "");
+				KeyType[4] = websGetVar(wp, T("WEP4Select"), "");
+
+				//when the wifi setting has changed,then set them
+				if (STR_EQUAL(security_mode, nv_au_mode) && STR_EQUAL(encryp_type, nv_ecry_type) \
+				    && STR_EQUAL(DefaultKeyID, nv_open_and_share_s.wep_key_index) \
+				    && STR_EQUAL(KeyStr[1], nv_open_and_share_s.wep_key1) && STR_EQUAL(KeyStr[2], nv_open_and_share_s.wep_key2) && STR_EQUAL(KeyStr[3], nv_open_and_share_s.wep_key3) && STR_EQUAL(KeyStr[4], nv_open_and_share_s.wep_key4) \
+				    && STR_EQUAL(KeyType[1], nv_open_and_share_s.wep_key1_mode) && STR_EQUAL(KeyType[2], nv_open_and_share_s.wep_key2_mode) && STR_EQUAL(KeyType[3], nv_open_and_share_s.wep_key3_mode) && STR_EQUAL(KeyType[4], nv_open_and_share_s.wep_key4_mode)) {
+
+					slog(MISC_PRINT, SLOG_DEBUG,"[%s][%s]wifi:[%s][%s] not changed.\n", __FILE__, __FUNCTION__, security_mode, encryp_type); /*lint !e26*/
+				} else {
+					SECURITY_NV_WRITE("AuthMode", security_mode, nv_ret);
+					SECURITY_NV_WRITE("EncrypType", encryp_type, nv_ret);
+
+					SECURITY_NV_WRITE("DefaultKeyID", DefaultKeyID, nv_ret);
+
+					SECURITY_NV_WRITE("Key1Str1", KeyStr[1], nv_ret);
+					SECURITY_NV_WRITE("Key2Str1", KeyStr[2], nv_ret);
+					SECURITY_NV_WRITE("Key3Str1", KeyStr[3], nv_ret);
+					SECURITY_NV_WRITE("Key4Str1", KeyStr[4], nv_ret);
+
+					SECURITY_NV_WRITE("Key1Type", KeyType[1], nv_ret);
+					SECURITY_NV_WRITE("Key2Type", KeyType[2], nv_ret);
+					SECURITY_NV_WRITE("Key3Type", KeyType[3], nv_ret);
+					SECURITY_NV_WRITE("Key4Type", KeyType[4], nv_ret);
+
+					*wifi_set_flags |= ZTE_WLAN_BASIC_SECURITY_SET;
+					wlan_set_change_ssid_key_status();
+				}
+			} else if (STR_EQUAL(security_mode, WF_AU_OPEN) && STR_EQUAL(encryp_type, WF_ENCRY_NONE)) {
+				(void)zte_web_read("AuthMode",nv_au_mode);
+				(void)zte_web_read("EncrypType", nv_ecry_type);
+
+				if (STR_EQUAL(security_mode, nv_au_mode) && STR_EQUAL(encryp_type, nv_ecry_type)) {
+					printf("[%s][%s]wifi:[%s][%s] not changed.\n", __FILE__, __FUNCTION__, security_mode, encryp_type); /*lint !e26*/
+				} else {
+					SECURITY_NV_WRITE("AuthMode", security_mode, nv_ret);
+					SECURITY_NV_WRITE("EncrypType", encryp_type, nv_ret);
+					SECURITY_NV_WRITE(NV_WIFI_WPA_PASS_ENCODE, "", nv_ret);
+					SECURITY_NV_WRITE(NV_WIFI_WPA_PASS, "", nv_ret);
+					SECURITY_NV_WRITE("Key1Str1", "", nv_ret);
+					SECURITY_NV_WRITE("Key2Str1", "", nv_ret);
+					SECURITY_NV_WRITE("Key3Str1", "", nv_ret);
+					SECURITY_NV_WRITE("Key4Str1", "", nv_ret);
+					*wifi_set_flags |= ZTE_WLAN_BASIC_SECURITY_SET;
+					wlan_set_change_ssid_key_status();
+				}
+			} else {
+				//wifi_au_mode or encrype invalid
+				slog(MISC_PRINT, SLOG_ERR,"[%s][%s]wifi:[%s][%s] is invalid.\n", __FILE__, __FUNCTION__, security_mode, encryp_type); /*lint !e26*/
+				return -1;
+			}
+		} else if (STR_EQUAL(security_mode, WF_AU_WPA)  || STR_EQUAL(security_mode, WF_AU_WPA2) ||
+		           STR_EQUAL(security_mode, WF_AU_WPA_WPA2) || STR_EQUAL(security_mode, WF_AU_WPA3) || STR_EQUAL(security_mode, WF_AU_WPA2_WPA3)) {
+			zte_wifi_wpa_and_wpa2_mode_s_type nv_wpa_and_wpa2;
+			memset(&nv_wpa_and_wpa2, 0, sizeof(zte_wifi_wpa_and_wpa2_mode_s_type));
+
+			pass_phrase_str = websGetVar(wp, T("passphrase"), "");
+			int j = 0;
+			for (i = 0; i < strlen(pass_phrase_str) && j < NV_ITEM_VALUE_DEFAULT_STRING_LEN; i++) {
+				if (pass_phrase_str[i] != '\r' && pass_phrase_str[i] != '\n') {
+					psw[j] = pass_phrase_str[i];
+					j++;
+				}
+			}
+			pass_phrase_str = psw;
+			if (wp->flags & WEBS_XML_CLIENT_REQUEST) {
+				cipher_str = websGetVar(wp, T("cipher"), "");
+			} else {
+#ifndef CONFIG_CHINA_UNICOM
+				if (STR_EQUAL(security_mode, WF_AU_WPA_WPA2)) {
+					cipher_str = websGetVar(wp, T("cipher_str"), "");
+				} else
+#endif
+				{
+					cipher_str = websGetVar(wp, T("cipher"), "");
+				}
+			}
+			slog(MISC_PRINT, SLOG_DEBUG,"[%s][%s]pass_phrase_str = %s", __FILE__, __FUNCTION__, pass_phrase_str); /*lint !e26*/
+			slog(MISC_PRINT, SLOG_DEBUG,"[%s][%s]cipher_str = %s", __FILE__, __FUNCTION__, cipher_str); /*lint !e26*/
+			//add by liuyingnan for server safe for xss attack start
+			if (DATA_NO_SAFE == zte_Safe_noSpecialChar(pass_phrase_str)) {
+				slog(MISC_PRINT, SLOG_ERR,"Get Data is no Safe:ssid:%s\n", pass_phrase_str); /*lint !e26*/
+				return -1;
+			}
+			//add by liuyingnan for server safe for xss attack end
+
+			switch (cipher_str[0]) {
+			case '0':
+				strncpy(wpa_encry_type, WF_ENCRY_TKIP, sizeof(wpa_encry_type) - 1);
+				break;
+			case '1':
+				strncpy(wpa_encry_type, WF_ENCRY_AES, sizeof(wpa_encry_type) - 1);
+				break;
+			case '2':
+				strncpy(wpa_encry_type, WF_ENCRY_TKIP_AES, sizeof(wpa_encry_type) - 1);
+				break;
+			default:
+				slog(MISC_PRINT, SLOG_ERR,"unvalid encry type [%c]", encryp_type[0], 0, 0);
+				return -1;
+			}
+
+			(void)zte_web_read("AuthMode", nv_au_mode);
+			(void)zte_web_read("EncrypType", nv_ecry_type);
+			(void)zte_web_read(NV_WIFI_WPA_PASS, nv_wpa_and_wpa2.pre_share_key);
+
+			if (STR_EQUAL(security_mode, nv_au_mode) && STR_EQUAL(wpa_encry_type, nv_ecry_type) && STR_EQUAL(pass_phrase_str, nv_wpa_and_wpa2.pre_share_key)) {
+
+				slog(MISC_PRINT, SLOG_DEBUG,"[%s][%s]wifi:[%s][%s] not changed.\n", __FILE__, __FUNCTION__, security_mode, wpa_encry_type); /*lint !e26*/
+			} else {
+				SECURITY_NV_WRITE("AuthMode", security_mode, nv_ret);
+				SECURITY_NV_WRITE("EncrypType", wpa_encry_type, nv_ret);
+#ifndef CONFIG_CHINA_UNICOM
+				if (STR_EQUAL(security_mode, WF_AU_WPA_WPA2)) {
+#endif
+					SECURITY_NV_WRITE("cipher_str", cipher_str, nv_ret);
+#ifndef CONFIG_CHINA_UNICOM
+				}
+#endif
+				//add by liuyingnan for Server safe start
+				slog(MISC_PRINT, SLOG_DEBUG,"[%s][%s]pass_phrase_str:%s.\n", __FILE__, __FUNCTION__, pass_phrase_str); /*lint !e26*/
+#ifdef WEBS_SECURITY
+				pass_phrase_str_decode = js_aes_decode(pass_phrase_str, strlen(pass_phrase_str), (unsigned int*)&pass_phrase_str_decode_length);
+#else
+				pass_phrase_str_decode = (char*)zte_base64_decode((const unsigned char *)pass_phrase_str, strlen(pass_phrase_str), (unsigned int*)&pass_phrase_str_decode_length);
+#endif
+				slog(MISC_PRINT, SLOG_DEBUG,"[%s][%s]login2 -> zte_password:%s.\n", __FILE__, __FUNCTION__, pass_phrase_str_decode); /*lint !e26*/
+
+				if (NULL == pass_phrase_str_decode) {
+					slog(MISC_PRINT, SLOG_DEBUG,"pass_phrase_str_decode: psw is empty.\n");/*lint !e26*/
+					free(pass_phrase_str_decode);
+					return -1;
+				}
+				zte_pass_phrase_len = (pass_phrase_str_decode_length < sizeof(zte_pass_phrase_str) ? pass_phrase_str_decode_length : sizeof(zte_pass_phrase_str) - 1);
+				snprintf(zte_pass_phrase_str,zte_pass_phrase_len+1,"%s",pass_phrase_str_decode);
+				//strncpy(zte_pass_phrase_str, pass_phrase_str_decode, zte_pass_phrase_len);
+				free(pass_phrase_str_decode);
+				slog(MISC_PRINT, SLOG_DEBUG,"login3 -> zte_psw_admin:%s.\n", zte_pass_phrase_str); //cov m
+#ifdef WEBS_SECURITY
+				if(zte_pass_phrase_str && !check_web_input_wifi(zte_pass_phrase_str,strlen(zte_pass_phrase_str)))
+				{
+					slog(MISC_PRINT, SLOG_ERR,"[goahead]wifipass1=%s\n",zte_pass_phrase_str);
+					return -1;
+				}
+				pass_phrase_b64_encode = zte_base64_encode(zte_pass_phrase_str, strlen(zte_pass_phrase_str));
+				if (NULL == pass_phrase_b64_encode) {
+					slog(MISC_PRINT, SLOG_DEBUG,"pass_phrase_b64_encode: psw is NULL.\n");/*lint !e26*/
+					return -1;
+				}
+				SECURITY_NV_WRITE(NV_WIFI_WPA_PASS_ENCODE, pass_phrase_b64_encode, nv_ret);
+				free(pass_phrase_b64_encode);
+				SECURITY_NV_WRITE(NV_WIFI_WPA_PASS, zte_pass_phrase_str, nv_ret);
+				SECURITY_NV_WRITE("WPAPSK1_enaes", pass_phrase_str, nv_ret);
+#else
+				SECURITY_NV_WRITE(NV_WIFI_WPA_PASS_ENCODE, pass_phrase_str, nv_ret);
+				SECURITY_NV_WRITE(NV_WIFI_WPA_PASS, zte_pass_phrase_str, nv_ret);
+#endif
+				//add by liuyingnan for Server safe end
+				//SECURITY_NV_WRITE(NV_WIFI_WPA_PASS, pass_phrase_str, nv_ret);
+
+				*wifi_set_flags |= ZTE_WLAN_BASIC_SECURITY_SET;
+				wlan_set_change_ssid_key_status();
+			}
+		} else {
+			// other security mode is invalid
+			slog(MISC_PRINT, SLOG_ERR,"ERROR:security mode  is invalid", 0, 0, 0);/*lint !e26*/
+			return -1;
+		}
+	} else {
+		//security_mode is NULL
+		slog(MISC_PRINT, SLOG_ERR,"ERROR:security_mode is NULL ", 0, 0, 0);/*lint !e26*/
+		return -1;
+	}
+
+	return 0;
+
+}
+
+/**********************************************************************
+* Function:         zte_lan_ssid2_security_set
+* Description:     to set the wifi security paras for SSID2
+* Input:           http info
+* Output:
+* Return:           0:ok;-1:fail
+* Others:
+* Modify Date   Version     Author          Modification
+* -----------------------------------------------
+* 2012/07/11    V1.0        chenyi       first version
+**********************************************************************/
+/*lint -e{818,830}*/
+static int zte_lan_ssid2_security_set(webs_t wp, unsigned int *wifi_set_flags) /*lint !e533*/
+{
+#define KEY_INDEX_MAX 5
+
+	char_t *security_mode = NULL;
+	char *encryp_type = NULL;
+
+	char_t *pass_phrase_str = NULL;
+	//add by liuyingnan for Server safe start
+	int pass_phrase_str_decode_length = 0;
+	char_t *pass_phrase_str_decode = NULL;
+#ifdef WEBS_SECURITY
+	char_t *pass_phrase_b64_encode = NULL;
+#endif
+	char_t zte_pass_phrase_str[WIFI_PSW_DEFAULT_LENGTH] = {0};
+	int zte_pass_phrase_len = 0;
+	//add by liuyingnan for Server safe end
+
+	char_t *DefaultKeyID = NULL;
+	char_t * KeyType[KEY_INDEX_MAX];
+	char_t * KeyStr[KEY_INDEX_MAX];
+
+	char_t *cipher_str = NULL;
+	char_t wpa_encry_type[WF_ENCRY_TYPE_LEN] = {0};
+
+	zte_topsw_state_e_type nv_ret = ZTE_NVIO_DONE;    /*lint -e550*/
+
+	uint8 nv_au_mode[WF_AU_MODE_LEN] = {0};
+	uint8 nv_ecry_type[WF_ENCRY_TYPE_LEN] = {0};
+
+	//char nv_basic[NVIO_WIFI_MAX_LEN]={0}; // for nv read and write
+
+	/*lint -e717*/
+#define SECURITY_NV_WRITE(nv_name, str, ret)  do{ ret = zte_web_write(nv_name, (char *)str);}while(0)
+
+	memset(KeyType, 0, sizeof(KeyType)); //set 0
+	memset(KeyStr, 0, sizeof(KeyStr));     //set 0
+
+	if ((NULL == wp) || (NULL == wifi_set_flags)) {
+		slog(MISC_PRINT, SLOG_ERR,"input para is null.\n");/*lint !e26*/
+		return -1;
+	}
+
+	security_mode = websGetVar(wp, T("m_AuthMode"), NULL);
+	if (security_mode != NULL) {
+		slog(MISC_PRINT, SLOG_DEBUG,"security_mode = [%s]", security_mode);/*lint !e26*/
+
+		encryp_type = websGetVar(wp, T("m_EncrypType"), NULL);
+		if (NULL == encryp_type) {
+			slog(MISC_PRINT, SLOG_DEBUG,"encryp_type == NULL", 0, 0, 0);/*lint !e26*/
+			return -1;
+		}
+
+		slog(MISC_PRINT, SLOG_DEBUG,"encryp_type = [%s]", encryp_type);  /*lint !e26*/
+
+		if (STR_EQUAL(security_mode, WF_AU_OPEN)  || STR_EQUAL(security_mode, WF_AU_SHARE)) {
+			if ((STR_EQUAL(security_mode, WF_AU_OPEN) && STR_EQUAL(encryp_type, WF_ENCRY_WEP)) ||
+			    (STR_EQUAL(security_mode, WF_AU_SHARE))) { //&&STR_EQUAL(wifi_encry_type, WF_AU_OPEN)) )
+				zte_wifi_open_and_share_mode_s_type nv_open_and_share_s;
+				memset(&nv_open_and_share_s, 0, sizeof(zte_wifi_open_and_share_mode_s_type));
+
+				//read nv
+				(void)zte_web_read("m_AuthMode", nv_au_mode);
+				(void)zte_web_read("m_EncrypType", nv_ecry_type);
+				(void)zte_web_read("m_DefaultKeyID", nv_open_and_share_s.wep_key_index);
+				(void)zte_web_read("m_Key1Str1", nv_open_and_share_s.wep_key1);
+				(void)zte_web_read("m_Key2Str1", nv_open_and_share_s.wep_key2);
+				(void)zte_web_read("m_Key3Str1", nv_open_and_share_s.wep_key3);
+				(void)zte_web_read("m_Key4Str1", nv_open_and_share_s.wep_key4);
+				(void)zte_web_read("m_Key1Type", nv_open_and_share_s.wep_key1_mode);
+				(void)zte_web_read("m_Key2Type", nv_open_and_share_s.wep_key2_mode);
+				(void)zte_web_read("m_Key3Type", nv_open_and_share_s.wep_key3_mode);
+				(void)zte_web_read("m_Key4Type", nv_open_and_share_s.wep_key4_mode);
+
+				DefaultKeyID = websGetVar(wp, T("m_DefaultKeyID"), "");
+				KeyStr[1] = websGetVar(wp, T("m_Key1Str1"), "");
+				KeyStr[2] = websGetVar(wp, T("m_Key2Str1"), "");
+				KeyStr[3] = websGetVar(wp, T("m_Key3Str1"), "");
+				KeyStr[4] = websGetVar(wp, T("m_Key4Str1"), "");
+				KeyType[1] = websGetVar(wp, T("m_Key1Type"), "");
+				KeyType[2] = websGetVar(wp, T("m_Key2Type"), "");
+				KeyType[3] = websGetVar(wp, T("m_Key3Type"), "");
+				KeyType[4] = websGetVar(wp, T("m_Key4Type"), "");
+
+				//when the wifi setting has changed,then set them
+				if (STR_EQUAL(security_mode, nv_au_mode) && STR_EQUAL(encryp_type, nv_ecry_type) \
+				    && STR_EQUAL(DefaultKeyID, nv_open_and_share_s.wep_key_index) \
+				    && STR_EQUAL(KeyStr[1], nv_open_and_share_s.wep_key1) && STR_EQUAL(KeyStr[2], nv_open_and_share_s.wep_key2) && STR_EQUAL(KeyStr[3], nv_open_and_share_s.wep_key3) && STR_EQUAL(KeyStr[4], nv_open_and_share_s.wep_key4) \
+				    && STR_EQUAL(KeyType[1], nv_open_and_share_s.wep_key1_mode) && STR_EQUAL(KeyType[2], nv_open_and_share_s.wep_key2_mode) && STR_EQUAL(KeyType[3], nv_open_and_share_s.wep_key3_mode) && STR_EQUAL(KeyType[4], nv_open_and_share_s.wep_key4_mode)) {
+
+					printf("wifi:[%s][%s] not changed.\n", security_mode, encryp_type); /*lint !e26*/
+				} else {
+					SECURITY_NV_WRITE("m_AuthMode", security_mode, nv_ret);
+					SECURITY_NV_WRITE("m_EncrypType", encryp_type, nv_ret);
+
+					SECURITY_NV_WRITE("m_DefaultKeyID", DefaultKeyID, nv_ret);
+
+					SECURITY_NV_WRITE("m_Key1Str1", KeyStr[1], nv_ret);
+					SECURITY_NV_WRITE("m_Key2Str1", KeyStr[2], nv_ret);
+					SECURITY_NV_WRITE("m_Key3Str1", KeyStr[3], nv_ret);
+					SECURITY_NV_WRITE("m_Key4Str1", KeyStr[4], nv_ret);
+
+					SECURITY_NV_WRITE("m_Key1Type", KeyType[1], nv_ret);
+					SECURITY_NV_WRITE("m_Key2Type", KeyType[2], nv_ret);
+					SECURITY_NV_WRITE("m_Key3Type", KeyType[3], nv_ret);
+					SECURITY_NV_WRITE("m_Key4Type", KeyType[4], nv_ret);
+
+					*wifi_set_flags |= ZTE_WLAN_SET_AP_MSSID;
+					wlan_set_change_ssid_key_status(); //added by dujiajiao
+				}
+			} else if (STR_EQUAL(security_mode, WF_AU_OPEN) && STR_EQUAL(encryp_type, WF_ENCRY_NONE)) {
+				(void)zte_web_read("m_AuthMode", nv_au_mode);
+				(void)zte_web_read("m_EncrypType", nv_ecry_type);
+
+				if (STR_EQUAL(security_mode, nv_au_mode) && STR_EQUAL(encryp_type, nv_ecry_type)) {
+					slog(MISC_PRINT, SLOG_NORMAL,"wifi:[%s][%s] not changed.\n", security_mode, encryp_type); /*lint !e26*/
+				} else {
+					SECURITY_NV_WRITE("m_AuthMode", security_mode, nv_ret);
+					SECURITY_NV_WRITE("m_EncrypType", encryp_type, nv_ret);
+					/* added by dujiajiao, in open&no encrypt condition, there is no password  */
+					SECURITY_NV_WRITE(NV_WIFI_WPA_PASS_M_ENCODE, "", nv_ret);
+					SECURITY_NV_WRITE(NV_WIFI_WPA_PASS_M, "", nv_ret);
+					SECURITY_NV_WRITE("m_Key1Str1", "", nv_ret);
+					SECURITY_NV_WRITE("m_Key2Str1", "", nv_ret);
+					SECURITY_NV_WRITE("m_Key3Str1", "", nv_ret);
+					SECURITY_NV_WRITE("m_Key4Str1", "", nv_ret);
+					/*added by dujiajiao end */
+					*wifi_set_flags |= ZTE_WLAN_SET_AP_MSSID;
+					wlan_set_change_ssid_key_status(); //added by dujiajiao
+				}
+			} else {
+				//wifi_au_mode or encrype invalid
+				slog(MISC_PRINT, SLOG_ERR,"wifi:[%s][%s] is invalid.\n", security_mode, encryp_type); /*lint !e26*/
+				return -1;
+			}
+		} else if (STR_EQUAL(security_mode, WF_AU_WPA)  || STR_EQUAL(security_mode, WF_AU_WPA2) ||
+		           STR_EQUAL(security_mode, WF_AU_WPA_WPA2) || STR_EQUAL(security_mode, WF_AU_WPA3) || STR_EQUAL(security_mode, WF_AU_WPA2_WPA3)) {
+			zte_wifi_wpa_and_wpa2_mode_s_type nv_wpa_and_wpa2;
+			memset(&nv_wpa_and_wpa2, 0, sizeof(zte_wifi_wpa_and_wpa2_mode_s_type));
+
+			pass_phrase_str = websGetVar(wp, T(NV_WIFI_WPA_PASS_M), "");
+			cipher_str = websGetVar(wp, T("cipher"), "");
+
+			slog(MISC_PRINT, SLOG_DEBUG,"pass_phrase_str = %s", pass_phrase_str);     /*lint !e26*/
+			slog(MISC_PRINT, SLOG_DEBUG,"cipher_str = %s", cipher_str);  /*lint !e26*/
+
+			//add by liuyingnan for server safe for xss attack start
+			if (DATA_NO_SAFE == zte_Safe_noSpecialChar(pass_phrase_str)) {
+				printf("Get Data is no Safe:ssid:%s\n", pass_phrase_str); /*lint !e26*/
+				return -1;
+			}
+			//add by liuyingnan for server safe for xss attack end
+
+			switch (cipher_str[0]) {
+			case '0':
+				strncpy(wpa_encry_type, WF_ENCRY_TKIP, sizeof(wpa_encry_type) - 1);
+				break;
+			case '1':
+				strncpy(wpa_encry_type, WF_ENCRY_AES, sizeof(wpa_encry_type) - 1);
+				break;
+			case '2':
+				strncpy(wpa_encry_type, WF_ENCRY_TKIP_AES, sizeof(wpa_encry_type) - 1);
+				break;
+			default:
+				printf("unvalid encry type [%c]", encryp_type[0]);/*lint !e26*/
+				return -1;
+			}
+
+			(void)zte_web_read("m_AuthMode", nv_au_mode);
+			(void)zte_web_read("m_EncrypType", nv_ecry_type);
+			(void)zte_web_read(NV_WIFI_WPA_PASS_M, nv_wpa_and_wpa2.pre_share_key);
+
+			if (STR_EQUAL(security_mode, nv_au_mode) && STR_EQUAL(wpa_encry_type, nv_ecry_type) && STR_EQUAL(pass_phrase_str, nv_wpa_and_wpa2.pre_share_key)) {
+
+				slog(MISC_PRINT, SLOG_NORMAL,"wifi:[%s][%s] not changed.\n", security_mode, wpa_encry_type); /*lint !e26*/
+			} else {
+				SECURITY_NV_WRITE("m_AuthMode", security_mode, nv_ret);
+				SECURITY_NV_WRITE("m_EncrypType", wpa_encry_type, nv_ret);
+				//add by liuyingnan for Server safe start
+				slog(MISC_PRINT, SLOG_DEBUG,"pass_phrase_str:%s.\n", pass_phrase_str); /*lint !e26*/
+#ifdef WEBS_SECURITY
+				pass_phrase_str_decode = js_aes_decode(pass_phrase_str, strlen(pass_phrase_str), (unsigned int)&pass_phrase_str_decode_length);
+#else
+				pass_phrase_str_decode = (char*)zte_base64_decode((const unsigned char *)pass_phrase_str, strlen(pass_phrase_str), (unsigned int)&pass_phrase_str_decode_length);
+#endif
+				slog(MISC_PRINT, SLOG_DEBUG,"pass_phrase_str_decode:%s.\n", pass_phrase_str_decode); /*lint !e26*/
+
+				if (NULL == pass_phrase_str_decode) {
+					slog(MISC_PRINT, SLOG_DEBUG,"pass_phrase_str_decode: psw is empty.\n");/*lint !e26*/
+					free(pass_phrase_str_decode);
+					return -1;
+				}		
+				zte_pass_phrase_len = (pass_phrase_str_decode_length < sizeof(zte_pass_phrase_str) ? pass_phrase_str_decode_length : sizeof(zte_pass_phrase_str) - 1);
+				snprintf(zte_pass_phrase_str,zte_pass_phrase_len+1,"%s",pass_phrase_str_decode);
+				//strncpy(zte_pass_phrase_str, pass_phrase_str_decode, zte_pass_phrase_len);
+				free(pass_phrase_str_decode);
+				slog(MISC_PRINT, SLOG_DEBUG,"login3 -> zte_pass_phrase_str:%s.\n", zte_pass_phrase_str); //cov m
+#ifdef WEBS_SECURITY
+				if(zte_pass_phrase_str && !check_web_input_wifi(zte_pass_phrase_str,strlen(zte_pass_phrase_str)))
+				{
+					slog(MISC_PRINT, SLOG_ERR,"[goahead]wifipass2=%s\n",zte_pass_phrase_str);
+					return -1;
+				}
+				pass_phrase_b64_encode = zte_base64_encode(zte_pass_phrase_str, strlen(zte_pass_phrase_str));
+				if (NULL == pass_phrase_b64_encode) {
+					slog(MISC_PRINT, SLOG_DEBUG,"pass_phrase_b64_encode: psw is NULL.\n");/*lint !e26*/
+					return -1;
+				}
+				SECURITY_NV_WRITE(NV_WIFI_WPA_PASS_M_ENCODE, pass_phrase_b64_encode, nv_ret);
+				free(pass_phrase_b64_encode);
+				SECURITY_NV_WRITE(NV_WIFI_WPA_PASS_M, zte_pass_phrase_str, nv_ret);
+				SECURITY_NV_WRITE("m_WPAPSK1_enaes", pass_phrase_str, nv_ret);
+#else
+				SECURITY_NV_WRITE(NV_WIFI_WPA_PASS_M_ENCODE, pass_phrase_str, nv_ret);
+				SECURITY_NV_WRITE(NV_WIFI_WPA_PASS_M, zte_pass_phrase_str, nv_ret);
+#endif
+				//add by liuyingnan for Server safe end
+				//SECURITY_NV_WRITE(NV_WIFI_WPA_PASS_M, pass_phrase_str, nv_ret);
+
+				*wifi_set_flags |= ZTE_WLAN_SET_AP_MSSID;
+				wlan_set_change_ssid_key_status(); //added by dujiajiao
+			}
+		} else {
+			// other security mode is invalid
+			slog(MISC_PRINT, SLOG_ERR,"ERROR:security mode  is invalid");/*lint !e26*/
+			return -1;
+		}
+	} else {
+		//security_mode is NULL
+		slog(MISC_PRINT, SLOG_ERR,"ERROR:security_mode is NULL ");/*lint !e26*/
+		return -1;
+	}
+
+	return 0;
+
+}
+
+void zte_wlan_set_tsw(webs_t wp)
+{
+	char * openEnable = NULL;
+	char * closeEnable = NULL;
+	char * openTime = NULL;
+	char * closeTime = NULL;
+	char old_open_time[16] = {0};
+	char old_close_time[16] = {0};
+	char old_open_enable[16] = {0};
+	char tsw_sleep_time_hour[16] = {0};
+	char tsw_sleep_time_min[16] = {0};
+	char tsw_wake_time_hour[16] = {0};
+	char tsw_wake_time_min[16] = {0};
+	char *tmp = NULL;
+	int tsw_change_flag = 0;
+	sc_cfg_get("openEnable", old_open_enable, sizeof(old_open_enable));
+
+	sc_cfg_get("openTime", old_open_time, sizeof(old_open_time));
+
+	sc_cfg_get("closeTime", old_close_time, sizeof(old_close_time));
+
+	slog(MISC_PRINT, SLOG_DEBUG,"[%s]old_open_enable=%s,old_open_time=%s,old_close_time=%s\n", __FUNCTION__, old_open_enable, old_open_time, old_close_time);
+	openEnable = websGetVar(wp, T("openEnable"), T(""));
+	closeEnable = websGetVar(wp, T("closeEnable"), T(""));
+	openTime = websGetVar(wp, T("openTime"), T(""));
+	closeTime = websGetVar(wp, T("closeTime"), T(""));
+	slog(MISC_PRINT, SLOG_DEBUG,"[%s]openEnable=%s,closeEnable=%s,openTime=%s,closeTime=%s\n", __FUNCTION__, openEnable, closeEnable, openTime, closeTime);
+
+	//check the param: openEnable & closeEnable
+	if (NULL == openEnable || '\0' == *openEnable || NULL == closeEnable || '\0' == *closeEnable) {
+		slog(MISC_PRINT, SLOG_ERR,"zte_wlan_set_tsw: **open/close**invalid input para.\n");/*lint !e26*/
+		zte_write_result_to_web(wp, FAILURE);
+		return;
+	}
+	//if swtich is open , then check the param: openTime & closeTime
+	if (strcmp(openEnable, "1") == 0) {
+		if (NULL == openTime || '\0' == *openTime || NULL == closeTime || '\0' == *closeTime) {
+			slog(MISC_PRINT, SLOG_ERR,"zte_wlan_set_tsw: **open**invalid input para:openTime /closeTime.\n");/*lint !e26*/
+			zte_write_result_to_web(wp, FAILURE);
+			return;
+		}
+	}
+	sc_cfg_set("openEnable", openEnable);
+	sc_cfg_set("closeEnable", closeEnable);
+
+	//send msg to wlan-server to close timing sleep wake up
+	if (strcmp(openEnable, "0") == 0 && strcmp(old_open_enable, "1") == 0) {
+		tsw_change_flag = 1;
+		slog(MISC_PRINT, SLOG_NORMAL,"send to wlan-server : MSG_CMD_WIFI_TSW_CLOSE\n");
+		//zte_send_message(MODULE_ID_WIFI,MSG_CMD_WIFI_TSW_CLOSE,0,NULL);
+		ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_TSW_CLOSE, 0, NULL, 0);
+
+	}
+	// 1.if current openEnable is 1, and old_open_enable is 0, then send msg to wlan-server to setup tsw
+	// 2. if current openEnable is 1,  and openTime is changed or closeTime changed, then send msg to wlan-server to setup tsw
+	else if ((strcmp(openEnable, "1") == 0 && strcmp(old_open_enable, "0") == 0) || \
+	         ((strcmp(openEnable, "1") == 0)  && (strcmp(openTime, old_open_time) != 0 || strcmp(closeTime, old_close_time) != 0))) {
+		tsw_change_flag = 1;
+
+		sc_cfg_set("openTime", openTime);
+		sc_cfg_set("closeTime", closeTime);
+		snprintf(tsw_wake_time_hour, 3, "%s", openTime);
+		snprintf(tsw_wake_time_min, 3, "%s", openTime + 3);
+		snprintf(tsw_sleep_time_hour, 3, "%s", closeTime);
+		snprintf(tsw_sleep_time_min, 3, "%s", closeTime + 3);
+		slog(MISC_PRINT, SLOG_DEBUG,"tsw_wake_time_hour:%s,tsw_wake_time_min:%s\n", tsw_wake_time_hour, tsw_wake_time_min);
+		slog(MISC_PRINT, SLOG_DEBUG,"tsw_sleep_time_hour:%s,tsw_sleep_time_min:%s\n", tsw_sleep_time_hour, tsw_sleep_time_min);
+		sc_cfg_set("tsw_wake_time_hour", tsw_wake_time_hour);
+
+		sc_cfg_set("tsw_wake_time_min", tsw_wake_time_min);
+		sc_cfg_set("tsw_sleep_time_hour", tsw_sleep_time_hour);
+
+		sc_cfg_set("tsw_sleep_time_min", tsw_sleep_time_min);
+
+		slog(MISC_PRINT, SLOG_NORMAL,"send msg to wlan-server : MSG_CMD_WIFI_TSW_SET\n ");
+		//zte_send_message(MODULE_ID_WIFI,MSG_CMD_WIFI_TSW_SET,0,NULL);
+		ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_TSW_SET, 0, NULL, 0);
+	}
+
+	zte_write_result_to_web(wp, SUCCESS);
+}
+
+static void zte_get_cur_user_mac(struct list_head *Dhcp_info_list)
+{
+	struct in_addr addr;
+	char ipaddress[16] = {0};
+	char client_mac_addr[18] = {0};
+	char old_client_mac_addr[18] = {0};
+	DHCPOFFERADDR_LIST_t * p_dhcp_info  = NULL;
+
+	sc_cfg_get("client_mac_address", old_client_mac_addr, sizeof(old_client_mac_addr));
+	sc_cfg_get(NV_USER_IP_ADDR, ipaddress, sizeof(ipaddress));
+	list_for_each_entry(p_dhcp_info, Dhcp_info_list, list) {
+		addr.s_addr = p_dhcp_info->dhcp_info.ip;
+		if ((strcmp(ipaddress, "") != 0) && (strcmp(inet_ntoa(addr), "")) && (!strcmp(ipaddress, inet_ntoa(addr)))) {
+			snprintf(client_mac_addr, 18, "%02X:%02X:%02X:%02X:%02X:%02X", p_dhcp_info->dhcp_info.mac[0], p_dhcp_info->dhcp_info.mac[1], p_dhcp_info->dhcp_info.mac[2], p_dhcp_info->dhcp_info.mac[3], p_dhcp_info->dhcp_info.mac[4], p_dhcp_info->dhcp_info.mac[5]);
+			if (strcmp(client_mac_addr, old_client_mac_addr)) {
+				sc_cfg_set("client_mac_address", client_mac_addr);
+				break;
+			}
+		}
+	}
+}
+
+static DHCPOFFERADDR_LIST_t *find_match_sta(struct list_head *dhcp_info_list,  RT_802_11_MAC_ENTRY * pEntry)
+{
+	DHCPOFFERADDR_LIST_t * p_dhcp_info = NULL;
+
+	list_for_each_entry(p_dhcp_info, dhcp_info_list, list) {
+		//  printf("[%s] p_dhcp_info:%d\n", __FUNCTION__, p_dhcp_info);
+
+
+		if ((p_dhcp_info->dhcp_info.mac[0] == pEntry->Addr[0]) && (p_dhcp_info->dhcp_info.mac[1] == pEntry->Addr[1]) &&
+		    (p_dhcp_info->dhcp_info.mac[2] == pEntry->Addr[2]) && (p_dhcp_info->dhcp_info.mac[3] == pEntry->Addr[3]) &&
+		    (p_dhcp_info->dhcp_info.mac[4] == pEntry->Addr[4]) && (p_dhcp_info->dhcp_info.mac[5] == pEntry->Addr[5])) {
+
+			return p_dhcp_info;
+
+		}
+	}
+
+
+	return  NULL;
+
+}
+
+//»ñÈ¡wifi lan¿ÚÐÅÏ¢: wifi·Ö¿ªÔ­Òò£¬ÁÚ¾ÓÁбíºÍlease¶¼ÎÞ·¨Çø·ÖË­ÊÇwifi£¬Ö»ÓÐwifiоƬ֪µÀ
+void zte_wlan_get_station_list(webs_t wp)
+{
+	int i      = 0;
+	int result = 0;
+
+	BOOL first 	= TRUE;
+	BOOL match  = FALSE;
+
+	struct in_addr ipAddr                   = {0};
+	RT_802_11_MAC_TABLE staList             = {0};
+	DHCPOFFERADDR_LIST_t * p_dhcp_info   = NULL;
+
+	struct list_head dhcp_info_list;
+	INIT_LIST_HEAD(&dhcp_info_list);
+
+	zte_get_wifi_sta_list(&staList);
+	if (staList.Num > MAX_NUMBER_OF_MAC) {//kw 2,3
+		slog(MISC_PRINT, SLOG_ERR, "sta_count err, Num=%d\n", staList.Num);
+		return;
+	}
+	slog(MISC_PRINT, SLOG_DEBUG,"[%s]staList.Num:%d\n", __FUNCTION__, staList.Num);
+	slog(MISC_PRINT, SLOG_DEBUG,"[%s]sta_list->ConnectedTime:%d\n", __FUNCTION__, staList.Entry[0].ConnectedTime);
+	if (0 == staList.Num) {
+		sc_cfg_set("client_mac_address", ""); //added by dujiajiao 2016-2-24
+	}
+
+	result = zte_get_mac_list_from_lease(&dhcp_info_list);
+
+	web_feedback_header(wp);
+	(void)websWrite(wp, T("{\"%s\":["), CMD_WIFI_STATION_LIST);
+
+	/*
+	        if(-1 == result || -2 == result || -3 == result)
+	        {
+	    	    (void)websWrite(wp, T("]}"));
+	            safe_free(dhcp_info_list);
+	            return;
+	        }
+	*/
+
+	if (0 == result) {
+		zte_get_cur_user_mac(&dhcp_info_list);//added by dujiajiao 2016-2-24
+	}
+
+
+	for (i = 0; i < staList.Num; i++) {
+
+		if (first == FALSE) {
+			(void)websWrite(wp, T(","));
+		} else {
+			first = FALSE;
+		}
+
+		if (staList.Entry[i].ConnectedTime) {
+			(void)websWrite(wp, T("{\"%s\":%ld,"), WIFI_STATION_CONNECTTIME, staList.Entry[i].ConnectedTime);
+		} else {
+			(void)websWrite(wp, T("{\"%s\":\"--\","), WIFI_STATION_CONNECTTIME);
+		}
+
+		/*do not use macro,  the SSID_index = 0 in broadcom*/
+		slog(MISC_PRINT, SLOG_DEBUG,"[%s]SSID_index:%d\n", __FUNCTION__, staList.Entry[i].SSID_index);
+
+		if (staList.Entry[i].SSID_index) {
+			(void)websWrite(wp, T("\"%s\":\"%d\","), WIFI_SSID_INDEX, staList.Entry[i].SSID_index);
+		}
+
+		(void)websWrite(wp, T("\"%s\":\"wifi\","), WIFI_STATION_DEVTYPE);
+
+
+		(void)websWrite(wp, T("\"%s\":\"%02X:%02X:%02X:%02X:%02X:%02X\","), WIFI_STATION_MAC, \
+		                staList.Entry[i].Addr[0], staList.Entry[i].Addr[1], staList.Entry[i].Addr[2], staList.Entry[i].Addr[3], staList.Entry[i].Addr[4], staList.Entry[i].Addr[5]);
+
+		if ((p_dhcp_info = find_match_sta(&dhcp_info_list,  &staList.Entry[i])) != NULL) {
+
+
+			slog(MISC_PRINT, SLOG_DEBUG,"[%s] dhcp_info.mac= %02X %02X %02X %02X %02X %02X \n", __FUNCTION__, \
+			       p_dhcp_info->dhcp_info.mac[0], p_dhcp_info->dhcp_info.mac[1], p_dhcp_info->dhcp_info.mac[2], \
+			       p_dhcp_info->dhcp_info.mac[3], p_dhcp_info->dhcp_info.mac[4], p_dhcp_info->dhcp_info.mac[5]);
+
+			if (p_dhcp_info->dhcp_info.ip != NULL) {
+
+				slog(MISC_PRINT, SLOG_DEBUG,"[%s]dhcp_info_ip:%d\n", __FUNCTION__, p_dhcp_info->dhcp_info.ip);
+
+			}
+
+			ipAddr.s_addr = p_dhcp_info->dhcp_info.ip;
+
+			if (strlen(p_dhcp_info->dhcp_info.host_name) > 0) { //kw 3 ??
+				(void)websWrite(wp, T("\"%s\":\"%s\","), WIFI_STATION_HOSTNAME, p_dhcp_info->dhcp_info.host_name);
+			} else {
+				(void)websWrite(wp, T("\"%s\":\"--\","), WIFI_STATION_HOSTNAME);
+			}
+
+			if (inet_ntoa(ipAddr)) {
+				(void)websWrite(wp, T("\"%s\":\"%s\","), WIFI_STATION_IPADDR, inet_ntoa(ipAddr));
+				slog(MISC_PRINT, SLOG_DEBUG,"[%s]dhcp_info_ip-inet_ntoa:%s\n", __FUNCTION__, inet_ntoa(ipAddr));
+			} else {
+				(void)websWrite(wp, T("\"%s\":\"--\","), WIFI_STATION_IPADDR);
+			}
+
+			if (zte_is_static_dhcp_ip(inet_ntoa(ipAddr))) {
+				//(void)websWrite(wp,T("\"%s\":-1,"),WIFI_STATION_VALIDTIME);
+				(void)websWrite(wp, T("\"%s\":\"STATIC\"}"), WIFI_STATION_IPTYPE);
+			} else {
+				//(void)websWrite(wp,T("\"%s\":%ld,"),WIFI_STATION_VALIDTIME, dhcpInfo.expires);
+				(void)websWrite(wp, T("\"%s\":\"DHCP\"}"), WIFI_STATION_IPTYPE);
+			}
+			match = FALSE;
+		} else {
+//1.  dchp  not  give an IP
+//2.  customer set a static ip
+			slog(MISC_PRINT, SLOG_DEBUG,"[%s:%s]do not match ++++++++ \n", __FILE__, __FUNCTION__);
+
+			(void)websWrite(wp, T("\"%s\":\"--\","), WIFI_STATION_HOSTNAME);
+			(void)websWrite(wp, T("\"%s\":\"--\","), WIFI_STATION_IPADDR);
+			(void)websWrite(wp, T("\"%s\":\"--\"}"), WIFI_STATION_IPTYPE);
+		}
+
+	}
+
+	(void)websWrite(wp, T("]}"));
+
+	free_dhcp_list(&dhcp_info_list);
+}
+
+
+static unsigned int wps_pin_checksum(unsigned long pin)
+{
+	unsigned long int accum = 0;
+	while (pin) {
+		accum += 3 * (pin % 10);
+		pin /= 10;
+		accum += pin % 10;
+		pin /= 10;
+	}
+
+	return (10 - accum % 10) % 10;
+}
+
+int os_get_time(struct os_time *t)
+{
+	int res = 0;
+	struct timeval tv;
+	res = gettimeofday(&tv, NULL);
+	t->sec = tv.tv_sec;
+	t->usec = tv.tv_usec;
+	return res;
+}
+static int get_random(unsigned char* buf, size_t len)
+{
+	FILE* f;
+	size_t rc;
+
+	f = fopen("/dev/urandom", "rb");
+	if (f == NULL) {
+		slog(MISC_PRINT, SLOG_ERR,"Could not open /dev/urandom.\n");
+		return -1;
+	}
+
+	rc = fread(buf, 1, len, f);
+	//kw 3
+	fclose(f);
+	
+	//printf("rc is %d, buf is %s\n", rc, buf);
+	return rc != len ? -1 : 0;
+}
+
+int random_get_bytes(void* buf, size_t len)
+{
+	int ret;
+	unsigned char* bytes = buf;
+
+	ret = get_random(buf, len);
+	return ret;
+}
+
+static int wps_generate_pin(void)
+{
+	unsigned int val = 0;
+
+	/*Generate seven random digits for the PIN*/
+	if (random_get_bytes((unsigned char *) &val, sizeof(val)) < 0) {
+		struct os_time now;
+		os_get_time(&now);
+		val = random() ^ now.sec ^ now.usec;
+	} else {//klocwork
+		if (val > 0xFFFFFFF0) {
+			struct os_time now;
+			os_get_time(&now);
+			val = random() ^ now.sec ^ now.usec;
+		}
+	}
+	val %= 10000000;
+	//printf("val is %ld\n", val);
+	/*Append checksum digit*/
+	return val * 10 + wps_pin_checksum(val);
+}
+
+void zte_wlan_get_wps_pin(webs_t wp)
+{
+	unsigned long pincode = 0;
+	char pin[9] = {0};
+
+	pincode = wps_generate_pin();
+	snprintf(pin,sizeof(pin), "%08d", pincode);
+
+	(void)zte_web_write(NV_WIFI_WPS_AP_PIN, pin);
+	web_feedback_header(wp);
+	zte_rest_cmd_write_head(wp);
+	zte_rest_cmd_write(wp, NV_WIFI_WPS_AP_PIN, pin, 0);
+	zte_rest_cmd_write_foot(wp);
+}
+
+void zte_wlan_get_wps_defpin(webs_t wp)
+{
+	//unsigned long defpincode = 0;
+	char pin[9] = {0};
+	(void)zte_web_read(NV_WIFI_WPS_DEF_PIN, pin);
+
+	web_feedback_header(wp);
+	zte_rest_cmd_write_head(wp);
+	zte_rest_cmd_write(wp, NV_WIFI_WPS_DEF_PIN, pin, 0);
+	zte_rest_cmd_write_foot(wp);
+}
+
+
diff --git a/ap/app/goahead/interface5.0/wifi/zte_web_lan_utils.c b/ap/app/goahead/interface5.0/wifi/zte_web_lan_utils.c
new file mode 100755
index 0000000..a5884a8
--- /dev/null
+++ b/ap/app/goahead/interface5.0/wifi/zte_web_lan_utils.c
@@ -0,0 +1,310 @@
+/* vi: set sw=4 ts=4 sts=4: */
+/*
+ *	wireless.c -- Wireless Settings
+ *
+ *	Copyright (c) Ralink Technology Corporation All Rights Reserved.
+ *
+ *	$Id: wireless.c,v 1.99.2.4 2008-10-17 10:49:17 winfred Exp $
+ */
+
+#include	<stdlib.h>
+#include	<sys/ioctl.h>
+#include	<arpa/inet.h>
+#include	<net/if.h>
+#include	<net/route.h>
+//#include	"../../autoconf.h"
+#ifdef CONFIG_DEFAULTS_KERNEL_2_6_21
+#include	<linux/types.h>
+#include	<linux/socket.h>
+#endif
+//#include	<linux/wireless.h>
+#include    <string.h>
+#include    <dirent.h>
+//#include	"nvram.h"
+#include	"webs.h"
+#include	"zte_web_lan_utils.h"
+//#include	"zte_web_lan_oid.h"
+//#include	"linux/autoconf.h"
+#include    <sys/time.h>
+#include    <signal.h>
+#include    "zte_web_interface.h"
+
+/*
+ * nanosleep(2) don't depend on signal SIGALRM and could cooperate with
+ * other SIGALRM-related functions(ex. setitimer(2))
+ */
+unsigned int Sleep(unsigned int secs)
+{
+	int rc = 0;
+	struct timespec ts, remain;/*lint !e1080 !e565 */
+	ts.tv_sec  = secs;/*lint !e115 !e1013 !e63 */
+	ts.tv_nsec = 0;/*lint !e115 !e1013 !e63 */
+sleep_again:
+	rc = nanosleep(&ts, &remain);
+	if (rc == -1 && errno == EINTR) {
+		ts.tv_sec = remain.tv_sec;/*lint !e115 !e1013 !e63 */
+		ts.tv_nsec = remain.tv_nsec;/*lint !e115 !e1013 !e63 */
+		goto sleep_again;
+	}
+	return 0;
+}
+
+int setTimer(int microsec, void ((*sigroutine)(int)))
+{
+	struct itimerval value, ovalue;
+	signal(SIGALRM, sigroutine);
+	value.it_value.tv_sec = 0;
+	value.it_value.tv_usec = microsec;
+	value.it_interval.tv_sec = 0;
+	value.it_interval.tv_usec = microsec;
+	return setitimer(ITIMER_REAL, &value, &ovalue);
+}
+void stopTimer(void)
+{
+	struct itimerval value, ovalue;
+	value.it_value.tv_sec = 0;
+	value.it_value.tv_usec = 0;
+	value.it_interval.tv_sec = 0;
+	value.it_interval.tv_usec = 0;
+	setitimer(ITIMER_REAL, &value, &ovalue);
+}
+
+/*
+ *  argument:  [IN]     index -- the index array of deleted items(begin from 0)
+ *             [IN]     count -- deleted itmes count.
+ *             [IN/OUT] value -- original string/return string
+ *             [IN]     delimit -- delimitor
+ */
+int deleteNthValueMulti(int index[], int count, char *value, char delimit)
+{
+	char *begin = NULL;
+	char *end = NULL;
+	int i = 0;
+	int j = 0;
+	int need_check_flag = 0;
+	char *buf = strdup(value);
+	if (buf == NULL)
+		return -1;
+	*(buf+strlen(value)) = 0;
+	begin = buf;
+	end = strchr(begin, delimit);
+	while (end) {
+		if (i == index[j]) {
+			memset(begin, 0, end - begin);
+			if (index[j] == 0) {
+				need_check_flag = 1;
+			}
+			j++;
+			if (j >= count) {
+				break;
+			}
+		}
+		begin = end;
+		end = strchr(begin + 1, delimit);
+		i++;
+	}
+	if (!end && index[j] == i) {
+		memset(begin, 0, strlen(begin));
+	}
+	if (need_check_flag) {
+		for (i = 0; i < strlen(value); i++) {
+			if (buf[i] == '\0') {
+				continue;
+			}
+			if (buf[i] == ';') {
+				buf[i] = '\0';
+			}
+			break;
+		}
+	}
+	for (i = 0, j = 0; i < strlen(value); i++) {
+		if (buf[i] != '\0') {
+			value[j++] = buf[i];
+		}
+	}
+	value[j] = '\0';
+	free(buf);
+	return 0;
+}
+
+/*
+ * substitution of getNthValue which dosen't destroy the original value
+ */
+int getNthValueSafe(int index, char *value, char delimit, char *result, int len)
+{
+	int i = 0;
+	int result_len = 0;
+	char *begin = NULL;
+	char *end = NULL;
+	if (!value || !result || !len) {
+		return -1;
+	}
+	begin = value;
+	end = strchr(begin, delimit);
+	while (i < index && end) {
+		begin = end + 1;
+		end = strchr(begin, delimit);
+		i++;
+	}
+	if (!end) {
+		if (i == index) {
+			end = begin + strlen(begin);
+			result_len = (len - 1) < (end - begin) ? (len - 1) : (end - begin);
+		} else {
+			return -1;
+		}
+	} else {
+		result_len = (len - 1) < (end - begin) ? (len - 1) : (end - begin);
+	}
+	memcpy(result, begin, result_len);
+	*(result + result_len) = '\0';
+	return 0;
+}
+
+/*
+ * arguments: ifname  - interface name
+ *            if_addr - a 18-byte buffer to store mac address
+ * description: fetch mac address according to given interface name
+ */
+int getIfMac(char *ifname, char *if_hw)
+{
+	struct ifreq ifr;
+	char *ptr = NULL;
+	int skfd = 0;
+	memset(&ifr, 0, sizeof(struct ifreq));
+	if ((skfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+		slog(MISC_PRINT, SLOG_ERR,"getIfMac: open socket error");
+		return -1;
+	}
+	strncpy(ifr.ifr_name, ifname, IF_NAMESIZE-1);
+	if (ioctl(skfd, SIOCGIFHWADDR, &ifr) < 0) {
+		close(skfd);
+		return -1;
+	}
+	ptr = (char *) & (ifr.ifr_addr.sa_data); /*lint !e545*/
+	sprintf(if_hw, "%02X:%02X:%02X:%02X:%02X:%02X", (ptr[0] & 0377), (ptr[1] & 0377), (ptr[2] & 0377),	(ptr[3] & 0377), (ptr[4] & 0377), (ptr[5] & 0377));
+	close(skfd);
+	return 0;
+}
+
+/*
+ * arguments: ifname  - interface name
+ *            if_addr - a 16-byte buffer to store ip address
+ * description: fetch ip address, netmask associated to given interface name
+ */
+int getIfIp(char *ifname, char *if_addr)
+{
+	struct ifreq ifr;
+	int skfd = 0;
+	memset(&ifr, 0, sizeof(struct ifreq));
+	if ((skfd = socket(AF_INET, SOCK_DGRAM, 0)) < 0) {
+		slog(MISC_PRINT, SLOG_DEBUG,"getIfIp: open socket error");
+		return -1;
+	}
+	strncpy(ifr.ifr_name, ifname, IF_NAMESIZE-1);
+	if (ioctl(skfd, SIOCGIFADDR, &ifr) < 0) {
+		close(skfd);
+		return -1;
+	}
+	strcpy(if_addr, inet_ntoa(((struct sockaddr_in *)&ifr.ifr_addr)->sin_addr));
+	close(skfd);
+	return 0;
+}
+
+/*
+ * arguments: index - index of the Nth value (starts from 0)
+ *            old_values - un-parsed values
+ *            new_value - new value to be replaced
+ * description: parse values delimited by semicolon,
+ *              replace the Nth value with new_value,
+ *              and return the result
+ * WARNING: return the internal static string -> use it carefully
+ */
+char *setNthValue(int index, char *old_values, char *new_value)
+{
+	int i = 0;
+	char *p = NULL;
+	char *q = NULL;
+	static char ret[2048] = {0};
+	char buf[8][256] = {0};
+	memset(ret, 0, 2048);
+	for (i = 0; i < 8; i++) {
+		memset(buf[i], 0, 256);
+	}
+	for (i = 0, p = old_values, q = strchr(p, ';');
+	     i < 8 && q != NULL;
+	     i++, p = q + 1, q = strchr(p, ';')) {
+		//strncpy(buf[i], p, q - p);
+		if (q - p < sizeof(buf[i]))
+			snprintf(buf[i],q-p+1,"%s",p);
+		else
+			snprintf(buf[i],sizeof(buf[i]),"%s",p);
+	}
+	if (i < 8) { //kw 3
+		//strcpy(buf[i], p); //the last one
+		if (strlen(p) < sizeof(buf[i]))
+			snprintf(buf[i],strlen(p)+1,"%s",p);
+		else
+			snprintf(buf[i],sizeof(buf[i]),"%s",p);
+	}
+	strncpy(buf[index], new_value, 255);//cov
+	index = (i > index) ? i : index;
+	strncat(ret, buf[0],sizeof(ret)-strlen(ret)-1);
+	for (i = 1; i <= index; i++) {
+		//strncat(ret, ";", 2);
+		//strncat(ret, buf[i], 256);
+		snprintf(ret+strlen(ret),sizeof(ret)-strlen(ret),";%s",buf[i]);//cov
+	}
+	p = ret;
+	return p;
+}
+
+/*
+ * description: return LAN interface name
+ */
+char* getLanIfName(void)
+{
+	char mode[128] = {0};
+	static char *if_name = "br0";
+	char num_s[64] = {0};
+
+	sc_cfg_get("OperationMode", &mode, sizeof(mode));
+
+	if (strcmp(mode, "") == 0) {
+		return if_name;
+	}
+	if (!strncmp(mode, "0", 2)) { /*lint !e530*/
+		if_name = "br0";
+	} else if (!strncmp(mode, "1", 2)) {
+#if defined CONFIG_RAETH_ROUTER || defined CONFIG_MAC_TO_MAC_MODE || defined CONFIG_RT_3052_ESW
+		if_name = "br0";
+#elif defined  CONFIG_ICPLUS_PHY && CONFIG_RT2860V2_AP_MBSS
+		sc_cfg_get("BssidNum", &num_s, sizeof(num_s));
+
+		if (atoi(num_s) > 1) {	// multiple ssid
+			if_name = "br0";
+		} else {
+			if_name = "ra0";
+		}
+#else
+		if_name = "ra0";
+#endif
+	} else if (!strncmp(mode, "2", 2)) {
+		if_name = "eth2";
+	} else if (!strncmp(mode, "3", 2)) {
+		if_name = "br0";
+	}
+	return if_name;
+}/*lint !e529*/
+
+/*
+ * concatenate a string with an integer
+ * ex: racat("SSID", 1) will return "SSID1"
+ */
+char *racat(char *s, int i)
+{
+	static char str[32] = {0};
+	snprintf(str, 32, "%s%1d", s, i);
+	return str;
+}
+
diff --git a/ap/app/goahead/interface5.0/wifi/zte_web_lan_utils.h b/ap/app/goahead/interface5.0/wifi/zte_web_lan_utils.h
new file mode 100755
index 0000000..d4a1620
--- /dev/null
+++ b/ap/app/goahead/interface5.0/wifi/zte_web_lan_utils.h
@@ -0,0 +1,275 @@
+/*
+ *	zte_web_wireless_utils.h -- Wireless Configuration Header
+ *
+ *	Copyright (c) ZTE Corporation All Rights Reserved.
+ *
+ *	$Id: zte_web_wireless_utils.h,v 0.1 2010-12-15 $
+ *  Authors :	ZHAOYONG - zhao.yong3@zte.com.cn>
+ */
+#ifndef __WIRELESS__H__
+#define __WIRELESS__H__
+#include <stdlib.h>
+//#include <stdint.h>
+#include <sys/ioctl.h>
+#include <arpa/inet.h>
+//#include	<net/if.h>
+//#include	<net/route.h>
+
+#ifdef CONFIG_DEFAULTS_KERNEL_2_6_21
+#include <linux/types.h>
+#include <linux/socket.h>
+#endif
+//#include <linux/wireless.h>
+//#include <net/if.h>
+#include <string.h>
+#include <dirent.h>
+//#include "nvram.h"
+#include "webs.h"
+//#include "zte_web_lan_oid.h"
+//#include "linux/autoconf.h"
+#include "zte_web_interface.h"
+#include <sys/socket.h>
+#include <asm/types.h>
+#include <sys/time.h>
+#include <time.h>
+#include <signal.h>
+#include <ctype.h>
+
+#define RT2860_NVRAM 0
+#define RTINIC_NVRAM 1
+#define RT2561_NVRAM 2
+#define RTDEV_NVRAM    	1
+#define CERT_NVRAM    	2
+#define WAPI_NVRAM    	3
+#define PACKED  __attribute__ ((packed))
+#define USHORT  unsigned short
+#define UCHAR   unsigned char
+#define WPS_AP_TIMEOUT_SECS				120000				// 120 seconds
+#define WPS_AP_CATCH_CONFIGURED_TIMER	100					// 0.1 sec 
+#define WIFIPIN 8
+#define LFW(x, y)	do{												\
+						if(! ( x = websGetVar(wp, T(#y), T(""))))	\
+							return;									\
+					}while(0)
+
+#define LFWi(x, y)	do{														\
+						char_t *x##_str;									\
+						if(! ( x##_str = websGetVar(wp, T(#y), T(""))))		\
+							return;											\
+						x = atoi(x##_str);									\
+					}while(0)
+
+#define LFF(result, nvram, x, n)	\
+							do{		char tmp[128];										\
+									char strx[512];   \
+									sc_cfg_get(#x,strx,sizeof(strx)); \
+									strcpy(strx,x); \
+									if(!x)				\
+										tmp[0] = '\0';									\
+									else{												\
+										if( getNthValueSafe(n, x, ';', tmp, 128) != -1){\
+											gstrncat(result, tmp, 4096);				\
+										}												\
+									}gstrncat(result, "\r", 4096);						\
+							}while(0)
+
+#define cprintf(fmt, args...) do {  \
+    FILE *fp = fopen("/dev/console", "w");  \
+    if (fp) {   \
+        fprintf(fp, fmt, ## args);  \
+        fclose(fp); \
+    }   \
+} while (0)
+
+#define PBC_WPS_34 34
+#define RALINK_GPIO_REG_IRQ		0x0A
+
+#if 0
+#ifdef CONFIG_RT2860V2_AP_WAPI
+#define MAX_NUMBER_OF_MAC               96
+#else
+#define MAX_NUMBER_OF_MAC               32 // if MAX_MBSSID_NUM is 8, this value can't be larger than 211
+#endif
+
+typedef union _MACHTTRANSMIT_SETTING {
+	struct  {
+		unsigned short  MCS: 7; // MCS
+		unsigned short  BW: 1;  //channel bandwidth 20MHz or 40 MHz
+		unsigned short  ShortGI: 1;
+		unsigned short  STBC: 2; //SPACE
+		unsigned short	eTxBF: 1;
+		unsigned short	rsv: 1;
+		unsigned short	iTxBF: 1;
+		unsigned short  MODE: 2; // Use definition MODE_xxx.
+	} field;
+	unsigned short      word;
+} MACHTTRANSMIT_SETTING;
+
+typedef struct _RT_802_11_MAC_ENTRY {
+#ifdef CONFIG_RT2860V2_AP_V24_DATA_STRUCTURE
+	unsigned char			ApIdx;
+#endif
+	unsigned char           Addr[6];
+	unsigned char           Aid;
+	unsigned char           Psm;     // 0:PWR_ACTIVE, 1:PWR_SAVE
+	unsigned char           MimoPs;  // 0:MMPS_STATIC, 1:MMPS_DYNAMIC, 3:MMPS_Enabled
+	char                    AvgRssi0;
+	char                    AvgRssi1;
+	char                    AvgRssi2;
+	unsigned int            ConnectedTime;
+	MACHTTRANSMIT_SETTING	TxRate;
+	unsigned int			LastRxRate;
+	int						StreamSnr[3];
+	int						SoundingRespSnr[3];
+} RT_802_11_MAC_ENTRY;
+
+typedef struct _RT_802_11_MAC_TABLE {
+	unsigned long            Num;
+	RT_802_11_MAC_ENTRY      Entry[MAX_NUMBER_OF_MAC]; //MAX_LEN_OF_MAC_TABLE = 32
+} RT_802_11_MAC_TABLE;
+
+/*add by myc for wifi_client_show 2012-04-19 begin*/
+
+typedef struct _DHCPOFFERADDR {
+	unsigned long expires;
+	unsigned long ip;
+	unsigned char mac[6];
+	unsigned char host_name[20];
+	unsigned char pad[2];
+} DHCPOFFERADDR;
+
+#endif
+
+typedef struct PACKED _WSC_CONFIGURED_VALUE {
+	USHORT WscConfigured; // 1 un-configured; 2 configured
+	UCHAR   WscSsid[32 + 1];
+	USHORT WscAuthMode; // mandatory, 0x01: open, 0x02: wpa-psk, 0x04: shared, 0x08:wpa, 0x10: wpa2, 0x
+	USHORT  WscEncrypType;  // 0x01: none, 0x02: wep, 0x04: tkip, 0x08: aes
+	UCHAR   DefaultKeyIdx;
+	UCHAR   WscWPAKey[64 + 1];
+} WSC_CONFIGURED_VALUE;
+
+typedef struct {
+	unsigned int irq;		//request irq pin number
+	pid_t pid;			//process id to notify
+} ralink_gpio_reg_info;
+
+typedef struct PACKED _NDIS80211SSID {
+	unsigned int    SsidLength;   // length of SSID field below, in bytes;
+	// this can be zero.
+	unsigned char   Ssid[32]; // SSID information field
+} NDIS80211SSID;
+
+typedef struct  _WSC_CREDENTIAL {
+	NDIS80211SSID    SSID;               // mandatory
+	USHORT              AuthType;           // mandatory, 1: open, 2: wpa-psk, 4: shared, 8:wpa, 0x10: wpa2, 0x20: wpa-psk2
+	USHORT              EncrType;           // mandatory, 1: none, 2: wep, 4: tkip, 8: aes
+	UCHAR               Key[64];            // mandatory, Maximum 64 byte
+	USHORT              KeyLength;
+	UCHAR               MacAddr[6];         // mandatory, AP MAC address
+	UCHAR               KeyIndex;           // optional, default is 1
+	UCHAR               Rsvd[3];            // Make alignment
+}   WSC_CREDENTIAL, *PWSC_CREDENTIAL;
+
+typedef struct  _WSC_PROFILE {
+#ifndef UINT
+#define UINT	unsigned long
+#endif
+	UINT           	ProfileCnt;
+	UINT		ApplyProfileIdx;  // add by johnli, fix WPS test plan 5.1.1
+	WSC_CREDENTIAL  	Profile[8];             // Support up to 8 profiles
+}   WSC_PROFILE, *PWSC_PROFILE;
+
+typedef struct _ADVANCED_SETTINGS {
+	char_t *bg_protection;
+	char_t *beacon;
+	char_t *dtim;
+	char_t *fragment;
+	char_t *rts;
+	char_t *tx_power;
+	char_t *short_preamble;
+	char_t *short_slot;
+	char_t *tx_burst;
+	char_t *pkt_aggregate;
+	char_t *ieee_80211h;
+	char_t *wmm_capable;
+	char_t *apsd_capable;
+	char_t *dls_capable;
+	char_t *countrycode;
+	char_t *m2u_enable;
+} ADVANCED_SETTINGS;
+
+
+
+//typedef struct _DHCPOFFERADDR {
+//	uint8_t hostname[16];
+//	uint8_t chaddr[16];
+//	uint32_t yiaddr;	/* network order */
+//	uint32_t expires;	/* host order */
+//} DHCPOFFERADDR;
+
+
+/*add by myc for wifi_client_show 2012-04-19 end */
+
+extern void formDefineWireless_Advanced(void);
+extern void formDefineWireless_Basic(void);
+extern void formDefineWireless_Stainfo(void);
+extern void formDefineWireless_Security(void);
+extern void formDefineWireless(void);
+extern void restart8021XDaemon(int nvram);
+extern void updateFlash8021x(int nvram);
+extern void Security(int nvram, webs_t wp, char_t *path, char_t *query);
+extern void confWPAGeneral(int nvram, webs_t wp, int mbssid);
+extern void confWEP(int nvram, webs_t wp, int mbssid);
+extern void conf8021x(int nvram, webs_t wp, int mbssid);
+extern void getSecurity(int nvram, webs_t wp, char_t *path, char_t *query);
+extern void DeleteAccessPolicyList(int nvram, webs_t wp, char_t *path, char_t *query);
+extern void restart_wlan(void);
+extern char *racat(char *s, int i);
+extern char* getLanIfName(void);
+extern char *setNthValue(int index, char *old_values, char *new_value);
+extern int getIfIp(char *ifname, char *if_addr);
+extern int deleteNthValueMulti(int index[], int count, char *value, char delimit);
+extern int getNthValueSafe(int index, char *value, char delimit, char *result, int len);
+extern int getIfMac(char *ifname, char *if_hw);
+extern int getIfIp(char *ifname, char *if_addr);
+extern char *setNthValue(int index, char *old_values, char *new_value);
+extern char *getLanIfName(void);
+extern char *racat(char *s, int i);
+extern int setTimer(int microsec, void ((*sigroutine)(int)));
+extern void stopTimer(void);
+extern int wlan_timeout_deal(int eid, webs_t wp, int argc, char_t **argv);
+extern int  getWlan11aChannels(int eid, webs_t wp, int argc, char_t **argv);
+extern int  getWlan11bChannels(int eid, webs_t wp, int argc, char_t **argv);
+extern int  getWlan11gChannels(int eid, webs_t wp, int argc, char_t **argv);
+extern int  getWlanChannel(int eid, webs_t wp, int argc, char_t **argv);
+extern int  getWlanCurrentMac(int eid, webs_t wp, int argc, char_t **argv);
+extern int  getWlanWdsEncType(int eid, webs_t wp, int argc, char_t **argv);
+extern int deleteNthValueMulti(int index[], int count, char *value, char delimit);		/* for Access Policy list deletion*/
+extern void DeleteAccessPolicyList(int nvram, webs_t wp, char_t *path, char_t *query);
+extern void revise_mbss_value(int old_num, int new_num);
+extern void restart8021XDaemon(int nvram);
+extern void restart_wlan(void);
+extern void updateFlash8021x(int nvram);
+extern void STFs(int nvram, int index, char *flash_key, char *value);
+extern int AccessPolicyHandle(webs_t wp, int mbssid);
+extern int getDLSBuilt(int eid, webs_t wp, int argc, char_t **argv);
+extern int getWlanM2UBuilt(int eid, webs_t wp, int argc, char_t **argv);
+extern int getWlanStaInfo(int eid, webs_t wp, int argc, char_t **argv);
+extern int getWlanStaInfo_ap2(int eid, webs_t wp, int argc, char_t **argv);
+extern void wirelessGetSecurity(webs_t wp, char_t *path, char_t *query);
+inline void clearRadiusSetting(int nvram, int mbssid);
+extern void APSecurity(webs_t wp, char_t *path, char_t *query);
+extern void APDeleteAccessPolicyList(webs_t wp, char_t *path, char_t *query);
+extern void WPSRestart(void);
+extern void formDefineWPS(void);
+extern void wps_register(void);
+extern void wirelessadvanced_getwebpara(webs_t wp, ADVANCED_SETTINGS *advanced_setting_inside);
+extern void wirelessadvanced_setnv(ADVANCED_SETTINGS *advanced_setting_inside, int ssid_num_inside, int wlan_mode_inside);
+extern void WPSSingleTriggerHandler(int signo);
+/*extern void LFW(webs_t wp,char_t *x,char *y);
+extern void LFF(char_t *result,int nvram,char_t *x,int n);
+extern void LFWi(webs_t wp,int *intvalue,char *webname);*/
+
+#endif
+
diff --git a/ap/app/goahead/interface5.0/wifi/zte_web_mgmt_wifi.c b/ap/app/goahead/interface5.0/wifi/zte_web_mgmt_wifi.c
new file mode 100755
index 0000000..6677f54
--- /dev/null
+++ b/ap/app/goahead/interface5.0/wifi/zte_web_mgmt_wifi.c
@@ -0,0 +1,431 @@
+#include "zte_web_mgmt_wifi.h"
+#include "zte_web_interface.h"
+
+void deal_quick_setup_wifi_basic_mgmt(webs_t wp)
+{
+	char *ssid_name = NULL;
+	char *ssid_broadcast = NULL;
+
+	ssid_name = websGetVar(wp, "SSID_name", T(""));
+	ssid_broadcast = websGetVar(wp, "SSID_Broadcast", T(""));
+
+	sc_cfg_set("SSID1", ssid_name);
+	wlan_set_change_ssid_key_status();
+	sc_cfg_set("HideSSID", ssid_broadcast);
+}
+
+void deal_quick_setup_wifi_basic_mgmt_1(webs_t wp)
+{
+	char *ssid_name = NULL;
+	char *ssid_broadcast = NULL;
+
+	ssid_name = websGetVar(wp, "ssid", T(""));
+	ssid_broadcast = websGetVar(wp, "broadcastSsidEnabled", T(""));
+
+	sc_cfg_set("SSID1", ssid_name);
+
+	wlan_set_change_ssid_key_status();
+
+	sc_cfg_set("HideSSID", ssid_broadcast);
+}
+
+void deal_quick_setup_wifi_security_mgmt(webs_t wp)
+{
+	char *security_mode = NULL;
+	char *shared_mode = NULL;
+	char *pass_phrase_str = NULL;
+	char_t *cipher_str = NULL;
+	uint8 wpa_encry_type[WF_ENCRY_TYPE_LEN] = {0};
+	int pass_phrase_str_decode_length = 0;
+	char *pass_phrase_str_decode = NULL;
+#ifdef WEBS_SECURITY
+	char *pass_phrase_b64_encode = NULL;
+#endif
+	char zte_pass_phrase_str[WIFI_PSW_DEFAULT_LENGTH] = {0};
+	char wifi_cur_state[WIFI_STATUS_LEN] = {0};
+	unsigned int wifi_set_flags = 0;
+	char wifi_set_flags_str[NV_ITEM_STRING_LEN_20] = {0};
+
+	security_mode = websGetVar(wp, "Encryption_Mode_hid", T(""));  /* OPEN | SHARED | WPSPASK...  */
+	if (0 == strcmp("SHARED", security_mode) ||
+	    0 == strcmp("WEPAUTO", security_mode)) {
+		sc_cfg_set("EncrypType", "WEP");
+		//sc_cfg_set("DefaultKeyID", "1");
+		//sc_cfg_set("Key1Type", websGetVar(wp, "WEP1Select", T("")));
+		//sc_cfg_set("Key1Str1", websGetVar(wp, "Network_Key_1", T("")));
+		sc_cfg_set("DefaultKeyID", websGetVar(wp, "wep_default_key", T("")));
+		sc_cfg_set("Key1Type", websGetVar(wp, "WEP1Select", T("")));
+		sc_cfg_set("Key1Str1", websGetVar(wp, "wep_key_1", T("")));
+		sc_cfg_set("Key2Type", websGetVar(wp, "WEP2Select", T("")));
+		sc_cfg_set("Key2Str1", websGetVar(wp, "wep_key_2", T("")));
+		sc_cfg_set("Key3Type", websGetVar(wp, "WEP3Select", T("")));
+		sc_cfg_set("Key3Str1", websGetVar(wp, "wep_key_3", T("")));
+		sc_cfg_set("Key4Type", websGetVar(wp, "WEP4Select", T("")));
+		sc_cfg_set("Key4Str1", websGetVar(wp, "wep_key_4", T("")));
+		wlan_set_change_ssid_key_status();
+	} else if (0 == strcmp(WF_AU_OPEN, security_mode)) {
+		shared_mode  = websGetVar(wp, "security_shared_mode", T(""));
+		if (0 == strcmp("NONE", shared_mode)) {  /* OPEN-NONE */
+			sc_cfg_set("EncrypType", "NONE");
+			sc_cfg_set(NV_WIFI_WPA_PASS_ENCODE, "");
+			sc_cfg_set(NV_WIFI_WPA_PASS, "");
+			sc_cfg_set("Key1Str1", "");
+			sc_cfg_set("Key2Str1", "");
+			sc_cfg_set("Key3Str1", "");
+			sc_cfg_set("Key4Str1", "");
+			wlan_set_change_ssid_key_status();
+		} else {
+			sc_cfg_set("EncrypType", "WEP");
+			//sc_cfg_set("DefaultKeyID", "1");
+			//sc_cfg_set("Key1Type", websGetVar(wp, "WEP1Select", T("")));
+			//sc_cfg_set("Key1Str1", websGetVar(wp, "Network_Key_1", T("")));
+			sc_cfg_set("DefaultKeyID", websGetVar(wp, "wep_default_key", T("")));
+			sc_cfg_set("Key1Type", websGetVar(wp, "WEP1Select", T("")));
+			sc_cfg_set("Key1Str1", websGetVar(wp, "wep_key_1", T("")));
+			sc_cfg_set("Key2Type", websGetVar(wp, "WEP2Select", T("")));
+			sc_cfg_set("Key2Str1", websGetVar(wp, "wep_key_2", T("")));
+			sc_cfg_set("Key3Type", websGetVar(wp, "WEP3Select", T("")));
+			sc_cfg_set("Key3Str1", websGetVar(wp, "wep_key_3", T("")));
+			sc_cfg_set("Key4Type", websGetVar(wp, "WEP4Select", T("")));
+			sc_cfg_set("Key4Str1", websGetVar(wp, "wep_key_4", T("")));
+			wlan_set_change_ssid_key_status();
+		}
+	} else if (0 == strcmp("WPAPSK", security_mode) ||
+	           0 == strcmp("WPA2PSK", security_mode) ||
+	           0 == strcmp("WPAPSKWPA2PSK", security_mode) ||
+	           0 == strcmp("WPA3Personal", security_mode) ||
+	           0 == strcmp("WPA2WPA3", security_mode)) {
+#ifndef CONFIG_CHINA_UNICOM
+		if (STR_EQUAL(security_mode, WF_AU_WPA_WPA2)) {
+			cipher_str = websGetVar(wp, T("cipher_str"), T(""));
+		} else
+#endif
+		{
+			cipher_str = websGetVar(wp, T("WPA_ENCRYPTION_hid"), T(""));
+		}
+		switch (cipher_str[0]) {
+		case '0':
+			strncpy(wpa_encry_type, WF_ENCRY_TKIP, sizeof(wpa_encry_type) - 1);
+			break;
+		case '1':
+			strncpy(wpa_encry_type, WF_ENCRY_AES, sizeof(wpa_encry_type) - 1);
+			break;
+		case '2':
+			strncpy(wpa_encry_type, WF_ENCRY_TKIP_AES, sizeof(wpa_encry_type) - 1);
+			break;
+		default:
+			return;
+		}
+		sc_cfg_set("EncrypType", wpa_encry_type);
+
+#ifndef CONFIG_CHINA_UNICOM
+		if (0 == strcmp("WPAPSKWPA2PSK", security_mode)) {
+#endif
+			sc_cfg_set("cipher_str", cipher_str);
+
+#ifndef CONFIG_CHINA_UNICOM
+		}
+#endif
+		sc_cfg_set("RekeyMethod", "TIME");
+		sc_cfg_set("RekeyInterval", websGetVar(wp, "Key_Rotation_Interval_hid", T("")));
+		// sc_cfg_set("DefaultKeyID", "2");
+
+		pass_phrase_str = websGetVar(wp, T("WPA_PreShared_Key"), T(""));
+		slog(MISC_PRINT, SLOG_DEBUG, "pass_phrase_str:%s.\n", pass_phrase_str); /*lint !e26*/
+#ifdef WEBS_SECURITY
+		pass_phrase_str_decode = js_aes_decode(pass_phrase_str, strlen(pass_phrase_str), &pass_phrase_str_decode_length);
+#else
+		pass_phrase_str_decode = zte_base64_decode((const unsigned char *)pass_phrase_str, strlen(pass_phrase_str), &pass_phrase_str_decode_length);
+#endif
+		slog(MISC_PRINT, SLOG_DEBUG, "login2 ->  zte_password:%s.\n", pass_phrase_str_decode); /*lint !e26*/
+
+		if (NULL == pass_phrase_str_decode) {
+			slog(MISC_PRINT, SLOG_DEBUG, "pass_phrase_str_decode: psw is empty.\n"); /*lint !e26*/
+			free(pass_phrase_str_decode);
+			return;
+		}
+		//strncpy(zte_pass_phrase_str, pass_phrase_str_decode, pass_phrase_str_decode_length);
+		if(pass_phrase_str_decode_length >= sizeof(zte_pass_phrase_str))
+			snprintf(zte_pass_phrase_str,sizeof(zte_pass_phrase_str),"%s",pass_phrase_str_decode);
+		else
+			snprintf(zte_pass_phrase_str,pass_phrase_str_decode_length+1,"%s",pass_phrase_str_decode);
+		free(pass_phrase_str_decode);
+		slog(MISC_PRINT, SLOG_DEBUG, "login3 -> zte_psw_admin:%s.\n", zte_pass_phrase_str); //cov m
+
+#ifdef WEBS_SECURITY
+		pass_phrase_b64_encode = zte_base64_encode(zte_pass_phrase_str, strlen(zte_pass_phrase_str));
+		if (NULL == pass_phrase_b64_encode) {
+			slog(MISC_PRINT, SLOG_DEBUG,"pass_phrase_b64_encode: psw is NULL.\n");/*lint !e26*/
+			return;
+		}
+		sc_cfg_set(NV_WIFI_WPA_PASS_ENCODE, pass_phrase_b64_encode);
+		free(pass_phrase_b64_encode);
+		sc_cfg_set(NV_WIFI_WPA_PASS, zte_pass_phrase_str);
+		sc_cfg_set("WPAPSK1_enaes", pass_phrase_str);
+#else
+		sc_cfg_set(NV_WIFI_WPA_PASS_ENCODE, pass_phrase_str);
+		sc_cfg_set(NV_WIFI_WPA_PASS, zte_pass_phrase_str);
+#endif
+		wlan_set_change_ssid_key_status();
+	} else if (0 == strcmp("WAPISK", security_mode)) {
+		sc_cfg_set("RekeyMethod", "TIME");
+		sc_cfg_set("RekeyInterval", websGetVar(wp, "Key_Rotation_Interval_hid", T("")));
+		sc_cfg_set("wapiType", "2");
+		pass_phrase_str = websGetVar(wp, T("WPA_PreShared_Key"), T(""));
+		slog(MISC_PRINT, SLOG_DEBUG, "pass_phrase_str:%s.\n", pass_phrase_str); /*lint !e26*/
+#ifdef WEBS_SECURITY
+		pass_phrase_str_decode = js_aes_decode(pass_phrase_str, strlen(pass_phrase_str), &pass_phrase_str_decode_length);
+#else
+		pass_phrase_str_decode = zte_base64_decode((const unsigned char *)pass_phrase_str, strlen(pass_phrase_str), &pass_phrase_str_decode_length);
+#endif
+		slog(MISC_PRINT, SLOG_DEBUG, "login2 -> zte_password:%s.\n", pass_phrase_str_decode); /*lint !e26*/
+
+		if (NULL == pass_phrase_str_decode) {
+			slog(MISC_PRINT, SLOG_DEBUG, "pass_phrase_str_decode: psw is empty.\n"); /*lint !e26*/
+			free(pass_phrase_str_decode);
+			return;
+		}
+		//strncpy(zte_pass_phrase_str, pass_phrase_str_decode, pass_phrase_str_decode_length);
+		if(pass_phrase_str_decode_length >= sizeof(zte_pass_phrase_str))
+			snprintf(zte_pass_phrase_str,sizeof(zte_pass_phrase_str),"%s",pass_phrase_str_decode);
+		else
+			snprintf(zte_pass_phrase_str,pass_phrase_str_decode_length+1,"%s",pass_phrase_str_decode);
+		free(pass_phrase_str_decode);
+		slog(MISC_PRINT, SLOG_DEBUG, "login3 -> zte_psw_admin:%s.\n", zte_pass_phrase_str); /*lint !e26*/
+
+#ifdef WEBS_SECURITY
+		pass_phrase_b64_encode = zte_base64_encode(zte_pass_phrase_str, strlen(zte_pass_phrase_str));
+		if (NULL == pass_phrase_b64_encode) {
+			slog(MISC_PRINT, SLOG_DEBUG,"pass_phrase_b64_encode: psw is NULL.\n");/*lint !e26*/
+			return;
+		}
+		sc_cfg_set(NV_WIFI_WPA_PASS_ENCODE, pass_phrase_b64_encode);
+		free(pass_phrase_b64_encode);
+		sc_cfg_set(NV_WIFI_WPA_PASS, zte_pass_phrase_str);
+		sc_cfg_set("WPAPSK1_enaes", pass_phrase_str);
+#else
+		sc_cfg_set(NV_WIFI_WPA_PASS_ENCODE, pass_phrase_str);
+		sc_cfg_set(NV_WIFI_WPA_PASS, zte_pass_phrase_str);
+#endif
+		wlan_set_change_ssid_key_status();
+	} else {
+		return;
+	}
+
+	sc_cfg_set("AuthMode", security_mode);
+	//sc_cfg_set("IEEE8021X", "0");
+
+	/*TBD:notify wifi module to make parameters go into effect*/
+	//(void)snprintf(wifi_set_flags_str,sizeof(wifi_set_flags_str)-1,"%u",wifi_set_flags);
+	//(void)zte_web_write(WIFI_NV_ITEM_WIFI_SET_FLAGS, wifi_set_flags_str);
+	//slog(MISC_PRINT,SLOG_DEBUG,"zte_wlan_ssid1_set: wifi_set_flags [%u] to [%s].", wifi_set_flags,wifi_set_flags_str);/*lint !e26*/
+	//printf(" deal_quick_setup_wifi_security------------------------- 11111\n");
+
+	sc_cfg_get("wifi_cur_state", wifi_cur_state, sizeof(wifi_cur_state));
+	printf("[%s]wifi_cur_state is %s\n", __FUNCTION__, wifi_cur_state);
+	if (strcmp(wifi_cur_state, WIFI_OPENED) != 0) {
+		printf("[%s]wifi_cur_state is 0, wifi is off, don't send msg to wlan-server\n", __FUNCTION__);
+		return;
+	}
+	
+	wifi_set_flags = ZTE_WLAN_SSID_SET|ZTE_WLAN_BROADCAST_SET|ZTE_WLAN_BASIC_SECURITY_SET;
+	(void)snprintf(wifi_set_flags_str, sizeof(wifi_set_flags_str) - 1, "%u", wifi_set_flags);
+	(void)zte_web_write(WIFI_NV_ITEM_WIFI_SET_FLAGS, wifi_set_flags_str);
+	
+	slog(MISC_PRINT, SLOG_NORMAL, "send wifi para to wlan-server@ssid1"); /*lint !e26*/
+	//zte_send_message(MODULE_ID_WIFI,MSG_CMD_WIFI_SSID,NULL,NULL);
+	ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_CFG_AP, 0, NULL, 0);
+
+	slog(MISC_PRINT, SLOG_DEBUG, "wifi set cmd done!");	/*lint !e26*/
+
+	return;
+}
+
+
+void deal_quick_setup_wifi_security_mgmt_1(webs_t wp)
+{
+	char *security_mode = NULL;
+	char *shared_mode = NULL;
+	char *pass_phrase_str = NULL;
+	char_t *cipher_str = NULL;
+	uint8 wpa_encry_type[WF_ENCRY_TYPE_LEN] = {0};
+	int pass_phrase_str_decode_length = 0;
+	char *pass_phrase_str_decode = NULL;
+#ifdef WEBS_SECURITY
+	char *pass_phrase_b64_encode = NULL;
+#endif
+	char zte_pass_phrase_str[WIFI_PSW_DEFAULT_LENGTH] = {0};
+	char wifi_cur_state[WIFI_STATUS_LEN] = {0};
+	security_mode = websGetVar(wp, "security_mode", T(""));  /* OPEN | SHARED | WPSPASK...  */
+	if (0 == strcmp("SHARED", security_mode) ||
+	    0 == strcmp("WEPAUTO", security_mode)) {
+		sc_cfg_set("EncrypType", "WEP");
+		//sc_cfg_set("DefaultKeyID", "1");
+		//sc_cfg_set("Key1Type", websGetVar(wp, "WEP1Select", T("")));
+		//sc_cfg_set("Key1Str1", websGetVar(wp, "Network_Key_1", T("")));
+		sc_cfg_set("DefaultKeyID", websGetVar(wp, "wep_default_key", T("")));
+		sc_cfg_set("Key1Type", websGetVar(wp, "WEP1Select", T("")));
+		sc_cfg_set("Key1Str1", websGetVar(wp, "wep_key_1", T("")));
+		sc_cfg_set("Key2Type", websGetVar(wp, "WEP2Select", T("")));
+		sc_cfg_set("Key2Str1", websGetVar(wp, "wep_key_2", T("")));
+		sc_cfg_set("Key3Type", websGetVar(wp, "WEP3Select", T("")));
+		sc_cfg_set("Key3Str1", websGetVar(wp, "wep_key_3", T("")));
+		sc_cfg_set("Key4Type", websGetVar(wp, "WEP4Select", T("")));
+		sc_cfg_set("Key4Str1", websGetVar(wp, "wep_key_4", T("")));
+		wlan_set_change_ssid_key_status();
+	} else if (0 == strcmp(WF_AU_OPEN, security_mode)) {
+		shared_mode  = websGetVar(wp, "security_shared_mode", T(""));
+		if (0 == strcmp("NONE", shared_mode)) {  /* OPEN-NONE */
+			sc_cfg_set("EncrypType", "NONE");
+			sc_cfg_set(NV_WIFI_WPA_PASS_ENCODE, "");
+			sc_cfg_set(NV_WIFI_WPA_PASS, "");
+			sc_cfg_set("Key1Str1", "");
+			sc_cfg_set("Key2Str1", "");
+			sc_cfg_set("Key3Str1", "");
+			sc_cfg_set("Key4Str1", "");
+			wlan_set_change_ssid_key_status();
+		} else {
+			sc_cfg_set("EncrypType", "WEP");
+			//sc_cfg_set("DefaultKeyID", "1");
+			//sc_cfg_set("Key1Type", websGetVar(wp, "WEP1Select", T("")));
+			//sc_cfg_set("Key1Str1", websGetVar(wp, "Network_Key_1", T("")));
+			sc_cfg_set("DefaultKeyID", websGetVar(wp, "wep_default_key", T("")));
+			sc_cfg_set("Key1Type", websGetVar(wp, "WEP1Select", T("")));
+			sc_cfg_set("Key1Str1", websGetVar(wp, "wep_key_1", T("")));
+			sc_cfg_set("Key2Type", websGetVar(wp, "WEP2Select", T("")));
+			sc_cfg_set("Key2Str1", websGetVar(wp, "wep_key_2", T("")));
+			sc_cfg_set("Key3Type", websGetVar(wp, "WEP3Select", T("")));
+			sc_cfg_set("Key3Str1", websGetVar(wp, "wep_key_3", T("")));
+			sc_cfg_set("Key4Type", websGetVar(wp, "WEP4Select", T("")));
+			sc_cfg_set("Key4Str1", websGetVar(wp, "wep_key_4", T("")));
+			wlan_set_change_ssid_key_status();
+		}
+	} else if (0 == strcmp("WPAPSK", security_mode) ||
+	           0 == strcmp("WPA2PSK", security_mode) ||
+	           0 == strcmp("WPAPSKWPA2PSK", security_mode) ||
+	           0 == strcmp("WPA3Personal", security_mode) ||
+	           0 == strcmp("WPA2WPA3", security_mode)) {
+		cipher_str = websGetVar(wp, T("cipher"), T(""));
+		switch (cipher_str[0]) {
+		case '0':
+			strncpy(wpa_encry_type, WF_ENCRY_TKIP, sizeof(wpa_encry_type) - 1);
+			break;
+		case '1':
+			strncpy(wpa_encry_type, WF_ENCRY_AES, sizeof(wpa_encry_type) - 1);
+			break;
+		case '2':
+			strncpy(wpa_encry_type, WF_ENCRY_TKIP_AES, sizeof(wpa_encry_type) - 1);
+			break;
+		default:
+			return;
+		}
+		sc_cfg_set("EncrypType", wpa_encry_type);
+
+#ifndef CONFIG_CHINA_UNICOM
+		if (0 == strcmp("WPAPSKWPA2PSK", security_mode)) {
+#endif
+			sc_cfg_set("cipher_str", cipher_str);
+
+#ifndef CONFIG_CHINA_UNICOM
+		}
+#endif
+		sc_cfg_set("RekeyMethod", "TIME");
+		sc_cfg_set("RekeyInterval", websGetVar(wp, "Key_Rotation_Interval_hid", T("")));
+		// sc_cfg_set("DefaultKeyID", "2");
+
+		pass_phrase_str = websGetVar(wp, T("passphrase"), T(""));
+		slog(MISC_PRINT, SLOG_DEBUG, "pass_phrase_str:%s.\n", pass_phrase_str); /*lint !e26*/
+		pass_phrase_str_decode = zte_base64_decode((const unsigned char *)pass_phrase_str, strlen(pass_phrase_str), &pass_phrase_str_decode_length);
+		slog(MISC_PRINT, SLOG_DEBUG, "login2 ->  zte_password:%s.\n", pass_phrase_str_decode); /*lint !e26*/
+
+		if (NULL == pass_phrase_str_decode) {
+			slog(MISC_PRINT, SLOG_DEBUG, "pass_phrase_str_decode: psw is empty.\n"); /*lint !e26*/
+			free(pass_phrase_str_decode);
+			return;
+		}
+		//strncpy(zte_pass_phrase_str, pass_phrase_str_decode, pass_phrase_str_decode_length);
+		if(pass_phrase_str_decode_length >= sizeof(zte_pass_phrase_str))
+			snprintf(zte_pass_phrase_str,sizeof(zte_pass_phrase_str),"%s",pass_phrase_str_decode);
+		else
+			snprintf(zte_pass_phrase_str,pass_phrase_str_decode_length+1,"%s",pass_phrase_str_decode);
+		free(pass_phrase_str_decode);
+		slog(MISC_PRINT, SLOG_DEBUG, "login3 -> zte_psw_admin:%s.\n", zte_pass_phrase_str); //cov m
+
+#ifdef WEBS_SECURITY
+		pass_phrase_b64_encode = zte_base64_encode(zte_pass_phrase_str, strlen(zte_pass_phrase_str));
+		if (NULL == pass_phrase_b64_encode) {
+			slog(MISC_PRINT, SLOG_DEBUG,"pass_phrase_b64_encode: psw is NULL.\n");/*lint !e26*/
+			return;
+		}
+		sc_cfg_set(NV_WIFI_WPA_PASS_ENCODE, pass_phrase_b64_encode);
+		free(pass_phrase_b64_encode);
+#else
+		sc_cfg_set(NV_WIFI_WPA_PASS_ENCODE, pass_phrase_str);
+#endif
+		sc_cfg_set(NV_WIFI_WPA_PASS, zte_pass_phrase_str);
+		wlan_set_change_ssid_key_status();
+	} else if (0 == strcmp("WAPISK", security_mode)) {
+		sc_cfg_set("RekeyMethod", "TIME");
+		sc_cfg_set("RekeyInterval", websGetVar(wp, "Key_Rotation_Interval_hid", T("")));
+		sc_cfg_set("wapiType", "2");
+		pass_phrase_str = websGetVar(wp, T("passphrase"), T(""));
+		slog(MISC_PRINT, SLOG_DEBUG, "pass_phrase_str:%s.\n", pass_phrase_str); /*lint !e26*/
+		pass_phrase_str_decode = zte_base64_decode((const unsigned char *)pass_phrase_str, strlen(pass_phrase_str), &pass_phrase_str_decode_length);
+		slog(MISC_PRINT, SLOG_DEBUG, "login2 -> zte_password:%s.\n", pass_phrase_str_decode); /*lint !e26*/
+
+		if (NULL == pass_phrase_str_decode) {
+			slog(MISC_PRINT, SLOG_DEBUG, "pass_phrase_str_decode: psw is empty.\n"); /*lint !e26*/
+			free(pass_phrase_str_decode);
+			return;
+		}
+		//strncpy(zte_pass_phrase_str, pass_phrase_str_decode, pass_phrase_str_decode_length);
+		if(pass_phrase_str_decode_length >= sizeof(zte_pass_phrase_str))
+			snprintf(zte_pass_phrase_str,sizeof(zte_pass_phrase_str),"%s",pass_phrase_str_decode);
+		else
+			snprintf(zte_pass_phrase_str,pass_phrase_str_decode_length+1,"%s",pass_phrase_str_decode);
+		free(pass_phrase_str_decode);
+		slog(MISC_PRINT, SLOG_DEBUG, "login3 -> zte_psw_admin:%s.\n", zte_pass_phrase_str); /*lint !e26*/
+
+#ifdef WEBS_SECURITY
+		pass_phrase_b64_encode = zte_base64_encode(zte_pass_phrase_str, strlen(zte_pass_phrase_str));
+		if (NULL == pass_phrase_b64_encode) {
+			slog(MISC_PRINT, SLOG_DEBUG,"pass_phrase_b64_encode: psw is NULL.\n");/*lint !e26*/
+			return;
+		}
+		sc_cfg_set(NV_WIFI_WPA_PASS_ENCODE, pass_phrase_b64_encode);
+		free(pass_phrase_b64_encode);
+#else
+		sc_cfg_set(NV_WIFI_WPA_PASS_ENCODE, pass_phrase_str);
+#endif
+		sc_cfg_set(NV_WIFI_WPA_PASS, zte_pass_phrase_str);
+		wlan_set_change_ssid_key_status();
+	} else {
+		return;
+	}
+
+	sc_cfg_set("AuthMode", security_mode);
+	//sc_cfg_set("IEEE8021X", "0");
+
+	/*TBD:notify wifi module to make parameters go into effect*/
+	//(void)snprintf(wifi_set_flags_str,sizeof(wifi_set_flags_str)-1,"%u",wifi_set_flags);
+	//(void)zte_web_write(WIFI_NV_ITEM_WIFI_SET_FLAGS, wifi_set_flags_str);
+	//slog(MISC_PRINT,SLOG_DEBUG,"zte_wlan_ssid1_set: wifi_set_flags [%u] to [%s].", wifi_set_flags,wifi_set_flags_str);/*lint !e26*/
+	//printf(" deal_quick_setup_wifi_security------------------------- 11111\n");
+
+	sc_cfg_get("wifi_cur_state", wifi_cur_state, sizeof(wifi_cur_state));
+	if (strcmp(wifi_cur_state, WIFI_OPENED) != 0) {
+		slog(MISC_PRINT, SLOG_NORMAL,"[%s]wifi_cur_state is 0, wifi is off, don't send msg to wlan-server\n", __FUNCTION__);
+		return;
+	}
+	slog(MISC_PRINT, SLOG_NORMAL, "send wifi para to wlan-server@ssid1"); /*lint !e26*/
+	//zte_send_message(MODULE_ID_WIFI,MSG_CMD_WIFI_SSID,NULL,NULL);
+	ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_CFG_AP, 0, NULL, 0);
+	slog(MISC_PRINT, SLOG_DEBUG, "wifi set cmd done!");	/*lint !e26*/
+
+	return;
+}
+
+void deal_quick_setup_wps_mgmt(webs_t wp)
+{
+	return;
+}
diff --git a/ap/app/goahead/interface5.0/wifi/zte_web_mgmt_wifi.h b/ap/app/goahead/interface5.0/wifi/zte_web_mgmt_wifi.h
new file mode 100644
index 0000000..3427a76
--- /dev/null
+++ b/ap/app/goahead/interface5.0/wifi/zte_web_mgmt_wifi.h
@@ -0,0 +1,15 @@
+#ifndef ZTE_WEB_MGMT_WIFI_H
+#define ZTE_WEB_MGMT_WIFI_H
+
+#include "webs.h"
+
+extern void deal_quick_setup_wifi_basic_mgmt(webs_t wp);
+extern void deal_quick_setup_wifi_security_mgmt(webs_t wp);
+extern void deal_quick_setup_wps_mgmt(webs_t wp);
+
+//start:for MF910W
+extern void deal_quick_setup_wifi_basic_mgmt_1(webs_t wp);
+extern void deal_quick_setup_wifi_security_mgmt(webs_t wp);
+//end:for MF910W
+
+#endif
diff --git a/ap/app/goahead/interface5.0/wifi/zte_web_wlan_station.c b/ap/app/goahead/interface5.0/wifi/zte_web_wlan_station.c
new file mode 100755
index 0000000..63b8dd0
--- /dev/null
+++ b/ap/app/goahead/interface5.0/wifi/zte_web_wlan_station.c
@@ -0,0 +1,1367 @@
+
+/************************************************************************
+* °æÈ¨ËùÓÐ (C)2015, ÉîÛÚÊÐÖÐÐËͨѶ¹É·ÝÓÐÏÞ¹«Ë¾¡£
+*
+* ÎļþÃû³Æ£º zte_web_wlan_station.c
+* Îļþ±êʶ£º
+* ÄÚÈÝÕªÒª£º
+* ÆäËü˵Ã÷£º
+* µ±Ç°°æ±¾£º V0.1
+* ×÷    Õߣº XUJIAN
+* Íê³ÉÈÕÆÚ£º 2015-03-09
+*
+* Ð޸ļǼ1£º
+* ÐÞ¸ÄÄÚÈÝ£º³õʼ°æ±¾
+************************************************************************/
+#include    "zte_web_interface.h"
+
+
+#define WEB_WLAN_STATION_MODE_WIFI_PREF "wifi_pref"
+#define WEB_WLAN_STATION_MODE_DIAL_PREF "dial_pref"
+#define WEB_WLAN_STATION_CONNECTION_LEN   1
+#define WEB_WLAN_STATION_MODE_LEN   10
+
+#define WEB_WLAN_STATION_IP_STATUS_CONNECT "connect"
+#define WEB_WLAN_STATION_IP_STATUS_DISCONNECT "disconnect"
+#define WEB_WLAN_STATION_IP_STATUS_CONNECTING "connecting"
+#define WIFI_STATION_IP_STATUS_DHCPING  "dhcping"
+#define WEB_WLAN_STATION_IP_STATUS_LEN   15
+
+#define WEB_WLAN_STATION_SPOT_ADD "add"
+#define WEB_WLAN_STATION_SPOT_MODIFY "modify"
+#define WEB_WLAN_STATION_SPOT_DEL "delete"
+#define WEB_WLAN_STATION_SPOT_NUM_LEN   8
+#define WEB_WLAN_STATION_SPOT_LIST_MAX  10
+#define WEB_WLAN_STATION_PROFILE_NV_NAME_LEN 20
+#define WEB_WLAN_STATION_SPOT_LEN  256
+#define WEB_WLAN_STATION_SPOT_PROFILE_NAME_LEN  30
+#define WEB_WLAN_STATION_SPOT_KEY_ID_LEN  10
+#define WEB_WLAN_STATION_SPOT_PASSWORD_LEN  128
+
+#define WEB_WLAN_STATION_SSID_LEN               128
+#define WEB_WLAN_STATION_ACTION_LEN             32
+
+#define WIFI_STATION_SPOT_LEN  256
+#define WIFI_STATION_SPOT_LIST_NUM  10
+#define WIFI_STATION_SPOT_PROFILE_NAME_LEN  30
+#define WIFI_STATION_SPOT_PASSWORD_LEN  128
+#define WIFI_STATION_SPOT_KEY_ID_LEN  10
+#define WIFI_STATION_PROFILE_NV_NAME_LEN  20
+#define WIFI_STATION_MAC_LEN                20
+#define WIFI_STATION_SSID_LEN               128
+#define WIFI_STATION_AUTH_MODE_LEN  20
+#define WIFI_STATION_ENCRYPT_TYPE_LEN  20
+#define WIFI_STATION_AP_MAC_LEN  18
+
+#define WEB_WLAN_STATION_AUTH_MODE_SHARED "SHARED"
+#define WEB_WLAN_STATION_AUTH_MODE_WPAPSK_WPA2PSK "WPAPSKWPA2PSK"
+#define WEB_WLAN_STATION_AUTH_MODE_WPAPSK "WPAPSK"
+#define WEB_WLAN_STATION_AUTH_MODE_WPA2PSK "WPA2PSK"
+#define WEB_WLAN_STATION_AUTH_MODE_WPAEAP_WPA2EAP "WPAEAPWPA2EAP"
+#define WEB_WLAN_STATION_AUTH_MODE_WPAEAP "WPAEAP"
+#define WEB_WLAN_STATION_AUTH_MODE_WPA2EAP "WPA2EAP"
+#define WEB_WLAN_STATION_AUTH_MODE_EAP_SIM_AKA "EAP-SIM/AKA"
+#define WEB_WLAN_STATION_AUTH_MODE_WPA2_WPA3 "WPA2WPA3"
+#define WEB_WLAN_STATION_AUTH_MODE_WPA3 "WPA3Personal"
+
+#define WEB_WLAN_STATION_ENCRYPT_TYPE_TKIP_CCMP "TKIPCCMP"
+#define WEB_WLAN_STATION_ENCRYPT_TYPE_CCMP "CCMP"
+#define WEB_WLAN_STATION_ENCRYPT_TYPE_TKIP "TKIP"
+#define WEB_WLAN_STATION_ENCRYPT_TYPE_NONE "NONE"
+#define WEB_WLAN_STATION_ENCRYPT_TYPE_WEP "WEP"
+
+#define safe_free(x) do { if(x) {free(x); x=NULL;} } while(0)
+#define  wf_log(fmt, args...)	\
+	do {slog(WIFI_PRINT,SLOG_ERR,   "[wlan][%s-%d]: " fmt"\n", __FUNCTION__, __LINE__, ## args);} while (0)
+
+extern void zte_write_result_to_web(webs_t wp, char_t *result);
+//extern LONG zte_send_message(USHORT target_id,USHORT Msg_cmd,USHORT us_DataLen,UCHAR *pData);
+typedef enum web_wifi_profile_content {
+	WEB_WLAN_STATION_CONTENT_UNDEFINED,
+	WEB_WLAN_STATION_PROFILE_NAME,
+	WEB_WLAN_STATION_FROM_PROVIDER,
+	WEB_WLAN_STATION_CONNECT_STATUS,
+	WEB_WLAN_STATION_SIGNAL,
+	WEB_WLAN_STATION_SSID,
+	WEB_WLAN_STATION_AUTH_MODE,
+	WEB_WLAN_STATION_ENCRYPT_TYPE,
+	WEB_WLAN_STATION_PASSWORD,
+	WEB_WLAN_STATION_KEY_ID,
+	WEB_WLAN_STATION_MAC
+} web_wifi_profile_content_t;
+
+typedef struct  update_spot_info {
+	char  spot[WEB_WLAN_STATION_SPOT_LEN];
+	char  action[WEB_WLAN_STATION_ACTION_LEN];
+} updateinfo_t;
+
+typedef struct web_spot {
+	char      profile_name[WIFI_STATION_SPOT_PROFILE_NAME_LEN];
+	short     from_provider;//0:·ÇÔËÓªÉÌ£¬1:ÔËÓªÉÌ
+	short     connect_status;
+	short     signal;
+	char      ssid[WIFI_STATION_SSID_LEN];
+	char      auth_mode[WIFI_STATION_AUTH_MODE_LEN];
+	char      encrypt_type[WIFI_STATION_ENCRYPT_TYPE_LEN];
+	char      password[WIFI_STATION_SPOT_PASSWORD_LEN];
+	short     keyID;
+	char     mac[WIFI_STATION_MAC_LEN];
+} web_spot_t;
+
+static web_spot_t * g_spot_list[WEB_WLAN_STATION_SPOT_LIST_MAX] = {NULL};
+
+static int get_spot_num(char_t* spot_num)
+{
+	int num = -1;
+
+	if (spot_num == NULL) {
+		return num;
+	}
+
+	if (strcmp(spot_num, "0") == 0) {
+		num = 0;
+	} else if (strcmp(spot_num, "1") == 0) {
+		num = 1;
+	} else if (strcmp(spot_num, "2") == 0) {
+		num = 2;
+	} else if (strcmp(spot_num, "3") == 0) {
+		num = 3;
+	} else if (strcmp(spot_num, "4") == 0) {
+		num = 4;
+	} else if (strcmp(spot_num, "5") == 0) {
+		num = 5;
+	} else if (strcmp(spot_num, "6") == 0) {
+		num = 6;
+	} else if (strcmp(spot_num, "7") == 0) {
+		num = 7;
+	} else if (strcmp(spot_num, "8") == 0) {
+		num = 8;
+	} else if (strcmp(spot_num, "9") == 0) {
+		num = 9;
+	} else if (strcmp(spot_num, "10") == 0) {
+		num = 10;
+	} else {
+	}
+
+	return num;
+}
+
+static BOOL check_profile_name(char_t* profile_name)
+{
+	int profile_name_len = 0;
+
+	if (profile_name == NULL) {
+		return FALSE;
+	}
+
+	profile_name_len = strlen(profile_name);
+
+	if (profile_name_len > 0 && profile_name_len < WEB_WLAN_STATION_SPOT_PROFILE_NAME_LEN) {
+		return TRUE;
+	} else {
+		return FALSE;
+	}
+
+}
+
+static BOOL check_keyID(char_t* keyID)
+{
+	int keyID_len = 0;
+
+	if (keyID == NULL) {
+		return FALSE;
+	}
+
+	keyID_len = strlen(keyID);
+
+	if (keyID_len > 0 && keyID_len < WEB_WLAN_STATION_SPOT_KEY_ID_LEN) {
+		return TRUE;
+	} else {
+		return FALSE;
+	}
+
+}
+
+static BOOL check_password(char_t* password)
+{
+	int password_len = 0;
+
+	if (password == NULL) {
+		return FALSE;
+	}
+
+	password_len = strlen(password);
+
+	if (password_len >= 0 && password_len < WEB_WLAN_STATION_SPOT_PASSWORD_LEN) {
+		return TRUE;
+	} else {
+		return FALSE;
+	}
+
+}
+
+static BOOL check_encrypt_type(char_t* encrypt_type)
+{
+	if (encrypt_type == NULL) {
+		return FALSE;
+	}
+
+	if (strcmp(encrypt_type, WEB_WLAN_STATION_ENCRYPT_TYPE_TKIP_CCMP) == 0
+	    || strcmp(encrypt_type, WEB_WLAN_STATION_ENCRYPT_TYPE_CCMP) == 0
+	    || strcmp(encrypt_type, WEB_WLAN_STATION_ENCRYPT_TYPE_TKIP) == 0
+	    || strcmp(encrypt_type, WEB_WLAN_STATION_ENCRYPT_TYPE_WEP) == 0
+	    || strcmp(encrypt_type, WEB_WLAN_STATION_ENCRYPT_TYPE_NONE) == 0) {
+		return TRUE;
+	} else {
+		return FALSE;
+	}
+
+}
+
+static BOOL check_auth_mode(char_t* auth_mode)
+{
+	if (auth_mode == NULL) {
+		return FALSE;
+	}
+
+	if (strcmp(auth_mode, WF_AU_OPEN) == 0
+	    || strcmp(auth_mode, WEB_WLAN_STATION_AUTH_MODE_SHARED) == 0
+	    || strcmp(auth_mode, WEB_WLAN_STATION_AUTH_MODE_WPAPSK_WPA2PSK) == 0
+	    || strcmp(auth_mode, WEB_WLAN_STATION_AUTH_MODE_WPAPSK) == 0
+	    || strcmp(auth_mode, WEB_WLAN_STATION_AUTH_MODE_WPA2PSK) == 0
+	    || strcmp(auth_mode, WEB_WLAN_STATION_AUTH_MODE_WPAEAP_WPA2EAP) == 0
+	    || strcmp(auth_mode, WEB_WLAN_STATION_AUTH_MODE_WPAEAP) == 0
+	    || strcmp(auth_mode, WEB_WLAN_STATION_AUTH_MODE_WPA2EAP) == 0
+	    || strcmp(auth_mode, WEB_WLAN_STATION_AUTH_MODE_EAP_SIM_AKA) == 0
+	    || strcmp(auth_mode, WEB_WLAN_STATION_AUTH_MODE_WPA2_WPA3) == 0
+	    || strcmp(auth_mode, WEB_WLAN_STATION_AUTH_MODE_WPA3) == 0) {
+		return TRUE;
+	} else {
+		return FALSE;
+	}
+
+}
+
+static BOOL check_signal(char_t* signal)
+{
+	if (signal == NULL) {
+		return FALSE;
+	}
+
+	if (strcmp(signal, "0") == 0
+	    || strcmp(signal, "1") == 0
+	    || strcmp(signal, "2") == 0
+	    || strcmp(signal, "3") == 0
+	    || strcmp(signal, "4") == 0) {
+		return TRUE;
+	} else {
+		return FALSE;
+	}
+
+}
+
+static BOOL check_mac(char_t * mac)
+{
+	int mac_len = 0;
+	if (mac == NULL) {
+		return FALSE;
+	}
+	mac_len = strlen(mac) + 1;
+	slog(WIFI_PRINT, SLOG_DEBUG,"[%s] mac=%s,mac_len=%d\n", __FILE__, mac, mac_len);
+	if (mac_len ==  WIFI_STATION_AP_MAC_LEN) {
+		return TRUE;
+	} else {
+		return FALSE;
+	}
+}
+static BOOL check_ssid(char_t* ssid)
+{
+	int ssid_len = 0;
+
+	if (ssid == NULL) {
+		return FALSE;
+	}
+
+	ssid_len = strlen(ssid);
+
+	if (ssid_len > 0 && ssid_len < WEB_WLAN_STATION_SSID_LEN) {
+		return TRUE;
+	} else {
+		return FALSE;
+	}
+}
+
+static BOOL check_zero_one_str(char_t* str)
+{
+	if (str == NULL) {
+		return FALSE;
+	}
+
+	if (strcmp(str, "0") == 0
+	    || strcmp(str, "1") == 0) {
+		return TRUE;
+	} else {
+		return FALSE;
+	}
+}
+static web_spot_t* parse_spot_string(char *spot_string)
+{
+	web_spot_t *spot = NULL;
+	char *splited_string = NULL;
+	char *save = NULL;
+	const char *delimiter = ",";
+	web_wifi_profile_content_t wifi_profile_content = WEB_WLAN_STATION_CONTENT_UNDEFINED;
+	char spot_string_tmp[256] = {0};
+
+	if (spot_string == NULL) {
+		return NULL;
+	}
+
+	strncpy(spot_string_tmp, spot_string, sizeof(spot_string_tmp)-1);
+
+	spot = safe_malloc(sizeof(web_spot_t), FALSE);
+	if (spot == NULL) {
+		return NULL;
+	}
+
+	//·Ö¸î×Ö·û´®£¬´æ´¢µ½½á¹¹Ìå
+	splited_string = strtok_r(spot_string_tmp, delimiter, &save);
+	while (splited_string) {
+		wifi_profile_content++;
+		switch (wifi_profile_content) {
+		case WEB_WLAN_STATION_PROFILE_NAME:
+			strncpy(spot->profile_name, splited_string, sizeof(spot->profile_name)-1);
+			break;
+		case WEB_WLAN_STATION_FROM_PROVIDER:
+			spot->from_provider = atoi(splited_string);
+			break;
+		case WEB_WLAN_STATION_CONNECT_STATUS:
+			spot->connect_status = atoi(splited_string);
+			break;
+		case WEB_WLAN_STATION_SIGNAL:
+			spot->signal = atoi(splited_string);
+			break;
+		case WEB_WLAN_STATION_SSID:
+			strncpy(spot->ssid, splited_string, sizeof(spot->ssid)-1);
+			break;
+		case WEB_WLAN_STATION_AUTH_MODE:
+			strncpy(spot->auth_mode, splited_string, sizeof(spot->auth_mode)-1);
+			break;
+		case WEB_WLAN_STATION_ENCRYPT_TYPE:
+			strncpy(spot->encrypt_type, splited_string, sizeof(spot->encrypt_type)-1);
+			break;
+		case WEB_WLAN_STATION_PASSWORD:
+			strncpy(spot->password, splited_string, sizeof(spot->password)-1);
+			break;
+		case WEB_WLAN_STATION_KEY_ID:
+			spot->keyID = atoi(splited_string);
+			break;
+		case WEB_WLAN_STATION_MAC:
+			strncpy(spot->mac, splited_string, sizeof(spot->mac)-1);
+			break;
+		default:
+			break;
+		}
+
+		splited_string = strtok_r(NULL, delimiter, &save);
+	}
+
+	if (wifi_profile_content != WEB_WLAN_STATION_MAC) {
+		safe_free(spot);
+		return NULL;
+	}
+
+	return spot;
+
+}
+
+
+
+static BOOL check_wifi_profile(char_t* wifi_profile)
+{
+	web_wifi_profile_content_t wifi_profile_content = WEB_WLAN_STATION_CONTENT_UNDEFINED;
+	char_t *splited_string = NULL;
+	char_t *save = NULL;
+	char_t *delimiter = ",";
+	char_t wifi_profile_temp[WEB_WLAN_STATION_SPOT_LEN] = {0};
+
+	if (wifi_profile == NULL) {
+		return FALSE;
+	}
+
+	strncpy(wifi_profile_temp, wifi_profile, sizeof(wifi_profile_temp)-1);
+
+	//·Ö¸î×Ö·û´®
+	splited_string = strtok_r(wifi_profile_temp, delimiter, &save);
+	while (splited_string) {
+		slog(WIFI_PRINT, SLOG_DEBUG,"[%s]profile split=%s\n", __FILE__, splited_string);
+		wifi_profile_content++;
+		switch (wifi_profile_content) {
+		case WEB_WLAN_STATION_PROFILE_NAME://profile_name
+			if (check_profile_name(splited_string) == FALSE) {
+				return FALSE;
+			}
+			break;
+		case WEB_WLAN_STATION_FROM_PROVIDER://from_provider
+			if (check_zero_one_str(splited_string) == FALSE) {
+				return FALSE;
+			}
+			break;
+		case WEB_WLAN_STATION_CONNECT_STATUS://connect_status
+			if (check_zero_one_str(splited_string) == FALSE) {
+				return FALSE;
+			}
+			break;
+		case WEB_WLAN_STATION_SIGNAL://signal
+			if (check_signal(splited_string) == FALSE) {
+				return FALSE;
+			}
+			break;
+		case WEB_WLAN_STATION_SSID://ssid
+			if (check_ssid(splited_string) == FALSE) {
+				return FALSE;
+			}
+			break;
+		case WEB_WLAN_STATION_AUTH_MODE://auth_mode
+			if (check_auth_mode(splited_string) == FALSE) {
+				return FALSE;
+			}
+			break;
+		case WEB_WLAN_STATION_ENCRYPT_TYPE://encrypt_type
+			if (check_encrypt_type(splited_string) == FALSE) {
+				return FALSE;
+			}
+			break;
+		case WEB_WLAN_STATION_PASSWORD://password
+			if (check_password(splited_string) == FALSE) {
+				return FALSE;
+			}
+			break;
+		case WEB_WLAN_STATION_KEY_ID://keyID
+			if (check_keyID(splited_string) == FALSE) {
+				return FALSE;
+			}
+			break;
+		case WEB_WLAN_STATION_MAC://mac
+			if (check_mac(splited_string) == FALSE) {
+				return FALSE;
+			}
+			break;
+		default:
+			return FALSE;
+		}
+
+		splited_string = strtok_r(NULL, delimiter, &save);
+	}
+
+	if (wifi_profile_content == WEB_WLAN_STATION_MAC) {
+		return TRUE;
+	} else {
+		return FALSE;
+	}
+
+}
+
+static BOOL check_set_value(char_t* wifi_sta_connection)
+{
+	if (wifi_sta_connection == NULL) {
+		return FALSE;
+	}
+
+	if (check_zero_one_str(wifi_sta_connection) == FALSE) {
+		return FALSE;
+	}
+	/***
+	    if(strcmp(ap_station_mode, WEB_WLAN_STATION_MODE_WIFI_PREF) == 0
+	        || strcmp(ap_station_mode, WEB_WLAN_STATION_MODE_DIAL_PREF) == 0)
+	    {
+	    }
+	    else
+	    {
+	        return FALSE;
+	    }
+	*****/
+	return TRUE;
+
+}
+
+static BOOL check_spot_value(char_t* action, char_t* wifi_profile_num, char_t* old_wifi_profile_num, char_t* wifi_update_profile, char_t** wifi_profile)
+{
+	int spot_num_new = -1;
+	int spot_num_old = -1;
+	int temp = -5;
+	int i = 0;
+	int j = 0;
+	char_t profile_name_tmp1[WEB_WLAN_STATION_SPOT_PROFILE_NAME_LEN] = {0};
+	char_t profile_name_tmp2[WEB_WLAN_STATION_SPOT_PROFILE_NAME_LEN] = {0};
+
+	if (action == NULL || wifi_profile_num == NULL || old_wifi_profile_num == NULL
+	    || wifi_update_profile == NULL || wifi_profile == NULL) {
+		slog(WIFI_PRINT, SLOG_ERR,"[%s]para is null\n", __FILE__);
+		return FALSE;
+	}
+
+	spot_num_new = get_spot_num(wifi_profile_num);
+	spot_num_old = get_spot_num(old_wifi_profile_num);
+	temp = spot_num_new - spot_num_old;
+
+	slog(WIFI_PRINT, SLOG_DEBUG,"[%s]spot_num_new=%d\n", __FILE__, spot_num_new);
+	slog(WIFI_PRINT, SLOG_DEBUG,"[%s]spot_num_old=%d\n", __FILE__, spot_num_old);
+	slog(WIFI_PRINT, SLOG_DEBUG,"[%s]temp=%d\n", __FILE__, temp);
+
+	//¼ì²éwifi_profile
+	for (i = 0; i < spot_num_new; i++) {
+		//¼ì²éµ¥¸öwifi_profile±¾ÉíµÄºÏ·¨ÐÔ
+		if (check_wifi_profile(wifi_profile[i]) == FALSE) {
+			slog(WIFI_PRINT, SLOG_ERR,"[%s]wifi_profile[%d]=%s wrong\n", __FILE__, i, wifi_profile[i]);
+
+			return FALSE;
+		}
+
+	}
+#if 0
+	//¼ì²éwifi_update_profile±¾ÉíµÄºÏ·¨ÐÔ
+	if (check_wifi_profile(wifi_update_profile) == FALSE) {
+		wf_log("[%s]wifi_update_profile wrong\n", __FILE__);
+		return FALSE;
+	}
+#endif
+	//¼ì²éaction
+
+	if (strcmp(action, WEB_WLAN_STATION_SPOT_ADD) == 0) {
+		//¼ì²éwifi_profile_num
+		if (spot_num_new > 0 && temp == 1) { //kw 3
+		} else {
+			slog(WIFI_PRINT, SLOG_ERR,"[%s]wifi_profile_num add wrong\n", __FILE__);
+			return FALSE;
+		}
+	} else if (strcmp(action, WEB_WLAN_STATION_SPOT_MODIFY) == 0) {
+		//¼ì²éwifi_profile_num
+		if (spot_num_new > 0 && temp == 0) { //kw 3
+		} else {
+			slog(WIFI_PRINT, SLOG_ERR,"[%s]wifi_profile_num modify wrong\n", __FILE__);
+
+			return FALSE;
+		}
+	} else if (strcmp(action, WEB_WLAN_STATION_SPOT_DEL) == 0) {
+		//¼ì²éwifi_profile_num
+		if (spot_num_new >= 0 && temp == -1) { //kw 3
+		} else {
+			slog(WIFI_PRINT, SLOG_ERR,"[%s]wifi_profile_num del wrong\n", __FILE__);
+
+			return FALSE;
+		}
+	} else {
+		slog(WIFI_PRINT, SLOG_ERR,"[%s]wifi_profile_num action wrong\n", __FILE__);
+
+		return FALSE;
+	}
+
+	//È·±£ÐµÄÈȵãÁбíÖеÄprofile nameµÄΨһÐÔ
+	for (i = 0; i < spot_num_new - 1; i++) {
+		for (j = i + 1; j < spot_num_new; j++) {
+			sscanf(wifi_profile[i], "%29[^,]", profile_name_tmp1);
+			sscanf(wifi_profile[j], "%29[^,]", profile_name_tmp2);
+			if (strcmp(profile_name_tmp1, profile_name_tmp2) == 0) {
+				slog(WIFI_PRINT, SLOG_ERR,"[%s]wifi_profile_num profile name wrong\n", __FILE__);
+
+				return FALSE;
+			}
+		}
+	}
+
+
+	//TODO Ôݲ»¿¼ÂǼì²é¾ÉµÄÓëеÄwifi_profileµÄ±È½ÏµÄºÏ·¨ÐÔ
+
+	return TRUE;
+
+}
+
+static BOOL check_connect_value(char_t* ssid, char_t* auth_mode, char_t* encrypt_type, char_t* keyID, char_t* profile, char_t* wep_key, char_t* wpa_psk1)
+{
+	if (ssid == NULL || auth_mode == NULL || wep_key == NULL || wpa_psk1 == NULL
+	    || encrypt_type == NULL || keyID == NULL || profile == NULL) {
+		return FALSE;
+	}
+
+	if (check_ssid(ssid) == FALSE) {
+		return FALSE;
+	}
+
+	if (check_auth_mode(auth_mode) == FALSE) {
+		return FALSE;
+	}
+
+	if (check_encrypt_type(encrypt_type) == FALSE) {
+		return FALSE;
+	}
+
+	if (check_keyID(keyID) == FALSE) {
+		return FALSE;
+	}
+
+	if (check_profile_name(profile) == FALSE) {
+		return FALSE;
+	}
+
+	if (check_password(wep_key) == FALSE) {
+		return FALSE;
+	}
+
+	if (check_password(wpa_psk1) == FALSE) {
+		return FALSE;
+	}
+
+	return TRUE;
+
+}
+
+/**********************************************************************
+* Function:        sort_spot
+* Description:     sort spot by requirement
+* Input:           g_spot_list
+* Output:          sort the spot, save in g_spot_list
+* Return:
+* Others:
+* Modify Date   Version     Author          Modification
+* -----------------------------------------------
+* 2015/03/09    V1.0        xujian          first version
+**********************************************************************/
+void insert_to_spot_list(int priority, web_spot_t * spot)
+{
+	int i = 0, j = 0;
+
+
+
+	//1. provider ap place the first
+	//2. last connected ap place the second
+	if (1 == priority || 2 == priority) {
+
+		for (i = 0; i < WEB_WLAN_STATION_SPOT_LIST_MAX; i++) {
+			if (g_spot_list[i] == NULL) {
+				g_spot_list[i] = spot;
+				return;
+			} else {
+				if (1 == g_spot_list[i]->from_provider) {
+					continue;
+				} else {
+
+					//½«ÓàÏÂÈȵãÈ«²¿ºóÒÆÒ»¸öλÖ㬿ճöµ±Ç°iµÄλÖÃ
+					for (j = WEB_WLAN_STATION_SPOT_LIST_MAX - 2; j >= i; j--) { // ¼Ù¶¨×îºóÒ»¸ö¿Ï¶¨Êǿյ쬲»¿ÉÄÜ10¸öÂúÁË£¬»¹ÔÚÌí¼ÓÈȵ㣬֮ǰÒѾ­ÅжϴíÎó·µ»ØÁË
+						if (g_spot_list[j] == NULL)continue;
+						else {
+							g_spot_list[j + 1] = g_spot_list[j];
+						}
+					}
+
+					g_spot_list[i] = spot;
+					return;
+				}
+			}
+		}
+	}
+
+
+	//3. other ap stay
+	if (3 == priority) {
+
+		for (i = 0; i < WEB_WLAN_STATION_SPOT_LIST_MAX; i++) {
+
+			if (g_spot_list[i] != NULL)continue;
+
+			g_spot_list[i] = spot;
+			return;
+
+		}
+	}
+
+}
+
+void resort_spot_list(int priority, char * profile_name)
+{
+
+	int i = 0, j = 0;
+	char_t wifi_profile_nv_name[WEB_WLAN_STATION_PROFILE_NV_NAME_LEN] = {0};
+	char spot_string[256] = {0};
+
+	int index = 0;
+	web_spot_t *  spot = NULL;
+
+
+	for (i = 0; i < WEB_WLAN_STATION_SPOT_LIST_MAX; i++) {
+		if (g_spot_list[i] != NULL) {
+			if (strcmp(g_spot_list[i]->profile_name, profile_name) == 0) {
+				index = i;
+				spot = g_spot_list[i];
+				break;
+			}
+		}
+
+	}
+
+	if (index == 0) return;
+
+	for (i = 0; i < WEB_WLAN_STATION_SPOT_LIST_MAX; i++) {
+		if (1 == g_spot_list[i]->from_provider) {
+			continue;
+		} else {
+			//move other spot
+			for (j = index; j > i; j--) { // ¼Ù¶¨×îºóÒ»¸ö¿Ï¶¨Êǿյ쬲»¿ÉÄÜ10¸öÂúÁË£¬»¹ÔÚÌí¼ÓÈȵ㣬֮ǰÒѾ­ÅжϴíÎó·µ»ØÁË
+				if (g_spot_list[j] == NULL)continue;
+				else {
+					g_spot_list[j] = g_spot_list[j - 1]; //j must greater than 0
+				}
+			}
+
+			g_spot_list[i] = spot;
+			break;
+		}
+	}
+
+	for (i = 0; i < WEB_WLAN_STATION_SPOT_LIST_MAX; i++) {
+		if (i == 0) {
+			safe_strcpy(wifi_profile_nv_name, "wifi_profile", WEB_WLAN_STATION_PROFILE_NV_NAME_LEN);
+		} else {
+			memset(wifi_profile_nv_name, 0, WEB_WLAN_STATION_PROFILE_NV_NAME_LEN);
+			snprintf(wifi_profile_nv_name, WEB_WLAN_STATION_PROFILE_NV_NAME_LEN, "wifi_profile%d", i);
+		}
+
+
+		memset(spot_string, 0, sizeof(spot_string));
+		if (g_spot_list[i] != NULL) {
+			snprintf(spot_string, WIFI_STATION_SPOT_LEN, "%s,%d,%d,%d,%s,%s,%s,%s,%d", g_spot_list[i]->profile_name,
+			         g_spot_list[i]->from_provider, g_spot_list[i]->connect_status, g_spot_list[i]->signal,
+			         g_spot_list[i]->ssid, g_spot_list[i]->auth_mode, g_spot_list[i]->encrypt_type,
+			         g_spot_list[i]->password, g_spot_list[i]->keyID);
+		}
+
+		slog(WIFI_PRINT, SLOG_DEBUG,"[%s]wifi_profile_nv_name=%s, spot_string=%s\n", __FILE__, wifi_profile_nv_name, spot_string);
+
+		zte_web_write(wifi_profile_nv_name, spot_string);
+	}
+
+
+
+
+}
+
+
+/**********************************************************************
+* Function:        zte_wlan_station_set
+* Description:     to set the wifi station func
+* Input:           http info
+* Output:
+* Return:
+* Others:
+* Modify Date   Version     Author          Modification
+* -----------------------------------------------
+* 2015/03/09    V1.0        xujian          first version
+**********************************************************************/
+void zte_wlan_station_set(webs_t wp)
+{
+	char_t *wifi_sta_connection = NULL;
+	//char_t *ap_station_mode = NULL;
+	char_t old_wifi_sta_connection[WEB_WLAN_STATION_CONNECTION_LEN + 1] = {0};
+	long lRet = 0;
+
+	char MAX_Access_num_bak[16] = {0};
+	char m_ssid_enable[16] = {0};
+	wifi_sta_connection = websGetVar(wp, T("wifi_sta_connection"), T(""));
+	//ap_station_mode = websGetVar(wp, T("ap_station_mode"), T(""));
+
+
+	//²ÎÊýºÏ·¨ÐÔ¼ì²é
+	slog(WIFI_PRINT, SLOG_DEBUG,"[%s]zte_wlan_station_set !\n", __FILE__);
+	if (check_set_value(wifi_sta_connection) == FALSE) {
+		zte_write_result_to_web(wp, FAILURE);
+
+		slog(WIFI_PRINT, SLOG_ERR,"[%s]parameter wrong!\n", __FILE__);
+		return;
+	}
+
+	//¶Á¾ÉÖµ
+	(void)zte_web_read("wifi_sta_connection", old_wifi_sta_connection);
+
+
+	//дNV
+	(void)zte_web_write("wifi_sta_connection", wifi_sta_connection);
+	if (strcmp(wifi_sta_connection, "1") == 0) { // »¥³â±£»¤
+		(void)zte_web_read("m_ssid_enable", m_ssid_enable);
+
+		if (!strcmp(m_ssid_enable, "1")) { //if multi ssid is open, recovery the max access nv
+			zte_web_read("MAX_Access_num_bak", MAX_Access_num_bak);
+			zte_web_write("MAX_Access_num", MAX_Access_num_bak);
+			zte_web_write("m_ssid_enable", "0");
+			wlan_set_change_ssid_key_status();//added by dujiajiao, for the switch between apsta and mssid
+		}
+	}
+	//(void)zte_web_write("ap_station_mode", ap_station_mode);
+
+	if (strcmp(wifi_sta_connection, "0") == 0) { //¹¦ÄܹرÕ
+
+		//ÉèÖõÄÖµºÍÔ­ÏȵÄÒ»Ö£¬ÔòÖ±½Ó»Ø¸´³É¹¦
+		if (strcmp(wifi_sta_connection, old_wifi_sta_connection) == 0) {
+			zte_write_result_to_web(wp, SUCCESS);
+			return;
+		}
+		//else{
+		//zte_web_write("RadioOff", "0"); // set ap radio off
+		//}
+
+
+		//TODO ×Ü¿ØÄ£¿é¿ØÖÆ--Èç¹ûWIFIÊÇÁ¬½ÓÈȵã״̬£¬Ôò¶Ï¿ªÈȵãÁ¬½Ó,ÔÙ×ßMODEM×Ô¶¯ÖØÁ¬Á÷³Ì
+		zte_web_write("user_initiate_disconnect", "0"); //Óû§Ö÷¶¯Á¬½Ó״̬£¬Í˳ö¸ÉԤģʽ
+		zte_web_write("manual_d_wifi", "0");
+
+
+		//lRet=zte_send_message(MODULE_ID_WIFI, MSG_CMD_WIFI_STATION_CLOSE, 0, NULL);
+		lRet = ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_STATION_CLOSE, 0, NULL, 0);
+		if (lRet != 0) {
+			//zte_web_write("RadioOff", "1");
+			slog(WIFI_PRINT, SLOG_ERR,"[%s]zte_wlan_station_set MSG_CMD_WIFI_STATION_CLOSE failed\n", __FILE__);
+		} else {
+
+			slog(WIFI_PRINT, SLOG_NORMAL,"[%s]zte_wlan_station_set MSG_CMD_WIFI_STATION_CLOSE!\n", __FILE__);
+		}
+
+	} else if (strcmp(wifi_sta_connection, "1") == 0) { //¹¦ÄÜ¿ªÆô
+
+		if (strcmp(wifi_sta_connection, old_wifi_sta_connection) == 0) {
+			// apsta ûÓпªÆô¶¯×÷£¬²»ÐèÒªÉèÖÃRadioOff
+
+			zte_web_write("user_initiate_disconnect", "0"); //Óû§Ö÷¶¯Á¬½Ó״̬£¬Í˳ö¸ÉԤģʽ
+			zte_web_write("manual_d_wifi", "0");
+			/************
+			  if(strcmp(ap_station_mode, WEB_WLAN_STATION_MODE_WIFI_PREF) == 0)
+			  {
+			     // zte_send_message(MODULE_ID_BLC_RCV, MSG_CMD_BLC_SET_WIFISTATION_PRE, 0, NULL);
+			      wf_log("[%s]zte_wlan_station_set WIFISTATION_PRE!\n",__FILE__);
+			  }
+			  else if(strcmp(ap_station_mode, WEB_WLAN_STATION_MODE_DIAL_PREF) == 0)
+			  {
+			      //zte_send_message(MODULE_ID_BLC_RCV, MSG_CMD_BLC_SET_MODEM_PRE, 0, NULL);
+			      wf_log("[%s]zte_wlan_station_set MODEM_PRE!\n",__FILE__);
+			  }
+			  **********/
+
+		} else {
+			//zte_web_write("RadioOff", "0"); // set ap radio off
+
+			zte_web_write("user_initiate_disconnect", "0"); //Óû§Ö÷¶¯Á¬½Ó״̬£¬Í˳ö¸ÉԤģʽ
+			zte_web_write("manual_d_wifi", "0");
+
+			//lRet=zte_send_message(MODULE_ID_WIFI, MSG_CMD_WIFI_STATION_OPEN, 0, NULL);
+			lRet = ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_STATION_OPEN, 0, NULL, 0);
+			if (lRet != 0) {
+				//zte_web_write("RadioOff", "1");
+				slog(WIFI_PRINT, SLOG_ERR,"[%s]zte_wlan_station_set MSG_CMD_WIFI_STATION_OPEN failed\n", __FILE__);
+			} else {
+
+				slog(WIFI_PRINT, SLOG_NORMAL,"[%s]zte_wlan_station_set MSG_CMD_WIFI_STATION_OPEN!\n", __FILE__);
+			}
+
+		}
+	}
+	slog(WIFI_PRINT, SLOG_DEBUG,"zte_wlan_station_set SUCCESS!\n");//cov m
+	zte_write_result_to_web(wp, SUCCESS);
+}
+
+/*
+    µ±É¾³ýµÄÈȵã Óë Á¬½Ó¹ýµÄÈȵã ÊÇͬһ¸öÈȵãµÄʱºò£¬ÐèÒª½«
+
+    EX_SSID1µÈ ÖØÖÃΪ¿Õ£¬²»È»Ï´λáÈ¥Á¬½ÓÕâ¸ö²»´æÔÚµÄÈȵ㣬
+
+    1¡¢Èç¹ûɾ³ýºóÖØÐÂÌí¼Ó£¬½ö½öÊÇprofile name²»Í¬£¬ÈÔÈ»»áÁ¬½ÓÉϵ«ÊÇÎÞ·¨½«wifi_profile µÄ״̬λÖÃΪ 1£¬ÒòΪprofileÒѾ­²»ÏàµÈÁË
+
+    2¡¢Èç¹ûÊÇɾ³ýºó£¬¸ÃÈȵãʵ¼ÊÈÔÈ»´æÔÚ£¬Èç¹ûwlanstation²»×ö profile_numΪ0µÄ±£»¤£¬Ôò»¹ÊÇ»áÁ¬½ÓÉÏ£¬µ¼ÖÂ״̬´íÂÒ
+
+    ËùÒÔÇå¿ÕÕâЩnvÖµÊÇÓбØÒªµÄ
+
+*/
+void zte_wlan_reset_EX_ap(void)
+{
+
+	zte_web_write("EX_SSID1", "");
+	zte_web_write("EX_AuthMode", "");
+	zte_web_write("EX_EncrypType", "");
+	zte_web_write("EX_DefaultKeyID", "");
+	zte_web_write("EX_WEPKEY", "");
+	zte_web_write("EX_WPAPSK1", "");
+	zte_web_write("EX_wifi_profile", "");
+	zte_web_write("EX_mac", "");
+}
+
+/**********************************************************************
+* Function:        zte_wlan_station_spot_profile_update
+* Description:     to update the wifi spot profile
+* Input:           http info
+* Output:
+* Return:
+* Others:
+* Modify Date   Version     Author          Modification
+* -----------------------------------------------
+* 2015/03/09    V1.0        xujian          first version
+**********************************************************************/
+void zte_wlan_station_spot_profile_update(webs_t wp)
+{
+	char_t *action = NULL;
+	char_t *wifi_profile_num = NULL;
+	char_t old_wifi_profile_num[WEB_WLAN_STATION_SPOT_NUM_LEN + 1] = {0};
+	char_t *wifi_update_profile = NULL;
+	char_t *wifi_profile[WEB_WLAN_STATION_SPOT_LIST_MAX] = {NULL};
+	char_t sta_ip_status[WEB_WLAN_STATION_IP_STATUS_LEN + 1] = {0};
+	char_t wifi_sta_connection[WEB_WLAN_STATION_CONNECTION_LEN + 1] = {0};
+	char_t wifi_profile_nv_name[WEB_WLAN_STATION_PROFILE_NV_NAME_LEN] = {0};
+	updateinfo_t  info = {0};
+
+	char_t current_profile[WEB_WLAN_STATION_SPOT_PROFILE_NAME_LEN] = {0};
+	char spot_string[WEB_WLAN_STATION_SPOT_LEN] = {0};
+
+	char wifi_profile_string[WEB_WLAN_STATION_SPOT_LEN] = {0};
+	web_spot_t * web_wifi_profile = NULL;
+	web_spot_t * nv_wifi_profile = NULL;
+
+	web_spot_t * tmp_wifi_profile = NULL;
+
+	web_spot_t * web_spot = NULL;
+	web_spot_t * update_spot = NULL;
+	int i = 0;
+
+	int current_profile_flag = -1; //sorted num of wifi_profile(nv)  in web ui
+
+	slog(WIFI_PRINT, SLOG_NORMAL,"[%s]update spot profile\n", __FILE__);
+
+	//Èç¹ûWIFIÊÇÕýÔÚÁ¬½ÓÈȵã״̬£¬Ôò²»ÔÊÐíÐÞ¸ÄÈȵãÐÅÏ¢
+	(void)zte_web_read("sta_ip_status", sta_ip_status);
+	if (strcmp(sta_ip_status, WEB_WLAN_STATION_IP_STATUS_CONNECTING) == 0 ||
+	    strcmp(sta_ip_status, WIFI_STATION_IP_STATUS_DHCPING) == 0) {
+		//zte_write_result_to_web(wp,FAILURE);
+		zte_write_result_to_web(wp, PROCESSING);
+		slog(WIFI_PRINT, SLOG_ERR,"[%s]update spot profile,connecting so failed\n", __FILE__);
+
+		return;
+	}
+
+	//¹¦Äܹرգ¬Ôò·µ»Ø´íÎó
+	(void)zte_web_read("wifi_sta_connection", wifi_sta_connection);
+	if (strcmp(wifi_sta_connection, "1") != 0) {
+		zte_write_result_to_web(wp, FAILURE);
+		slog(WIFI_PRINT, SLOG_ERR,"[%s]update spot profile,wifi sta no open so failed\n", __FILE__);
+
+		return;
+	}
+
+	action = websGetVar(wp, T("action"), T(""));
+	wifi_profile_num = websGetVar(wp, T("wifi_profile_num"), T(""));
+	wifi_update_profile = websGetVar(wp, T("wifi_update_profile"), T(""));
+
+	slog(WIFI_PRINT, SLOG_DEBUG,"[%s]update spot profile,wifi_profile_num=%s\n", __FILE__, wifi_profile_num);
+	slog(WIFI_PRINT, SLOG_DEBUG,"[%s]update spot profile,wifi_update_profile=%s\n", __FILE__, wifi_update_profile);
+
+	zte_web_read("EX_wifi_profile", current_profile);
+
+	if (strcmp(action, WEB_WLAN_STATION_SPOT_DEL) == 0) {
+
+		if (strncmp(current_profile, wifi_update_profile, 20) == 0) {
+
+//webui´æÔÚË¢ÐÂÎÊÌ⣬»áÓмä϶ ¿ÉÒÔ±»É¾³ý£¬ÐèÒªÔö¼Ó´Ë±£»¤£¬Á¬½Ó״̬µÄÈȵ㣬²»ÔÊÐí±»É¾³ý
+			if (strcmp(sta_ip_status, WEB_WLAN_STATION_IP_STATUS_CONNECT) == 0) {
+				slog(WIFI_PRINT, SLOG_ERR,"[%s]do not allow del connected profile=%s,[%s]\n", __FILE__, wifi_update_profile, current_profile);
+				zte_write_result_to_web(wp, FAILURE);
+				return;
+			} else {
+//Èç¹ûɾ³ýÁË֮ǰÁ¬½Ó¹ýµÄÈȵ㣬ÐèÒªÇå¿ÕEX_SSID1µÈnvÖµ
+				slog(WIFI_PRINT, SLOG_DEBUG,"[%s]reset EX_SSID1 EX_wifi_profile=[%s]\n", __FILE__, current_profile);
+				zte_wlan_reset_EX_ap();
+			}
+		}
+	}
+	if (strcmp(action, WEB_WLAN_STATION_SPOT_MODIFY) == 0) {
+		sc_cfg_get("wifi_profile", wifi_profile_string, sizeof(wifi_profile_string));
+		if (strcmp(wifi_profile_string, "") == 0) {
+			slog(WIFI_PRINT, SLOG_ERR,"[%s]error!nv:wifi_profile=%s\n", __FILE__, wifi_profile_string);
+			zte_write_result_to_web(wp, FAILURE);
+			return;
+		}
+
+		nv_wifi_profile = parse_spot_string(wifi_profile_string);
+		if (NULL == nv_wifi_profile) {
+			slog(WIFI_PRINT, SLOG_ERR,"[%s]error!nv_wifi_profile=null\n", __FILE__);
+			zte_write_result_to_web(wp, FAILURE);
+			return;
+		}
+	}
+
+	for (i = 0; i < WEB_WLAN_STATION_SPOT_LIST_MAX; i++) {
+		if (i == 0) {
+			safe_strcpy(wifi_profile_nv_name, "wifi_profile", WEB_WLAN_STATION_PROFILE_NV_NAME_LEN);
+		} else {
+			memset(wifi_profile_nv_name, 0, WEB_WLAN_STATION_PROFILE_NV_NAME_LEN);
+			snprintf(wifi_profile_nv_name, WEB_WLAN_STATION_PROFILE_NV_NAME_LEN, "wifi_profile%d", i);
+		}
+
+		//»ñÈ¡WEB²ÎÊýÖµ
+		wifi_profile[i] = websGetVar(wp, wifi_profile_nv_name, T(""));
+
+		slog(WIFI_PRINT, SLOG_DEBUG,"[%s]update spot profile,wifi_profile[%d]=%s\n", __FILE__, i, wifi_profile[i]);
+#if 0
+		if (strcmp(action, WEB_WLAN_STATION_SPOT_MODIFY) == 0) {
+			tmp_wifi_profile = parse_spot_string(wifi_profile[i]);
+			//kw 3
+			if ((NULL != tmp_wifi_profile) && (NULL != nv_wifi_profile) && (strcmp(nv_wifi_profile->profile_name, tmp_wifi_profile->profile_name) == 0)) {
+				current_profile_flag = i;
+				web_wifi_profile = tmp_wifi_profile;
+				slog(WIFI_PRINT, SLOG_DEBUG,"[%s]current_profile_flag=%d\n", __FILE__, i);
+			} else {
+				safe_free(tmp_wifi_profile);//cov
+			}
+		}
+#endif
+	}
+	//kw 3
+	for (i = 0; i < WEB_WLAN_STATION_SPOT_LIST_MAX; i++) {
+		if (strcmp(action, WEB_WLAN_STATION_SPOT_MODIFY) == 0) {
+			tmp_wifi_profile = parse_spot_string(wifi_profile[i]);
+			if ((NULL != tmp_wifi_profile) && (NULL != nv_wifi_profile) && (strcmp(nv_wifi_profile->profile_name, tmp_wifi_profile->profile_name) == 0)) {
+				current_profile_flag = i;
+				web_wifi_profile = tmp_wifi_profile;
+				slog(WIFI_PRINT, SLOG_DEBUG,"[%s]current_profile_flag=%d\n", __FILE__, i);
+				break;
+			} else {
+				safe_free(tmp_wifi_profile);//cov
+			}
+		}
+	}
+
+	if (strcmp(action, WEB_WLAN_STATION_SPOT_MODIFY) == 0) {
+		if (current_profile_flag <= -1) { //kw 3
+			slog(WIFI_PRINT, SLOG_DEBUG,"[%s]error!current_profile_flag=%d\n", __FILE__, current_profile_flag);
+			zte_write_result_to_web(wp, FAILURE);
+			goto end;
+		}
+		if (web_wifi_profile->connect_status != nv_wifi_profile->connect_status) {
+			slog(WIFI_PRINT, SLOG_DEBUG,"[%s]error!web_wifi_profile->connect_status=%d,nv_wifi_profile->connect_status=%d\n", __FILE__,
+			       web_wifi_profile->connect_status, nv_wifi_profile->connect_status);
+			zte_write_result_to_web(wp, PROCESSING);
+			goto end;
+		}
+	}
+	//¶Á¾ÉÖµ
+	(void)zte_web_read("wifi_profile_num", old_wifi_profile_num);
+	slog(WIFI_PRINT, SLOG_DEBUG,"[%s]update spot profile, old_wifi_profile_num=%s\n", __FILE__, old_wifi_profile_num);
+
+	//²ÎÊýºÏ·¨ÐÔ¼ì²é
+	if (check_spot_value(action, wifi_profile_num, old_wifi_profile_num, wifi_update_profile, wifi_profile) == FALSE) {
+		zte_write_result_to_web(wp, FAILURE);
+		slog(WIFI_PRINT, SLOG_ERR,"[%s]update spot profile,para wrong so failed\n", __FILE__);
+		goto end;
+	}
+	slog(WIFI_PRINT, SLOG_DEBUG,"[%s]update spot profile, action=%s\n", __FILE__, action);
+
+
+
+	//ÏÈÊÍ·Å֮ǰ´æ´¢µÄÈȵãÁбíÄÚ´æ
+	for (i = 0; i < WEB_WLAN_STATION_SPOT_LIST_MAX; i++) {
+		safe_free(g_spot_list[i]);
+	}
+
+//½«Èȵã½âÎöµ½ ½á¹¹ÌåÀïÃæ£¬·½±ãÅÅÐòʹÓÃ
+	for (i = 0; i < WEB_WLAN_STATION_SPOT_LIST_MAX; i++) {
+
+		web_spot = parse_spot_string(wifi_profile[i]);
+
+		if (NULL == web_spot)break;
+
+		slog(WIFI_PRINT, SLOG_DEBUG,"[%s]web_spot->ssid=%s\n", __FILE__, web_spot->ssid);
+
+		if (web_spot->from_provider == 1) // ÔËÓªÉÌÈȵãÌí¼ÓÔÚµÚһλ
+			insert_to_spot_list(1, web_spot);
+		else if (strcmp(current_profile, web_spot->profile_name) == 0) // Èç¹ûÊǵ±Ç°Á´½ÓµÄÈȵ㣬ÔòÐèÒªÅÅÔÚÔËÓªÉ̺óÃæ
+			insert_to_spot_list(2, web_spot);
+		else
+			insert_to_spot_list(3, web_spot); //ÆÕͨÈȵ㣬°´Ë³ÐòÍùºóÅÅ
+
+	}
+
+//½«¸üÐÂÈÈµã½øÐзֽ⣬´æµ½ÏàÓ¦½á¹¹ÌåÖÐ
+	update_spot = parse_spot_string(wifi_update_profile);
+	if (update_spot != NULL) {
+		char *ptr = NULL;
+		size_t  key_len = 0;
+	
+        slog(WIFI_PRINT, SLOG_DEBUG,"[%s]update_spot->ssid=%s\n", __FILE__, update_spot->ssid);
+		//ÅжÏwep³¤¶ÈÊÇ·ñΪ5¡¢13¡¢16
+		ptr = strstr (update_spot->encrypt_type, "WEP");
+		if (ptr) {
+			key_len = strnlen(update_spot->password,WIFI_STATION_SPOT_PASSWORD_LEN);
+			if (key_len != 5 && key_len != 13 && key_len != 16) { //ascii
+				slog(WIFI_PRINT, SLOG_ERR,"[%s]error!wep key len invalid\n", __FILE__);
+				zte_write_result_to_web(wp, FAILURE);
+				safe_free(update_spot);
+				goto end;
+			}
+		}
+
+	}
+
+//µ±±à¼­Ê±ºò£¬ÐèÒª²é¿´ÊÇ·ñÐèÒª¸üÐÂEX AP Ïà¹ØÄÚÈÝ
+	if (update_spot != NULL && strcmp(action, WEB_WLAN_STATION_SPOT_MODIFY) == 0) {
+		if (strcmp(current_profile, update_spot->profile_name) == 0) {
+			char keyid[8] = {0};
+			sprintf(keyid, "%d", update_spot->keyID);
+			zte_web_write("EX_SSID1", update_spot->ssid);
+			zte_web_write("EX_AuthMode", update_spot->auth_mode);
+			zte_web_write("EX_EncrypType", update_spot->encrypt_type);
+			zte_web_write("EX_DefaultKeyID", keyid);
+			zte_web_write("EX_WPAPSK1", update_spot->password);
+			zte_web_write("EX_WEPKEY", update_spot->password);
+			zte_web_write("EX_mac", update_spot->mac);
+			slog(WIFI_PRINT, SLOG_DEBUG,"[%s]reset EX_SSID1=%s ,EX_AuthMode=%s ,EX_EncrypType=%s ,EX_DefaultKeyID =%d ,EX_WPAPSK1=EX_WEPKEY=[%s]=\n",
+			       __FILE__, update_spot->ssid, update_spot->auth_mode, update_spot->encrypt_type, update_spot->keyID, update_spot->password);
+		}
+	}
+//²é¿´ÊÇ·ñÖØ¸´Ìí¼ÓÏàͬSSID
+	for (i = 0; i < WEB_WLAN_STATION_SPOT_LIST_MAX; i++) {
+		if (g_spot_list[i] != NULL && update_spot != NULL) {
+			if (strcmp(g_spot_list[i]->profile_name, update_spot->profile_name) != 0 &&
+			    strcmp(g_spot_list[i]->ssid, update_spot->ssid) == 0 &&
+			    strcmp(action, WEB_WLAN_STATION_SPOT_ADD) == 0) {
+				safe_free(update_spot);
+				slog(WIFI_PRINT, SLOG_DEBUG,"[%s]not allow add the same SSID¡¡spot\n", __FUNCTION__);
+				zte_write_result_to_web(wp, EXIST);
+				goto end;
+
+			} else if (
+			    strcmp(g_spot_list[i]->profile_name, update_spot->profile_name) != 0 &&
+			    strcmp(g_spot_list[i]->ssid, update_spot->ssid) == 0 &&
+			    strcmp(action, WEB_WLAN_STATION_SPOT_MODIFY) == 0) {
+				safe_free(update_spot);
+				slog(WIFI_PRINT, SLOG_DEBUG,"[%s]not allow modify to the existed SSID from spot list!\n", __FUNCTION__);
+				zte_write_result_to_web(wp, EXIST);
+				goto end;
+			}
+		}
+	}
+	safe_free(update_spot);
+
+
+
+
+	//×îºó½«¸üеÄnvÖµ ±£´æ дÈë
+	(void)zte_web_write("wifi_profile_num", wifi_profile_num);
+
+	for (i = 0; i < WEB_WLAN_STATION_SPOT_LIST_MAX; i++) {
+
+		if (i == 0) {
+			safe_strcpy(wifi_profile_nv_name, "wifi_profile", WEB_WLAN_STATION_PROFILE_NV_NAME_LEN);
+		} else {
+			memset(wifi_profile_nv_name, 0, WEB_WLAN_STATION_PROFILE_NV_NAME_LEN);
+			snprintf(wifi_profile_nv_name, WEB_WLAN_STATION_PROFILE_NV_NAME_LEN, "wifi_profile%d", i);
+		}
+		memset(spot_string, 0, sizeof(spot_string));
+		if (g_spot_list[i] != NULL) {
+			snprintf(spot_string, WIFI_STATION_SPOT_LEN, "%s,%d,%d,%d,%s,%s,%s,%s,%d,%s", g_spot_list[i]->profile_name,
+			         g_spot_list[i]->from_provider, g_spot_list[i]->connect_status, g_spot_list[i]->signal,
+			         g_spot_list[i]->ssid, g_spot_list[i]->auth_mode, g_spot_list[i]->encrypt_type,
+			         g_spot_list[i]->password, g_spot_list[i]->keyID, g_spot_list[i]->mac);
+		}
+
+		slog(WIFI_PRINT, SLOG_DEBUG,"[%s]wifi_profile_nv_name=%s, spot_string=%s\n", __FILE__, wifi_profile_nv_name, spot_string);
+		(void)zte_web_write(wifi_profile_nv_name, spot_string);
+	}
+
+	strncpy(info.action, action,sizeof(info.action)-1);
+	strncpy(info.spot, wifi_update_profile, sizeof(info.spot)-1);
+	slog(WIFI_PRINT, SLOG_NORMAL,"[%s]xujian send MSG_CMD_WIFI_STATION_SPOT_UPDATE start  action =%s   \n", __FILE__, info.action);
+	//zte_send_message(MODULE_ID_WIFI, MSG_CMD_WIFI_STATION_SPOT_UPDATE, sizeof(info),(UCHAR*)info);
+	ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_STATION_SPOT_UPDATE, sizeof(updateinfo_t), (UCHAR*)&info, 0);
+	slog(WIFI_PRINT, SLOG_DEBUG,"[%s]xujian send MSG_CMD_WIFI_STATION_SPOT_UPDATE end\n", __FILE__);
+
+	zte_write_result_to_web(wp, SUCCESS);
+
+end:
+	safe_free(nv_wifi_profile);
+	safe_free(tmp_wifi_profile);
+}
+
+/**********************************************************************
+* Function:        zte_wlan_station_connect
+* Description:     to connect the wifi spot
+* Input:           http info
+* Output:
+* Return:
+* Others:
+* Modify Date   Version     Author          Modification
+* -----------------------------------------------
+* 2015/03/09    V1.0        xujian          first version
+**********************************************************************/
+void zte_wlan_station_connect(webs_t wp)
+{
+	char_t *EX_SSID1 = NULL;
+	char_t *EX_AuthMode = NULL;
+	char_t *EX_EncrypType = NULL;
+	char_t *EX_DefaultKeyID = NULL;
+	char_t *EX_WEPKEY = NULL;
+	char_t *EX_WPAPSK1 = NULL;
+	char_t *EX_wifi_profile = NULL;
+	char_t *EX_mac = NULL;
+	char_t sta_ip_status[WEB_WLAN_STATION_IP_STATUS_LEN + 1] = {0};
+	char_t wifi_sta_connection[WEB_WLAN_STATION_CONNECTION_LEN + 1] = {0};
+	char wifi_cur_state[8] = {0};
+
+	long ret = 0;
+
+	EX_SSID1 = websGetVar(wp, T("EX_SSID1"), T(""));
+	EX_AuthMode = websGetVar(wp, T("EX_AuthMode"), T(""));
+	EX_EncrypType = websGetVar(wp, T("EX_EncrypType"), T(""));
+	EX_DefaultKeyID = websGetVar(wp, T("EX_DefaultKeyID"), T(""));
+	EX_WEPKEY = websGetVar(wp, T("EX_WEPKEY"), T(""));
+	EX_WPAPSK1 = websGetVar(wp, T("EX_WPAPSK1"), T(""));
+	EX_wifi_profile = websGetVar(wp, T("EX_wifi_profile"), T(""));
+	EX_mac = websGetVar(wp, T("EX_mac"), T(""));
+	slog(WIFI_PRINT, SLOG_NORMAL,"-----zte_wlan_station_connect-----EX_AuthMode is %s\n", EX_AuthMode);
+	//²ÎÊýºÏ·¨ÐÔ¼ì²é
+	if (check_connect_value(EX_SSID1, EX_AuthMode, EX_EncrypType, EX_DefaultKeyID, EX_wifi_profile, EX_WEPKEY, EX_WPAPSK1) == FALSE) {
+		zte_write_result_to_web(wp, FAILURE);
+		slog(WIFI_PRINT, SLOG_ERR,"[%s]connect para check failed\n", __FILE__);
+
+		return;
+	}
+
+	//Èç¹ûWIFIÊÇÕýÔÚÁ¬½ÓÈȵã״̬,Ôò·µ»Ø´íÎó
+	(void)zte_web_read("sta_ip_status", sta_ip_status);
+	(void)zte_web_read("wifi_cur_state", wifi_cur_state);
+	if (strcmp(sta_ip_status, WEB_WLAN_STATION_IP_STATUS_CONNECTING) == 0 ||
+	    strcmp(sta_ip_status, WIFI_STATION_IP_STATUS_DHCPING) == 0) {
+		//zte_write_result_to_web(wp,FAILURE);
+		zte_write_result_to_web(wp, PROCESSING);
+		slog(WIFI_PRINT, SLOG_ERR,"[%s]sta_ip_status connecting so failed\n", __FILE__);
+
+		return;
+	}
+
+	//¹¦Äܹرգ¬Ôò·µ»Ø´íÎó
+	(void)zte_web_read("wifi_sta_connection", wifi_sta_connection);
+	if (strcmp(wifi_cur_state, WIFI_CLOSED) == 0 || strcmp(wifi_sta_connection, "1") != 0) {
+		zte_write_result_to_web(wp, FAILURE);
+		slog(WIFI_PRINT, SLOG_ERR,"[%s]apsta closed , so failed\n", __FILE__);
+		return;
+	}
+
+	//дNV
+	(void)zte_web_write("EX_SSID1", EX_SSID1);
+	(void)zte_web_write("EX_AuthMode", EX_AuthMode);
+	(void)zte_web_write("EX_EncrypType", EX_EncrypType);
+	(void)zte_web_write("EX_DefaultKeyID", EX_DefaultKeyID);
+	(void)zte_web_write("EX_WEPKEY", EX_WEPKEY);
+	(void)zte_web_write("EX_WPAPSK1", EX_WPAPSK1);
+	(void)zte_web_write("EX_wifi_profile", EX_wifi_profile);
+	(void)zte_web_write("EX_mac", EX_mac);
+
+
+	//   resort_spot_list(2,EX_wifi_profile);
+
+	//дÕýÔÚÁ¬½Ó״̬
+//   (void)zte_web_write("sta_ip_status", WEB_WLAN_STATION_IP_STATUS_CONNECTING);
+
+	zte_web_write("manual_d_wifi", "0");
+
+	//ret=zte_send_message(MODULE_ID_WIFI, MSG_CMD_WIFI_STATION_CONNECT, 0, NULL);
+	ret = ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_STATION_CONNECT, 0, NULL, 0);
+	if (ret != 0) {
+		slog(WIFI_PRINT, SLOG_ERR,"[%s]send MSG_CMD_WIFI_STATION_CONNECT failed\n", __FILE__);
+	} else {
+		slog(WIFI_PRINT, SLOG_NORMAL,"[%s]send MSG_CMD_WIFI_STATION_CONNECT success\n", __FILE__);
+	}
+	zte_write_result_to_web(wp, SUCCESS);
+}
+
+/**********************************************************************
+* Function:        zte_wlan_station_disconnect
+* Description:     to disconnect the wifi spot
+* Input:           http info
+* Output:
+* Return:
+* Others:
+* Modify Date   Version     Author          Modification
+* -----------------------------------------------
+* 2015/03/09    V1.0        xujian          first version
+**********************************************************************/
+void zte_wlan_station_disconnect(webs_t wp)
+{
+	char_t wifi_sta_connection[WEB_WLAN_STATION_CONNECTION_LEN + 1] = {0};
+	char_t sta_ip_status[WEB_WLAN_STATION_IP_STATUS_LEN + 1] = {0};
+	long ret = 0;
+	//¹¦Äܹرգ¬Ôò·µ»Ø´íÎó
+	(void)zte_web_read("wifi_sta_connection", wifi_sta_connection);
+	if (strcmp(wifi_sta_connection, "1") != 0) {
+		zte_write_result_to_web(wp, FAILURE);
+		return;
+	}
+
+
+	//Èç¹ûWIFIÊÇÕýÔÚÁ¬½ÓÈȵã״̬,Ôò·µ»Ø´íÎó
+	(void)zte_web_read("sta_ip_status", sta_ip_status);
+	if (strcmp(sta_ip_status, WEB_WLAN_STATION_IP_STATUS_CONNECTING) == 0 ||
+	    strcmp(sta_ip_status, WIFI_STATION_IP_STATUS_DHCPING) == 0) {
+		//zte_write_result_to_web(wp,FAILURE);
+		zte_write_result_to_web(wp, PROCESSING);
+		return;
+	}
+
+	zte_web_write("manual_d_wifi", "1");
+	//zte_send_message(MODULE_ID_WIFI, MSG_CMD_WIFI_STATION_DISCONNECT, 0, NULL);
+	ret = ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_STATION_DISCONNECT, 0, NULL, 0); //kw 3
+	if (ret != 0) {
+		slog(WIFI_PRINT, SLOG_ERR,"[%s]send MSG_CMD_WIFI_STATION_DISCONNECT failed\n", __FILE__);
+	} else {
+		slog(WIFI_PRINT, SLOG_NORMAL,"[%s]send MSG_CMD_WIFI_STATION_DISCONNECT success\n", __FILE__);
+	}
+	zte_write_result_to_web(wp, SUCCESS);
+}
+
+/**********************************************************************
+* Function:        zte_wlan_station_refresh
+* Description:     to scan the wifi spot
+* Input:           http info
+* Output:
+* Return:
+* Others:
+* Modify Date   Version     Author          Modification
+* -----------------------------------------------
+* 2015/03/09    V1.0        xujian          first version
+**********************************************************************/
+void zte_wlan_station_refresh(webs_t wp)
+{
+	char_t wifi_sta_connection[WEB_WLAN_STATION_CONNECTION_LEN + 1] = {0};
+	char_t sta_ip_status[WEB_WLAN_STATION_IP_STATUS_LEN + 1] = {0};
+	long ret = 0;
+	//¹¦Äܹرգ¬Ôò·µ»Ø´íÎó
+	(void)zte_web_read("wifi_sta_connection", wifi_sta_connection);
+	if (strcmp(wifi_sta_connection, "1") != 0) {
+		zte_write_result_to_web(wp, FAILURE);
+		return;
+	}
+
+	//Èç¹ûWIFIÊÇÕýÔÚÁ¬½ÓÈȵã״̬,Ôò·µ»Ø´íÎó
+	(void)zte_web_read("sta_ip_status", sta_ip_status);
+	if (strcmp(sta_ip_status, WEB_WLAN_STATION_IP_STATUS_CONNECTING) == 0 ||
+	    strcmp(sta_ip_status, WIFI_STATION_IP_STATUS_DHCPING) == 0) {
+		//zte_write_result_to_web(wp,FAILURE);
+		zte_write_result_to_web(wp, PROCESSING);
+		return;
+	}
+
+	(void)zte_web_write(NV_WIFI_SCAN_FINISH, "0");
+
+	//zte_send_message(MODULE_ID_WIFI, MSG_CMD_WIFI_STATION_SCAN, 0, NULL);
+	ret = ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_WIFI, MSG_CMD_WIFI_STATION_SCAN, 0, NULL, 0);
+	if (ret != 0) {
+		slog(WIFI_PRINT, SLOG_ERR,"[%s]send MSG_CMD_WIFI_STATION_SCAN failed\n", __FILE__);
+	} else {
+		slog(WIFI_PRINT, SLOG_NORMAL,"[%s]send MSG_CMD_WIFI_STATION_SCAN success\n", __FILE__);
+	}
+
+	zte_write_result_to_web(wp, SUCCESS);
+
+}