T108:解决Bug85748/Bug85747/Bug85784/Bug85787/Bug85794/Bug85100
Change-Id: Ie6db4410a018eab847e98e63b787b0ce7c880abf
diff --git a/mbtk/liblynq_lib/src/lynq_data_call.c b/mbtk/liblynq_lib/src/lynq_data_call.c
index 9e42d85..8b4d78a 100755
--- a/mbtk/liblynq_lib/src/lynq_data_call.c
+++ b/mbtk/liblynq_lib/src/lynq_data_call.c
@@ -40,6 +40,7 @@
static qser_data_call_evt_cb_t qser_net_status_cb = NULL;
static qser_apn_info_s qser_apn_info[QSER_APN_NUM] = {0};
static bool qser_apn_info_state[QSER_APN_NUM] = {0};
+static bool qser_idx_pdp_state[QSER_APN_NUM];
static char qser_apn_add_save_state[QSER_APN_NUM + 1] = {0};
static char qser_apn_auth_state[QSER_APN_NUM + 1] = {0};
#if defined(MBTK_ALL_CID_SUPPORT)
@@ -285,7 +286,58 @@
/*Check parameter*/
int qser_check_apn_name_type(qser_apn_info_s *apn)
{
- int pdp_type_tmp = 0;
+ if(apn == NULL)
+ {
+ LOGE("[qser_data_call] qser_check_apn_type apn is NULL!");
+ return QSER_RESULT_FAIL;
+ }
+
+ //check default idx = 0
+ int apn_name_length = strlen(apn->apn_name);
+ //LOGE("[qser_data_call] qser_apn_info[0].apn_name: %s!", qser_apn_info[0].apn_name);
+ char *p = strchr(qser_apn_info[0].apn_name, '.');
+ if(p == NULL)
+ {
+ LOGE("[qser_data_call] qser_check_apn_type not find!");
+ //return QSER_RESULT_FAIL;
+ }
+ else
+ {
+ int default_apn_name_length = p - (qser_apn_info[0].apn_name);
+ //LOGE("[qser_data_call] qser_check_apn_type default_apn_name_length = [%d]!", default_apn_name_length);
+ if(default_apn_name_length == apn_name_length)
+ {
+ int i = 0;
+ while(i < default_apn_name_length)
+ {
+ if(isalpha(qser_apn_info[0].apn_name[i]) && isalpha(apn->apn_name[i]))
+ {
+ if(tolower(qser_apn_info[0].apn_name[i]) != tolower(apn->apn_name[i]))
+ {
+ break;
+ }
+ }
+ else
+ {
+ //LOGE("[qser_data_call] not char!");
+ if(qser_apn_info[0].apn_name[i] != apn->apn_name[i])
+ {
+ break;
+ }
+ }
+
+ i++;
+ }
+
+ if(i == default_apn_name_length)
+ {
+ LOGE("[qser_data_call] apn_name is same!idx = [0]");
+ return QSER_RESULT_FAIL;
+ }
+ }
+ }
+ //check 1 -6
+ int pdp_type_tmp = 1;
for (;pdp_type_tmp < QSER_APN_NUM; pdp_type_tmp++)
{
if(pdp_type_tmp == apn->profile_idx)
@@ -294,11 +346,25 @@
}
if( (qser_apn_add_save_state[pdp_type_tmp] == '1') || (qser_apn_add_save_state[pdp_type_tmp] == '2') )
{
- if (strcmp(qser_apn_info[pdp_type_tmp].apn_name, apn->apn_name) == 0 || strcmp(qser_apn_info[pdp_type_tmp].apn_type, apn->apn_type) == 0)
+ if(strcmp(qser_apn_info[pdp_type_tmp].apn_type, apn->apn_type) == 0)
{
- LOGE("[qser_data_call] qser_check_apn_name_type error!");
+ LOGE("[qser_data_call] apn_type is same!idx = [%d]", pdp_type_tmp);
return QSER_RESULT_FAIL;
}
+ if (strcmp(qser_apn_info[pdp_type_tmp].apn_name, apn->apn_name) == 0)
+ {
+ if(qser_apn_info[pdp_type_tmp].pdp_type == QSER_APN_PDP_TYPE_IPV4V6)
+ {
+ LOGE("[qser_data_call] apn_name is same and pdp_type is IPV4V6!idx = [%d]", pdp_type_tmp);
+ return QSER_RESULT_FAIL;
+ }
+
+ if(qser_apn_info[pdp_type_tmp].pdp_type == apn->pdp_type)
+ {
+ LOGE("[qser_data_call] pdp_type is same and pdp_type is same!idx = [%d]", pdp_type_tmp);
+ return QSER_RESULT_FAIL;
+ }
+ }
}
}
@@ -348,6 +414,7 @@
{
qser_default_pdp_idx = -1;
}
+ qser_idx_pdp_state[idx] = false;
if(qser_net_status_cb != NULL)
{
@@ -481,7 +548,13 @@
{
if(qser_apn_add_save_state[apns[i].cid - 1] == '0')
{
- LOGE("[qser_data_call] idx no open.");
+ //LOGE("[qser_data_call] idx no open.");
+#if defined(MBTK_ALL_CID_SUPPORT)
+ if(apns[i].cid - 1 == 0)
+ {
+ qser_apn_info_param_convert(apns[i].cid - 1, &qser_apn_info[apns[i].cid - 1], &apns[i]);
+ }
+#endif
continue;
}
@@ -506,6 +579,12 @@
}
}
}
+
+ int idx = 0;
+ for(;idx < QSER_APN_NUM; idx++)
+ {
+ qser_idx_pdp_state[idx] = false;
+ }
LOGE("[qser_data_call] mbtk_info_handle_get() success.");
return QSER_RESULT_SUCCESS;
}
@@ -623,6 +702,7 @@
}
#endif
+ qser_idx_pdp_state[data_call->profile_idx] = true;
return QSER_RESULT_SUCCESS;
}
@@ -756,6 +836,7 @@
qser_default_pdp_idx = -1;
}
#endif
+ qser_idx_pdp_state[profile_idx] = false;
return QSER_RESULT_SUCCESS;
}
@@ -1176,6 +1257,12 @@
LOGE("[qser_data_call] handle is NULL.");
return QSER_RESULT_FAIL;
}
+
+ if(qser_idx_pdp_state[profile_idx] == true)
+ {
+ LOGE("[qser_data_call] profile_idx[%d] open pdp.", profile_idx);
+ return QSER_RESULT_FAIL;
+ }
if(qser_check_profile_idx(profile_idx) < 0)
{
@@ -1241,7 +1328,7 @@
continue;
}
}
- if(qser_apn_info_param_convert(apns[i].cid - 1, &apn_list->apn[i], &apns[i]) != 0)
+ if(qser_apn_info_param_convert(apns[i].cid - 1, &apn_list->apn[apn_list->cnt], &apns[i]) != 0)
{
LOGE("[qser_data_call] qser_apn_info_param_convert fail");
return QSER_RESULT_FAIL;