[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/zte_web_mgmt.c b/ap/app/goahead/interface5.0/zte_web_mgmt.c
new file mode 100755
index 0000000..a4e1311
--- /dev/null
+++ b/ap/app/goahead/interface5.0/zte_web_mgmt.c
@@ -0,0 +1,3658 @@
+/************************************************************************
+* °æÈ¨ËùÓÐ (C)2010, ÉîÛÚÊÐÖÐÐËͨѶ¹É·ÝÓÐÏÞ¹«Ë¾¡£
+*
+* ÎļþÃû³Æ£º zte_web_mgmt.c
+* Îļþ±êʶ£º
+* ÄÚÈÝÕªÒª£º
+* ÆäËü˵Ã÷£º
+* µ±Ç°°æ±¾£º V0.1
+* ×÷ Õߣº zyt
+* Íê³ÉÈÕÆÚ£º 2010-11-06
+*
+* Ð޸ļǼ1£º
+* ÐÞ¸ÄÄÚÈÝ£º³õʼ°æ±¾
+
+
+* ECµ¥ºÅ:EC616000235556 ¿ª·¢¹ÊÕÏ
+* ¹ÊÕÏÖ÷Ìâ:¿ª»ú¸üÐÂʧ°ÜºóÁ¢¼´ÖØÆô£¬ÖØÆôºóÈÔÏÔʾ¸üÐÂʧ°ÜÎÊÌâ / Ôö¼Ówebui fota´¦Àílog
+* ÐÞ¸Äʱ¼ä:20140715
+************************************************************************/
+#include <sys/time.h>
+#include <sys/types.h>
+#include <string.h>
+#include <pthread.h>
+#include <dirent.h>
+#include <stdlib.h>
+
+#include <signal.h>
+#include <errno.h>
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sys/ipc.h>
+#include <sys/msg.h>
+
+#include <openssl/aes.h>
+
+#include "zte_web_interface.h"
+#include "zte_web_get_fw_para.h"
+#include "zte_web_mgmt_wifi.h"
+#include "fota_common.h"
+#include "nv_api.h"
+#include "libkey.h"
+
+/****************************************************************************
+* È«¾Ö±äÁ¿¶¨ÒåÇø
+****************************************************************************/
+/* password check result*/
+typedef enum _psw_check_result_type_t {
+ PSW_EMPTY = 0,
+ PSW_OK = 1,
+ PSW_TOO_LONG = 2,
+ PSW_TIME_OUT = 3,
+ PSW_OTHER = 4
+} psw_check_result_type_t;
+
+typedef enum {
+ PIN_MANAGE_DISABLE = 0,
+ PIN_MANAGE_ENABLE,
+ PIN_MANAGE_MODIFY
+} emPIN_MANAGE_ACTION;
+
+typedef struct UNLOCK_PARA {
+ char unlock_code[20];
+} UNLOCK_PARA_ST;
+
+//quick setting
+typedef void (*funcWPType)(webs_t);
+
+pthread_mutex_t g_login_timemark_mutex = PTHREAD_MUTEX_INITIALIZER;
+#define TIME_SEM_KEY_1 0x0A2B
+#define TIME_SEM_KEY_2 0x3A4B
+
+//bsim
+typedef struct
+{
+ unsigned int pubKeyRsaE[32];
+ unsigned int pubKeyRsaN[32];
+ unsigned int secureFlag;
+ unsigned int pubKeyHash[4];
+ unsigned int secureDevId[3];
+}T_ZDrvEfuse_Secure;
+
+#define EFUSE_IOC_MAGIC 'E'
+#define EFUSE_GET_DATA _IOWR(EFUSE_IOC_MAGIC, 1, char *)
+#define PPPOE_CODE_LEN 32 //webui limit 30
+
+static unsigned char web_aes_key[16] = {0};
+
+#define APNCONFIG_NUM_MAX 10
+//bsim end
+
+/****************************************************************************
+* staticº¯ÊýÉùÃ÷Çø
+****************************************************************************/
+void deal_quick_setup_apn_ex(webs_t wp);
+void deal_quick_setup_wifi_basic(webs_t wp);
+void deal_quick_setup_wifi_security(webs_t wp);
+int zte_mgmt_handle_account(webs_t wp);
+void zte_setLastLoginTime();
+int zte_checkLoginTime();
+void zte_reduct_login_times();
+psw_check_result_type_t zte_password_check(webs_t wp, char* psw);
+static void wait_verify(char *wait_name, char *wait_value);
+static void zte_mgmt_enable_pin(webs_t wp, char_t *old_pin);
+static void zte_mgmt_modify_pin(webs_t wp, char_t *old_pin, char_t *new_pin);
+void deal_quick_setup_wifi_basic(webs_t wp);
+void deal_quick_setup_wifi_security(webs_t wp);
+static void deal_quick_setup_wps(webs_t wp);
+static char *split_str_by_sep(char *src, char *sep, char *dst, int len);
+static void set_apn_to_cfg(APN_PROFILE *apn_profile, IPV6_APN_PROFILE *ipv6_apn_profile);
+#ifdef WEBS_SECURITY
+static void js_aes_wifi_encode(void);
+#endif
+
+/* ¿ìËÙÉèÖà */
+const funcWPType G_ZQUICK_SET[MAX_QUICK_SET_NUM] = {
+ deal_quick_setup_apn_ex,
+ deal_quick_setup_wifi_basic,
+ deal_quick_setup_wifi_security,
+ zte_mgmt_handle_account,
+ quick_dhcp_set
+};
+
+/******************************************************
+* Function: void zte_mgmt_login(webs_t wp)
+* Description: deal with the login goform
+* Input: HTTP page info
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+* 2010/11/26 V1.0 zyt create
+*******************************************************/
+void zte_mgmt_login(webs_t wp)
+{
+ slog(MISC_PRINT, SLOG_NORMAL, T("UFIx User login!\n"));
+ char_t *psw = NULL;
+ char_t *user = NULL;
+ char_t *save_flag = NULL;
+ char_t *ip_address = NULL;
+
+ int user_name_len = 0;
+ char_t *pUser = NULL;
+ char user_name[CONFIG_DEFAULT_LENGTH] = {0};
+ int zte_password_len = 0;
+ char_t *zte_password = NULL;
+ char zte_psw_admin[CONFIG_DEFAULT_LENGTH] = {0};
+ psw_check_result_type_t psw_cheak_result = PSW_EMPTY;
+ char buf[CONFIG_DEFAULT_LENGTH] = {0};
+
+ slog(MISC_PRINT, SLOG_DEBUG,"[login] zte_mgmt_login enter====\n");
+ if (NULL == wp) {
+ slog(MISC_PRINT, SLOG_ERR,"[login] zte_mgmt_login: wp is null.");/*lint !e26*/
+ zte_write_result_to_web(wp, LOGIN_FAIL);
+ return;
+ }
+
+ psw = websGetVar(wp, T("password"), T(""));
+ user = websGetVar(wp, T("username"), NULL);
+
+ if ('\0' == (*psw)) {
+ slog(MISC_PRINT, SLOG_ERR,"[login] zte_mgmt_login: psw is empty.");/*lint !e26*/
+ zte_write_result_to_web(wp, LOGIN_FAIL);
+ return;
+ }
+
+ if (user != NULL) {
+ slog(MISC_PRINT, SLOG_DEBUG," zte_mgmt_login user = %s\n", user);
+ pUser = (char *)zte_base64_decode((const unsigned char *)user, strlen(user), (unsigned int*)&user_name_len);
+ if (NULL == pUser) {
+ zte_write_result_to_web(wp, LOGIN_FAIL);
+ return;
+ }
+
+ //strncpy(user_name, pUser, user_name_len);
+ if(user_name_len < sizeof(user_name))
+ snprintf(user_name,user_name_len+1,"%s",pUser);
+ else
+ snprintf(user_name,sizeof(user_name),"%s",pUser);
+ free(pUser);
+
+ slog(MISC_PRINT, SLOG_DEBUG," zte_mgmt_login user_name = %s\n", user_name);
+ sc_cfg_get("admin_user", buf, sizeof(buf));
+ if (0 != strcmp(user_name, buf)) {
+ slog(MISC_PRINT, SLOG_ERR," zte_mgmt_login user_name fail \n");
+ zte_write_result_to_web(wp, LOGIN_USER_NAME_NOT_EXSIT);
+ return;
+ }
+ slog(MISC_PRINT, SLOG_DEBUG," zte_mgmt_login uername correct \n");
+ }
+ slog(MISC_PRINT, SLOG_DEBUG,"[login] login1 -> zte_password_encode:%s.\n", psw); /*lint !e26*/
+#ifdef WEBS_SECURITY
+ zte_password = js_aes_decode(psw, strlen(psw), (unsigned int*)&zte_password_len);
+#else
+ zte_password = (char *)zte_base64_decode((const unsigned char *)psw, strlen(psw), (unsigned int*)&zte_password_len);
+#endif
+ slog(MISC_PRINT, SLOG_DEBUG,"[login] login2 -> zte_password:%s.\n", zte_password); /*lint !e26*/
+
+ if (NULL == zte_password) {
+ slog(MISC_PRINT, SLOG_ERR,"[login] zte_mgmt_login: psw is empty.\n");/*lint !e26*/
+ zte_write_result_to_web(wp, LOGIN_FAIL);
+ return;
+ }
+ //zte_password will long than zte_password_len, then strncpy zte_password_len data to zte_psw_admin
+ if(zte_password_len < sizeof(zte_psw_admin))
+ snprintf(zte_psw_admin,zte_password_len+1,"%s",zte_password);
+ else
+ snprintf(zte_psw_admin,sizeof(zte_psw_admin),"%s",zte_password);
+ //strncpy(zte_psw_admin, zte_password, zte_password_len);
+ free(zte_password);
+ slog(MISC_PRINT, SLOG_DEBUG,"[login] login3 -> zte_psw_admin:%s.\n", zte_psw_admin); /*lint !e26*/
+ psw_cheak_result = zte_password_check(wp, zte_psw_admin);
+
+ if (psw_cheak_result != PSW_OK) {
+ slog(MISC_PRINT, SLOG_ERR,"[login] zte_mgmt_login psw_cheak_result != PSW_OK\n");
+ zte_write_result_to_web(wp, LOGIN_FAIL);
+ return;
+ }
+
+ //get request ip addr
+ ip_address = websGetRequestIpaddr(wp);
+#if 0 // kw 3
+ if (NULL == ip_address) {
+ slog(MISC_PRINT, SLOG_ERR,"[login] zte_mgmt_login: ip_address is null.\n");/*lint !e26*/
+ zte_write_result_to_web(wp, LOGIN_FAIL);
+ return;
+ }
+#endif
+ //memset(&buf, 0, sizeof(buf));
+ //sc_cfg_get("admin_Password", buf, sizeof(buf));
+ //if (0 == strcmp(zte_psw_admin, buf)) {
+ if (0 == web_check_pwd(zte_psw_admin)) {
+ save_flag = websGetVar(wp, T("save_login"), T(""));
+ if (('\0' != (*save_flag)) && (IFSTREQUAL("1", save_flag))) {
+ sc_cfg_set("psw_save", zte_psw_admin);
+ }
+ } else {
+ zte_reduct_login_times();
+ slog(MISC_PRINT, SLOG_ERR,"[login] zte_mgmt_login: error pass.");/*lint !e26*/
+ zte_write_result_to_web(wp, LOGIN_BAD_PASSWORD);
+ security_log(MODULE_ID_WEB_CGI,"web login err pwd ip=%s",ip_address);
+ return;
+ }
+
+ if (zte_mgmt_login_timemark_set()) {
+ char id[COOKIE_SESSION_SIZE+1] = {0};
+ int ret = web_make_salt_base64(id, sizeof(id));
+ if(ret == 0)
+ {
+ slog(MISC_PRINT, SLOG_ERR,"[login] web_get_cookie_id fail\n");
+ zte_write_result_to_web(wp, LOGIN_FAIL);
+ return;
+ }
+ (void)zte_web_write(NV_USER_IP_ADDR, ip_address);
+ (void)zte_web_write(NV_LOGINFO, "ok");
+ (void)zte_web_write("save_login", save_flag);
+ (void)zte_web_write("psw_fail_num_str", LOGIN_FAIL_TIMES);
+ (void)zte_web_write(NV_COOKIE_ID, id);
+#ifdef WEBS_SECURITY
+ js_aes_wifi_encode();
+#endif
+ //zte_write_result_to_web(wp, LOGIN_SUCCESS);
+ websWrite(wp, T("HTTP/1.1 200 OK\n"));
+ websWrite(wp, T("Server: %s\r\n"), WEBS_NAME);
+#ifdef WEBINSPECT_FIX
+ websWrite(wp, T("X-Frame-Options: SAMEORIGIN\n"));
+#endif
+ websWrite(wp, T("Pragma: no-cache\n"));
+ websWrite(wp, T("Cache-control: no-cache\n"));
+ websWrite(wp, T("Content-Type: text/html\n"));
+#ifdef WEBS_SECURITY
+ websWrite(wp, T("Expires: 0\n"));
+ if (websSSLIsOpen())
+ websWrite(wp, T("Set-Cookie: id=%s; secure; HttpOnly; SameSite=Lax;\n"),id);
+ else
+ websWrite(wp, T("Set-Cookie: id=%s; HttpOnly; SameSite=Lax;\n"),id);
+#endif
+ websWrite(wp, T("\n"));
+ if (wp->flags & WEBS_XML_CLIENT_REQUEST) {
+ zte_rest_result_write(wp, LOGIN_SUCCESS);
+ } else {
+ websWrite(wp, T("{\"result\":\"%s\"}"), LOGIN_SUCCESS);
+ }
+ security_log(MODULE_ID_WEB_CGI,"web login suc ip=%s",ip_address);
+ return;
+ } else {
+ slog(MISC_PRINT, SLOG_ERR,"[login] zte_mgmt_login_timemark_set fail\n");
+ zte_write_result_to_web(wp, LOGIN_FAIL);
+ return;
+ }
+}
+/******************************************************
+* Function: int zte_mgmt_login_timemark_set()
+* Description: save the setting operate time
+* Input:
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+*******************************************************/
+int zte_mgmt_login_timemark_set()
+{
+ char_t login_timemark[NV_ITEM_STRING_LEN_64] = {0};
+ long timemark = 0;
+ int sem_id = -1;
+
+ int rc = TRUE;
+
+ sem_id = get_sem(TIME_SEM_KEY_2);
+ if (sem_id != -1) {
+ sem_p(sem_id);
+ }
+
+ timemark = time(0);
+ sprintf(login_timemark, "%ld", timemark);
+ if(ZTE_NVIO_DONE != zte_web_write(NV_USER_LOGIN_TIMEMARK, login_timemark))
+ {
+ rc = FALSE; // kw 3
+ }
+
+ if (sem_id != -1) {
+ sem_v(sem_id);
+ }
+
+ return rc;
+}
+void zte_mgmt_login_timeout_check()
+{
+ char_t user_login_timemark[NV_ITEM_STRING_LEN_64] = {0};
+ char_t login_info[NV_ITEM_STRING_LEN_20] = {0};
+
+ long time_now = 0;
+ int sem_id = -1;
+ long luser_login_timemark = 0;
+
+ zte_web_read(NV_LOGINFO, login_info);
+
+ if (0 == strcmp(login_info, "ok")) {
+ zte_web_read(NV_USER_LOGIN_TIMEMARK, user_login_timemark);
+ luser_login_timemark = atol(user_login_timemark);
+ if(luser_login_timemark < 0 || luser_login_timemark > LONG_MAX-1){
+ luser_login_timemark = LONG_MAX;
+ slog(MISC_PRINT, SLOG_DEBUG, "zte_mgmt_login_timemark_check: user_login_timemark is out of range [0, LONG_MAX).");
+ }
+
+ sem_id = get_sem(TIME_SEM_KEY_2);
+ if (sem_id != -1) {
+ sem_p(sem_id);
+ }
+ //timemark_check = time(0) - luser_login_timemark;
+ time_now = time(0);
+ if (sem_id != -1) {
+ sem_v(sem_id);
+ }
+
+ if ((time_now - luser_login_timemark) > LOGIN_TIMEOUT) {
+ slog(MISC_PRINT, SLOG_DEBUG, "zte_mgmt_login_timemark_check: the login is timeout .");
+ (void)zte_web_write(NV_USER_IP_ADDR, "");
+ (void)zte_web_write(NV_LOGINFO, "timeout");
+ (void)zte_web_write(NV_COOKIE_ID, "");
+ (void)zte_web_write(NV_WEB_TOKEN, "");
+ (void)zte_web_write(NV_USER_LOGIN_TIMEMARK, "0");
+ security_log(MODULE_ID_WEB_CGI,"web logout timeout");
+ return;
+ }
+#ifdef WEBS_SECURITY
+ static long time_update_token = 0;
+ if ((time_now - time_update_token) > COOKIE_TOKEN_TIMEOUT) {
+ time_update_token = time_now;
+ (void)zte_web_write(NV_WEB_TOKEN, "");
+ }
+#endif
+ }
+
+}
+/******************************************************
+* Function: void zte_mgmt_logout(webs_t wp)
+* Description: deal with the logout goform
+* Input: HTTP page info
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+* 2010/11/26 V1.0 zyt create
+*******************************************************/
+void zte_mgmt_logout(webs_t wp)
+{
+ slog(MISC_PRINT, SLOG_NORMAL, T("UFIx User logout!\n"));
+
+ if (NULL == wp) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ sc_cfg_set(NV_USER_IP_ADDR, "");
+ sc_cfg_set(NV_LOGINFO, "");
+ sc_cfg_set(NV_COOKIE_ID, "");
+ sc_cfg_set(NV_WEB_TOKEN, "");
+ zte_write_result_to_web(wp, SUCCESS);
+ security_log(MODULE_ID_WEB_CGI,"web logout");
+}
+
+/******************************************************
+* Function: void zte_mgmt_set_language(webs_t wp)
+* Description: deal with the set language goform
+* Input: HTTP page info
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+* 2010/11/26 V1.0 zyt create
+*2012/09/14 liuyingnan modification
+*******************************************************/
+void zte_mgmt_set_language(webs_t wp)
+{
+ char_t* language = websGetVar(wp, T("Language"), T("en"));
+
+ slog(MISC_PRINT, SLOG_NORMAL, T("UFIx User set language!\n"));
+
+ sc_cfg_set(NV_LANGUAGE, language);
+
+ //sc_cfg_save();
+ if ('\0' == (*language)) {
+ slog(MISC_PRINT, SLOG_ERR, "zte_mgmt_set_language: web para:[language] is empty string.\n"); /*lint !e26*/
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+
+ zte_write_result_to_web(wp, SUCCESS);
+ return;
+
+
+}
+
+
+/******************************************************
+* Function: void zte_mgmt_set_devicemode(webs_t wp)
+* Description: user/develop mode switch
+* Input: HTTP page info(debug_enable = 1 develop mode)
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+* Feb 27, 2014 V1.0 jhy create
+*******************************************************/
+void zte_mgmt_set_devicemode(webs_t wp)
+{
+ char_t* debug_enable = websGetVar(wp, T("debug_enable"), T(""));
+ char_t* auth = websGetVar(wp, T("auth"), T(""));
+
+ char strCfgGetItem[16] = {0};
+ nv_get_item(NV_RO, "usb_modetype", strCfgGetItem, sizeof(strCfgGetItem));
+
+ slog(MISC_PRINT, SLOG_NORMAL,"[goahead]debug_enable->%s current->%s\n", debug_enable, strCfgGetItem);
+ if((strcmp(strCfgGetItem,"user")== 0)&&(atoi(debug_enable) != 0))
+ {
+/* if(verify_device_key(auth,strlen(auth),SEED,strlen(SEED)) != 1)
+ {
+ slog(MISC_PRINT, SLOG_ERR, "zte_mgmt_set_devicemode: auth %s fail.\n",auth);
+ zte_write_result_to_web(wp, "set_devicemode fail:auth fail!");
+ return;
+ }*/
+ }
+
+ if ('\0' == (*debug_enable)) {
+ slog(MISC_PRINT, SLOG_ERR, "zte_mgmt_set_devicemode: web para:[debug_enable] is empty string.\n");
+ zte_write_result_to_web(wp, "set_devicemode fail:parameter debug_enable is empty!");
+ return;
+ }
+
+ if (atoi(debug_enable) < 0 || atoi(debug_enable) > 3) {
+ slog(MISC_PRINT, SLOG_ERR, "zte_mgmt_set_devicemode: web para:[debug_enable] is illegal string.\n");
+ zte_write_result_to_web(wp, "set_devicemode fail:parameter debug_enable is illegal!");
+ return;
+ }
+ char ss[20] = {0};
+ unsigned char bootmode[] = {0x54,0x4D};
+ switch (atoi(debug_enable)) {
+ case 0:
+ slog(MISC_PRINT, SLOG_NORMAL,"[goahead]debug_enable->user\n");
+ nv_set_item(NV_RO, "usb_modetype", "user", 1);
+ bootmode[1] =0x00;
+ amt_set_bootmode(bootmode);
+ break;
+ case 1:
+ slog(MISC_PRINT, SLOG_NORMAL,"[goahead]debug_enable->debug\n");
+ nv_set_item(NV_RO, "usb_modetype", "debug", 1);
+ bootmode[1] =0x01;
+ amt_set_bootmode(bootmode);
+ break;
+ case 2:
+ slog(MISC_PRINT, SLOG_NORMAL,"[goahead]debug_enable->factory\n");
+ nv_set_item(NV_RO, "usb_modetype", "factory", 1);
+ bootmode[1] =0x02;
+ amt_set_bootmode(bootmode);
+ break;
+ case 3:
+ slog(MISC_PRINT, SLOG_NORMAL,"[goahead]debug_enable->amt\n");
+ //nv_set_item(NV_RO, "usb_modetype", "amt", 1);
+ amt_set_bootmode(bootmode);
+ break;
+ default:
+ slog(MISC_PRINT, SLOG_NORMAL,"[goahead]error!\n");
+ zte_write_result_to_web(wp, "set_devicemode fail:parameter debug_enable is illegal!");
+ return;;
+ }
+ nv_commit(NV_RO);////default_parameter_roÖеÄNV±£´æ±ØÐëÓÃnv_commit²»ÄÜÓÃsc_cfg_save
+ zte_write_result_to_web(wp, "set_devicemode successfully!");
+
+}
+
+/******************************************************
+* Function: void zte_mgmt_restore(webs_t wp)
+* Description: deal with the restore goform
+* Input: HTTP page info
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+* 2010/11/26 V1.0 zyt create
+*******************************************************/
+void zte_mgmt_restore(webs_t wp)
+{
+ slog(MISC_PRINT, SLOG_NORMAL,"webui reset send message to blc\n");
+ ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_MAIN_CTRL, MSG_CMD_RESET_REQUEST, 0, NULL, 0);
+ system("sleep 2");//WH:delete?
+ zte_write_result_to_web(wp, SUCCESS);
+}
+
+
+/******************************************************
+* Function: void zte_mgmt_poweroff(webs_t wp)
+* Description: deal with the poweroff goform
+* Input: HTTP page info
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+* 2015/5/26 V1.0 lsl create
+*******************************************************/
+void zte_mgmt_poweroff(webs_t wp)
+{
+ zte_write_result_to_web(wp, SUCCESS);
+ slog(MISC_PRINT, SLOG_NORMAL,"webui poweroff send message to blc\n");
+ ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_MAIN_CTRL, MSG_CMD_POWEROFF_REQUEST, 0, NULL, 0);
+}
+
+/******************************************************
+* Function: void zte_mgmt_control_power_on_speed(webs_t wp)
+* Description: deal with the power_on_speed goform
+* Input: HTTP page info
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+* 2015/5/26 V1.0 lsl create
+*******************************************************/
+void zte_mgmt_control_power_on_speed(webs_t wp)
+{
+ char_t* mgmt_quicken_power_on = websGetVar(wp, T("mgmt_quicken_power_on"), T(""));
+
+ if ('\0' == (*mgmt_quicken_power_on)) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ } else if (strcmp(mgmt_quicken_power_on, "0") != 0 && strcmp(mgmt_quicken_power_on, "1") != 0) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ sc_cfg_set("mgmt_quicken_power_on", mgmt_quicken_power_on);
+
+ zte_write_result_to_web(wp, SUCCESS);
+}
+
+/******************************************************
+* Function: void zte_goform_mgmt_reboot_process(webs_t wp)
+* Description: deal with the restore goform
+* Input: HTTP page info
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+* 2010/11/26 V1.0 zyt create
+*******************************************************/
+void zte_goform_mgmt_reboot_process(webs_t wp)
+{
+ MSG_BUF stMsg = {0};
+ SINT32 iMsgSize = sizeof(MSG_BUF) - sizeof(SINT32);
+ char buf[NV_ITEM_STRING_LEN_20] = {0};
+
+ slog(MISC_PRINT, SLOG_NORMAL, T("UFIx User reboot!\n"));
+ ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_MAIN_CTRL, MSG_CMD_RESTART_REQUEST, 0, NULL, 0);
+}
+
+
+void zte_goform_mgmt_syslog_process(webs_t wp)
+{
+ slog(MISC_PRINT, SLOG_DEBUG, "zte_goform_mgmt_syslog_process coming\n"); /*lint !e26*/
+ char_t *syslog_mode = NULL;
+ /* get value from web page */
+ syslog_mode = websGetVar(wp, T("syslog_mode"), T("all"));
+
+ char_t *syslog_flag = NULL;
+ /* get value from web page */
+ syslog_flag = websGetVar(wp, T("syslog_flag"), T("close"));
+
+ if (strcmp(syslog_flag, "close") == 0) {
+ sc_cfg_set("debug_level", "0");
+ zte_write_result_to_web(wp, SUCCESS);
+ } else if (strcmp(syslog_flag, "delete") == 0) {
+ slog(MISC_PRINT, SLOG_NORMAL, T("UFIx User delete syslog!\n"));
+ slog(MISC_PRINT, SLOG_DEBUG, "delete syslog====\n"); /*lint !e26*/
+ //system("cat /dev/null > /var/log/webshow_messages");
+ system("cat /dev/null > /usr/netlog/misc.log");
+ system("cat /dev/null > /etc_ro/web/webshow_messages");
+
+ zte_write_result_to_web(wp, SUCCESS);
+ } else {
+ //sc_cfg_set("debug_level","7");/*added by jhy */
+ if (0 == strcmp("ufi", syslog_mode)) {
+ slog(MISC_PRINT, SLOG_DEBUG, "syslog_mode=====%s\n", syslog_mode); /*lint !e26*/
+ system("mkdir -p /etc_ro/web");
+ system("log.sh UFI");
+ sc_cfg_set("syslog_mode", "ufi");
+ }/*added by jhy */
+ else if (0 == strcmp("wan_connect", syslog_mode)) {
+ slog(MISC_PRINT, SLOG_DEBUG, "syslog_mode=====%s\n", syslog_mode); /*lint !e26*/
+ system("log.sh wan_connect info");
+ sc_cfg_set("syslog_mode", "wan_connect");
+ } else if (0 == strcmp("voip", syslog_mode)) {
+ slog(MISC_PRINT, SLOG_DEBUG, "syslog_mode=====%s\n", syslog_mode); /*lint !e26*/
+ system("log.sh voip info");
+ sc_cfg_set("syslog_mode", "voip");
+ } else if (0 == strcmp("sms", syslog_mode)) {
+ slog(MISC_PRINT, SLOG_DEBUG, "syslog_mode=====%s\n", syslog_mode); /*lint !e26*/
+ system("log.sh sms info");
+ sc_cfg_set("syslog_mode", "sms");
+ } else if (0 == strcmp("tr069", syslog_mode)) {
+ slog(MISC_PRINT, SLOG_DEBUG, "syslog_mode=====%s\n", syslog_mode); /*lint !e26*/
+ system("log.sh tr069 info");
+ sc_cfg_set("syslog_mode", "tr069");
+ } else if (0 == strcmp("dlna", syslog_mode)) {
+ slog(MISC_PRINT, SLOG_DEBUG, "syslog_mode=====%s\n", syslog_mode); /*lint !e26*/
+ system("log.sh dlna info");
+ sc_cfg_set("syslog_mode", "dlna");
+ } else if (0 == strcmp("wlan", syslog_mode)) {
+ slog(MISC_PRINT, SLOG_DEBUG, "syslog_mode=====%s\n", syslog_mode); /*lint !e26*/
+ system("log.sh wlan info");
+ sc_cfg_set("syslog_mode", "wlan");
+ } else if (0 == strcmp("router", syslog_mode)) {
+ slog(MISC_PRINT, SLOG_DEBUG, "syslog_mode=====%s\n", syslog_mode); /*lint !e26*/
+ system("log.sh router info");
+ sc_cfg_set("syslog_mode", "router");
+ } else {
+ slog(MISC_PRINT, SLOG_DEBUG, "syslog_mode=====%s\n", syslog_mode); /*lint !e26*/
+ system("log.sh all info");
+ sc_cfg_set("syslog_mode", "all");
+ }
+
+ zte_write_result_to_web(wp, SUCCESS);
+ }
+
+}
+
+
+/******************************************************
+* Function: void zte_mgmt_change_password(webs_t wp)
+* Description: deal with the user account modify goform
+* Input: HTTP page info
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+* 2010/11/26 V1.0 zyt create
+*******************************************************/
+void zte_mgmt_change_password(webs_t wp)
+{
+ char_t *old_pass = NULL;
+ char_t *new_pass = NULL;
+ char_t *current_psw = NULL;
+ char_t *new_psw = NULL;
+ int current_psw_len = 0;
+ int new_psw_len = 0;
+ char new_psw_admin[CONFIG_DEFAULT_LENGTH] = {0};
+ char old_psw_admin[CONFIG_DEFAULT_LENGTH] = {0};
+ //char admin_psw_buf[CONFIG_DEFAULT_LENGTH] = {0};
+
+ old_pass = websGetVar(wp, T("oldPassword"), T(""));
+ new_pass = websGetVar(wp, T("newPassword"), T(""));
+
+ if (0 == strlen(old_pass) || 0 == strlen(new_pass)) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ slog(MISC_PRINT, SLOG_DEBUG, "user_modify:new_psw_encode:%s\n", new_pass); /*lint !e26*/
+#ifdef WEBS_SECURITY
+ current_psw = js_aes_decode(old_pass, strlen(old_pass), (unsigned int *)¤t_psw_len);
+ new_psw = js_aes_decode(new_pass, strlen(new_pass), (unsigned int *)&new_psw_len);
+#else
+ current_psw = (char*)zte_base64_decode((const unsigned char *)old_pass, strlen(old_pass), (unsigned int *)¤t_psw_len);
+ new_psw = (char*)zte_base64_decode((const unsigned char *)new_pass, strlen(new_pass), (unsigned int *)&new_psw_len);
+#endif
+
+ if (NULL == current_psw || NULL == new_psw) {
+ slog(MISC_PRINT, SLOG_ERR, "current_psw or new_psw is NULL\n"); /*lint !e26*/
+ zte_write_result_to_web(wp, FAILURE);
+ free(current_psw);
+ free(new_psw);
+ return;
+ }
+ slog(MISC_PRINT, SLOG_DEBUG, "user_modify:new_psw:%s\n", new_psw); /*lint !e26*/
+ slog(MISC_PRINT, SLOG_DEBUG, "user_modify:new_psw_len:%d\n", new_psw_len); /*lint !e26*/
+ if(current_psw_len < sizeof(old_psw_admin))
+ snprintf(old_psw_admin,current_psw_len+1,"%s",current_psw);
+ else
+ snprintf(old_psw_admin,sizeof(old_psw_admin),"%s",current_psw);
+ //strncpy(old_psw_admin, current_psw, CONFIG_DEFAULT_LENGTH-1);
+ if(new_psw_len < sizeof(new_psw_admin))
+ snprintf(new_psw_admin,new_psw_len+1,"%s",new_psw);
+ else
+ snprintf(new_psw_admin,sizeof(new_psw_admin),"%s",new_psw);
+ //strncpy(new_psw_admin, new_psw, CONFIG_DEFAULT_LENGTH-1);
+ free(current_psw);
+ free(new_psw);
+ slog(MISC_PRINT, SLOG_DEBUG, "user_modify:new_psw_admin:%s\n", new_psw_admin); /*lint !e26*/
+
+ if (LOGIN_PSW_MIN_LEN > new_psw_len || LOGIN_PSW_MAX_LEN < new_psw_len) {
+ slog(MISC_PRINT, SLOG_ERR, "new_psw_len is too long\n"); /*lint !e26*/
+ sc_cfg_set("data_safe", "failed");
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+ if (DATA_NO_SAFE == zte_Safe_noSpecialChar(old_psw_admin)
+ || DATA_NO_SAFE == zte_Safe_noSpecialChar(new_psw_admin)) {
+ slog(MISC_PRINT, SLOG_ERR, "Get Data is no Safe:old_pass:%s,new_pass:%s\n", old_psw_admin, new_psw_admin); /*lint !e26*/
+ sc_cfg_set("data_safe", "failed");
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ //sc_cfg_get("admin_Password", admin_psw_buf, sizeof(admin_psw_buf));
+ //if (0 != strcmp(old_psw_admin, admin_psw_buf)) {
+ if (0 != web_check_pwd(old_psw_admin)) {
+#ifdef WEBS_SECURITY
+ sc_cfg_set(NV_USER_IP_ADDR, "");
+ sc_cfg_set(NV_LOGINFO, "");
+ sc_cfg_set(NV_COOKIE_ID, "");
+ sc_cfg_set(NV_WEB_TOKEN, "");
+ security_log(MODULE_ID_WEB_CGI,"web changepwd fail logout");
+#endif
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ slog(MISC_PRINT, SLOG_NORMAL, T("UFIx User change passwd!\n"));
+
+ //sc_cfg_set("admin_Password", new_psw_admin);
+ web_set_pwd(new_psw_admin);
+ //sc_cfg_set("user_save", "");
+ sc_cfg_set("psw_save", "");
+ sc_cfg_set("save_login", "");
+ sc_cfg_set("psw_changed", "1");/*³õʼÃÜÂëÐ޸ıêʶ*/
+/*
+ char cmd[82] = {0};
+ sprintf(cmd, "mksmbpasswd.sh \'%s\'", new_psw_admin);
+ system(cmd);
+ system("killall smbd");
+ system("killall nmbd");
+ system("smbd -D");
+ system("nmbd -D");
+*/
+ zte_write_result_to_web(wp, SUCCESS);
+}
+
+int zte_mgmt_check_password(webs_t wp)
+{
+ char_t *tmp_old_psw = NULL;
+ char_t *old_psw = NULL;
+ int old_psw_len = 0;
+ char old_psw_admin[CONFIG_DEFAULT_LENGTH] = {0};
+ //char admin_psw_buf[CONFIG_DEFAULT_LENGTH] = {0};
+
+ tmp_old_psw = websGetVar(wp, T("oldPassword"), NULL);
+ if (NULL != tmp_old_psw) {
+ old_psw = (char*)zte_base64_decode((const unsigned char *)tmp_old_psw, strlen(tmp_old_psw), (unsigned int *)&old_psw_len);
+ if (NULL == old_psw) {
+ slog(MISC_PRINT, SLOG_DEBUG, "current_psw or new_psw is NULL\n"); /*lint !e26*/
+ return -1;
+ }
+ slog(MISC_PRINT, SLOG_NORMAL,"zte_mgmt_check_password old_psw:%s!\n", old_psw);
+ if(old_psw_len < sizeof(old_psw_admin))
+ snprintf(old_psw_admin,old_psw_len+1,"%s",old_psw);
+ else
+ snprintf(old_psw_admin,sizeof(old_psw_admin),"%s",old_psw);
+ //strncpy(old_psw_admin, old_psw, CONFIG_DEFAULT_LENGTH-1);
+ free(old_psw);
+
+ if (DATA_NO_SAFE == zte_Safe_noSpecialChar(old_psw_admin)) {
+ slog(MISC_PRINT, SLOG_ERR,"zte_mgmt_check_password old_psw_admin Get Data is no Safe!\n");
+ sc_cfg_set("data_safe", "failed");
+ return -1;
+ }
+
+ //sc_cfg_get("admin_Password", admin_psw_buf, sizeof(admin_psw_buf));
+ //if (0 != strcmp(old_psw_admin, admin_psw_buf)) {
+ if (0 != web_check_pwd(old_psw_admin)) {
+#ifdef WEBS_SECURITY
+ sc_cfg_set(NV_USER_IP_ADDR, "");
+ sc_cfg_set(NV_LOGINFO, "");
+ sc_cfg_set(NV_COOKIE_ID, "");
+ sc_cfg_set(NV_WEB_TOKEN, "");
+ security_log(MODULE_ID_WEB_CGI,"web checkpwd fail logout");
+#endif
+ slog(MISC_PRINT, SLOG_ERR,"zte_mgmt_check_password admin_Password fail!\n");
+ return -1;
+ }
+ }
+
+ return 0;
+}
+
+int zte_mgmt_handle_account(webs_t wp)
+{
+ char_t *tmp_new_user = NULL;
+ char_t *tmp_new_psw = NULL;
+ char_t *new_user = NULL;
+ char_t *new_psw = NULL;
+ int new_psw_len = 0;
+ int new_user_len = 0;
+ char new_user_admin[CONFIG_DEFAULT_LENGTH] = {0};
+ char new_psw_admin[CONFIG_DEFAULT_LENGTH] = {0};
+
+ tmp_new_psw = websGetVar(wp, T("newPassword"), NULL);
+ tmp_new_user = websGetVar(wp, T("newUserName"), NULL);
+
+ if (NULL == tmp_new_psw || NULL == tmp_new_user) {
+ return -1;
+ }
+
+ new_psw = (char*)zte_base64_decode((const unsigned char *)tmp_new_psw, strlen(tmp_new_psw), (unsigned int *)&new_psw_len);
+ if (NULL == new_psw) {
+ slog(MISC_PRINT, SLOG_ERR, "new_psw is NULL\n"); /*lint !e26*/
+ return -1;
+ }
+ new_user = (char*)zte_base64_decode((const unsigned char *)tmp_new_user, strlen(tmp_new_user), (unsigned int *)&new_user_len);
+
+ if (NULL == new_user) {
+ free(new_psw);
+ slog(MISC_PRINT, SLOG_ERR, "new_user is NULL\n"); /*lint !e26*/
+ return -1;
+ }
+
+ slog(MISC_PRINT, SLOG_DEBUG,"zte_mgmt_handle_account new_psw:%s!\n", new_psw);
+ slog(MISC_PRINT, SLOG_DEBUG,"zte_mgmt_handle_account new_user:%s!\n", new_user);
+ if(new_psw_len < sizeof(new_psw_admin))
+ snprintf(new_psw_admin,new_psw_len+1,"%s",new_psw);
+ else
+ snprintf(new_psw_admin,sizeof(new_psw_admin),"%s",new_psw);
+ //strncpy(new_psw_admin, new_psw, CONFIG_DEFAULT_LENGTH-1);
+ if(new_user_len < sizeof(new_user_admin))
+ snprintf(new_user_admin,new_user_len+1,"%s",new_psw);
+ else
+ snprintf(new_user_admin,sizeof(new_user_admin),"%s",new_psw);
+ //strncpy(new_user_admin, new_user, CONFIG_DEFAULT_LENGTH-1);
+ free(new_psw);
+ free(new_user);
+
+ if (LOGIN_PSW_MIN_LEN > new_psw_len || LOGIN_PSW_MAX_LEN < new_psw_len) {
+ slog(MISC_PRINT, SLOG_ERR,"zte_mgmt_handle_account new_psw_len is too long!\n");
+ sc_cfg_set("data_safe", "failed");
+ return -1;
+ }
+
+ if (LOGIN_PSW_MIN_LEN > new_user_len || LOGIN_PSW_MAX_LEN < new_user_len) {
+ slog(MISC_PRINT, SLOG_ERR,"zte_mgmt_handle_account new_user_len is too long!\n");
+ sc_cfg_set("data_safe", "failed");
+ return -1;
+ }
+
+ if (DATA_NO_SAFE == zte_Safe_noSpecialChar(new_psw_admin)
+ || DATA_NO_SAFE == zte_Safe_noSpecialChar(new_user_admin)) {
+ slog(MISC_PRINT, SLOG_ERR,"zte_mgmt_handle_account Get Data is no Safe!\n");
+ sc_cfg_set("data_safe", "failed");
+ return -1;
+ }
+
+ slog(MISC_PRINT, SLOG_NORMAL, T("UFIx User change account!\n"));
+
+ sc_cfg_set("admin_user", new_user_admin);
+ //sc_cfg_set("admin_Password", new_psw_admin);
+ web_set_pwd(new_psw_admin);
+ //sc_cfg_set("user_save", "");
+ sc_cfg_set("psw_save", "");
+ sc_cfg_set("save_login", "");
+ //sc_cfg_save();
+/*
+ char cmd[82] = {0};
+ sprintf(cmd, "mksmbpasswd.sh \'%s\'", new_psw_admin);
+ system(cmd);
+ system("killall smbd");
+ system("killall nmbd");
+ system("smbd -D");
+ system("nmbd -D");
+*/
+ slog(MISC_PRINT, SLOG_DEBUG,"zte_mgmt_handle_account success!\n");
+ return 0;
+}
+
+void zte_mgmt_change_account(webs_t wp)
+{
+ slog(MISC_PRINT, SLOG_NORMAL,"zte_mgmt_change_account ====================!\n");
+
+ if (0 != zte_mgmt_check_password(wp)) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ if (0 != zte_mgmt_handle_account(wp)) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ zte_write_result_to_web(wp, SUCCESS);
+}
+
+
+/******************************************************
+* Function: void zte_mgmt_pin_input(webs_t wp)
+* Description: deal with the pin code input goform
+* Input: HTTP page info
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+* 2010/11/26 V1.0 zyt create
+*******************************************************/
+void zte_mgmt_pin_input(webs_t wp)
+{
+ char *pPinCode = NULL;
+ UINT32 length = 0;
+ T_zAt_CpinPukSet para = {0};
+ UINT32 ret = 0;
+ char modem_main_state[NV_ITEM_STRING_LEN_50] = {0};
+
+ pPinCode = websGetVar(wp, T("PinNumber"), T(""));
+ length = strlen(pPinCode);
+ if (0 == length || length >= sizeof(para.pin)) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ strncpy(para.pin, pPinCode,sizeof(para.pin)-1);
+ sc_cfg_set(NV_PIN_PUK_PROCESS, "begin");
+ ret = ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_AT_CTL, MSG_CMD_VERIFY_PIN_REQ, sizeof(T_zAt_CpinPukSet), (UCHAR *)¶, 0);
+ if (0 != ret) {
+ sc_cfg_set(NV_PIN_PUK_PROCESS, "");
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ wait_verify(NV_PIN_PUK_PROCESS, "end");
+
+ (void)sleep(1);
+ (void)zte_web_read(NV_MODEM_MAIN_STATE, modem_main_state);
+
+ if (0 != strcmp(modem_main_state, "modem_waitpin")) {
+ zte_write_result_to_web(wp, SUCCESS);
+ } else {
+ zte_write_result_to_web(wp, FAILURE);
+ }
+}
+/******************************************************
+* Function: void zte_mgmt_puk_input(webs_t wp)
+* Description: deal with the puk code input goform
+* Input: HTTP page info
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+* 2010/11/26 V1.0 zyt create
+*******************************************************/
+void zte_mgmt_puk_input(webs_t wp)
+{
+ char *pPukCode = NULL;
+ char *pNewPin = NULL;
+ int length = 0;
+ int ret = 0;
+ T_zAt_CpinPukSet para = {0};
+ CHAR modem_main_state[NV_ITEM_STRING_LEN_50] = {0};
+
+ pPukCode = websGetVar(wp, T("PUKNumber"), T(""));
+ pNewPin = websGetVar(wp, T("PinNumber"), T(""));
+
+ length = strlen(pPukCode);
+ if (0 == length || length >= sizeof(para.pin)) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ length = strlen(pNewPin);
+ if (0 == length || length >= sizeof(para.newpin)) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ strncpy(para.pin, pPukCode,sizeof(para.pin)-1);
+ strncpy(para.newpin, pNewPin,sizeof(para.newpin)-1);
+ sc_cfg_set(NV_PIN_PUK_PROCESS, "begin");
+ ret = ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_AT_CTL, MSG_CMD_VERIFY_PUK_REQ, sizeof(T_zAt_CpinPukSet), (UCHAR *)¶, 0);
+ if (0 != ret) {
+ sc_cfg_set(NV_PIN_PUK_PROCESS, "");
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ wait_verify(NV_PIN_PUK_PROCESS, "end");
+
+ (void)sleep(1);
+ (void)zte_web_read("pinset_result", modem_main_state);
+
+ if (0 != strcmp(modem_main_state, "fail")) {
+ zte_write_result_to_web(wp, SUCCESS);
+ } else {
+ zte_write_result_to_web(wp, FAILURE);
+ }
+}
+
+void zte_mgmt_auto_pin(webs_t wp)
+{
+ char *pPinEable = NULL;
+ char *pPinCode = NULL;
+ int length = 0;
+
+ pPinEable = websGetVar(wp, T("auto_simpin"), T(""));
+ pPinCode = websGetVar(wp, T("auto_simpin_code"), T(""));
+
+ length = strlen(pPinCode);
+ if (0 == length || length > 8) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ length = strlen(pPinEable);
+ if (1 != length) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ sc_cfg_set("auto_simpin", pPinEable);
+ sc_cfg_set("auto_simpin_code", pPinCode);
+ zte_write_result_to_web(wp, SUCCESS);
+
+}
+/******************************************************
+* Function: void zte_mgmt_unlock_network(webs_t wp)
+* Description: deal with the unlock code input goform
+* Input: HTTP page info
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+* 2010/11/26 V1.0 zyt create
+*******************************************************/
+void zte_mgmt_unlock_network(webs_t wp)
+{
+ char *unlock_code = NULL;
+ UNLOCK_PARA_ST para;
+ int length = 0;
+ int ret = 0;
+
+ memset(¶, 0, sizeof(UNLOCK_PARA_ST));
+
+ unlock_code = websGetVar(wp, T("unlock_network_code"), T(""));
+ slog(MISC_PRINT, SLOG_DEBUG, "unlock_code=%s", unlock_code); /*lint !e26*/
+ length = strlen(unlock_code);
+ if (0 == length || length >= sizeof(para.unlock_code)) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ strncpy(para.unlock_code, unlock_code,sizeof(para.unlock_code)-1);
+ ret = ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_AT_CTL, MSG_CMD_UNLOCK_REQ, sizeof(UNLOCK_PARA_ST), (UCHAR *)¶, 0);
+ if (0 != ret) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ wait_verify("unlock_at_wait", "0");
+ zte_write_result_to_web(wp, SUCCESS);
+}
+
+
+/*PINÂë½ûÓÃ*/
+void zte_mgmt_disable_pin(webs_t wp)
+{
+ char *pOldPin = NULL;
+ T_zAt_PinManage para = {0};
+ int length = 0;
+ int ret = 0;
+ char pin_manage_result[NV_ITEM_STRING_LEN_5] = {0};
+
+ pOldPin = websGetVar(wp, T("OldPinNumber"), T(""));
+ length = strlen(pOldPin);
+ if (0 == length || length >= sizeof(para.oldPin)) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+ strncpy(para.oldPin, pOldPin,sizeof(para.oldPin)-1);
+ para.action = PIN_MANAGE_DISABLE;
+
+ slog(MISC_PRINT, SLOG_NORMAL, T("UFIx User disable pin!\n"));
+
+ (void)zte_web_write("pin_manage_process", "begin");
+ slog(MISC_PRINT, SLOG_NORMAL, "zte_goform_mgmt_pin_mgmt_process send message: ZUFI_MODULE_ID_AT_MAIN, MSG_CMD_WEB_REQ_PIN_MANAGE");
+ ret = ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_AT_CTL, MSG_CMD_PIN_MANAGE_REQ, sizeof(T_zAt_PinManage), (UCHAR *)¶, 0);
+ if (0 != ret) {
+ sc_cfg_set("pin_manage_process", "");
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ /*ÉèÖõȴýpinÂë¹ÜÀí¶¯×÷AT´¦Àí½áÊø*/
+ wait_verify("pin_manage_process", "end");
+
+ (void)zte_web_read("pin_manage_result", pin_manage_result);
+ (void)zte_web_write("pin_manage_result", "");
+
+ if (0 == strcmp(pin_manage_result, "0")) {
+ zte_write_result_to_web(wp, SUCCESS);
+ } else {
+ zte_write_result_to_web(wp, FAILURE);
+ }
+}
+
+/*PINÂëÆôÓûòÐÞ¸Ä*/
+void zte_mgmt_pin_enable_or_modify(webs_t wp)
+{
+ CHAR *pOldPin = NULL;
+ CHAR *pNewPin = NULL;
+
+ if (NULL == wp) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ pOldPin = websGetVar(wp, T("OldPinNumber"), T(""));
+ pNewPin = websGetVar(wp, T("NewPinNumber"), T(""));
+
+ slog(MISC_PRINT, SLOG_DEBUG, "web para:[OldPinNumber] is [%s].", pOldPin);
+ slog(MISC_PRINT, SLOG_DEBUG, "web para:[NewPinNumber] is [%s].", pNewPin);
+
+ if ('\0' == (*pOldPin)) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ if (0 == strcmp(pNewPin, "")) {
+ zte_mgmt_enable_pin(wp, pOldPin);
+ } else {
+ zte_mgmt_modify_pin(wp, pOldPin, pNewPin);
+ }
+
+
+}
+static void zte_mgmt_enable_pin(webs_t wp, CHAR *pOldPin)
+{
+ T_zAt_PinManage para = {0};
+ int ret = 0;
+ char pin_manage_result[NV_ITEM_STRING_LEN_5] = {0};
+
+
+ if ((NULL == wp) || (NULL == pOldPin)) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ strncpy(para.oldPin, pOldPin,sizeof(para.oldPin)-1);
+ para.action = PIN_MANAGE_ENABLE;
+ if ('\0' == (*pOldPin)) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+ slog(MISC_PRINT, SLOG_NORMAL, T("UFIx User enable pin!\n"));
+
+ (void)zte_web_write("pin_manage_process", "begin");
+ slog(MISC_PRINT, SLOG_NORMAL, "zte_mgmt_enable_pin send message : ZUFI_MODULE_ID_AT_MAIN, MSG_CMD_WEB_REQ_PIN_MANAGE.");
+ ret = ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_AT_CTL, MSG_CMD_PIN_MANAGE_REQ, sizeof(T_zAt_PinManage), (UCHAR *)¶, 0);
+ if (0 != ret) {
+ sc_cfg_set("pin_manage_process", "");
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ /*ÉèÖõȴýpinÂë¹ÜÀí¶¯×÷AT´¦Àí½áÊø*/
+ wait_verify("pin_manage_process", "end");
+
+ (void)zte_web_read("pin_manage_result", pin_manage_result);
+ (void)zte_web_write("pin_manage_result", "");
+
+ if (0 == strcmp(pin_manage_result, "0")) {
+ zte_write_result_to_web(wp, SUCCESS);
+ } else {
+ zte_write_result_to_web(wp, FAILURE);
+ }
+}
+
+/**********************************************************************
+* Function: zte_mgmt_modify_pin
+* Description: to modify pin
+* Input: wp: the web para;old_pin: old pin number; new_pin:new pin number
+* Output:
+* Return:
+* Others:
+* Modify Date Version Author Modification
+* -----------------------------------------------
+* 2011/11/16 V1.0 chenyi first version
+**********************************************************************/
+
+static void zte_mgmt_modify_pin(webs_t wp, CHAR *pOldPin, CHAR *pNewPin)
+{
+ int length = 0;
+ int ret = 0;
+ T_zAt_PinManage para = {0};
+ char pin_manage_result[NV_ITEM_STRING_LEN_5] = {0};
+
+ if ((NULL == wp) || (NULL == pOldPin) || (NULL == pNewPin)) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ if (('\0' == (*pOldPin)) || ('\0' == (*pNewPin))) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+ length = strlen(pNewPin);
+ if (0 == length || length >= sizeof(para.newPin)) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+
+ slog(MISC_PRINT, SLOG_NORMAL, T("UFIx User modify pin!\n"));
+
+ para.action = PIN_MANAGE_MODIFY;
+ strncpy(para.oldPin, pOldPin,sizeof(para.oldPin)-1);
+ strncpy(para.newPin, pNewPin,sizeof(para.newPin)-1);
+ (void)zte_web_write("pin_manage_process", "begin");
+ slog(MISC_PRINT, SLOG_NORMAL, "zte_mgmt_modify_pin send message : ZUFI_MODULE_ID_AT_MAIN, MSG_CMD_WEB_REQ_PIN_MANAGE.");
+ ret = ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_AT_CTL, MSG_CMD_PIN_MANAGE_REQ, sizeof(T_zAt_PinManage), (UCHAR *)¶, 0);
+ if (0 != ret) {
+ sc_cfg_set("pin_manage_process", "");
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ /*ÉèÖõȴýpinÂë¹ÜÀí¶¯×÷AT´¦Àí½áÊø*/
+ wait_verify("pin_manage_process", "end");
+
+
+ (void)zte_web_read("pin_manage_result", pin_manage_result);
+ (void)zte_web_write("pin_manage_result", "");
+
+ if (0 == strcmp(pin_manage_result, "0")) {
+ zte_write_result_to_web(wp, SUCCESS);
+ } else {
+ zte_write_result_to_web(wp, FAILURE);
+ }
+}
+/******************************************************
+* Function: void zte_quick_setup(webs_t wp)
+* Description: deal with the quick setup goform
+* Input: HTTP page info
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+* 2010/11/26 V1.0 zyt create
+*******************************************************/
+void zte_quick_setup(webs_t wp)
+{
+ int iFunc = 0;
+
+ slog(MISC_PRINT, SLOG_NORMAL, T("UFIx User quick setup!\n"));
+
+ for (iFunc = 0; iFunc < MAX_QUICK_SET_NUM; iFunc++) {
+ if (G_ZQUICK_SET[iFunc] != NULL) {
+ G_ZQUICK_SET[iFunc](wp);
+ }
+ }
+ zte_write_result_to_web(wp, SUCCESS);
+}
+
+int save_data_to_file(char *file_path, unsigned char *data, int len)
+{
+ int file_fd = -1;
+ int ret = -1;
+
+
+ if (NULL == file_path || NULL == data) {
+ slog(MISC_PRINT, SLOG_ERR,"Input para is invalid, null point!");
+ return -1;
+ }
+
+ // O_TRUNC:½«Îļþ³¤¶È½Ø¶ÏΪ0£¬×öΪÐÂÎļþдÈë
+ file_fd = open(file_path, O_RDWR | O_CREAT | O_TRUNC | O_SYNC, 777);
+ if (file_fd < 0) {
+ slog(MISC_PRINT, SLOG_ERR,"Open file fail, error:%s, file path:%s", strerror(errno), file_path);
+ return -1;
+ }
+
+ ret = write(file_fd, (void *)data, len);
+ if (ret != len) {
+ slog(MISC_PRINT, SLOG_ERR,"Write data to file fail, error:%s, file path:%s", strerror(errno), file_path);
+ goto error;
+ }
+
+ ret = fsync(file_fd);
+ if (ret < 0) {
+ slog(MISC_PRINT, SLOG_ERR,"Sync Failed:%s, file path:%s", strerror(errno), file_path);
+ goto error;
+ }
+
+
+ ret = 0;
+ goto end;
+
+error:
+ ret = -1;
+
+end:
+ close(file_fd);
+
+ file_fd = -1;
+
+ return ret;
+
+}
+
+/******************************************************
+* Function: void zte_goform_mgmt_sntp_process(webs_t wp)
+* Description: deal with the sntp
+* Input: HTTP page info
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+* 2011/04/13 V1.0 mengyuan create
+*******************************************************/
+void zte_goform_mgmt_sntp_process(webs_t wp)
+{
+ MSG_BUF msg;
+ int lTgtMsgID = 0;
+ char *mode = NULL;
+ char *sntp_server0 = NULL;
+ char *sntp_server1 = NULL;
+ char *sntp_server2 = NULL;
+ char *sntp_timezone = NULL;
+ int result = 0;
+ LONG msgSize = sizeof(MSG_BUF) - sizeof(LONG);
+ char *ntp_server = NULL;
+ int sem_id = 0;
+ char state[NV_ITEM_STRING_LEN_20] = {0};
+ char sntp_timezone_tmp[NV_ITEM_STRING_LEN_64] = {0};
+ //char cmd[100] = {0};
+
+ memset(&msg, 1, sizeof(MSG_BUF));
+ mode = websGetVar(wp, T("manualsettime"), T(""));
+ sc_cfg_set("sntp_time_set_mode", mode);
+
+ sntp_server0 = websGetVar(wp, T("sntp_server1_ip"), T(""));
+ sntp_server1 = websGetVar(wp, T("sntp_server2_ip"), T(""));
+ sntp_server2 = websGetVar(wp, T("sntp_server3_ip"), T(""));
+ sc_cfg_set("sntp_server0", sntp_server0);
+ sc_cfg_set("sntp_server1", sntp_server1);
+ sc_cfg_set("sntp_server2", sntp_server2);
+
+
+ slog(MISC_PRINT, SLOG_NORMAL, T("UFIx User set sntp time!\n"));
+
+ if (strcmp(sntp_server0, "Other") == 0) {
+ sc_cfg_set("sntp_other_server0", websGetVar(wp, T("sntp_other_server0"), T("")));
+ }
+ if (strcmp(sntp_server1, "Other") == 0) {
+ sc_cfg_set("sntp_other_server1", websGetVar(wp, T("sntp_other_server1"), T("")));
+ }
+ if (strcmp(sntp_server2, "Other") == 0) {
+ sc_cfg_set("sntp_other_server2", websGetVar(wp, T("sntp_other_server2"), T("")));
+ }
+ sc_cfg_set("sntp_timezone_index", websGetVar(wp, T("sntp_timezone_index"), T("")));
+ //sc_cfg_set("sntp_timezone", websGetVar(wp, T("timezone"), T("")));
+ sc_cfg_set("sntp_dst_enable", websGetVar(wp, T("DaylightEnabled"), T("")));
+
+ sc_cfg_set("manual_time_year", websGetVar(wp, T("time_year"), T("")));
+ sc_cfg_set("manual_time_month", websGetVar(wp, T("time_month"), T("")));
+ sc_cfg_set("manual_time_day", websGetVar(wp, T("time_day"), T("")));
+ sc_cfg_set("manual_time_hour", websGetVar(wp, T("time_hour"), T("")));
+ sc_cfg_set("manual_time_minute", websGetVar(wp, T("time_minute"), T("")));
+ sc_cfg_set("manual_time_second", websGetVar(wp, T("time_second"), T("")));
+ //ÉèÖÃÊ±Çø
+ sntp_timezone = websGetVar(wp, T("timezone"), T(""));
+ sc_cfg_set("sntp_timezone", sntp_timezone);
+
+ //memset(cmd, 0, 100);
+ //sprintf(cmd, "echo \"%s\" > /etc_rw/TZ", sntp_timezone);
+ //system(cmd);
+ snprintf(sntp_timezone_tmp,sizeof(sntp_timezone_tmp),"%s\n",sntp_timezone);
+ save_data_to_file("/etc_rw/TZ",sntp_timezone_tmp,strlen(sntp_timezone_tmp));
+
+ if (strcmp(mode, "manual") == 0) {
+ sem_id = get_sem(TIME_SEM_KEY_1);
+ if (sem_id != -1) {
+ sem_p(sem_id);
+ slog(MISC_PRINT, SLOG_DEBUG,"[MANUAL] manual_set_time, sem_p, sem_id = %d\r\n", sem_id);
+ }
+
+ result = manual_set_time();
+
+ if (sem_id != -1) {
+ sem_v(sem_id);
+ slog(MISC_PRINT, SLOG_DEBUG,"[MANUAL] manual_set_time, sem_v, sem_id = %d\r\n", sem_id);
+ }
+
+ sc_cfg_set("sntp_year", websGetVar(wp, T("time_year"), T("")));
+ sc_cfg_set("sntp_month", websGetVar(wp, T("time_month"), T("")));
+ sc_cfg_set("sntp_day", websGetVar(wp, T("time_day"), T("")));
+ sc_cfg_set("sntp_hour", websGetVar(wp, T("time_hour"), T("")));
+ sc_cfg_set("sntp_minute", websGetVar(wp, T("time_minute"), T("")));
+ sc_cfg_set("sntp_second", websGetVar(wp, T("time_second"), T("")));
+ sc_cfg_set("sntp_process_result", "success");
+ if (result < 0) {
+ zte_write_result_to_web(wp, FAILURE);
+ } else {
+ if (!zte_mgmt_login_timemark_set()) {
+ slog(MISC_PRINT, SLOG_ERR, "[ERROR]zte_goform_whitelist_check -> timemark set error .\n"); /*lint !e26*/
+ }
+ zte_write_result_to_web(wp, SUCCESS);
+ }
+ } else if (strcmp(mode, "auto") == 0) {
+ sc_cfg_get("sntp_process_state", state, sizeof(state));
+ if (strcmp(state, "over") != 0) {
+ zte_write_result_to_web(wp, PROCESSING);
+ slog(MISC_PRINT, SLOG_DEBUG,"[SNTP] already runing return \n");
+ return;
+ }
+ sc_cfg_set("sntp_process_state", "idle");
+ //sc_cfg_set("systime_mode", "auto");
+ //sc_cfg_set("sntp_cmd_from", "WEBUI");
+ sc_cfg_set("sntp_process_result", "");
+ ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_SNTP, MSG_CMD_SNTP_START, 0, NULL, 0);
+ zte_write_result_to_web(wp, SUCCESS);
+ } else {
+ sem_id = get_sem(TIME_SEM_KEY_1);
+ if (sem_id != -1) {
+ sem_p(sem_id);
+ slog(MISC_PRINT, SLOG_DEBUG,"[MANUAL] manual_set_time, sem_p, sem_id = %d\r\n", sem_id);
+ }
+
+ result = manual_set_time();
+
+ if (sem_id != -1) {
+ sem_v(sem_id);
+ slog(MISC_PRINT, SLOG_DEBUG,"[MANUAL] manual_set_time, sem_v, sem_id = %d\r\n", sem_id);
+ }
+
+ sc_cfg_set("sntp_year", websGetVar(wp, T("time_year"), T("")));
+ sc_cfg_set("sntp_month", websGetVar(wp, T("time_month"), T("")));
+ sc_cfg_set("sntp_day", websGetVar(wp, T("time_day"), T("")));
+ sc_cfg_set("sntp_hour", websGetVar(wp, T("time_hour"), T("")));
+ sc_cfg_set("sntp_minute", websGetVar(wp, T("time_minute"), T("")));
+ sc_cfg_set("sntp_second", websGetVar(wp, T("time_second"), T("")));
+
+ if (result < 0) {
+ zte_write_result_to_web(wp, FAILURE);
+ } else {
+ if (!zte_mgmt_login_timemark_set()) {
+ slog(MISC_PRINT, SLOG_ERR, "[ERROR]zte_goform_whitelist_check -> timemark set error .\n"); /*lint !e26*/
+ }
+ zte_write_result_to_web(wp, SUCCESS);
+ }
+ }
+}
+
+static void wait_verify(char *wait_name, char *wait_value)
+{
+ int i = 0;
+ char buf[NV_ITEM_STRING_LEN_200] = {0};
+
+ if (NULL == wait_name || NULL == wait_value) {
+ return;
+ }
+
+ for (i = 0; i < 10; i++) {
+ sleep(2);
+ sc_cfg_get(wait_name, buf, sizeof(buf));
+ if (0 == strcmp(wait_value, buf)) {
+ break;
+ }
+ }
+ return;
+}
+
+
+void deal_quick_setup_wifi_basic(webs_t wp)
+{
+ deal_quick_setup_wifi_basic_mgmt(wp);
+}
+static int deal_quick_setup_auto_apn_set()
+{
+ APN_PROFILE newProfile = { 0 };
+ char ppp_status[NV_ITEM_STRING_LEN_50] = {0};
+
+ get_autoapn_profile(&newProfile);
+ set_apn_to_cfg(&newProfile, NULL);
+ sc_cfg_set("ipv6_wan_apn", newProfile.apn_name);
+
+ sc_cfg_get("ppp_status", ppp_status, sizeof(ppp_status));
+ if (0 == strcmp("ppp_disconnected", ppp_status) || 0 == strcmp("ppp_ready", ppp_status)) {
+ ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_AT_CTL, MSG_CMD_APN_SET_REQ, 0, NULL, 0);
+ }
+ return 0;
+}
+static void set_apn_to_cfg(APN_PROFILE *apn_profile, IPV6_APN_PROFILE *ipv6_apn_profile)
+{
+ if (apn_profile != NULL) {
+ sc_cfg_set("m_profile_name", apn_profile->profile_name);
+ sc_cfg_set("wan_apn", apn_profile->apn_name);
+ sc_cfg_set("apn_select", apn_profile->apn_select);
+ sc_cfg_set("wan_dial", apn_profile->dial_num);
+ sc_cfg_set("ppp_auth_mode", apn_profile->ppp_auth_mode);
+ sc_cfg_set("ppp_username", apn_profile->ppp_username);
+ sc_cfg_set("ppp_passtmp", apn_profile->ppp_passwd);
+ sc_cfg_set("pdp_type", apn_profile->pdp_type);
+ sc_cfg_set("ipv6_pdp_type", apn_profile->pdp_type);
+ sc_cfg_set("pdp_select", apn_profile->pdp_select);
+ sc_cfg_set("pdp_addr", apn_profile->pdp_addr);
+ apn_encrypt_code();
+ }
+
+ if (ipv6_apn_profile != NULL) {
+ sc_cfg_set("m_profile_name", ipv6_apn_profile->profile_name);
+ sc_cfg_set("ipv6_wan_apn", ipv6_apn_profile->apn_name);
+ sc_cfg_set("apn_select", ipv6_apn_profile->apn_select);
+ sc_cfg_set("wan_dial", ipv6_apn_profile->dial_num);
+ sc_cfg_set(NV_IPV6_PPP_AUTH_MODE, ipv6_apn_profile->ppp_auth_mode);
+ sc_cfg_set("ipv6_ppp_username", ipv6_apn_profile->ppp_username);
+ sc_cfg_set("ipv6_ppp_passtmp", ipv6_apn_profile->ppp_passwd);
+ sc_cfg_set("pdp_type", ipv6_apn_profile->pdp_type);
+ sc_cfg_set("ipv6_pdp_type", ipv6_apn_profile->pdp_type);
+ sc_cfg_set("pdp_select", ipv6_apn_profile->pdp_select);
+ sc_cfg_set("pdp_addr", ipv6_apn_profile->pdp_addr);
+ ipv6apn_encrypt_code();
+ }
+}
+
+
+static void deal_quick_setup_manual_apn_set(webs_t wp)
+{
+ IPV6_APN_PROFILE newIpv6Profile = { 0 };
+ APN_PROFILE newProfile = { 0 };
+ int index_apn = atoi(websGetVar(wp, "index", T("")));
+ char *pdp_type = websGetVar(wp, "pdp_type", T(""));
+ char *apn_name = websGetVar(wp, "wan_apn", T(""));
+ char *ipv6_wan_apn = websGetVar(wp, "ipv6_wan_apn", T(""));
+ char ppp_status[NV_ITEM_STRING_LEN_50] = {0};
+ char *ppp_auth_mode = websGetVar(wp, "ppp_auth_mode", T(""));
+ char *ppp_username = websGetVar(wp, "ppp_username", T(""));
+ char *ppp_passwd = websGetVar(wp, "ppp_passtmp", T(""));
+ char *ipv6_pdp_auth_mode = websGetVar(wp, NV_IPV6_PPP_AUTH_MODE, T(""));
+ char *ipv6_ppp_username = websGetVar(wp, "ipv6_ppp_username", T(""));
+ char *ipv6_ppp_passwd = websGetVar(wp, "ipv6_ppp_passtmp", T(""));
+
+ slog(MISC_PRINT, SLOG_NORMAL,"[goahead] deal_quick_setup_manual_apn_set wan_apn %s. %s.\n", apn_name,ppp_username);
+
+ slog(MISC_PRINT, SLOG_NORMAL, T("UFIx User manual apn set!\n"));
+ if (0 == strcmp(pdp_type, "IPv6")) {
+ get_ipv6apn_profile_by_index(index_apn, &newIpv6Profile);
+ strncpy(newIpv6Profile.apn_name, ipv6_wan_apn,sizeof(newIpv6Profile.apn_name)-1);
+ strncpy(newIpv6Profile.ppp_auth_mode, ipv6_pdp_auth_mode,sizeof(newIpv6Profile.ppp_auth_mode)-1);
+ strncpy(newIpv6Profile.ppp_username, ipv6_ppp_username,sizeof(newIpv6Profile.ppp_username)-1);
+ strncpy(newIpv6Profile.ppp_passwd, ipv6_ppp_passwd,sizeof(newIpv6Profile.ppp_passwd)-1);
+ set_ipv6_apn_profile_by_index(index_apn, &newIpv6Profile);
+ set_ipv6_apn_prof_aes_by_index(index_apn, &newIpv6Profile);
+
+ set_apn_to_cfg(NULL, &newIpv6Profile);
+ } else if (0 == strcmp(pdp_type, "IPv4v6")) {
+ get_ipv4v6apn_profile_by_index(index_apn, &newProfile, &newIpv6Profile);
+ strncpy(newProfile.apn_name, apn_name,sizeof(newProfile.apn_name)-1);
+ strncpy(newProfile.ppp_auth_mode, ppp_auth_mode,sizeof(newProfile.ppp_auth_mode)-1);
+ strncpy(newProfile.ppp_username, ppp_username,sizeof(newProfile.ppp_username)-1);
+ strncpy(newProfile.ppp_passwd, ppp_passwd,sizeof(newProfile.ppp_passwd)-1);
+
+ strncpy(newIpv6Profile.apn_name, ipv6_wan_apn,sizeof(newIpv6Profile.apn_name)-1);
+ strncpy(newIpv6Profile.ppp_auth_mode, ipv6_pdp_auth_mode,sizeof(newIpv6Profile.ppp_auth_mode)-1);
+ strncpy(newIpv6Profile.ppp_username, ipv6_ppp_username,sizeof(newIpv6Profile.ppp_username)-1);
+ strncpy(newIpv6Profile.ppp_passwd, ipv6_ppp_passwd,sizeof(newIpv6Profile.ppp_passwd)-1);
+ set_ipv4v6_apn_profile_by_index(index_apn, &newProfile, &newIpv6Profile);
+ set_ipv4v6_apn_prof_aes_by_index(index_apn, &newProfile, &newIpv6Profile);
+
+ set_apn_to_cfg(&newProfile, &newIpv6Profile);
+ } else {
+ get_apn_profile_by_index(index_apn, &newProfile);
+ strncpy(newProfile.apn_name, apn_name,sizeof(newProfile.apn_name)-1);
+ strncpy(newProfile.ppp_auth_mode, ppp_auth_mode,sizeof(newProfile.ppp_auth_mode)-1);
+ strncpy(newProfile.ppp_username, ppp_username,sizeof(newProfile.ppp_username)-1);
+ strncpy(newProfile.ppp_passwd, ppp_passwd,sizeof(newProfile.ppp_passwd)-1);
+ set_apn_profile_by_index(index_apn, &newProfile);
+ set_apn_prof_aes_by_index(index_apn, &newProfile);
+
+ set_apn_to_cfg(&newProfile, NULL);
+ }
+
+ sc_cfg_get("ppp_status", ppp_status, sizeof(ppp_status));
+ if (0 == strcmp("ppp_disconnected", ppp_status) || 0 == strcmp("ppp_ready", ppp_status)) {
+ ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_AT_CTL, MSG_CMD_APN_SET_REQ, 0, NULL, 0);
+ }
+}
+
+void deal_quick_setup_apn_ex(webs_t wp)
+{
+ if (strcmp(ZTE_WEB_ACT_MANUAL, websGetVar(wp, "apn_mode", T(""))) == 0) {
+ zte_web_write("apn_mode", ZTE_WEB_ACT_MANUAL);
+ deal_quick_setup_manual_apn_set(wp);
+ } else {
+ zte_web_write("apn_mode", ZTE_WEB_ACT_AUTO);
+ deal_quick_setup_auto_apn_set(); // cov low, deal_quick_setup_auto_apn_set does not need parameter
+ }
+}
+
+void deal_quick_setup_wifi_security(webs_t wp)
+{
+ deal_quick_setup_wifi_security_mgmt(wp);
+}
+
+static void deal_quick_setup_wps(webs_t wp)
+{
+ deal_quick_setup_wps_mgmt(wp);
+}
+/******************************************************
+* Function: void get_apn_profile_by_index(int index, APN_PROFILE *profile)
+* Description: get a apn profile by index from config
+* Input: index:the index of apn profile which to get
+* Output: profile:the result of apn profile config after splited
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+* 2010/11/26 V1.0 zyt create
+*******************************************************/
+void get_apn_profile_by_index(int index, APN_PROFILE *profile)
+{
+ char cfg_name[PROFILE_MEMBER_LEN] = {0};
+ char cfg_value[APNCONFIG_MEMORY] = {0};
+ char *pos_begin = NULL;
+
+ if (NULL == profile) {
+ return;
+ }
+ //È¡Ã÷ÎÄAPN_configtmp,Õâʱ²»ÓÃÈ¡ÃÜÎÄ
+ sprintf(cfg_name, "APN_configtmp%d", index);
+
+ sc_cfg_get(cfg_name, cfg_value, sizeof(cfg_value));
+ pos_begin = cfg_value;
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->profile_name, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->apn_name, PROFILE_APN_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->apn_select, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->dial_num, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->ppp_auth_mode, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->ppp_username, PROFILE_APN_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->ppp_passwd, PROFILE_APN_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->pdp_type, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->pdp_select, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->pdp_addr, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->dns_mode, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->prefer_dns_manual, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->standby_dns_manual, PROFILE_MEMBER_LEN);
+ return;
+}
+
+void get_ipv6apn_profile_by_index(int index, IPV6_APN_PROFILE *profile)
+{
+ char cfg_name[PROFILE_MEMBER_LEN] = {0};
+ char cfg_value[APNCONFIG_MEMORY] = {0};
+ char *pos_begin = NULL;
+
+ if (NULL == profile) {
+ return;
+ }
+
+ sprintf(cfg_name, "ipv6_APN_configtmp%d", index);
+
+ sc_cfg_get(cfg_name, cfg_value, sizeof(cfg_value));
+ slog(MISC_PRINT, SLOG_DEBUG, "get_ipv6apn_profile_by_index cfg_value=%s", cfg_value); /*lint !e26*/
+
+ pos_begin = cfg_value;
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->profile_name, PROFILE_MEMBER_LEN);
+ slog(MISC_PRINT, SLOG_DEBUG, "========= profile->profile_name=%s=======", profile->profile_name); /*lint !e26*/
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->apn_name, PROFILE_APN_LEN);
+ slog(MISC_PRINT, SLOG_DEBUG, "=========profile->apn_name=%s=======", profile->apn_name); /*lint !e26*/
+
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->apn_select, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->dial_num, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->ppp_auth_mode, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->ppp_username, PROFILE_APN_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->ppp_passwd, PROFILE_APN_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->pdp_type, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->pdp_select, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->pdp_addr, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->dns_mode, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->prefer_dns_manual, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->standby_dns_manual, PROFILE_MEMBER_LEN);
+ return;
+}
+
+
+void get_ipv4v6apn_profile_by_index(int index, APN_PROFILE *profile, IPV6_APN_PROFILE *ipv6profile)
+{
+ char cfg_name[PROFILE_MEMBER_LEN] = {0};
+ char cfg_value[APNCONFIG_MEMORY] = {0};
+ char *pos_begin = NULL;
+
+ char ipv6_cfg_name[PROFILE_MEMBER_LEN] = {0};
+ char ipv6_cfg_value[APNCONFIG_MEMORY] = {0};
+ char *ipv6_pos_begin = NULL;
+
+
+ if (NULL == profile) {
+ return;
+ }
+ if (NULL == ipv6profile) {
+ return;
+ }
+
+ sprintf(cfg_name, "APN_configtmp%d", index);
+ sc_cfg_get(cfg_name, cfg_value, sizeof(cfg_value));
+ pos_begin = cfg_value;
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->profile_name, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->apn_name, PROFILE_APN_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->apn_select, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->dial_num, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->ppp_auth_mode, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->ppp_username, PROFILE_APN_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->ppp_passwd, PROFILE_APN_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->pdp_type, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->pdp_select, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->pdp_addr, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->dns_mode, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->prefer_dns_manual, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->standby_dns_manual, PROFILE_MEMBER_LEN);
+
+
+ sprintf(ipv6_cfg_name, "ipv6_APN_configtmp%d", index);
+ sc_cfg_get(ipv6_cfg_name, ipv6_cfg_value, sizeof(ipv6_cfg_value));
+ ipv6_pos_begin = ipv6_cfg_value;
+ ipv6_pos_begin = split_str_by_sep(ipv6_pos_begin, "($)", ipv6profile->profile_name, PROFILE_MEMBER_LEN);
+ ipv6_pos_begin = split_str_by_sep(ipv6_pos_begin, "($)", ipv6profile->apn_name, PROFILE_APN_LEN);
+ ipv6_pos_begin = split_str_by_sep(ipv6_pos_begin, "($)", ipv6profile->apn_select, PROFILE_MEMBER_LEN);
+ ipv6_pos_begin = split_str_by_sep(ipv6_pos_begin, "($)", ipv6profile->dial_num, PROFILE_MEMBER_LEN);
+ ipv6_pos_begin = split_str_by_sep(ipv6_pos_begin, "($)", ipv6profile->ppp_auth_mode, PROFILE_MEMBER_LEN);
+ ipv6_pos_begin = split_str_by_sep(ipv6_pos_begin, "($)", ipv6profile->ppp_username, PROFILE_APN_LEN);
+ ipv6_pos_begin = split_str_by_sep(ipv6_pos_begin, "($)", ipv6profile->ppp_passwd, PROFILE_APN_LEN);
+ ipv6_pos_begin = split_str_by_sep(ipv6_pos_begin, "($)", ipv6profile->pdp_type, PROFILE_MEMBER_LEN);
+ ipv6_pos_begin = split_str_by_sep(ipv6_pos_begin, "($)", ipv6profile->pdp_select, PROFILE_MEMBER_LEN);
+ ipv6_pos_begin = split_str_by_sep(ipv6_pos_begin, "($)", ipv6profile->pdp_addr, PROFILE_MEMBER_LEN);
+ ipv6_pos_begin = split_str_by_sep(ipv6_pos_begin, "($)", ipv6profile->dns_mode, PROFILE_MEMBER_LEN);
+ ipv6_pos_begin = split_str_by_sep(ipv6_pos_begin, "($)", ipv6profile->prefer_dns_manual, PROFILE_MEMBER_LEN);
+ ipv6_pos_begin = split_str_by_sep(ipv6_pos_begin, "($)", ipv6profile->standby_dns_manual, PROFILE_MEMBER_LEN);
+
+
+ return;
+}
+
+
+
+void get_autoapn_profile(APN_PROFILE *profile)
+{
+ char cfg_name[PROFILE_MEMBER_LEN] = {0};
+ char cfg_value[APNCONFIG_MEMORY] = {0};
+ char *pos_begin = NULL;
+ char buf[NV_ITEM_STRING_LEN_20] = {0};
+
+ int auto_apn_index = 0;
+ slog(MISC_PRINT, SLOG_DEBUG, "get_autoapn_profile\n"); /*lint !e26*/
+
+ sc_cfg_get("auto_apn_index", buf, sizeof(buf));
+ auto_apn_index = atoi(buf);
+ slog(MISC_PRINT, SLOG_DEBUG, "auto_apn_index=%d\n", auto_apn_index); /*lint !e26*/
+ if (NULL == profile) {
+ return;
+ }
+
+ if (0 != auto_apn_index) {
+ sprintf(cfg_name, "apn_auto_config%d", auto_apn_index);
+ } else {
+ sprintf(cfg_name, "apn_auto_config");
+ }
+ slog(MISC_PRINT, SLOG_DEBUG, "cfg_name=%s\n", cfg_name); /*lint !e26*/
+
+ sc_cfg_get(cfg_name, cfg_value, sizeof(cfg_value));
+ pos_begin = cfg_value;
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->profile_name, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->apn_name, PROFILE_APN_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->apn_select, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->dial_num, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->ppp_auth_mode, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->ppp_username, PROFILE_APN_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->ppp_passwd, PROFILE_APN_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->pdp_type, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->pdp_select, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->pdp_addr, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->dns_mode, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->prefer_dns_manual, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile->standby_dns_manual, PROFILE_MEMBER_LEN);
+ return;
+}
+
+/******************************************************
+* Function: void set_apn_profile_by_index(int index, APN_PROFILE *profile)
+* Description: set a apn profile into config by index
+* Input: index:the index of apn profile which to set
+* profile:the struct of apn profile.
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+* 2010/11/26 V1.0 zyt create
+*******************************************************/
+void set_apn_profile_by_index(int index, APN_PROFILE *profile)
+{
+ char cfg_name[PROFILE_MEMBER_LEN] = {0};
+ char cfg_value[APNCONFIG_MEMORY] = {0};
+
+ if (NULL == profile) {
+ return;
+ }
+
+ sprintf(cfg_name, "APN_configtmp%d", index);
+ if (0 == strcmp(profile->pdp_type, "IPv6")) {
+ snprintf(cfg_value, APNCONFIG_MEMORY,
+ "%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)",
+ profile->profile_name,
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "");
+ } else {
+ snprintf(cfg_value, APNCONFIG_MEMORY,
+ "%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)",
+ profile->profile_name,
+ profile->apn_name,
+ profile->apn_select,
+ profile->dial_num,
+ profile->ppp_auth_mode,
+ profile->ppp_username,
+ profile->ppp_passwd,
+ profile->pdp_type,
+ profile->pdp_select,
+ profile->pdp_addr,
+ profile->dns_mode,
+ profile->prefer_dns_manual,
+ profile->standby_dns_manual);
+ }
+ sc_cfg_set(cfg_name, cfg_value);
+
+ return;
+}
+
+void set_ipv6_apn_profile_by_index(int index, IPV6_APN_PROFILE *profile)
+{
+ char cfg_name[PROFILE_MEMBER_LEN] = {0};
+ char cfg_value[APNCONFIG_MEMORY] = {0};
+
+ if (NULL == profile) {
+ return;
+ }
+
+ sprintf(cfg_name, "ipv6_APN_configtmp%d", index);
+ if (0 == strcmp(profile->pdp_type, "IP")) {
+ slog(MISC_PRINT, SLOG_DEBUG, "pdp_type=IP cpsnprintf "); /*lint !e26*/
+ snprintf(cfg_value, APNCONFIG_MEMORY,
+ "%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)",
+ profile->profile_name,
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "");
+ } else {
+ slog(MISC_PRINT, SLOG_DEBUG, "pdp_type=else cpsnprintf "); /*lint !e26*/
+ slog(MISC_PRINT, SLOG_DEBUG, "profile->profile_name=%s ", profile->profile_name); /*lint !e26*/
+ snprintf(cfg_value, APNCONFIG_MEMORY,
+ "%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)",
+ profile->profile_name,
+ profile->apn_name,
+ profile->apn_select,
+ profile->dial_num,
+ profile->ppp_auth_mode,
+ profile->ppp_username,
+ profile->ppp_passwd,
+ profile->pdp_type,
+ profile->pdp_select,
+ profile->pdp_addr,
+ profile->dns_mode,
+ profile->prefer_dns_manual,
+ profile->standby_dns_manual);
+ }
+ slog(MISC_PRINT, SLOG_DEBUG, "cfg_value=%s", cfg_value); /*lint !e26*/
+ sc_cfg_set(cfg_name, cfg_value);
+
+ return;
+}
+
+void set_ipv4v6_apn_profile_by_index(int index, APN_PROFILE *profile, IPV6_APN_PROFILE *ipv6profile)
+{
+ char cfg_name[PROFILE_MEMBER_LEN] = {0};
+ char cfg_value[APNCONFIG_MEMORY] = {0};
+
+ if (NULL == profile) {
+ return;
+ }
+
+ sprintf(cfg_name, "APN_configtmp%d", index);
+ snprintf(cfg_value, APNCONFIG_MEMORY,
+ "%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)",
+ profile->profile_name,
+ profile->apn_name,
+ profile->apn_select,
+ profile->dial_num,
+ profile->ppp_auth_mode,
+ profile->ppp_username,
+ profile->ppp_passwd,
+ profile->pdp_type,
+ profile->pdp_select,
+ profile->pdp_addr,
+ profile->dns_mode,
+ profile->prefer_dns_manual,
+ profile->standby_dns_manual);
+
+ sc_cfg_set(cfg_name, cfg_value);
+
+ memset(cfg_name, 0, sizeof(cfg_name));
+ memset(cfg_value, 0, sizeof(cfg_value));
+ sprintf(cfg_name, "ipv6_APN_configtmp%d", index);
+ snprintf(cfg_value, APNCONFIG_MEMORY,
+ "%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)",
+ ipv6profile->profile_name,
+ ipv6profile->apn_name,
+ ipv6profile->apn_select,
+ ipv6profile->dial_num,
+ ipv6profile->ppp_auth_mode,
+ ipv6profile->ppp_username,
+ ipv6profile->ppp_passwd,
+ ipv6profile->pdp_type,
+ ipv6profile->pdp_select,
+ ipv6profile->pdp_addr,
+ ipv6profile->dns_mode,
+ ipv6profile->prefer_dns_manual,
+ ipv6profile->standby_dns_manual);
+
+ sc_cfg_set(cfg_name, cfg_value);
+
+ return;
+}
+
+static char *split_str_by_sep(char *src, char *sep, char *dst, int len)
+{
+ char *pos_begin = NULL;
+ char *pos_end = NULL;
+
+ if (NULL == src || NULL == sep || NULL == dst || 0 == len) {
+ return NULL;
+ }
+
+ pos_begin = src;
+ pos_end = strstr(pos_begin, sep);
+
+ if (NULL == pos_end) {
+ return NULL;
+ }
+
+ if (len <= (pos_end - pos_begin)) {
+ return NULL;
+ }
+
+ strncpy(dst, pos_begin, pos_end - pos_begin);
+ pos_end += strlen(sep);
+ return pos_end;
+}
+
+void zte_mgmt_set_login_timemark()
+{
+ char login_timemark[NV_ITEM_STRING_LEN_20] = {0};
+ long now_timemark = time(0);
+
+ sprintf(login_timemark, "%ld", now_timemark);
+ zte_web_write(NV_USER_LOGIN_TIMEMARK, login_timemark);
+ slog(MISC_PRINT, SLOG_NORMAL,"[SNTP] [manual] timemark, user_login_timemark=%ld\n", now_timemark);
+}
+
+int manual_set_time()
+{
+ struct timeval tp;
+ time_t nowtime;
+ time_t SynBeforeTime = 0;
+ int ltime = 0, mtime = 0, ntime = 0;
+ char SynSystemTotal[16] = {0};
+ char SynPppTotal[16] = {0};
+ char SynSecond[16] = {0};
+ int year = 0, month = 0, day = 0;
+ int hour = 0, minute = 0, second = 0;
+ int days = 0;
+ int LeapYear = 0;
+ int CommonYear = 0;
+ int YearTotal = 0;
+ int count;
+ int flag = 0;
+ int i;
+ int ret = 0;
+ char buf[NV_ITEM_STRING_LEN_10] = {0};
+ char ppp_status[NV_ITEM_STRING_LEN_50] = {0};
+ struct tm timeToSet = {0};
+ int dataLen = 0;
+ sc_cfg_get("manual_time_year", buf, sizeof(buf));
+ year = atoi(buf);
+ if(year < 1970 || year > 2100)//for kw
+ {
+ return -1;
+ }
+
+ memset(&buf, 0, sizeof(buf));
+ sc_cfg_get("manual_time_month", buf, sizeof(buf));
+ month = atoi(buf);
+ if(month<1 || month>12)
+ {
+ month = 1;
+ }
+
+ memset(&buf, 0, sizeof(buf));
+ sc_cfg_get("manual_time_day", buf, sizeof(buf));
+ day = atoi(buf);
+ if(day<1 || day>31)
+ {
+ day = 1;
+ }
+
+ memset(&buf, 0, sizeof(buf));
+ sc_cfg_get("manual_time_hour", buf, sizeof(buf));
+ hour = atoi(buf);
+ if(hour<0 || hour>24)
+ {
+ hour = 0;
+ }
+
+ memset(&buf, 0, sizeof(buf));
+ sc_cfg_get("manual_time_minute", buf, sizeof(buf));
+ minute = atoi(buf);
+ if(minute<0 || minute>60)
+ {
+ minute = 0;
+ }
+
+ memset(&buf, 0, sizeof(buf));
+ sc_cfg_get("manual_time_second", buf, sizeof(buf));
+ second = atoi(buf);
+ if(second<0 || second>60)
+ {
+ second = 0;
+ }
+
+ YearTotal = year - 1970;
+ for (count = 0; count < YearTotal; count++) {
+ i = 1971 + count;
+ if (i % 4 == 0 && i % 100 != 0) {
+ if (YearTotal == count + 1) {
+ CommonYear++;
+ } else {
+ LeapYear++;
+ }
+ continue;
+ } else if (i % 400 == 0) {
+ if (YearTotal == count + 1) {
+ CommonYear++;
+ } else {
+ LeapYear++;
+ }
+ continue;
+ } else {
+ CommonYear++;
+ }
+ }
+
+ /****************flag==1±íʾµ±ÄêΪÈòÄê*************************/
+ if (year % 4 == 0 && year % 100 != 0) {
+ flag = 1;
+ } else if (year % 400 == 0) {
+ flag = 1;
+ } else {
+ flag = 0;
+ }
+
+ switch (month - 1) {
+ case 0:
+ days = day;
+ break;
+ case 1:
+ days = 31 + day;
+ break;
+ case 2:
+ days = 31 + 28 + day;
+ break;
+ case 3:
+ days = 31 + 28 + 31 + day;
+ break;
+ case 4:
+ days = 31 + 28 + 31 + 30 + day;
+ break;
+ case 5:
+ days = 31 + 28 + 31 + 30 + 31 + day;
+ break;
+ case 6:
+ days = 31 + 28 + 31 + 30 + 31 + 30 + day;
+ break;
+ case 7:
+ days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + day;
+ break;
+ case 8:
+ days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + day;
+ break;
+ case 9:
+ days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + day;
+ break;
+ case 10:
+ days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + day;
+ break;
+ case 11:
+ days = 31 + 28 + 31 + 30 + 31 + 30 + 31 + 31 + 30 + 31 + 30 + day;
+ break;
+ }
+ if ((month - 1) >= 2 && 1 == flag) {
+ days++;
+ }
+
+
+ nowtime = COMMONYEARSEC * CommonYear + LEAPYEARSEC * LeapYear + (days - 1) * DAYSEC + hour * 3600 + minute * 60 + second;
+ tp.tv_usec = 0;
+ tp.tv_sec = nowtime;
+
+ time(&SynBeforeTime);
+ slog(MISC_PRINT, SLOG_DEBUG, "Now time is %d", SynBeforeTime); /*lint !e26*/
+
+ sc_cfg_get("syn_after_time", SynSecond, sizeof(SynSecond));
+ sscanf(SynSecond, "%d", <ime);
+ if(ltime < 0 || ltime > INT_MAX-1) // kw 3
+ {
+ ltime = 0;
+ }
+
+ sc_cfg_get("syn_system_total", SynSystemTotal, sizeof(SynSystemTotal));
+
+ sscanf(SynSystemTotal, "%d", &mtime);
+ if(mtime < 0 || mtime > INT_MAX-1) // kw 3
+ {
+ mtime = 0;
+ }
+
+ if (0 != mtime) {
+ mtime += (SynBeforeTime - ltime);
+ } else {
+ mtime = (SynBeforeTime - JAN_2000);
+ }
+ sprintf(SynSystemTotal, "%d", mtime);
+ sc_cfg_set("syn_system_total", SynSystemTotal);
+
+ sc_cfg_get("ppp_status", ppp_status, sizeof(ppp_status));
+ if ((0 == strcmp(ppp_status, "ppp_connected")) || (0 == strcmp(ppp_status, "ipv6_connected")) || (0 == strcmp(ppp_status, "ipv4_ipv6_connected"))) {
+ sc_cfg_get("syn_ppp_total", SynPppTotal, sizeof(SynPppTotal));
+
+ sscanf(SynPppTotal, "%d", &mtime);
+ if(mtime < 0 || mtime > INT_MAX-1) // kw 3
+ {
+ mtime = 0;
+ }
+ if (0 != mtime) {
+ mtime += (SynBeforeTime - ltime);
+ } else {
+ memset(&SynSecond, 0, sizeof(SynSecond));
+ sc_cfg_get("ppp_start_time", SynSecond, sizeof(SynSecond));
+
+ sscanf(SynSecond, "%d", &ntime);
+ if(ntime < 0 || ntime > INT_MAX-1) // kw 3
+ {
+ ntime = 0;
+ }
+
+ mtime = SynBeforeTime - ntime;
+ }
+ sprintf(SynPppTotal, "%d", mtime);
+ sc_cfg_set("syn_ppp_total", SynPppTotal);
+ sc_cfg_set("syn_order_flag", "ppp_on");
+ } else {
+ sc_cfg_set("syn_order_flag", "ppp_off");
+ sc_cfg_set("syn_ppp_total", "0");
+ }
+
+ timeToSet.tm_year = year-1900;
+ timeToSet.tm_mon = month-1;
+ timeToSet.tm_mday = day;
+ timeToSet.tm_hour = hour;
+ timeToSet.tm_min = minute;
+ timeToSet.tm_sec = second;
+ dataLen = sizeof(struct tm);
+ slog(MISC_PRINT, SLOG_DEBUG, "SetTime:year:%d, mon:%d, day:%d, hour:%d, min:%d, sec:%d \n",
+ timeToSet.tm_year, timeToSet.tm_mon, timeToSet.tm_mday,
+ timeToSet.tm_hour, timeToSet.tm_min, timeToSet.tm_sec );
+ ret = ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_SNTP, MSG_CMD_SNTP_SET_TIME,
+ dataLen, &timeToSet, 0);
+ if (0 != ret) {
+ slog(MISC_PRINT, SLOG_ERR, "send MSG_CMD_SNTP_SET_TIME to sntp fail!");
+ }
+
+ ret = ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_AT_CTL, MSG_CMD_SYCTIME_SET_REQ, 0, NULL, 0);
+ if (0 != ret) {
+ slog(MISC_PRINT, SLOG_ERR, "sync time to cp fail!");
+ }
+
+ memset(&buf, 0, sizeof(buf));
+ sc_cfg_get("outdate_delete", buf, sizeof(buf));
+ if (0 == strcmp(buf, "1")) {
+ ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_SMS, MSG_CMD_SMS_OUTDATE_CHECK, 0, NULL, 0);
+ }
+
+ sprintf(SynSecond, "%d", (int)(time((time_t *)NULL)));
+ sc_cfg_set("syn_after_time", SynSecond);
+ //sc_cfg_set("systime_mode", "manual");
+ sc_cfg_set("need_clear_traffic_data", "yes");
+ zte_mgmt_set_login_timemark();
+ return 0;
+}
+char * timei2s(int itime)
+{
+ static char buf[64];
+ int hours, min, sec;
+ memset(buf, 0, 64);
+
+ hours = itime / 3600;
+ min = (itime / 60) % 60;
+ sec = itime % 60;
+
+ sprintf(buf, "%d:%02d:%02d", hours, min, sec);
+ return buf ;
+}
+void timeen2ch(char *time)
+{
+ char timetmp[128] = {0};
+ char year[5] = {0};
+ char month[4] = {0};
+ char day[3] = {0};
+ char weekday[4] = {0};
+ char nowtime[16] = {0};
+ char hour[4] = {0};
+ char second[4] = {0};
+ char minute[4] = {0};
+ //int imonth;
+ char imonth[4] = {0};
+ strncpy(timetmp, time,sizeof(timetmp)-1);
+ char *loc = timetmp;
+ char *tmp = NULL;
+ memset(time, 0, 128);
+ char str_buf[10] = {0};
+ int temp;
+ int month_temp;
+
+ while (*loc == ' ') {
+ loc++;
+ }
+ tmp = strtok(loc, " ");
+ if(tmp == NULL) return;
+ strncpy(weekday, tmp, sizeof(weekday)-1);
+ tmp = strtok(NULL, " ");
+ if(tmp == NULL) return;
+ strncpy(month, tmp, sizeof(month)-1);
+ tmp = strtok(NULL, " ");
+ if(tmp == NULL) return;
+ strncpy(day, tmp, sizeof(day)-1);
+ slog(MISC_PRINT, SLOG_DEBUG, "strlen(tmp)=%d", strlen(tmp)); /*lint !e26*/
+ if (strlen(tmp) == 1) {
+ temp = atoi(tmp);
+ slog(MISC_PRINT, SLOG_DEBUG, "====temp=%d", temp); /*lint !e26*/
+ if(temp < 10 && temp > 0)
+ snprintf(day,sizeof(day), "0%d", temp);
+ slog(MISC_PRINT, SLOG_DEBUG, "====day=%s", day); /*lint !e26*/
+ } else {
+ strncpy(day, tmp,sizeof(day)-1);
+ }
+ tmp = strtok(NULL, " ");
+ if(tmp == NULL) return;
+ strncpy(nowtime, tmp, sizeof(nowtime)-1);
+ tmp = strtok(NULL, " ");
+ if(tmp == NULL) return;
+ strncpy(year, tmp, sizeof(year)-1);
+ if (0 == strcmp("Jan", month)) {
+ strncpy(imonth, "01", sizeof(imonth)-1);
+ } else if (0 == strcmp("Feb", month)) {
+ strncpy(imonth, "02", sizeof(imonth)-1);
+ } else if (0 == strcmp("Mar", month)) {
+ strncpy(imonth, "03", sizeof(imonth)-1);
+ } else if (0 == strcmp("Apr", month)) {
+ strncpy(imonth, "04", sizeof(imonth)-1);
+ } else if (0 == strcmp("May", month)) {
+ strncpy(imonth, "05", sizeof(imonth)-1);
+ } else if (0 == strcmp("Jun", month)) {
+ strncpy(imonth, "06", sizeof(imonth)-1);
+ } else if (0 == strcmp("Jul", month)) {
+ strncpy(imonth, "07", sizeof(imonth)-1);
+ } else if (0 == strcmp("Aug", month)) {
+ strncpy(imonth, "08", sizeof(imonth)-1);
+ } else if (0 == strcmp("Sep", month)) {
+ strncpy(imonth, "09", sizeof(imonth)-1);
+ } else if (0 == strcmp("Oct", month)) {
+ strncpy(imonth, "10", sizeof(imonth)-1);
+ } else if (0 == strcmp("Nov", month)) {
+ strncpy(imonth, "11", sizeof(imonth)-1);
+ } else if (0 == strcmp("Dec", month)) {
+ strncpy(imonth, "12", sizeof(imonth)-1);
+ }
+ sprintf(time, "%s-%s-%s %s", year, imonth, day, nowtime);
+ slog(MISC_PRINT, SLOG_DEBUG, "====nowtime=%s", nowtime); /*lint !e26*/
+
+
+ tmp = strtok(nowtime, ":");
+ if(tmp == NULL) return;
+ strncpy(hour, tmp,sizeof(hour)-1);
+ slog(MISC_PRINT, SLOG_DEBUG, "====hour=%s", hour); /*lint !e26*/
+ tmp = strtok(NULL, ":");
+ if(tmp == NULL) return;
+ strncpy(minute, tmp,sizeof(minute)-1);
+ slog(MISC_PRINT, SLOG_DEBUG, "====minute=%s", minute); /*lint !e26*/
+ tmp = strtok(NULL, ":");
+ if(tmp == NULL) return;
+ strncpy(second, tmp,sizeof(second)-1);
+ slog(MISC_PRINT, SLOG_DEBUG, "====second=%s", second); /*lint !e26*/
+ sc_cfg_set("sntp_hour", hour);
+ sc_cfg_set("sntp_minute", minute);
+ sc_cfg_set("sntp_second", second);
+
+ sc_cfg_set("sntp_year", year);
+ sc_cfg_set("sntp_month", imonth);
+ sc_cfg_set("sntp_day", day);
+}
+void datastatic(char *rec, char *send, char *onlinetime, char *runtime, char *localtime)
+{
+ char Receive_Amount[20] = {0};
+ char Transmit_Amount[20] = {0};
+ char syn_system_total[20] = {0};
+ char syn_after_time[20] = {0};
+ char syn_ppp_total[20] = {0};
+ char ppp_start_time[20] = {0};
+ char timestr[128] = {0};
+ int mtime;
+ int ltime;
+ int ntime;
+ int otime;
+ time_t timenow;
+ char ppp_status[NV_ITEM_STRING_LEN_50] = {0};
+ char buf[NV_ITEM_STRING_LEN_20] = {0};
+
+ sc_cfg_get("syn_system_total", syn_system_total, sizeof(syn_system_total));
+
+ sscanf(syn_system_total, "%d", <ime);
+ if(ltime < 0 || ltime > INT_MAX-1) // kw 3
+ {
+ ltime = 0;
+ }
+ sc_cfg_get("syn_after_time", syn_after_time, sizeof(syn_after_time));
+
+ sscanf(syn_after_time, "%d", &ntime);
+ if(ntime < 0 || ntime > INT_MAX-1) // kw 3
+ {
+ ntime = 0;
+ }
+ sc_cfg_get("ppp_start_time", ppp_start_time, sizeof(ppp_start_time));
+
+ sscanf(ppp_start_time, "%d", &otime);
+ if(otime < 0 || otime > INT_MAX-1) // kw 3
+ {
+ otime = 0;
+ }
+
+ sc_cfg_get("ppp_status", ppp_status, sizeof(ppp_status));
+ if ((0 != strcmp(ppp_status, "ppp_connected")) && (0 != strcmp(ppp_status, "ipv6_connected")) && (0 != strcmp(ppp_status, "ipv4_ipv6_connected"))) {
+ sc_cfg_set("syn_ppp_total", "0");
+ }
+
+ sc_cfg_get("syn_ppp_total", syn_ppp_total, sizeof(syn_ppp_total));
+
+ sscanf(syn_ppp_total, "%d", &mtime);
+ if(mtime < 0 || mtime > INT_MAX-1) // kw 3
+ {
+ mtime = 0;
+ }
+
+ time(&timenow);
+ if (ntime == 0) {
+ strncpy(onlinetime, timei2s(timenow - otime), 63);
+ strncpy(runtime, timei2s(timenow - JAN_2000), 63);
+ } else {
+ sc_cfg_get("syn_order_flag", buf, sizeof(buf));
+ if (0 == strcmp(buf, "ppp_on")) {
+ strncpy(onlinetime, timei2s(timenow - ntime + mtime), 63);
+ } else {
+ strncpy(onlinetime, timei2s(timenow - otime), 63);
+ }
+ strncpy(runtime, timei2s(timenow - ntime + ltime), 63);
+ }
+ slog(MISC_PRINT, SLOG_DEBUG, "----runtime=%s", runtime); /*lint !e26*/
+ strncpy(timestr, ctime(&timenow),sizeof(timestr)-1);
+ slog(MISC_PRINT, SLOG_DEBUG, "----timestr=%s", timestr); /*lint !e26*/
+ timeen2ch(timestr);
+ strncpy(localtime, timestr,sizeof(localtime)-1);
+ slog(MISC_PRINT, SLOG_DEBUG, "----localtime=%s", localtime); /*lint !e26*/
+
+}
+
+void zte_goform_sntp_getdatastatic_process(webs_t wp)
+{
+ char receive[30], send[30], onlinetime[64], runtime[64], localtime[128];
+
+ memset(receive, 0, 30);
+ memset(send, 0, 30);
+ memset(onlinetime, 0, 64);
+ memset(runtime, 0, 64);
+ memset(localtime, 0, 128);
+
+ datastatic(receive, send, onlinetime, runtime, localtime);
+
+ websWrite(wp, T("{\"receive\":\"%s\",\"send\":\"%s\",\"onlinetime\":\"%s\",\"runtime\":\"%s\",\"localtime\":\"%s\"}"), receive, send, onlinetime, runtime, localtime);
+}
+
+
+typedef struct LOG_FILES {
+ char filename[64];
+} LOG_FILES;
+
+int start_diaglog()
+{
+ int ret = 0;
+ slog(MISC_PRINT, SLOG_NORMAL, "start_diaglog"); /*lint !e26*/
+ system("/sbin/diaglog &");
+ return ret;
+}
+
+int stop_diaglog()
+{
+ int ret = 0;
+ slog(MISC_PRINT, SLOG_NORMAL, "get killall SIGINT"); /*lint !e26*/
+ system("killall -9 diaglog");//SIGINT=2
+ return ret;
+}
+#if 0
+int del_diaglog(char *fllename)
+{
+ slog(MISC_PRINT, SLOG_NORMAL, "del log name=%s", fllename); /*lint !e26*/
+ int ret = 0;
+ char cmd[128];
+ sprintf(cmd, "rm %s", fllename);
+ system(cmd);
+ return ret;
+}
+#endif
+
+int getDiaglogFile(LOG_FILES *files, int n_files)
+{
+ char ext[] = ".dlf";
+ int i = 0;
+
+ DIR *dp;
+ struct dirent *entry;
+
+ dp = opendir(DIAGLOG_DATA_PATH);
+ if (dp == NULL) {
+ slog(MISC_PRINT, SLOG_ERR, "dp==NULL");
+ return 0;
+ }
+
+ i = 0;
+ while ((entry = readdir(dp)) != NULL && (i < n_files)) {
+ {
+ int len = strlen(entry->d_name);
+ if ((len > strlen(ext)) && !strcmp(entry->d_name + len - strlen(ext), ext)) { //*.dlf *.zm
+ strncpy(files[i].filename, entry->d_name, sizeof(files[i].filename)-1);
+ slog(MISC_PRINT, SLOG_DEBUG, "entry->d_name=%s", entry->d_name);
+ i++;
+ }
+ }
+ }
+ closedir(dp);
+
+ return i;
+
+}
+
+
+void getdialog_url(int eid, webs_t wp, int argc, char_t **argv)
+{
+ char filename[128] = {0};
+ LOG_FILES files[10];
+ int n, i;
+ char *p = filename;
+ n = getDiaglogFile(files, 10);
+ i = 0;
+ if (n > 0) {
+ while (i < n) {
+ slog(MISC_PRINT, SLOG_DEBUG, "i=%d", i); /*lint !e26*/
+ strcpy(p, files[i].filename);
+ p += strlen(files[i].filename);
+ *p = ';';
+ p++;
+ slog(MISC_PRINT, SLOG_DEBUG, "filename=%s", files[i].filename); /*lint !e26*/
+ i++;
+ }
+ websWrite(wp, T(filename));
+ } else {
+ websWrite(wp, T(""));
+ }
+}
+
+/******************************************************
+* Function: zte_fota_get_upgrade_result
+* Description: get fota upgrade result
+* Input: http request info
+* Output:
+* Return:
+* Others:
+* Modify Date Version Author Modification
+* 2013/03/14 V1.0 chenyi create
+*******************************************************/
+void zte_fota_get_upgrade_result(webs_t wp)
+{
+ zte_topsw_state_e_type nv_result = ZTE_NVIO_MAX;
+
+ char nv_upgrade_result[NV_ITEM_STRING_LEN_50] = {0};
+
+ nv_result = zte_web_read(NV_FOTA_UPGRADE_RESULT, nv_upgrade_result);
+ if (ZTE_NVIO_DONE != nv_result) {
+ slog(MISC_PRINT, SLOG_ERR,"read nv [%s] fail.\n", NV_FOTA_UPGRADE_RESULT);
+ }
+
+ web_feedback_header(wp);
+ (void)websWrite(wp, T("{\"%s\":\"%s\"}"), FOTA_UPGRADE_RESULT, nv_upgrade_result);
+
+ if ((0 == strcmp("success", nv_upgrade_result)) || (0 == strcmp("fail", nv_upgrade_result))) {
+ (void)zte_web_write(NV_FOTA_UPGRADE_RESULT, ""); //reset
+
+ // ÖØÖÃNVºó±£´æ¸ÃNV²ÎÊý£¬±ÜÃâÒò¿ìËÙÖØÆô£¬NVÐÂֵδ±£´æµ¼Öµĸüнá¹ûÖØ¸´Éϱ¨ÎÊÌâ
+ //sc_cfg_save();
+ slog(MISC_PRINT, SLOG_ERR,"reset nv [%s]. nv_upgrade_result:%s\n", NV_FOTA_UPGRADE_RESULT, nv_upgrade_result);
+ }
+}
+
+#if 0
+/******************************************************
+* Function: zte_fota_get_dp_pack_info
+* Description: get fota dp info
+* Input: http request info
+* Output:
+* Return:
+* Others:
+* Modify Date Version Author Modification
+* 2013/01/06 V1.0 chenyi create
+*******************************************************/
+void zte_fota_get_dp_pack_info(webs_t wp)
+{
+ char dp_total_size[NV_ITEM_STRING_LEN_50] = {0};
+ char dp_download_size[NV_ITEM_STRING_LEN_50] = {0};
+
+ //get dp pack info
+ (void)zte_web_read(NV_FOTA_PKG_TOTAL_SIZE, dp_total_size);
+ (void)zte_web_read(NV_FOTA_PKG_DL_SIZE, dp_download_size);
+
+ web_feedback_header(wp);
+ (void)websWrite(wp, T("{\"%s\":\"%s\",\"%s\":\"%s\"}"), \
+ NV_FOTA_PKG_TOTAL_SIZE, dp_total_size, NV_FOTA_PKG_DL_SIZE, dp_download_size);
+}
+#endif
+/**********************************************************************
+* Function: zte_fota_update
+* Description: send msg to fota update module
+* Input: wp:the web para;
+* Output:
+* Return:
+* Others: add from uFi
+* Modify Date Version Author Modification
+* -----------------------------------------------
+*
+**********************************************************************/
+int zte_fota_SendMsg2DM(int cmd)
+{
+ slog(MISC_PRINT, SLOG_NORMAL,"goahead send cmd=%d to fota\n", cmd);
+ return ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_DM_WEBUI_AT, cmd, 0, NULL, 0);
+}
+
+void zte_fota_update(webs_t wp)
+{
+ slog(MISC_PRINT, SLOG_NORMAL, T("UFIx User check new version!\n"));
+ char *update_action = NULL;
+ zte_topsw_state_e_type nv_result = ZTE_NVIO_MAX;
+ char new_version_state[NV_ITEM_STRING_LEN_150] = {0};
+ BOOL new_state_version_check = FALSE;
+ int iDlPara = -1;
+
+ if (NULL == wp) {
+ return;
+ }
+
+ update_action = websGetVar(wp, T("select_op"), T(""));
+ slog(MISC_PRINT, SLOG_DEBUG,"websGetVar FOTA upgrade action[%s].\n", update_action);
+
+ if ('\0' == *update_action) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+
+ //ÓëdeviceUiµÄ»¥³â±£»¤´¦Àí
+ zte_web_read(NV_FOTA_NEW_VERSION_STATE, new_version_state);
+
+ if ((0 == strcmp(update_action, FOTA_ACTION_CONFIRM_DOWNLOAD)) || (0 == strcmp(update_action, FOTA_ACTION_CANCEL_DOWNLOAD))) {
+ if ((0 == strcmp(new_version_state, HAS_OPTIONAL)) || (0 == strcmp(new_version_state, HAS_CRITICAL))) {
+ new_state_version_check = TRUE;
+ }
+ if (!new_state_version_check) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+ }
+
+ if (0 == strcmp(update_action, FOTA_ACTION_CONFIRM_DOWNLOAD)) {
+ zte_web_write(NV_FOTA_UPGRADE_SELECTOR, "accept");
+ //zte_web_write(NV_FOTA_NEED_USER_CONFIRM,"0");
+ slog(MISC_PRINT, SLOG_DEBUG,"web :zte_fota_update. update_action = FOTA_ACTION_CONFIRM_DOWNLOAD, set NV_FOTA_UPGRADE_SELECTOR accept!\n");
+ //zte_fota_SendMsg2DM(MSG_CMD_FOTA_WEBUI_START_DOWNLOAD);
+ //ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_DM_WEBUI_AT,MSG_CMD_FOTA_WEBUI_START_DOWNLOAD, 2, "1", 0);
+ iDlPara = 1;
+ ipc_send_message(MODULE_ID_AT_CTL, MODULE_ID_DM_WEBUI_AT, MSG_CMD_FOTADL_REQ, sizeof(iDlPara), (UCHAR *)(&iDlPara), 0);
+ } else if (0 == strcmp(update_action, FOTA_ACTION_CANCEL_DOWNLOAD)) {
+ (void)zte_web_write(NV_FOTA_UPGRADE_SELECTOR, "cancel");
+ zte_web_write(NV_FOTA_NEW_VERSION_STATE, IDLE);
+ zte_web_write(NV_FOTA_CURR_UPGRADE_STATE, IDLE);
+
+ slog(MISC_PRINT, SLOG_DEBUG,"web :zte_fota_update. update_action = FOTA_ACTION_CANCEL_DOWNLOAD, set NV_FOTA_UPGRADE_SELECTOR cancel!\n");
+ zte_write_result_to_web(wp, SUCCESS);
+ return; //no need to send msg to ota module
+ } else if (0 == strcmp(update_action, "check")) {
+ slog(MISC_PRINT, SLOG_DEBUG,"goahead :zte_fota_update. begin to check!!\n");
+ zte_fota_SendMsg2DM(MSG_CMD_FOTA_WEBUI_START_FOTA);
+ }
+
+ zte_write_result_to_web(wp, SUCCESS);
+}
+
+/**********************************************************************
+* Function: zte_fota_settings
+* Description: to set fota settings
+* Input: wp:the web para;dm_nextpollingtime;dm_pollingcycle;pollingswitch;
+* Output:
+* Return:
+* Others: add from uFi
+* Modify Date Version Author Modification
+* -----------------------------------------------
+*
+**********************************************************************/
+void zte_fota_settings(webs_t wp)
+{
+ char_t *updateMode = NULL;
+ char_t *allowRoamingUpdate = NULL;
+ zte_topsw_state_e_type status = ZTE_NVIO_MAX;
+
+ if (NULL == wp) {
+ return;
+ }
+
+ updateMode = websGetVar(wp, T("UpgMode"), T(""));
+ allowRoamingUpdate = websGetVar(wp, T("UpgRoamPermission"), T(""));
+
+ slog(MISC_PRINT, SLOG_DEBUG,"zte_fota_settings web para:[updateMode] is [%s].\n", updateMode);
+ slog(MISC_PRINT, SLOG_DEBUG,"zte_fota_settings web para:[allowRoamingUpdate] is [%s].\n", allowRoamingUpdate);
+
+ if ('\0' == (*updateMode)) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ status = zte_web_write("fota_allowRoamingUpdate", allowRoamingUpdate);
+ if (ZTE_NVIO_DONE != status) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+
+ status = zte_web_write("fota_updateMode", updateMode);
+ if (ZTE_NVIO_DONE != status) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+ zte_fota_SendMsg2DM(MSG_CMD_FOTA_WEBUI_CHANGE_PARAMETER);
+ zte_write_result_to_web(wp, SUCCESS);
+}
+
+#if 0
+
+/**********************************************************************
+* Function: zte_get_fota_settings
+* Description: to get fota settings
+* Input: wp:the web para;
+* Output:
+* Return:
+* Others: add from uFi
+* Modify Date Version Author Modification
+* -----------------------------------------------
+*
+**********************************************************************/
+void zte_get_fota_settings(webs_t wp)
+{
+ zte_topsw_state_e_type status = ZTE_NVIO_MAX;
+
+ char_t updateMode[NV_ITEM_STRING_LEN_20] = {0};
+ char_t updateIntervalDay[NV_ITEM_STRING_LEN_20] = {0};
+ char_t allowRoamingUpdate[NV_ITEM_STRING_LEN_20] = {0};
+
+ status = zte_web_read("fota_allowRoamingUpdate", allowRoamingUpdate);
+ if (ZTE_NVIO_DONE != status) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ status = zte_web_read("fota_updateIntervalDay", updateIntervalDay);
+ if (ZTE_NVIO_DONE != status) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ status = zte_web_read("fota_updateMode", updateMode);
+ if (ZTE_NVIO_DONE != status) {
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+
+ WEBLOG("zte_get_fota_settings:[updateMode] is [%s].\n", updateMode);
+ WEBLOG("zte_get_fota_settings:[updateIntervalDay] is [%s].\n", updateIntervalDay);
+ WEBLOG("zte_get_fota_settings:[allowRoamingUpdate] is [%s].\n", allowRoamingUpdate);
+
+ web_feedback_header(wp);
+ zte_rest_cmd_write_head(wp);
+
+ if ('\0' != *updateMode)
+ zte_rest_cmd_write(wp, "UpgMode", updateMode, 1);
+ else
+ zte_rest_cmd_write(wp, "UpgMode", "0", 1);
+
+ if ('\0' != *updateIntervalDay)
+ zte_rest_cmd_write(wp, "UpgIntervalDay", updateIntervalDay, 1);
+ else
+ zte_rest_cmd_write(wp, "UpgIntervalDay", "1", 1);
+
+ if ('\0' != *allowRoamingUpdate)
+ zte_rest_cmd_write(wp, "UpgRoamPermission", allowRoamingUpdate, 0);
+ else
+ zte_rest_cmd_write(wp, "UpgRoamPermission", "0", 0);
+
+ zte_rest_cmd_write_foot(wp);
+}
+
+
+/******************************************************
+* Function: zte_fota_get_update_info
+* Description: get fota update info
+* Input: http request info
+* Output:
+* Return:
+* Others:
+* Modify Date Version Author Modification
+* 2013/01/06 V1.0 chenyi create
+*******************************************************/
+void zte_fota_get_update_info(webs_t wp)
+{
+ char version[NV_ITEM_STRING_LEN_64 + 1] = {0};
+
+ (void)zte_web_read(NV_FOTA_VERSION, version);
+
+ web_feedback_header(wp);
+ (void)websWrite(wp, T("{\"%s\":\"%s\"}"), FOTA_UPDATE_VERSION, version);
+}
+#endif
+
+void zte_wan_lock_frequency_process(webs_t wp)
+{
+ slog(MISC_PRINT, SLOG_NORMAL, "zte_wan_lock_frequency_process coming");
+ CHAR *actionlte = NULL;
+ CHAR *uarfcnlte = NULL;
+ CHAR *cellParaIdlte = NULL;
+
+ /* get value from web page */
+ actionlte = websGetVar(wp, T("actionlte"), T(""));
+ uarfcnlte = websGetVar(wp, T("uarfcnlte"), T(""));
+ cellParaIdlte = websGetVar(wp, T("cellParaIdlte"), T(""));
+
+ sc_cfg_set("actionlte", actionlte);
+ sc_cfg_set("uarfcnlte", uarfcnlte);
+ sc_cfg_set("cellParaIdlte", cellParaIdlte);
+ ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_AT_CTL, MSG_CMD_CELL_LOCK_REQ, 0, NULL, 0);
+ zte_write_result_to_web(wp, SUCCESS);
+}
+
+void zte_setLastLoginTime()
+{
+ int curr_time = 0;
+ char login_time[LOGIN_RECORD_TIME] = {0};
+ curr_time = zte_web_getCurrentTime();
+ sprintf(login_time, "%d", curr_time);
+ (void)zte_web_write(NV_LAST_LOGIN_TIME, login_time);
+}
+
+int zte_checkLoginTime()
+{
+ char last_record_time[LOGIN_RECORD_TIME] = {0};
+ int last_record_time_num = 0;
+ int curr_record_time_num = 0;
+ int lock_time = 0;
+ zte_web_read(NV_LAST_LOGIN_TIME, last_record_time);
+ last_record_time_num = atoi(last_record_time);
+ if(last_record_time_num < 0 || last_record_time_num > INT_MAX-1) // kw 3
+ {
+ last_record_time_num = 0;
+ }
+
+ curr_record_time_num = zte_web_getCurrentTime();
+ lock_time = curr_record_time_num - last_record_time_num;
+ if (lock_time < LOGIN_FAIL_LOCK_TIME) {
+ return -1;
+ } else {
+ return 1;
+ }
+}
+
+void zte_reduct_login_times()
+{
+ char psw_fail_num_str[12] = {0};
+ int login_times = 0;
+ zte_web_read("psw_fail_num_str", psw_fail_num_str);
+ login_times = atoi(psw_fail_num_str);
+ if(login_times < 0 || login_times > INT_MAX-1) // kw 3
+ {
+ login_times = 0;
+ }
+
+ login_times--;
+ sprintf(psw_fail_num_str, "%d", login_times);
+ (void)zte_web_write("psw_fail_num_str", psw_fail_num_str);
+}
+/******************************************************
+* Function: void zte_password_check(webs_t wp)
+* Description: password check when login
+* Input: HTTP page info
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+*
+*******************************************************/
+psw_check_result_type_t zte_password_check(webs_t wp, char* psw)
+{
+ int psw_len = 0;
+ int psw_fail_num = 0;
+ char psw_fail_num_str[10] = {0};
+ int check_lock = 0;
+
+ if (NULL == psw) {
+ slog(MISC_PRINT, SLOG_DEBUG, "zte_mgmt_login: psw is empty.");
+ return PSW_EMPTY;
+ }
+
+ slog(MISC_PRINT, SLOG_DEBUG, "zte_mgmt_login:psw:%s", psw);
+ //don't foget add the nv psw_fail_num_str
+ zte_web_read("psw_fail_num_str", psw_fail_num_str);
+ psw_fail_num = atoi(psw_fail_num_str);
+ psw_len = strlen(psw);
+
+ if (0 == psw_len) {
+ slog(MISC_PRINT, SLOG_ERR, "zte_mgmt_login: psw is empty.");
+ return PSW_EMPTY;
+ }
+
+ if (psw_fail_num <= 0) {
+ check_lock = zte_checkLoginTime(); // check the current time if it is time out
+ if (check_lock < 0) {
+ slog(MISC_PRINT, SLOG_ERR, "zte_mgmt_login: psw number use out.");
+ return PSW_TIME_OUT;
+// } else if (check_lock > 0) { // kw 3
+ }else{
+ slog(MISC_PRINT, SLOG_DEBUG, "zte_mgmt_login: login time out, can login.");
+ (void)zte_web_write("psw_fail_num_str", LOGIN_FAIL_TIMES);
+ }
+ }
+ zte_setLastLoginTime(); //record current time to nv
+ if (LOGIN_PSW_MIN_LEN > psw_len || LOGIN_PSW_MAX_LEN < psw_len) {
+ slog(MISC_PRINT, SLOG_ERR, "zte_mgmt_login: psw is too long.");
+ return PSW_TOO_LONG;
+ } else {
+ return PSW_OK;
+ }
+}
+
+void zte_get_ddns_status(webs_t wp)
+{
+ char * line = NULL;
+ size_t len = 0;
+ int lsize = 0; //klocwork
+ char path_conf[100] = {0};
+ char path_file[500] = {0};
+ sc_cfg_get("path_conf", path_conf, sizeof(path_conf));
+ sprintf(path_file, "%s/inadyn.status", path_conf);
+ FILE *proc_file = fopen(path_file, "r");
+
+ if (proc_file == NULL) {
+ //websWrite(wp, T("4"));
+ websWrite(wp, T("{\"%s\":\"%s\"}"), "getddns_status", "4");
+ return;
+ }
+ if ((lsize = getline(&line, &len, proc_file)) != -1 && line) {
+ if (strstr(line, "RC_IP_INVALID_REMOTE_ADDR")) {
+ //websWrite(wp, T("2"));
+ websWrite(wp, T("{\"%s\":\"%s\"}"), "getddns_status", "2");
+ } else if (strstr(line, "RC_DYNDNS_RSP_NOTOK")) {
+ //websWrite(wp, T("1"));
+ websWrite(wp, T("{\"%s\":\"%s\"}"), "getddns_status", "1");
+ } else if (strstr(line, "RC_OK")) {
+ //websWrite(wp, T("0"));
+ websWrite(wp, T("{\"%s\":\"%s\"}"), "getddns_status", "0");
+ } else if (strstr(line, "RC_REGISTERING")) {
+ //websWrite(wp, T("3"));
+ websWrite(wp, T("{\"%s\":\"%s\"}"), "getddns_status", "3");
+ } else {
+ //websWrite(wp, T("5"));
+ websWrite(wp, T("{\"%s\":\"%s\"}"), "getddns_status", "5");
+ }
+ } else {
+ //websWrite(wp, T("-1"));
+ websWrite(wp, T("{\"%s\":\"%s\"}"), "getddns_status", "-1");
+ }
+ if (line) {
+ free(line);
+ }
+ fclose(proc_file);
+ return;
+
+}
+
+void zte_goform_set_work_type(webs_t wp)
+{
+ char_t *work_type = NULL;
+ work_type = websGetVar(wp, T("work_type"), T(""));
+
+ slog(MISC_PRINT, SLOG_DEBUG,"[zyl]zte_goform_set_work_type:work_type->%s\n", work_type);
+
+ if (work_type == NULL) {
+ slog(MISC_PRINT, SLOG_ERR,"[zyl]zte_goform_set_work_type:empty!\n");
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+ if ((strncmp(work_type, "0", 1) == 0) || (strncmp(work_type, "1", 1) == 0)) {
+ char LanEnable[5] = {0};
+ (void)zte_web_read("LanEnable", LanEnable);
+ if (strncmp(LanEnable, work_type, 1) == 0) {
+ return zte_write_result_to_web(wp, SUCCESS);
+ }
+ (void)zte_web_write("LanEnable", work_type);
+ slog(MISC_PRINT, SLOG_DEBUG,"[zyl]zte_goform_set_work_type:work_type->%s\n", work_type);
+ ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_MAIN_CTRL, MSG_CMD_RESTART_REQUEST, 0, NULL, 0);
+ slog(MISC_PRINT, SLOG_NORMAL,"[zyl]zte_goform_set_work_type:device reboot now\n");
+ zte_write_result_to_web(wp, SUCCESS);
+ return;
+ } else {
+ slog(MISC_PRINT, SLOG_ERR,"[zyl]zte_goform_set_work_type:work_type->%s error!\n", work_type);
+ zte_write_result_to_web(wp, FAILURE);
+ return;
+ }
+}
+
+/******************************************************
+* Function: void zte_goform_set_sample(webs_t wp)
+* Description: example function
+* Input: HTTP page info
+* Output:
+* Return: none
+* Others:
+* Modify Date Version Author Modification
+*
+*******************************************************/
+void zte_goform_set_sample(webs_t wp)
+{
+ //´ÓWEBÇëÇóÖлñÈ¡²ÎÊý,ûÓвÎÊýÔò²»ÐèÒªÕâÒ»²½
+
+ // ÉèÖÃNV»ò·¢ÏûÏ¢¸øÏàӦģ¿é
+ //ipc_send_message(MODULE_ID_WEB_CGI, MODULE_ID_AT_CTL, MSG_CMD_PDP_ACT_REQ, 0, NULL, 0);
+
+ //·µ»ØJSON ¸ñʽ½á¹û£¬Èç¹ûÐèÒª²éѯÉèÖýá¹ûÔòÐèÒªwebuiͨ¹ý»ñÈ¡ppp_statusÕâ¸öNVÖµÀ´»ñÈ¡
+ zte_write_result_to_web(wp, SUCCESS);
+ return;
+}
+
+//bsim
+static int bs_string2bytes(const char* pSrc, unsigned char* pDst, int nSrcLength)
+{
+ int i=0;
+
+ //УÑé²ÎÊý
+ if(pSrc == NULL || pDst == NULL || nSrcLength < 0)
+ {
+ return -1;
+ }
+
+ for(i = 0; i < nSrcLength; i += 2)
+ {
+ // Êä³ö¸ß4λ
+ if(*pSrc >= '0' && *pSrc <= '9')
+ {
+ *pDst = (*pSrc - '0') << 4;
+ }
+ else
+ {
+ *pDst = ((toupper(*pSrc) - 'A') + 10) << 4;
+ }
+
+ pSrc++;
+
+ // Êä³öµÍ4λ
+ if(*pSrc >= '0' && *pSrc <= '9')
+ {
+ *pDst |= *pSrc - '0';
+ }
+ else
+ {
+ *pDst |= (toupper(*pSrc) - 'A') + 10;
+ }
+
+ pSrc++;
+ pDst++;
+ }
+
+ // ·µ»ØÄ¿±êÊý¾Ý³¤¶È
+ return nSrcLength / 2;
+}
+
+static int bs_bytes2string(const unsigned char* pSrc, char* pDst, int nSrcLength)
+{
+ const char tab[]="0123456789ABCDEF"; // 0x0-0xfµÄ×Ö·û²éÕÒ±í
+ int i = 0;
+
+ //УÑé²ÎÊý
+ if(pSrc == NULL || pDst == NULL || nSrcLength < 0)
+ {
+ return -1;
+ }
+
+ for(i=0; i<nSrcLength; i++)
+ {
+ *pDst++ = tab[*pSrc >> 4]; // Êä³öµÍ4λ
+ *pDst++ = tab[*pSrc & 0x0f]; // Êä³ö¸ß4λ
+ pSrc++;
+ }
+
+ // ·µ»ØÄ¿±ê×Ö·û´®³¤¶È
+ return nSrcLength * 2;
+}
+
+static int bs_aes_init_key(unsigned char *aes_key, int k_len)
+{
+ int efuse_fd = -1;
+ T_ZDrvEfuse_Secure efuse = {0};
+
+ memset(&efuse, 0, sizeof(efuse));
+ efuse_fd = open("/dev/efuse", O_RDWR);
+ if (efuse_fd < 0) {
+ printf("wifi_aes_init_key efuse open errno=%d\n", errno);
+ return 0;
+ }
+ if(ioctl(efuse_fd , EFUSE_GET_DATA, &efuse) != 0) {
+ printf("wifi_aes_init_key efuse ioctl errno=%d\n", errno);
+ close(efuse_fd);
+ return 0;
+ }
+ close(efuse_fd);
+ memcpy(aes_key, efuse.pubKeyHash, k_len);
+
+ return 1;
+}
+
+static int bs_aes_encrypt(char* in, int len, char* out, unsigned char* key, int key_len)
+{
+ if (!in || !out || !key || len <=0 || (len%AES_BLOCK_SIZE)!=0 || (key_len!=16 && key_len!=24 && key_len!=32)) {
+ printf("bs_aes_encrypt err in=%p out=%p key=%p len=%d key_len=%d\n",in,key,out,len,key_len);
+ return 0;
+ }
+
+ AES_KEY aes = {0}; //cov h
+ if (AES_set_encrypt_key(key, key_len*8, &aes) < 0) {
+ printf("bs_aes_encrypt AES_set_encrypt_key err\n");
+ return 0;
+ }
+
+ int en_len = 0;
+ while (en_len < len) {
+ AES_encrypt((unsigned char*)in, (unsigned char*)out, &aes);
+ in += AES_BLOCK_SIZE;
+ out += AES_BLOCK_SIZE;
+ en_len += AES_BLOCK_SIZE;
+ }
+
+ return 1;
+}
+
+static int bs_aes_decrypt(char* in, int len, char* out, char* key, int key_len)
+{
+ if (!in || !out || !key || len <=0 || (len%AES_BLOCK_SIZE)!=0 || (key_len!=16 && key_len!=24 && key_len!=32)) {
+ printf("bs_aes_decrypt err in=%p out=%p key=%p len=%d key_len=%d\n",in,key,out,len,key_len);
+ return 0;
+ }
+
+ AES_KEY aes = {0}; //cov h
+ if (AES_set_decrypt_key((unsigned char*)key, key_len*8, &aes) < 0) {
+ printf("bs_aes_decrypt AES_set_decrypt_key err\n");
+ return 0;
+ }
+
+ int en_len = 0;
+ while (en_len < len) {
+ AES_decrypt((unsigned char*)in, (unsigned char*)out, &aes);
+ in += AES_BLOCK_SIZE;
+ out += AES_BLOCK_SIZE;
+ en_len += AES_BLOCK_SIZE;
+ }
+
+ return 1;
+}
+
+static int bs_aes_cbc_encrypt(char* in, int len, char* out, unsigned char* key, int key_len)
+{
+ if (!in || !out || !key || len <=0 || (len%AES_BLOCK_SIZE)!=0 || (key_len!=16 && key_len!=24 && key_len!=32)) {
+ printf("bs_aes_encrypt err in=%p out=%p key=%p len=%d key_len=%d\n",in,key,out,len,key_len);
+ return 0;
+ }
+
+ AES_KEY aes = {0}; //cov h
+ if (AES_set_encrypt_key(key, key_len*8, &aes) < 0) {
+ printf("bs_aes_encrypt AES_set_encrypt_key err\n");
+ return 0;
+ }
+
+ unsigned char iv[AES_BLOCK_SIZE] = {0};
+ memcpy(iv, key, AES_BLOCK_SIZE);
+
+ AES_cbc_encrypt((unsigned char*)in, (unsigned char*)out, len,
+ &aes, iv, AES_ENCRYPT);
+
+
+ return 1;
+}
+
+static int bs_aes_cbc_decrypt(char* in, int len, char* out, char* key, int key_len)
+{
+ if (!in || !out || !key || len <=0 || (len%AES_BLOCK_SIZE)!=0 || (key_len!=16 && key_len!=24 && key_len!=32)) {
+ printf("bs_aes_decrypt err in=%p out=%p key=%p len=%d key_len=%d\n",in,key,out,len,key_len);
+ return 0;
+ }
+
+ AES_KEY aes = {0}; //cov h
+ if (AES_set_decrypt_key((unsigned char*)key, key_len*8, &aes) < 0) {
+ printf("bs_aes_decrypt AES_set_decrypt_key err\n");
+ return 0;
+ }
+
+ unsigned char iv[AES_BLOCK_SIZE] = {0};
+ memcpy(iv, key, AES_BLOCK_SIZE);
+
+ AES_cbc_encrypt((unsigned char*)in, (unsigned char*)out, len,
+ &aes, iv, AES_DECRYPT);
+
+ return 1;
+}
+
+
+static int apn_profile_encrypt_code(char *w_code, int len, char *b_aes, char *s_aes)
+{
+ bs_aes_encrypt(w_code, len, b_aes, web_aes_key, sizeof(web_aes_key));
+ bs_bytes2string(b_aes, s_aes, len);
+
+ printf("encrypt apn_profile w_code=%s, s_aes=%s\n", w_code, s_aes);
+
+ return 1;
+}
+
+void set_apn_prof_aes_by_index(int index, APN_PROFILE *profile)
+{
+ char cfg_name[PROFILE_MEMBER_LEN] = {0};
+ char cfg_value[APNCONFIG_MEMORY] = {0};
+
+ if (NULL == profile) {
+ return;
+ }
+
+ sprintf(cfg_name, "APN_config%d", index);
+ if (0 == strcmp(profile->pdp_type, "IPv6")) {
+ snprintf(cfg_value, APNCONFIG_MEMORY,
+ "%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)",
+ profile->profile_name,
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "");
+ } else {
+ char ppp_aes[PROFILE_APN_AES_LEN] = {0};
+ char ppp_aes_b[PROFILE_APN_LEN - 1] = {0};
+ apn_profile_encrypt_code(profile->ppp_passwd, PROFILE_APN_LEN - 1 , ppp_aes_b, ppp_aes);
+ snprintf(cfg_value, APNCONFIG_MEMORY,
+ "%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)",
+ profile->profile_name,
+ profile->apn_name,
+ profile->apn_select,
+ profile->dial_num,
+ profile->ppp_auth_mode,
+ profile->ppp_username,
+ ppp_aes,//profile->ppp_passwd,
+ profile->pdp_type,
+ profile->pdp_select,
+ profile->pdp_addr,
+ profile->dns_mode,
+ profile->prefer_dns_manual,
+ profile->standby_dns_manual);
+ }
+ sc_cfg_set(cfg_name, cfg_value);
+
+ return;
+}
+
+void set_ipv6_apn_prof_aes_by_index(int index, IPV6_APN_PROFILE *profile)
+{
+ char cfg_name[PROFILE_MEMBER_LEN] = {0};
+ char cfg_value[APNCONFIG_MEMORY] = {0};
+
+ if (NULL == profile) {
+ return;
+ }
+
+ sprintf(cfg_name, "ipv6_APN_config%d", index);
+ if (0 == strcmp(profile->pdp_type, "IP")) {
+ slog(MISC_PRINT, SLOG_DEBUG, "pdp_type=IP cpsnprintf "); /*lint !e26*/
+ snprintf(cfg_value, APNCONFIG_MEMORY,
+ "%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)",
+ profile->profile_name,
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "",
+ "");
+ } else {
+ char ppp_aes[PROFILE_APN_AES_LEN] = {0};
+ char ppp_aes_b[PROFILE_APN_LEN - 1] = {0};
+ apn_profile_encrypt_code(profile->ppp_passwd, PROFILE_APN_LEN - 1 , ppp_aes_b, ppp_aes);
+ slog(MISC_PRINT, SLOG_DEBUG, "pdp_type=else cpsnprintf "); /*lint !e26*/
+ slog(MISC_PRINT, SLOG_DEBUG, "profile->profile_name=%s ", profile->profile_name); /*lint !e26*/
+ snprintf(cfg_value, APNCONFIG_MEMORY,
+ "%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)",
+ profile->profile_name,
+ profile->apn_name,
+ profile->apn_select,
+ profile->dial_num,
+ profile->ppp_auth_mode,
+ profile->ppp_username,
+ ppp_aes,//profile->ppp_passwd,
+ profile->pdp_type,
+ profile->pdp_select,
+ profile->pdp_addr,
+ profile->dns_mode,
+ profile->prefer_dns_manual,
+ profile->standby_dns_manual);
+ }
+ slog(MISC_PRINT, SLOG_DEBUG, "cfg_value=%s", cfg_value); /*lint !e26*/
+ sc_cfg_set(cfg_name, cfg_value);
+
+ return;
+}
+
+void set_ipv4v6_apn_prof_aes_by_index(int index, APN_PROFILE *profile, IPV6_APN_PROFILE *ipv6profile)
+{
+ char cfg_name[PROFILE_MEMBER_LEN] = {0};
+ char cfg_value[APNCONFIG_MEMORY] = {0};
+ char ppp_aes[PROFILE_APN_AES_LEN] = {0};
+ char ppp_aes_b[PROFILE_APN_LEN - 1] = {0};
+
+ if (NULL == profile) {
+ return;
+ }
+
+ sprintf(cfg_name, "APN_config%d", index);
+ apn_profile_encrypt_code(profile->ppp_passwd, PROFILE_APN_LEN - 1 , ppp_aes_b, ppp_aes);
+ snprintf(cfg_value, APNCONFIG_MEMORY,
+ "%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)",
+ profile->profile_name,
+ profile->apn_name,
+ profile->apn_select,
+ profile->dial_num,
+ profile->ppp_auth_mode,
+ profile->ppp_username,
+ ppp_aes,//profile->ppp_passwd,
+ profile->pdp_type,
+ profile->pdp_select,
+ profile->pdp_addr,
+ profile->dns_mode,
+ profile->prefer_dns_manual,
+ profile->standby_dns_manual);
+ sc_cfg_set(cfg_name, cfg_value);
+
+ memset(cfg_name, 0, sizeof(cfg_name));
+ memset(cfg_value, 0, sizeof(cfg_value));
+ memset(ppp_aes, 0, sizeof(ppp_aes));
+ memset(ppp_aes_b, 0, sizeof(ppp_aes_b));
+ sprintf(cfg_name, "ipv6_APN_config%d", index);
+ apn_profile_encrypt_code(ipv6profile->ppp_passwd, PROFILE_APN_LEN - 1 , ppp_aes_b, ppp_aes);
+ snprintf(cfg_value, APNCONFIG_MEMORY,
+ "%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)%s($)",
+ ipv6profile->profile_name,
+ ipv6profile->apn_name,
+ ipv6profile->apn_select,
+ ipv6profile->dial_num,
+ ipv6profile->ppp_auth_mode,
+ ipv6profile->ppp_username,
+ ppp_aes,//ipv6profile->ppp_passwd,
+ ipv6profile->pdp_type,
+ ipv6profile->pdp_select,
+ ipv6profile->pdp_addr,
+ ipv6profile->dns_mode,
+ ipv6profile->prefer_dns_manual,
+ ipv6profile->standby_dns_manual);
+ sc_cfg_set(cfg_name, cfg_value);
+
+ return;
+}
+
+//APN_config0~n
+static void apn_decode_profile_by_index(int index)
+{
+ char cfg_name[PROFILE_MEMBER_LEN] = {0};
+ char cfg_value[APNCONFIG_MEMORY] = {0};
+ char ppp_aes[PROFILE_APN_AES_LEN] = {0};
+ char b_aes[PROFILE_APN_LEN] = {0};
+ //char ppp_s[PROFILE_APN_LEN] = {0};
+ char *pos_begin = NULL;
+ APN_PROFILE profile = {0};
+
+ sprintf(cfg_name, "APN_config%d", index);
+ sc_cfg_get(cfg_name, cfg_value, sizeof(cfg_value));
+ if (strlen(cfg_value) == 0)
+ return;
+ pos_begin = cfg_value;
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.profile_name, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.apn_name, PROFILE_APN_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.apn_select, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.dial_num, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.ppp_auth_mode, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.ppp_username, PROFILE_APN_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", ppp_aes, PROFILE_APN_AES_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.pdp_type, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.pdp_select, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.pdp_addr, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.dns_mode, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.prefer_dns_manual, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.standby_dns_manual, PROFILE_MEMBER_LEN);
+
+ if (strlen(ppp_aes) == (PROFILE_APN_AES_LEN - 1)) {
+ bs_string2bytes(ppp_aes, b_aes, PROFILE_APN_AES_LEN - 1);
+ bs_aes_decrypt(b_aes, PROFILE_APN_LEN - 1, profile.ppp_passwd, web_aes_key, sizeof(web_aes_key));
+// printf("decrypt ppp_tmp[%d]=%s\n", index, profile.ppp_passwd);
+ } else if (strlen(ppp_aes) > 0){
+ //fotaÉý¼¶À´µÄÃ÷ÎÄ
+ strncpy(profile.ppp_passwd, ppp_aes,sizeof(profile.ppp_passwd)-1);
+ set_apn_prof_aes_by_index(index, &profile);
+// printf("decrypt fota ppp_tmp[%d]=%s\n", index, profile.ppp_passwd);
+ }
+
+ set_apn_profile_by_index(index, &profile);
+
+ return;
+}
+
+static void ipv6apn_decode_profile_by_index(int index)
+{
+ char cfg_name[PROFILE_MEMBER_LEN] = {0};
+ char cfg_value[APNCONFIG_MEMORY] = {0};
+ char ppp_aes[PROFILE_APN_AES_LEN] = {0};
+ char b_aes[PROFILE_APN_LEN] = {0};
+ char *pos_begin = NULL;
+ IPV6_APN_PROFILE profile = {0};
+
+
+ sprintf(cfg_name, "ipv6_APN_config%d", index);
+ sc_cfg_get(cfg_name, cfg_value, sizeof(cfg_value));
+ if (strlen(cfg_value) == 0)
+ return;
+ pos_begin = cfg_value;
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.profile_name, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.apn_name, PROFILE_APN_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.apn_select, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.dial_num, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.ppp_auth_mode, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.ppp_username, PROFILE_APN_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", ppp_aes, PROFILE_APN_AES_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.pdp_type, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.pdp_select, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.pdp_addr, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.dns_mode, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.prefer_dns_manual, PROFILE_MEMBER_LEN);
+ pos_begin = split_str_by_sep(pos_begin, "($)", profile.standby_dns_manual, PROFILE_MEMBER_LEN);
+
+ if (strlen(ppp_aes) == (PROFILE_APN_AES_LEN - 1)) {
+ bs_string2bytes(ppp_aes, b_aes, PROFILE_APN_AES_LEN - 1);
+ bs_aes_decrypt(b_aes, PROFILE_APN_LEN - 1, profile.ppp_passwd, web_aes_key, sizeof(web_aes_key));
+// printf("decrypt ppp_v6tmp[%d]=%s\n", index, profile.ppp_passwd);
+ } else if (strlen(ppp_aes) > 0){
+ //fotaÉý¼¶À´µÄÃ÷ÎÄ
+ strncpy(profile.ppp_passwd, ppp_aes,sizeof(profile.ppp_passwd)-1);
+ set_ipv6_apn_prof_aes_by_index(index, &profile);
+// printf("decrypt fota ppp_v6tmp[%d]=%s\n", index, profile.ppp_passwd);
+ }
+ set_ipv6_apn_profile_by_index(index, &profile);
+
+ return;
+}
+
+static int apn_profile_decrypt_code(void)
+{
+ int index = 0;//APN_config0ÊÇDefault,¿É²»´¦Àí?
+
+ for (index = 0; index < APNCONFIG_NUM_MAX; index++) {
+ apn_decode_profile_by_index(index);
+ ipv6apn_decode_profile_by_index(index);
+ }
+
+ return 1;
+}
+
+int apn_encrypt_code(void)
+{
+ char w_code[PROFILE_APN_LEN] = {0};
+ char b_aes[PROFILE_APN_LEN] = {0};
+ char s_aes[PROFILE_APN_AES_LEN] = {0};
+
+ sc_cfg_get("ppp_passtmp", w_code, sizeof(w_code));
+ bs_aes_encrypt(w_code, PROFILE_APN_LEN - 1, b_aes, web_aes_key, sizeof(web_aes_key));
+ bs_bytes2string(b_aes, s_aes, PROFILE_APN_LEN - 1);
+ sc_cfg_set("ppp_passwd", s_aes);
+ printf("apn_encrypt_code w_code=%s, s_aes=%s\n", w_code, s_aes);
+
+ return 1;
+}
+
+int ipv6apn_encrypt_code(void)
+{
+ char w_code[PROFILE_APN_LEN] = {0};
+ char b_aes[PROFILE_APN_LEN] = {0};
+ char s_aes[PROFILE_APN_AES_LEN] = {0};
+
+ sc_cfg_get("ipv6_ppp_passtmp", w_code, sizeof(w_code));
+ bs_aes_encrypt(w_code, PROFILE_APN_LEN - 1, b_aes, web_aes_key, sizeof(web_aes_key));
+ bs_bytes2string(b_aes, s_aes, PROFILE_APN_LEN - 1);
+ sc_cfg_set("ipv6_ppp_passwd", s_aes);
+ printf("ipv6apn_encrypt_code w_code=%s, s_aes=%s\n", w_code, s_aes);
+
+ return 1;
+}
+#if 0
+//2±íʾfota´ÓÀϰ汾ÍùÉÏÉý¼¶£¬ppp_password´æµÄÊÇÃ÷ÎÄÃÜÂ룬а汾ÊÇÃÜÎÄ
+static int apn_decrypt_code(void)
+{
+ char w_code[PROFILE_APN_LEN]= {0};
+ char b_aes[PROFILE_APN_LEN] = {0};
+ char s_aes[PROFILE_APN_AES_LEN] = {0};
+ int flag = 0;
+
+ sc_cfg_get("ppp_passwd", s_aes, sizeof(s_aes));
+ if (strlen(s_aes) == (PROFILE_APN_AES_LEN - 1)) {
+ bs_string2bytes(s_aes, b_aes, PROFILE_APN_AES_LEN - 1);
+ bs_aes_decrypt(b_aes, PROFILE_APN_LEN - 1, w_code, web_aes_key, sizeof(web_aes_key));
+ sc_cfg_set("ppp_passtmp", w_code);
+ printf("apn_decrypt_code w_code=%s, s_aes=%s\n", w_code, s_aes);
+ } else if (strlen(s_aes) > 0){
+ sc_cfg_set("ppp_passtmp", s_aes);
+ return 2;
+ }
+
+ return 1;
+}
+
+static int ipv6apn_decrypt_code(void)
+{
+ char w_code[PROFILE_APN_LEN]= {0};
+ char b_aes[PROFILE_APN_LEN] = {0};
+ char s_aes[PROFILE_APN_AES_LEN] = {0};
+ int flag = 0;
+
+ sc_cfg_get("ipv6_ppp_passwd", s_aes, sizeof(s_aes));
+ if (strlen(s_aes) == (PROFILE_APN_AES_LEN - 1)) {
+ bs_string2bytes(s_aes, b_aes, PROFILE_APN_AES_LEN - 1);
+ bs_aes_decrypt(b_aes, PROFILE_APN_LEN - 1, w_code, web_aes_key, sizeof(web_aes_key));
+ sc_cfg_set("ipv6_ppp_passtmp", w_code);
+ printf("apn_decrypt_code w_code=%s, s_aes=%s\n", w_code, s_aes);
+ } else if (strlen(s_aes) > 0){
+ sc_cfg_set("ipv6_ppp_passtmp", s_aes);
+ return 2;
+ }
+
+ return 1;
+}
+#endif
+#ifdef WEBS_SECURITY
+static void js_aes_wifi_encode(void)
+{
+ char js_aes_key[24 + 1]={0};
+ char imei_buf[15 + 1] = {0};
+ char rnum_buf[9 + 1] = {0};
+
+ char wificode[WIFI_PSW_DEFAULT_LENGTH] = {0};
+ char b_aes[WIFI_PSW_DEFAULT_LENGTH] = {0};
+ char *basestr = NULL;
+
+ sc_cfg_get("imei", imei_buf, sizeof(imei_buf));
+ sc_cfg_get("rnum_js", rnum_buf, sizeof(rnum_buf));
+ snprintf(js_aes_key, sizeof(js_aes_key), "%s%sFFFFFFFFFFFFFFF", rnum_buf, imei_buf);
+
+ sc_cfg_get("WPAPSK1", wificode, sizeof(wificode));
+ bs_aes_cbc_encrypt(wificode, sizeof(wificode)-1, b_aes, js_aes_key, sizeof(js_aes_key)-1);
+ basestr = zte_base64_encode(b_aes, sizeof(b_aes)-1);
+ if (NULL == basestr) {
+ slog(MISC_PRINT, SLOG_ERR, "basestr is NULL.\n");/*lint !e26*/
+ return;
+ }
+ (void)zte_web_write("WPAPSK1_enaes", basestr);
+ free(basestr);
+ basestr = NULL;
+
+ memset(wificode, 0, sizeof(wificode));
+ sc_cfg_get("m_WPAPSK1", wificode, sizeof(wificode));
+ bs_aes_cbc_encrypt(wificode, sizeof(wificode)-1, b_aes, js_aes_key, sizeof(js_aes_key)-1);
+ basestr = zte_base64_encode(b_aes, sizeof(b_aes)-1);
+ if (NULL == basestr) {
+ slog(MISC_PRINT, SLOG_ERR, "basestr-m is NULL.\n");/*lint !e26*/
+ return;
+ }
+ (void)zte_web_write("m_WPAPSK1_enaes", basestr);
+ free(basestr);
+ basestr = NULL;
+
+}
+
+
+static void js_aes_rand(void)
+{
+ char rstr[10] = {0};
+ unsigned int rnum = 0;
+
+ srand( (unsigned)time( NULL ) );
+ rnum = rand();
+ rnum %= 1000000000;
+
+ snprintf((char *)rstr, sizeof(rstr), "%09ld", rnum);
+ sc_cfg_set("rnum_js", rstr);
+}
+//cbc
+char *js_aes_decode(char *src, size_t len, size_t *out_len)
+{
+ unsigned char *aes_password = NULL;
+ size_t aes_len = 0;
+
+ char *out = NULL;
+
+ char js_aes_key[24 + 1]={0};
+ char imei_buf[15 + 1] = {0};
+ char rnum_buf[9 + 1] = {0};
+
+ aes_password = (char *)zte_base64_decode((const unsigned char *)src, len, (unsigned int*)&aes_len);
+ if (aes_password == NULL)
+ return NULL;
+
+
+ out = malloc(aes_len + 1);
+ if (out == NULL) {
+ free(aes_password);
+ return NULL;
+ }
+ memset(out, 0, aes_len + 1);
+
+ sc_cfg_get("imei", imei_buf, sizeof(imei_buf));
+ sc_cfg_get("rnum_js", rnum_buf, sizeof(rnum_buf));
+ snprintf(js_aes_key, sizeof(js_aes_key), "%s%sFFFFFFFFFFFFFFF", rnum_buf, imei_buf);
+
+ bs_aes_cbc_decrypt(aes_password, aes_len, out, js_aes_key, sizeof(js_aes_key)-1);
+ //printf("decrypt js_aes_decode[%d]=%s\n", aes_len, out);
+
+ free(aes_password);
+
+ if (strlen(out) > aes_len) {
+ free(out);
+ return NULL;
+ }
+
+ *out_len = strlen(out);
+
+ return out;
+}
+#endif
+int web_aes_init(void)
+{
+ bs_aes_init_key(web_aes_key, sizeof(web_aes_key));
+ apn_profile_decrypt_code();
+#ifdef WEBS_SECURITY
+ js_aes_rand();
+#endif
+ return 1;
+}
+