[Feature][R306BR][task-view-1592][voice] add call white and call black
Change-Id: Iac7e2571543525ce4a616f81e720cf521e06c83d
diff --git a/lynq/R306BR/ap/app/goahead/interface5.0/zte_web_interface.h b/lynq/R306BR/ap/app/goahead/interface5.0/zte_web_interface.h
index eae3e01..f2d53b7 100755
--- a/lynq/R306BR/ap/app/goahead/interface5.0/zte_web_interface.h
+++ b/lynq/R306BR/ap/app/goahead/interface5.0/zte_web_interface.h
@@ -405,6 +405,22 @@
#define GOFORM_ADD_CALLBACK_NUMBERS "ADD_CALLBACK_NUMBERS"
#define GOFORM_DELETE_CALLBACK_NUMBERS "DELETE_CALLBACK_NUMBERS"
#define GOFORM_CLEAR_CALLBACK_NUMBERS "CLEAR_CALLBACK_NUMBERS"
+#define GOFORM_GET_CALLING_WHITE_NUMBERS "GET_CALLING_WHITE_NUMBERS"
+#define GOFORM_ADD_CALLING_WHITE_NUMBERS "ADD_CALLING_WHITE_NUMBERS"
+#define GOFORM_DELETE_CALLING_WHITE_NUMBERS "DELETE_CALLING_WHITE_NUMBERS"
+#define GOFORM_CLEAR_CALLING_WHITE_NUMBERS "CLEAR_CALLING_WHITE_NUMBERS"
+#define GOFORM_GET_CALLED_WHITE_NUMBERS "GET_CALLED_WHITE_NUMBERS"
+#define GOFORM_ADD_CALLED_WHITE_NUMBERS "ADD_CALLED_WHITE_NUMBERS"
+#define GOFORM_DELETE_CALLED_WHITE_NUMBERS "DELETE_CALLED_WHITE_NUMBERS"
+#define GOFORM_CLEAR_CALLED_WHITE_NUMBERS "CLEAR_CALLED_WHITE_NUMBERS"
+#define GOFORM_GET_CALLING_BLACK_NUMBERS "GET_CALLING_BLACK_NUMBERS"
+#define GOFORM_ADD_CALLING_BLACK_NUMBERS "ADD_CALLING_BLACK_NUMBERS"
+#define GOFORM_DELETE_CALLING_BLACK_NUMBERS "DELETE_CALLING_BLACK_NUMBERS"
+#define GOFORM_CLEAR_CALLING_BLACK_NUMBERS "CLEAR_CALLING_BLACK_NUMBERS"
+#define GOFORM_GET_CALLED_BLACK_NUMBERS "GET_CALLED_BLACK_NUMBERS"
+#define GOFORM_ADD_CALLED_BLACK_NUMBERS "ADD_CALLED_BLACK_NUMBERS"
+#define GOFORM_DELETE_CALLED_BLACK_NUMBERS "DELETE_CALLED_BLACK_NUMBERS"
+#define GOFORM_CLEAR_CALLED_BLACK_NUMBERS "CLEAR_CALLED_BLACK_NUMBERS"
/****************************All the web pages' URL************************************/
#define ZTE_WEB_PAGE_LOGIN_NAME "index.html"
@@ -1122,7 +1138,23 @@
extern void zte_goform_clear_callback_numbers(webs_t wp);
extern void zte_goform_voice_call_hide_setting(webs_t wp);
extern void zte_goform_voice_white_list_setting(webs_t wp);
+extern void zte_goform_get_calling_white_numbers(webs_t wp);
+extern void zte_goform_add_calling_white_numbers(webs_t wp);
+extern void zte_goform_delete_calling_white_numbers(webs_t wp);
+extern void zte_goform_clear_calling_white_numbers(webs_t wp);
+extern void zte_goform_get_called_white_numbers(webs_t wp);
+extern void zte_goform_add_called_white_numbers(webs_t wp);
+extern void zte_goform_delete_called_white_numbers(webs_t wp);
+extern void zte_goform_clear_called_white_numbers(webs_t wp);
extern void zte_goform_voice_black_list_setting(webs_t wp);
+extern void zte_goform_get_calling_black_numbers(webs_t wp);
+extern void zte_goform_add_calling_black_numbers(webs_t wp);
+extern void zte_goform_delete_calling_black_numbers(webs_t wp);
+extern void zte_goform_clear_calling_black_numbers(webs_t wp);
+extern void zte_goform_get_called_black_numbers(webs_t wp);
+extern void zte_goform_add_called_black_numbers(webs_t wp);
+extern void zte_goform_delete_called_black_numbers(webs_t wp);
+extern void zte_goform_clear_called_black_numbers(webs_t wp);
extern void zte_goform_voice_call_forward_all_setting(webs_t wp);
extern void zte_goform_voice_call_forward_no_answer_setting(webs_t wp);
extern void zte_goform_voice_call_forward_out_reach_setting(webs_t wp);
diff --git a/lynq/R306BR/ap/app/goahead/interface5.0/zte_web_util.c b/lynq/R306BR/ap/app/goahead/interface5.0/zte_web_util.c
index 0514ba8..390e1be 100755
--- a/lynq/R306BR/ap/app/goahead/interface5.0/zte_web_util.c
+++ b/lynq/R306BR/ap/app/goahead/interface5.0/zte_web_util.c
@@ -129,6 +129,10 @@
{CMD_HTTPSHARE_AUTH_GET, zte_httpShare_auth_get},
{GOFORM_NETWORK_INFO, zte_goform_get_network_info},
{GOFORM_GET_CALLBACK_NUMBERS, zte_goform_get_callback_numbers},
+ {GOFORM_GET_CALLING_WHITE_NUMBERS, zte_goform_get_calling_white_numbers},
+ {GOFORM_GET_CALLED_WHITE_NUMBERS, zte_goform_get_called_white_numbers},
+ {GOFORM_GET_CALLING_BLACK_NUMBERS, zte_goform_get_calling_black_numbers},
+ {GOFORM_GET_CALLED_BLACK_NUMBERS, zte_goform_get_called_black_numbers},
};
@@ -290,6 +294,18 @@
{GOFORM_ADD_CALLBACK_NUMBERS, zte_goform_add_callback_numbers},
{GOFORM_DELETE_CALLBACK_NUMBERS, zte_goform_delete_callback_numbers},
{GOFORM_CLEAR_CALLBACK_NUMBERS, zte_goform_clear_callback_numbers},
+ {GOFORM_ADD_CALLING_WHITE_NUMBERS, zte_goform_add_calling_white_numbers},
+ {GOFORM_DELETE_CALLING_WHITE_NUMBERS, zte_goform_delete_calling_white_numbers},
+ {GOFORM_CLEAR_CALLING_WHITE_NUMBERS, zte_goform_clear_calling_white_numbers},
+ {GOFORM_ADD_CALLED_WHITE_NUMBERS, zte_goform_add_called_white_numbers},
+ {GOFORM_DELETE_CALLED_WHITE_NUMBERS, zte_goform_delete_called_white_numbers},
+ {GOFORM_CLEAR_CALLED_WHITE_NUMBERS, zte_goform_clear_called_white_numbers},
+ {GOFORM_ADD_CALLING_BLACK_NUMBERS, zte_goform_add_calling_black_numbers},
+ {GOFORM_DELETE_CALLING_BLACK_NUMBERS, zte_goform_delete_calling_black_numbers},
+ {GOFORM_CLEAR_CALLING_BLACK_NUMBERS, zte_goform_clear_calling_black_numbers},
+ {GOFORM_ADD_CALLED_BLACK_NUMBERS, zte_goform_add_called_black_numbers},
+ {GOFORM_DELETE_CALLED_BLACK_NUMBERS, zte_goform_delete_called_black_numbers},
+ {GOFORM_CLEAR_CALLED_BLACK_NUMBERS, zte_goform_clear_called_black_numbers},
};
/*******************************************************************************
diff --git a/lynq/R306BR/ap/app/goahead/interface5.0/zte_web_voice.c b/lynq/R306BR/ap/app/goahead/interface5.0/zte_web_voice.c
index eac6582..46b89f3 100755
--- a/lynq/R306BR/ap/app/goahead/interface5.0/zte_web_voice.c
+++ b/lynq/R306BR/ap/app/goahead/interface5.0/zte_web_voice.c
@@ -1,5 +1,67 @@
#include "zte_web_interface.h"
+static int append_phone_number(const char *phone_number, char* filename)
+{
+ FILE *file = fopen(filename, "a");
+
+ if (file == NULL)
+ {
+ perror("Failed to open file");
+ return 0;
+ }
+
+ fprintf(file, "%s\n", phone_number);
+ fclose(file);
+ return 1;
+}
+
+static int delete_data_by_index(int index, char* filename)
+{
+ FILE *inputFile = fopen(filename, "r");
+ if (inputFile == NULL)
+ {
+ return 0;
+ }
+
+ FILE *tempFile = fopen("/cache/temp", "w");
+ if (tempFile == NULL)
+ {
+ return 0;
+ }
+
+ char line[100];
+ int currentLine = 1;
+ while (fgets(line, sizeof(line), inputFile) != NULL)
+ {
+ if (currentLine != index)
+ {
+ fputs(line, tempFile);
+ }
+ currentLine++;
+ }
+
+ fclose(inputFile);
+ fclose(tempFile);
+
+ remove(filename);
+ rename("/cache/temp", filename);
+
+ return 1;
+}
+
+static int clear_file(char* filename)
+{
+ FILE *file = fopen(filename, "w");
+
+ if (file == NULL)
+ {
+ return 0;
+ }
+
+ fclose(file);
+ return 1;
+}
+
void zte_goform_voice_dial_time_setting(webs_t wp)
{
char *dial_times = NULL;
@@ -119,68 +181,6 @@
return;
}
-static int append_phone_number(const char *phone_number)
-{
- FILE *file = fopen("/cache/call_back_list", "a");
-
- if (file == NULL)
- {
- perror("Failed to open file");
- return 0;
- }
-
- fprintf(file, "%s\n", phone_number);
- fclose(file);
- return 1;
-}
-
-static int delete_data_by_index(int index)
-{
- FILE *inputFile = fopen("/cache/call_back_list", "r");
- if (inputFile == NULL)
- {
- return 0;
- }
-
- FILE *tempFile = fopen("/cache/temp", "w");
- if (tempFile == NULL)
- {
- return 0;
- }
-
- char line[100];
- int currentLine = 1;
- while (fgets(line, sizeof(line), inputFile) != NULL)
- {
- if (currentLine != index)
- {
- fputs(line, tempFile);
- }
- currentLine++;
- }
-
- fclose(inputFile);
- fclose(tempFile);
-
- remove("/cache/call_back_list");
- rename("/cache/temp", "/cache/call_back_list");
-
- return 1;
-}
-
-static int clear_file()
-{
- FILE *file = fopen("/cache/call_back_list", "w");
-
- if (file == NULL)
- {
- return 0;
- }
-
- fclose(file);
- return 1;
-}
-
void zte_goform_get_callback_numbers(webs_t wp)
{
char line[20] = {0};
@@ -227,7 +227,7 @@
add_number = websGetVar(wp, T("addNumber"), T(""));
printf("add_number = %s\n", add_number);
- ret = append_phone_number(add_number);
+ ret = append_phone_number(add_number, "/cache/call_back_list");
if(ret)
{
@@ -250,7 +250,7 @@
delete_index = websGetVar(wp, T("deleteIndex"), T(""));
index = atoi(delete_index);
- ret = delete_data_by_index(index);
+ ret = delete_data_by_index(index, "/cache/call_back_list");
if(ret)
{
@@ -268,7 +268,7 @@
{
int ret = 0;
- ret = clear_file();
+ ret = clear_file("/cache/call_back_list");
if(ret)
{
@@ -314,28 +314,212 @@
cfg_set("calling_white_enable", calling_white_enable);
cfg_set("called_white_enable", called_white_enable);
- if(0 == strcmp(calling_white_enable, "1"))
- {
-
- }
- else
- {
-
- }
-
- if(0 == strcmp(called_white_enable, "1"))
- {
-
- }
- else
- {
-
- }
-
zte_write_result_to_web(wp, SUCCESS);
return;
}
+void zte_goform_get_calling_white_numbers(webs_t wp)
+{
+ char line[20] = {0};
+ FILE *file;
+ int first_line = 1;
+
+ web_feedback_header(wp);
+
+ file = fopen("/cache/calling_white_list", "r");
+ if (!file) {
+ slog(MISC_PRINT, SLOG_ERR, "Failed to open calling_white_list\n");
+ (void)websWrite(wp, "{\"calling_white_list\":[]}");
+ return;
+ }
+
+ (void)websWrite(wp, "{\"calling_white_list\":[");
+ char *end = "]}";
+
+ while (fgets(line, sizeof(line), file)) {
+ size_t len = strlen(line);
+
+ if (len > 0 && line[len - 1] == '\n') {
+ line[len - 1] = '\0';
+ }
+
+ if (first_line) {
+ (void)websWrite(wp, "\"%s\"", line);
+ first_line = 0;
+ } else {
+ (void)websWrite(wp, ",\"%s\"", line);
+ }
+ }
+
+ (void)websWrite(wp, end);
+ fclose(file);
+
+ return;
+}
+
+void zte_goform_add_calling_white_numbers(webs_t wp)
+{
+ char* add_number = NULL;
+ int ret = 0;
+
+ add_number = websGetVar(wp, T("addNumber"), T(""));
+ printf("add_number = %s\n", add_number);
+ ret = append_phone_number(add_number, "/cache/calling_white_list");
+
+ if(ret)
+ {
+ zte_write_result_to_web(wp, SUCCESS);
+ }
+ else
+ {
+ zte_write_result_to_web(wp, FAILURE);
+ }
+
+ return;
+}
+
+void zte_goform_delete_calling_white_numbers(webs_t wp)
+{
+ char* delete_index = NULL;
+ int index = 0;
+ int ret = 0;
+
+ delete_index = websGetVar(wp, T("deleteIndex"), T(""));
+ index = atoi(delete_index);
+
+ ret = delete_data_by_index(index, "/cache/calling_white_list");
+
+ if(ret)
+ {
+ zte_write_result_to_web(wp, SUCCESS);
+ }
+ else
+ {
+ zte_write_result_to_web(wp, FAILURE);
+ }
+
+ return;
+}
+
+void zte_goform_clear_calling_white_numbers(webs_t wp)
+{
+ int ret = 0;
+
+ ret = clear_file("/cache/calling_white_list");
+
+ if(ret)
+ {
+ zte_write_result_to_web(wp, SUCCESS);
+ }
+ else
+ {
+ zte_write_result_to_web(wp, FAILURE);
+ }
+
+ return;
+}
+
+void zte_goform_get_called_white_numbers(webs_t wp)
+{
+ char line[20] = {0};
+ FILE *file;
+ int first_line = 1;
+
+ web_feedback_header(wp);
+
+ file = fopen("/cache/called_white_list", "r");
+ if (!file) {
+ slog(MISC_PRINT, SLOG_ERR, "Failed to open called_white_list\n");
+ (void)websWrite(wp, "{\"called_white_list\":[]}");
+ return;
+ }
+
+ (void)websWrite(wp, "{\"called_white_list\":[");
+ char *end = "]}";
+
+ while (fgets(line, sizeof(line), file)) {
+ size_t len = strlen(line);
+
+ if (len > 0 && line[len - 1] == '\n') {
+ line[len - 1] = '\0';
+ }
+
+ if (first_line) {
+ (void)websWrite(wp, "\"%s\"", line);
+ first_line = 0;
+ } else {
+ (void)websWrite(wp, ",\"%s\"", line);
+ }
+ }
+
+ (void)websWrite(wp, end);
+ fclose(file);
+
+ return;
+}
+
+void zte_goform_add_called_white_numbers(webs_t wp)
+{
+ char* add_number = NULL;
+ int ret = 0;
+
+ add_number = websGetVar(wp, T("addNumber"), T(""));
+ printf("add_number = %s\n", add_number);
+ ret = append_phone_number(add_number, "/cache/called_white_list");
+
+ if(ret)
+ {
+ zte_write_result_to_web(wp, SUCCESS);
+ }
+ else
+ {
+ zte_write_result_to_web(wp, FAILURE);
+ }
+
+ return;
+}
+
+void zte_goform_delete_called_white_numbers(webs_t wp)
+{
+ char* delete_index = NULL;
+ int index = 0;
+ int ret = 0;
+
+ delete_index = websGetVar(wp, T("deleteIndex"), T(""));
+ index = atoi(delete_index);
+
+ ret = delete_data_by_index(index, "/cache/called_white_list");
+
+ if(ret)
+ {
+ zte_write_result_to_web(wp, SUCCESS);
+ }
+ else
+ {
+ zte_write_result_to_web(wp, FAILURE);
+ }
+
+ return;
+}
+
+void zte_goform_clear_called_white_numbers(webs_t wp)
+{
+ int ret = 0;
+
+ ret = clear_file("/cache/called_white_list");
+
+ if(ret)
+ {
+ zte_write_result_to_web(wp, SUCCESS);
+ }
+ else
+ {
+ zte_write_result_to_web(wp, FAILURE);
+ }
+
+ return;
+}
+
void zte_goform_voice_black_list_setting(webs_t wp)
{
char* calling_black_enable = NULL;
@@ -347,28 +531,212 @@
cfg_set("calling_black_enable", calling_black_enable);
cfg_set("called_black_enable", called_black_enable);
- if(0 == strcmp(calling_black_enable, "1"))
- {
-
- }
- else
- {
-
- }
-
- if(0 == strcmp(called_black_enable, "1"))
- {
-
- }
- else
- {
-
- }
-
zte_write_result_to_web(wp, SUCCESS);
return;
}
+void zte_goform_get_calling_black_numbers(webs_t wp)
+{
+ char line[20] = {0};
+ FILE *file;
+ int first_line = 1;
+
+ web_feedback_header(wp);
+
+ file = fopen("/cache/calling_black_list", "r");
+ if (!file) {
+ slog(MISC_PRINT, SLOG_ERR, "Failed to open calling_black_list\n");
+ (void)websWrite(wp, "{\"calling_black_list\":[]}");
+ return;
+ }
+
+ (void)websWrite(wp, "{\"calling_black_list\":[");
+ char *end = "]}";
+
+ while (fgets(line, sizeof(line), file)) {
+ size_t len = strlen(line);
+
+ if (len > 0 && line[len - 1] == '\n') {
+ line[len - 1] = '\0';
+ }
+
+ if (first_line) {
+ (void)websWrite(wp, "\"%s\"", line);
+ first_line = 0;
+ } else {
+ (void)websWrite(wp, ",\"%s\"", line);
+ }
+ }
+
+ (void)websWrite(wp, end);
+ fclose(file);
+
+ return;
+}
+
+void zte_goform_add_calling_black_numbers(webs_t wp)
+{
+ char* add_number = NULL;
+ int ret = 0;
+
+ add_number = websGetVar(wp, T("addNumber"), T(""));
+ printf("add_number = %s\n", add_number);
+ ret = append_phone_number(add_number, "/cache/calling_black_list");
+
+ if(ret)
+ {
+ zte_write_result_to_web(wp, SUCCESS);
+ }
+ else
+ {
+ zte_write_result_to_web(wp, FAILURE);
+ }
+
+ return;
+}
+
+void zte_goform_delete_calling_black_numbers(webs_t wp)
+{
+ char* delete_index = NULL;
+ int index = 0;
+ int ret = 0;
+
+ delete_index = websGetVar(wp, T("deleteIndex"), T(""));
+ index = atoi(delete_index);
+
+ ret = delete_data_by_index(index, "/cache/calling_black_list");
+
+ if(ret)
+ {
+ zte_write_result_to_web(wp, SUCCESS);
+ }
+ else
+ {
+ zte_write_result_to_web(wp, FAILURE);
+ }
+
+ return;
+}
+
+void zte_goform_clear_calling_black_numbers(webs_t wp)
+{
+ int ret = 0;
+
+ ret = clear_file("/cache/calling_black_list");
+
+ if(ret)
+ {
+ zte_write_result_to_web(wp, SUCCESS);
+ }
+ else
+ {
+ zte_write_result_to_web(wp, FAILURE);
+ }
+
+ return;
+}
+
+void zte_goform_get_called_black_numbers(webs_t wp)
+{
+ char line[20] = {0};
+ FILE *file;
+ int first_line = 1;
+
+ web_feedback_header(wp);
+
+ file = fopen("/cache/called_black_list", "r");
+ if (!file) {
+ slog(MISC_PRINT, SLOG_ERR, "Failed to open called_black_list\n");
+ (void)websWrite(wp, "{\"called_black_list\":[]}");
+ return;
+ }
+
+ (void)websWrite(wp, "{\"called_black_list\":[");
+ char *end = "]}";
+
+ while (fgets(line, sizeof(line), file)) {
+ size_t len = strlen(line);
+
+ if (len > 0 && line[len - 1] == '\n') {
+ line[len - 1] = '\0';
+ }
+
+ if (first_line) {
+ (void)websWrite(wp, "\"%s\"", line);
+ first_line = 0;
+ } else {
+ (void)websWrite(wp, ",\"%s\"", line);
+ }
+ }
+
+ (void)websWrite(wp, end);
+ fclose(file);
+
+ return;
+}
+
+void zte_goform_add_called_black_numbers(webs_t wp)
+{
+ char* add_number = NULL;
+ int ret = 0;
+
+ add_number = websGetVar(wp, T("addNumber"), T(""));
+ printf("add_number = %s\n", add_number);
+ ret = append_phone_number(add_number, "/cache/called_black_list");
+
+ if(ret)
+ {
+ zte_write_result_to_web(wp, SUCCESS);
+ }
+ else
+ {
+ zte_write_result_to_web(wp, FAILURE);
+ }
+
+ return;
+}
+
+void zte_goform_delete_called_black_numbers(webs_t wp)
+{
+ char* delete_index = NULL;
+ int index = 0;
+ int ret = 0;
+
+ delete_index = websGetVar(wp, T("deleteIndex"), T(""));
+ index = atoi(delete_index);
+
+ ret = delete_data_by_index(index, "/cache/called_black_list");
+
+ if(ret)
+ {
+ zte_write_result_to_web(wp, SUCCESS);
+ }
+ else
+ {
+ zte_write_result_to_web(wp, FAILURE);
+ }
+
+ return;
+}
+
+void zte_goform_clear_called_black_numbers(webs_t wp)
+{
+ int ret = 0;
+
+ ret = clear_file("/cache/called_black_list");
+
+ if(ret)
+ {
+ zte_write_result_to_web(wp, SUCCESS);
+ }
+ else
+ {
+ zte_write_result_to_web(wp, FAILURE);
+ }
+
+ return;
+}
+
void zte_goform_voice_call_forward_all_setting(webs_t wp)
{
char* call_forward_all_number = NULL;
diff --git a/lynq/R306BR/ap/app/zte_comm/at_ctl/src/atctrl/at_rcvmsg.c b/lynq/R306BR/ap/app/zte_comm/at_ctl/src/atctrl/at_rcvmsg.c
index be66ef3..71fb5d5 100755
--- a/lynq/R306BR/ap/app/zte_comm/at_ctl/src/atctrl/at_rcvmsg.c
+++ b/lynq/R306BR/ap/app/zte_comm/at_ctl/src/atctrl/at_rcvmsg.c
@@ -1023,6 +1023,85 @@
return;
}
+static int check_phone_number_in_file(const char* phoneNumber, const char* filename)
+{
+ FILE* file = fopen(filename, "r");
+ if (file == NULL) {
+ return 0;
+ }
+
+ char buffer[20];
+ while (fgets(buffer, sizeof(buffer), file) != NULL) {
+
+ char* newline = strchr(buffer, '\n');
+ if (newline) {
+ *newline = '\0';
+ }
+
+ if (strcmp(buffer, phoneNumber) == 0) {
+ fclose(file);
+ return 1;
+ }
+ }
+
+ fclose(file);
+ return 0;
+}
+
+static void at_dsci_call_white_proc(at_str)
+{
+ char calling_white_enable[4] = {0};
+ char called_white_enable[4] = {0};
+ char phone_number[20] = {0};
+
+ cfg_get_item("calling_white_enable", calling_white_enable, sizeof(calling_white_enable));
+ cfg_get_item("called_white_enable", called_white_enable, sizeof(called_white_enable));
+ extract_phone_number(at_str, phone_number, sizeof(phone_number));
+
+ if(0 == strcmp(calling_white_enable, "1") && strstr(at_str, ",0,2,0,0,"))
+ {
+ if(check_phone_number_in_file(phone_number, "/cache/calling_white_list") == 0)
+ {
+ ipc_send_message(MODULE_ID_CALL_CTRL_LOCAL, MODULE_ID_AT_CTL, MSG_CMD_CHUP_REQ, 0, NULL, 0);
+ }
+ }
+
+ if(0 == strcmp(called_white_enable, "1") && strstr(at_str, ",1,4,0,0,"))
+ {
+ if(check_phone_number_in_file(phone_number, "/cache/called_white_list") == 0)
+ {
+ ipc_send_message(MODULE_ID_CALL_CTRL_LOCAL, MODULE_ID_AT_CTL, MSG_CMD_CHUP_REQ, 0, NULL, 0);
+ }
+ }
+}
+
+static void at_dsci_call_balck_proc(char *at_str)
+{
+ char calling_black_enable[4] = {0};
+ char called_black_enable[4] = {0};
+ char phone_number[20] = {0};
+
+ cfg_get_item("calling_black_enable", calling_black_enable, sizeof(calling_black_enable));
+ cfg_get_item("called_black_enable", called_black_enable, sizeof(called_black_enable));
+ extract_phone_number(at_str, phone_number, sizeof(phone_number));
+
+ if(0 == strcmp(calling_black_enable, "1") && strstr(at_str, ",0,2,0,0,"))
+ {
+ if(check_phone_number_in_file(phone_number, "/cache/calling_black_list") == 1)
+ {
+ ipc_send_message(MODULE_ID_CALL_CTRL_LOCAL, MODULE_ID_AT_CTL, MSG_CMD_CHUP_REQ, 0, NULL, 0);
+ }
+ }
+
+ if(0 == strcmp(called_black_enable, "1") && strstr(at_str, ",1,4,0,0,"))
+ {
+ if(check_phone_number_in_file(phone_number, "/cache/called_black_list") == 1)
+ {
+ ipc_send_message(MODULE_ID_CALL_CTRL_LOCAL, MODULE_ID_AT_CTL, MSG_CMD_CHUP_REQ, 0, NULL, 0);
+ }
+ }
+}
+
static void at_dsci_inform_proc(char* at_str)
{
at_print(AT_ERR,"at_dsci_inform_proc at_str = %s\n", at_str);
@@ -1035,6 +1114,8 @@
if(strstr(at_str, ",0,2,0,0,") || strstr(at_str, ",1,4,0,0,"))
{
at_dsci_call_block_proc(at_str);
+ at_dsci_call_white_proc(at_str);
+ at_dsci_call_balck_proc(at_str);
}
return;
diff --git a/lynq/R306BR/ap/app/zte_comm/zte_mainctrl/zte_mainctrl.c b/lynq/R306BR/ap/app/zte_comm/zte_mainctrl/zte_mainctrl.c
index ed83c32..ae36e3c 100755
--- a/lynq/R306BR/ap/app/zte_comm/zte_mainctrl/zte_mainctrl.c
+++ b/lynq/R306BR/ap/app/zte_comm/zte_mainctrl/zte_mainctrl.c
@@ -947,6 +947,11 @@
slog(NET_PRINT, SLOG_NORMAL, "reset_msg_process start!!!\n");
+ system("rm -rf /cache/call_back_list");
+ system("rm -rf /cache/calling_white_list");
+ system("rm -rf /cache/called_white_list");
+ system("rm -rf /cache/calling_black_list");
+ system("rm -rf /cache/called_black_list");
//fotaÉý¼¶Ê±²»ÔÊÐí×ö»Ö¸´³ö³§ÉèÖÃ
cfg_get_item("fota_update_flag", fota_update_flag, sizeof(fota_update_flag));
if (atoi(fota_update_flag) == 1) {
diff --git a/lynq/R306BR/ap/app/zte_webui/i18n/Messages_en.properties b/lynq/R306BR/ap/app/zte_webui/i18n/Messages_en.properties
index d7650d0..4903111 100755
--- a/lynq/R306BR/ap/app/zte_webui/i18n/Messages_en.properties
+++ b/lynq/R306BR/ap/app/zte_webui/i18n/Messages_en.properties
@@ -1810,3 +1810,7 @@
remove_number = Are you sure to remove this number?
number_exists = This number already exists.
max_numbers_reached = Exceeding the maximum number limit.
+add_calling_white_number_list = Add Number to Whitelist of Outgoing Calls
+calling_white_number_list = Whitelist of Outgoing Calls
+add_called_white_number_list = Add Number to Whitelist of Received Calls
+called_white_number_list = Whitelist of Received Calls
diff --git a/lynq/R306BR/ap/app/zte_webui/i18n/Messages_zh-cn.properties b/lynq/R306BR/ap/app/zte_webui/i18n/Messages_zh-cn.properties
index e2b715a..7648441 100755
--- a/lynq/R306BR/ap/app/zte_webui/i18n/Messages_zh-cn.properties
+++ b/lynq/R306BR/ap/app/zte_webui/i18n/Messages_zh-cn.properties
@@ -1813,4 +1813,8 @@
add_callback_number_list = 添加回拨号码
remove_number = 确定要删除所选号码吗?
number_exists = 该号码已存在!
-max_numbers_reached = 超过最大号码限制!
\ No newline at end of file
+max_numbers_reached = 超过最大号码限制!
+add_calling_white_number_list = 添加主叫白名单号码
+calling_white_number_list = 主叫白名单号码列表
+add_called_white_number_list = 添加被叫白名单号码
+called_white_number_list = 被叫白名单号码列表
diff --git a/lynq/R306BR/ap/app/zte_webui/js/com.js b/lynq/R306BR/ap/app/zte_webui/js/com.js
index 60106b1..3c4ecc9 100755
--- a/lynq/R306BR/ap/app/zte_webui/js/com.js
+++ b/lynq/R306BR/ap/app/zte_webui/js/com.js
@@ -5943,6 +5943,270 @@
}
}
+ function getCallingWhiteNumbersInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var obj = {
+ cmd: "GET_CALLING_WHITE_NUMBERS"
+ };
+ return obj;
+ }
+ function deal(paramD) {
+ var callingList = paramD.calling_white_list || [];
+ return {
+ callingList: callingList
+ };
+ }
+ }
+
+ function addCallingWhiteNumbers() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "ADD_CALLING_WHITE_NUMBERS";
+ valueReq.addNumber = values.addNumber;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+
+ function deleteCallingWhiteNumbers() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "DELETE_CALLING_WHITE_NUMBERS";
+ valueReq.deleteIndex = values.deleteIndex;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+
+ function clearCallingWhiteNumbers() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "CLEAR_CALLING_WHITE_NUMBERS";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+
+ function getCalledWhiteNumbersInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var obj = {
+ cmd: "GET_CALLED_WHITE_NUMBERS"
+ };
+ return obj;
+ }
+ function deal(paramD) {
+ var calledList = paramD.called_white_list || [];
+ return {
+ calledList: calledList
+ };
+ }
+ }
+
+ function addCalledWhiteNumbers() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "ADD_CALLED_WHITE_NUMBERS";
+ valueReq.addNumber = values.addNumber;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+
+ function deleteCalledWhiteNumbers() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "DELETE_CALLED_WHITE_NUMBERS";
+ valueReq.deleteIndex = values.deleteIndex;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+
+ function clearCalledWhiteNumbers() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "CLEAR_CALLED_WHITE_NUMBERS";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+
+ function getCallingBlackNumbersInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var obj = {
+ cmd: "GET_CALLING_BLACK_NUMBERS"
+ };
+ return obj;
+ }
+ function deal(paramD) {
+ var callingList = paramD.calling_black_list || [];
+ return {
+ callingList: callingList
+ };
+ }
+ }
+
+ function addCallingBlackNumbers() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "ADD_CALLING_BLACK_NUMBERS";
+ valueReq.addNumber = values.addNumber;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+
+ function deleteCallingBlackNumbers() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "DELETE_CALLING_BLACK_NUMBERS";
+ valueReq.deleteIndex = values.deleteIndex;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+
+ function clearCallingBlackNumbers() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "CLEAR_CALLING_BLACK_NUMBERS";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+
+ function getCalledBlackNumbersInfo() {
+ return stuffMake(arguments, {}, prepare, deal, null, false);
+ function prepare(values, isPost) {
+ var obj = {
+ cmd: "GET_CALLED_BLACK_NUMBERS"
+ };
+ return obj;
+ }
+ function deal(paramD) {
+ var calledList = paramD.called_black_list || [];
+ return {
+ calledList: calledList
+ };
+ }
+ }
+
+ function addCalledBlackNumbers() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "ADD_CALLED_BLACK_NUMBERS";
+ valueReq.addNumber = values.addNumber;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+
+ function deleteCalledBlackNumbers() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "DELETE_CALLED_BLACK_NUMBERS";
+ valueReq.deleteIndex = values.deleteIndex;
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+
+ function clearCalledBlackNumbers() {
+ return stuffMake(arguments, {}, prepare, deal, null, true);
+ function prepare(values, isPost) {
+ var valueReq = {};
+ valueReq.goformId = "CLEAR_CALLED_BLACK_NUMBERS";
+ return valueReq;
+ }
+ function deal(paramD) {
+ if (paramD) {
+ return paramD;
+ } else {
+ return errUnknownObj;
+ }
+ }
+ }
+
function reqSync(values, isPost) {
return reqAJAX(values, null, null, false, isPost);
}
@@ -6258,6 +6522,22 @@
addCallbackNumbers: addCallbackNumbers,
deleteCallbackNumbers: deleteCallbackNumbers,
clearCallbackNumbers: clearCallbackNumbers,
+ getCallingWhiteNumbersInfo: getCallingWhiteNumbersInfo,
+ addCallingWhiteNumbers: addCallingWhiteNumbers,
+ deleteCallingWhiteNumbers: deleteCallingWhiteNumbers,
+ clearCallingWhiteNumbers: clearCallingWhiteNumbers,
+ getCalledWhiteNumbersInfo: getCalledWhiteNumbersInfo,
+ addCalledWhiteNumbers: addCalledWhiteNumbers,
+ deleteCalledWhiteNumbers: deleteCalledWhiteNumbers,
+ clearCalledWhiteNumbers: clearCalledWhiteNumbers,
+ getCallingBlackNumbersInfo: getCallingBlackNumbersInfo,
+ addCallingBlackNumbers: addCallingBlackNumbers,
+ deleteCallingBlackNumbers: deleteCallingBlackNumbers,
+ clearCallingBlackNumbers: clearCallingBlackNumbers,
+ getCalledBlackNumbersInfo: getCalledBlackNumbersInfo,
+ addCalledBlackNumbers: addCalledBlackNumbers,
+ deleteCalledBlackNumbers: deleteCalledBlackNumbers,
+ clearCalledBlackNumbers: clearCalledBlackNumbers,
};
});
diff --git a/lynq/R306BR/ap/app/zte_webui/js/voice.js b/lynq/R306BR/ap/app/zte_webui/js/voice.js
index 0ddbca2..fc72157 100755
--- a/lynq/R306BR/ap/app/zte_webui/js/voice.js
+++ b/lynq/R306BR/ap/app/zte_webui/js/voice.js
@@ -229,17 +229,6 @@
target.callbackNumbers = ko.observableArray([]);
getCallbackNumbers();
- function getCallbackNumbers() {
- service.getCallbackNumbersInfo({}, function (data) {
- var numbers = data.callbackList || [];
- numbers = numbers.map(function (number) {
- return number.trim();
- });
- target.callbackNumbers(numbers);
- console.log("Successfully loaded callback numbers:", numbers);
- });
- }
-
target.callBackSet = function () {
showLoading();
var params = {};
@@ -257,6 +246,17 @@
});
};
+ function getCallbackNumbers() {
+ service.getCallbackNumbersInfo({}, function (data) {
+ var numbers = data.callbackList || [];
+ numbers = numbers.map(function (number) {
+ return number.trim();
+ });
+ target.callbackNumbers(numbers);
+ console.log("Successfully loaded callback numbers:", numbers);
+ });
+ }
+
target.addNumber = function() {
var newNumber = $("#newPhoneNumber").val().trim();
if (newNumber) {
@@ -377,6 +377,10 @@
target.callingWhiteSetting = ko.observable(callWhiteInfo.callingWhiteSetting);
target.calledWhiteSetting = ko.observable(callWhiteInfo.calledWhiteSetting);
+ target.callingWhiteNumbers = ko.observableArray([]);
+ target.calledWhiteNumbers = ko.observableArray([]);
+ getCallingWhiteNumbers();
+ getCalledWhiteNumbers();
target.callWhiteSet = function () {
showLoading();
@@ -391,6 +395,156 @@
}
});
};
+
+ function getCallingWhiteNumbers() {
+ service.getCallingWhiteNumbersInfo({}, function (data) {
+ var numbers = data.callingList || [];
+ numbers = numbers.map(function (number) {
+ return number.trim();
+ });
+ target.callingWhiteNumbers(numbers);
+ console.log("Successfully loaded calling white numbers:", numbers);
+ });
+ }
+
+ target.addCallingNumber = function() {
+ var newNumber = $("#newCallingNumber").val().trim();
+ if (newNumber) {
+ var numberExists = false;
+ for (var i = 0; i < target.callingWhiteNumbers().length; i++) {
+ if (target.callingWhiteNumbers()[i] === newNumber) {
+ numberExists = true;
+ break;
+ }
+ }
+ if (numberExists) {
+ showAlert("number_exists");
+ return;
+ }
+
+ if (target.callingWhiteNumbers().length >= 25) {
+ showAlert("max_numbers_reached");
+ return;
+ }
+
+ showLoading();
+ var params = {};
+ params.addNumber = newNumber;
+ service.addCallingWhiteNumbers(params, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ getCallingWhiteNumbers();
+ successOverlay();
+ }
+ });
+ }
+ };
+
+ target.removeCallingNumber = function(index) {
+ showConfirm("remove_number", function () {
+ showLoading();
+ var params = {};
+ params.deleteIndex = index + 1;
+ service.deleteCallingWhiteNumbers(params, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ getCallingWhiteNumbers();
+ successOverlay();
+ }
+ });
+ });
+ };
+
+ target.clearCallingNumbers = function() {
+ showConfirm("clear_numbers", function () {
+ showLoading();
+ service.clearCallingWhiteNumbers({}, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ getCallingWhiteNumbers();
+ successOverlay();
+ }
+ });
+ });
+ };
+
+ function getCalledWhiteNumbers() {
+ service.getCalledWhiteNumbersInfo({}, function (data) {
+ var numbers = data.calledList || [];
+ numbers = numbers.map(function (number) {
+ return number.trim();
+ });
+ target.calledWhiteNumbers(numbers);
+ console.log("Successfully loaded called white numbers:", numbers);
+ });
+ }
+
+ target.addCalledNumber = function() {
+ var newNumber = $("#newCalledNumber").val().trim();
+ if (newNumber) {
+ var numberExists = false;
+ for (var i = 0; i < target.calledWhiteNumbers().length; i++) {
+ if (target.calledWhiteNumbers()[i] === newNumber) {
+ numberExists = true;
+ break;
+ }
+ }
+ if (numberExists) {
+ showAlert("number_exists");
+ return;
+ }
+
+ if (target.calledWhiteNumbers().length >= 25) {
+ showAlert("max_numbers_reached");
+ return;
+ }
+
+ showLoading();
+ var params = {};
+ params.addNumber = newNumber;
+ service.addCalledWhiteNumbers(params, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ getCalledWhiteNumbers();
+ successOverlay();
+ }
+ });
+ }
+ };
+
+ target.removeCalledNumber = function(index) {
+ showConfirm("remove_number", function () {
+ showLoading();
+ var params = {};
+ params.deleteIndex = index + 1;
+ service.deleteCalledWhiteNumbers(params, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ getCalledWhiteNumbers();
+ successOverlay();
+ }
+ });
+ });
+ };
+
+ target.clearCalledNumbers = function() {
+ showConfirm("clear_numbers", function () {
+ showLoading();
+ service.clearCalledWhiteNumbers({}, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ getCalledWhiteNumbers();
+ successOverlay();
+ }
+ });
+ });
+ };
}
function initialize() {
@@ -414,6 +568,10 @@
target.callingBlackSetting = ko.observable(callBlackInfo.callingBlackSetting);
target.calledBlackSetting = ko.observable(callBlackInfo.calledBlackSetting);
+ target.callingBlackNumbers = ko.observableArray([]);
+ target.calledBlackNumbers = ko.observableArray([]);
+ getCallingBlackNumbers();
+ getCalledBlackNumbers();
target.callBlackSet = function () {
showLoading();
@@ -428,6 +586,156 @@
}
});
};
+
+ function getCallingBlackNumbers() {
+ service.getCallingBlackNumbersInfo({}, function (data) {
+ var numbers = data.callingList || [];
+ numbers = numbers.map(function (number) {
+ return number.trim();
+ });
+ target.callingBlackNumbers(numbers);
+ console.log("Successfully loaded calling white numbers:", numbers);
+ });
+ }
+
+ target.addCallingNumber = function() {
+ var newNumber = $("#newCallingNumber").val().trim();
+ if (newNumber) {
+ var numberExists = false;
+ for (var i = 0; i < target.callingBlackNumbers().length; i++) {
+ if (target.callingBlackNumbers()[i] === newNumber) {
+ numberExists = true;
+ break;
+ }
+ }
+ if (numberExists) {
+ showAlert("number_exists");
+ return;
+ }
+
+ if (target.callingBlackNumbers().length >= 25) {
+ showAlert("max_numbers_reached");
+ return;
+ }
+
+ showLoading();
+ var params = {};
+ params.addNumber = newNumber;
+ service.addCallingBlackNumbers(params, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ getCallingBlackNumbers();
+ successOverlay();
+ }
+ });
+ }
+ };
+
+ target.removeCallingNumber = function(index) {
+ showConfirm("remove_number", function () {
+ showLoading();
+ var params = {};
+ params.deleteIndex = index + 1;
+ service.deleteCallingBlackNumbers(params, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ getCallingBlackNumbers();
+ successOverlay();
+ }
+ });
+ });
+ };
+
+ target.clearCallingNumbers = function() {
+ showConfirm("clear_numbers", function () {
+ showLoading();
+ service.clearCallingBlackNumbers({}, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ getCallingBlackNumbers();
+ successOverlay();
+ }
+ });
+ });
+ };
+
+ function getCalledBlackNumbers() {
+ service.getCalledBlackNumbersInfo({}, function (data) {
+ var numbers = data.calledList || [];
+ numbers = numbers.map(function (number) {
+ return number.trim();
+ });
+ target.calledBlackNumbers(numbers);
+ console.log("Successfully loaded called white numbers:", numbers);
+ });
+ }
+
+ target.addCalledNumber = function() {
+ var newNumber = $("#newCalledNumber").val().trim();
+ if (newNumber) {
+ var numberExists = false;
+ for (var i = 0; i < target.calledBlackNumbers().length; i++) {
+ if (target.calledBlackNumbers()[i] === newNumber) {
+ numberExists = true;
+ break;
+ }
+ }
+ if (numberExists) {
+ showAlert("number_exists");
+ return;
+ }
+
+ if (target.calledBlackNumbers().length >= 25) {
+ showAlert("max_numbers_reached");
+ return;
+ }
+
+ showLoading();
+ var params = {};
+ params.addNumber = newNumber;
+ service.addCalledBlackNumbers(params, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ getCalledBlackNumbers();
+ successOverlay();
+ }
+ });
+ }
+ };
+
+ target.removeCalledNumber = function(index) {
+ showConfirm("remove_number", function () {
+ showLoading();
+ var params = {};
+ params.deleteIndex = index + 1;
+ service.deleteCalledBlackNumbers(params, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ getCalledBlackNumbers();
+ successOverlay();
+ }
+ });
+ });
+ };
+
+ target.clearCalledNumbers = function() {
+ showConfirm("clear_numbers", function () {
+ showLoading();
+ service.clearCalledBlackNumbers({}, function (result) {
+ if (result.result != "success") {
+ errorOverlay();
+ } else {
+ getCalledBlackNumbers();
+ successOverlay();
+ }
+ });
+ });
+ };
}
function initialize() {
diff --git a/lynq/R306BR/ap/app/zte_webui/subpg/voice_blacklist.html b/lynq/R306BR/ap/app/zte_webui/subpg/voice_blacklist.html
index f7bc4a4..05d66a0 100755
--- a/lynq/R306BR/ap/app/zte_webui/subpg/voice_blacklist.html
+++ b/lynq/R306BR/ap/app/zte_webui/subpg/voice_blacklist.html
@@ -71,6 +71,83 @@
<div class="form-buttons">
<input data-bind="click:callBlackSet" data-trans="apply" type="submit" formmethod="post" class="btn btn-primary margin-right-20"/>
</div>
+
+ <h3 data-bind='visible: callingBlackSetting() == "1"' data-trans="add_calling_black_number_list" class="form-title"></h3>
+
+ <div class="row form-group" data-bind='visible: callingBlackSetting() == "1"'>
+ <label data-trans='add_number' for="newCallingNumber" class="col-xs-4 side-right"></label>
+ <div class="col-xs-4">
+ <input type="text" id="newCallingNumber" name = "newCallingNumber" class="required form-control">
+ </div>
+ </div>
+
+ <div class="form-buttons" data-bind='visible: callingBlackSetting() == "1"'>
+ <input data-bind="click:addCallingNumber" data-trans="add" type="submit" formmethod="post" class="btn btn-primary margin-right-20"/>
+ </div>
+
+ <h3 data-bind='visible: callingBlackSetting() == "1"' data-trans="calling_black_number_list" class="form-title"></h3>
+
+ <div data-bind='visible: callingBlackSetting() == "1"' class="callback-number-container" style="max-height: 160px; overflow-y: auto;">
+ <table class="callback-numbers-table">
+ <thead>
+ <tr>
+ <th data-trans='station_number' style="width: 150px;"></th>
+ <th data-trans='phone_number' style="width: 300px;"></th>
+ <th data-trans='pc_action' style="width: 100px;"></th>
+ </tr>
+ </thead>
+ <tbody data-bind="foreach: callingBlackNumbers">
+ <tr>
+ <td data-bind="text: $index() + 1"></td>
+ <td><span data-bind="text: $data" class="phone-display"></span></td>
+ <td><button data-bind="click: function() { $parent.removeCallingNumber($index()) }">Delete</button></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div class="form-buttons" data-bind='visible: callingBlackSetting() == "1"'>
+ <input data-bind="click:clearCallingNumbers" data-trans="clear" type="submit" formmethod="post" class="btn btn-primary margin-right-20"/>
+ </div>
+
+ <h3 data-bind='visible: calledBlackSetting() == "1"' data-trans="add_called_black_number_list" class="form-title"></h3>
+
+ <div class="row form-group" data-bind='visible: calledBlackSetting() == "1"'>
+ <label data-trans='add_number' for="newCalledNumber" class="col-xs-4 side-right"></label>
+ <div class="col-xs-4">
+ <input type="text" id="newCalledNumber" name = "newCalledNumber" class="required form-control">
+ </div>
+ </div>
+
+ <div class="form-buttons" data-bind='visible: calledBlackSetting() == "1"'>
+ <input data-bind="click:addCalledNumber" data-trans="add" type="submit" formmethod="post" class="btn btn-primary margin-right-20"/>
+ </div>
+
+ <h3 data-bind='visible: calledBlackSetting() == "1"' data-trans="called_black_number_list" class="form-title"></h3>
+
+ <div data-bind='visible: calledBlackSetting() == "1"' class="callback-number-container" style="max-height: 160px; overflow-y: auto;">
+ <table class="callback-numbers-table">
+ <thead>
+ <tr>
+ <th data-trans='station_number' style="width: 150px;"></th>
+ <th data-trans='phone_number' style="width: 300px;"></th>
+ <th data-trans='pc_action' style="width: 100px;"></th>
+ </tr>
+ </thead>
+ <tbody data-bind="foreach: calledBlackNumbers">
+ <tr>
+ <td data-bind="text: $index() + 1"></td>
+ <td><span data-bind="text: $data" class="phone-display"></span></td>
+ <td><button data-bind="click: function() { $parent.removeCalledNumber($index()) }">Delete</button></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div class="form-buttons" data-bind='visible: calledBlackSetting() == "1"'>
+ <input data-bind="click:clearCalledNumbers" data-trans="clear" type="submit" formmethod="post" class="btn btn-primary margin-right-20"/>
+ </div>
+
</div>
</form>
</div>
diff --git a/lynq/R306BR/ap/app/zte_webui/subpg/voice_whitelist.html b/lynq/R306BR/ap/app/zte_webui/subpg/voice_whitelist.html
index d7f8420..bd7d469 100755
--- a/lynq/R306BR/ap/app/zte_webui/subpg/voice_whitelist.html
+++ b/lynq/R306BR/ap/app/zte_webui/subpg/voice_whitelist.html
@@ -71,6 +71,83 @@
<div class="form-buttons">
<input data-bind="click:callWhiteSet" data-trans="apply" type="submit" formmethod="post" class="btn btn-primary margin-right-20"/>
</div>
+
+ <h3 data-bind='visible: callingWhiteSetting() == "1"' data-trans="add_calling_white_number_list" class="form-title"></h3>
+
+ <div class="row form-group" data-bind='visible: callingWhiteSetting() == "1"'>
+ <label data-trans='add_number' for="newCallingNumber" class="col-xs-4 side-right"></label>
+ <div class="col-xs-4">
+ <input type="text" id="newCallingNumber" name = "newCallingNumber" class="required form-control">
+ </div>
+ </div>
+
+ <div class="form-buttons" data-bind='visible: callingWhiteSetting() == "1"'>
+ <input data-bind="click:addCallingNumber" data-trans="add" type="submit" formmethod="post" class="btn btn-primary margin-right-20"/>
+ </div>
+
+ <h3 data-bind='visible: callingWhiteSetting() == "1"' data-trans="calling_white_number_list" class="form-title"></h3>
+
+ <div data-bind='visible: callingWhiteSetting() == "1"' class="callback-number-container" style="max-height: 160px; overflow-y: auto;">
+ <table class="callback-numbers-table">
+ <thead>
+ <tr>
+ <th data-trans='station_number' style="width: 150px;"></th>
+ <th data-trans='phone_number' style="width: 300px;"></th>
+ <th data-trans='pc_action' style="width: 100px;"></th>
+ </tr>
+ </thead>
+ <tbody data-bind="foreach: callingWhiteNumbers">
+ <tr>
+ <td data-bind="text: $index() + 1"></td>
+ <td><span data-bind="text: $data" class="phone-display"></span></td>
+ <td><button data-bind="click: function() { $parent.removeCallingNumber($index()) }">Delete</button></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div class="form-buttons" data-bind='visible: callingWhiteSetting() == "1"'>
+ <input data-bind="click:clearCallingNumbers" data-trans="clear" type="submit" formmethod="post" class="btn btn-primary margin-right-20"/>
+ </div>
+
+ <h3 data-bind='visible: calledWhiteSetting() == "1"' data-trans="add_called_white_number_list" class="form-title"></h3>
+
+ <div class="row form-group" data-bind='visible: calledWhiteSetting() == "1"'>
+ <label data-trans='add_number' for="newCalledNumber" class="col-xs-4 side-right"></label>
+ <div class="col-xs-4">
+ <input type="text" id="newCalledNumber" name = "newCalledNumber" class="required form-control">
+ </div>
+ </div>
+
+ <div class="form-buttons" data-bind='visible: calledWhiteSetting() == "1"'>
+ <input data-bind="click:addCalledNumber" data-trans="add" type="submit" formmethod="post" class="btn btn-primary margin-right-20"/>
+ </div>
+
+ <h3 data-bind='visible: calledWhiteSetting() == "1"' data-trans="called_white_number_list" class="form-title"></h3>
+
+ <div data-bind='visible: calledWhiteSetting() == "1"' class="callback-number-container" style="max-height: 160px; overflow-y: auto;">
+ <table class="callback-numbers-table">
+ <thead>
+ <tr>
+ <th data-trans='station_number' style="width: 150px;"></th>
+ <th data-trans='phone_number' style="width: 300px;"></th>
+ <th data-trans='pc_action' style="width: 100px;"></th>
+ </tr>
+ </thead>
+ <tbody data-bind="foreach: calledWhiteNumbers">
+ <tr>
+ <td data-bind="text: $index() + 1"></td>
+ <td><span data-bind="text: $data" class="phone-display"></span></td>
+ <td><button data-bind="click: function() { $parent.removeCalledNumber($index()) }">Delete</button></td>
+ </tr>
+ </tbody>
+ </table>
+ </div>
+
+ <div class="form-buttons" data-bind='visible: calledWhiteSetting() == "1"'>
+ <input data-bind="click:clearCalledNumbers" data-trans="clear" type="submit" formmethod="post" class="btn btn-primary margin-right-20"/>
+ </div>
+
</div>
</form>
</div>