[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);
+
+}