[Bugfix][API-1006][PL] 1.Fix the problem that liblynq-data parses apn into apntype when data call disconnected 2.Fix the problem that Memory leak caused by urc_msg 3.Add debug log
Change-Id: I85bb2ca225e3f22b96bb9f1b770394b62973afaa
diff --git a/lib/liblynq-data/lynq_data.cpp b/lib/liblynq-data/lynq_data.cpp
index 11bf4f6..19e8d63 100755
--- a/lib/liblynq-data/lynq_data.cpp
+++ b/lib/liblynq-data/lynq_data.cpp
@@ -110,6 +110,7 @@
for(ret;ret<LYNQ_APN_CHANNEL_MAX;ret++)
{
len = strlen(lynq_apn_table[ret].apnType)<strlen(apnType) ? strlen(lynq_apn_table[ret].apnType):strlen(apnType);
+ LYINFLOG("apn_table[%d].apnType:%s,input apntype:%s,len:%d",ret,lynq_apn_table[ret].apnType,apnType,len);
if(strncmp(lynq_apn_table[ret].apnType,apnType,len)==0)
{
return ret;
@@ -362,20 +363,25 @@
int printf_apn_table()
{
int ret = 0;
- if (lynq_apn_table == NULL)
- {
- LYERRLOG("apn table is null");
- return -1;
- }
+ if (lynq_apn_table == NULL)
+ {
+ LYERRLOG("apn table is null");
+ return -1;
+ }
for(ret;ret<LYNQ_APN_CHANNEL_MAX;ret++)
{
- LYINFLOG("[Typethree test info]apn=%s ;apntype=%s ;ifname=%s ;hasTimeout = %d ; hasUsed = %d", \
+ LYINFLOG("[%s][%d] apn=%s ;apntype=%s ;ifname=%s ;hasTimeout = %d ; hasUsed = %d",__FUNCTION__,ret, \
lynq_apn_table[ret].apn,lynq_apn_table[ret].apnType,lynq_apn_table[ret].ifaceName, \
lynq_apn_table[ret].hasTimeout,lynq_apn_table[ret].hasUsed);
}
return 0;
}
+void printf_apn_table_debug(const char *fun,int line)
+{
+ LYINFLOG("[%s][%d]apn_table msg",fun,line);
+ printf_apn_table();
+}
void urc_msg_process(Parcel *p)
{
@@ -407,25 +413,28 @@
{
urc_msg = strdupReadString_p(p);
int len = strlen(urc_msg);
- if(len < LYNQ_APN_MAX_LEN-1)
+ if((len < LYNQ_APN_MAX_LEN-1) && (len > 0))
{
memcpy(apn,urc_msg,len+1);
}
+ free(urc_msg);
urc_msg = strdupReadString_p(p);
len = strlen(urc_msg);
- if(len < LYNQ_APN_TYPE_MAX_LEN-1)
+ if((len < LYNQ_APN_TYPE_MAX_LEN-1) && (len > 0))
{
memcpy(apnType,urc_msg,len+1);
}
+ free(urc_msg);
urc_msg = strdupReadString_p(p);
len = strlen(urc_msg);
- if(len < LYNQ_IFACE_NAME_MAX_LEN-1)
+ if((len < LYNQ_IFACE_NAME_MAX_LEN-1) && (len > 0))
{
memcpy(ifaceName,urc_msg,strlen(urc_msg)+1);
}
+ free(urc_msg);
//sendSignalDataCallStateChange();
int apnId = getLynqApnID(apnType);
- LYINFLOG("URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d",apnType,ifaceName,apn,pdnState);
+ LYINFLOG("URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d,handle:%d",apnType,ifaceName,apn,pdnState,apnId);
if(apnId >= 0)
{
if(lynq_apn_table[apnId].hasTimeout==1)
@@ -446,11 +455,12 @@
break;
}
updateApnTable(&lynq_apn_table[apnId],apn,apnType,ifaceName);
+ printf_apn_table_debug(__FUNCTION__,__LINE__);
}
/*To be completed*/
else
{
- data_invaild_error = 1;
+ data_invaild_error = 1;
printf_apn_table();
LYERRLOG("invalid apnId:%d",apnId);
break;
@@ -478,17 +488,22 @@
lynq_data_call = 0;
data_timelimit = 0;
}
+ printf_apn_table_debug(__FUNCTION__,__LINE__);
}
else
{
urc_msg = strdupReadString_p(p);
+ free(urc_msg);
+ urc_msg = strdupReadString_p(p);
len = strlen(urc_msg);
if(len < LYNQ_APN_TYPE_MAX_LEN-1)
{
memcpy(apnType,urc_msg,len+1);
}
+ free(urc_msg);
LYDBGLOG("[data thread_urc_recv] apntype:%s",apnType);
int apnId = getLynqApnID(apnType);
+ LYINFLOG("URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d,handle:%d",apnType,ifaceName,apn,pdnState,apnId);
if(apnId >= 0)
{
lynq_data_call_change_id = apnId;
@@ -516,6 +531,7 @@
lynq_data_call = 0;
data_timelimit = 0;
}
+ printf_apn_table_debug(__FUNCTION__,__LINE__);
}
break;
case LYNQ_URC_MODIFY_APNDB:
@@ -530,6 +546,7 @@
strcpy(g_lynq_apn_result, urc_msg);
sendSignalApnChange();
}
+ free(urc_msg);
break;
case LYNQ_URC_RESET_APNDB:
{
@@ -544,6 +561,7 @@
strcpy(g_lynq_apn_result, urc_msg);
sendSignalApnChange();
}
+ free(urc_msg);
}
default:
break;
@@ -678,16 +696,18 @@
error = LYNQ_E_TIME_OUT;
LYERRLOG("timeout:wait data Call state fail!!!");
lynq_apn_table[lynq_data_call_id].hasTimeout = 1;
- if (data_invaild_error == 1)
- {
- data_invaild_error = 0;
- LYERRLOG("urc apn info error!!!");
- return 8085;
- }
+ if (data_invaild_error == 1)
+ {
+ data_invaild_error = 0;
+ LYERRLOG("urc apn info error!!!");
+ return 8085;
+ }
+ printf_apn_table_debug(__FUNCTION__,__LINE__);
return error;
}
*handle = lynq_data_call_id;
}
+ printf_apn_table_debug(__FUNCTION__,__LINE__);
#endif //GSW_RIL_CFG
return error;
}
@@ -740,6 +760,7 @@
JumpHeader(p,&resp_type,&request,&slot_id,&error);
LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
cleanOnceApnTable(lynq_data_call_id);
+ printf_apn_table_debug(__FUNCTION__,__LINE__);
return error;
}
int lynq_setup_data_call_sp(int *handle,char *apn,char *apnType,char *user,char *password,char *authType,char *normalProtocol,char *roamingProtocol)
@@ -849,16 +870,18 @@
error = LYNQ_E_TIME_OUT;
LYERRLOG("timeout:wait data Call state fail!!!");
lynq_apn_table[lynq_data_call_id].hasTimeout = 1;
- if (data_invaild_error == 1)
- {
- data_invaild_error = 0;
- LYERRLOG("urc apn info error!!!");
- return 8085;
- }
+ if (data_invaild_error == 1)
+ {
+ data_invaild_error = 0;
+ LYERRLOG("urc apn info error!!!");
+ return 8085;
+ }
+ printf_apn_table_debug(__FUNCTION__,__LINE__);
return error;
}
*handle = lynq_data_call_id;
}
+ printf_apn_table_debug(__FUNCTION__,__LINE__);
return error;
}
/*
@@ -949,17 +972,47 @@
p.readInt32(&dataCallList[i].cid);
p.readInt32(&dataCallList[i].active);
temp_char = strdupReadString(p);
- memcpy(dataCallList[i].type,temp_char,strlen(temp_char)+1);
+ LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+ if(temp_char)
+ {
+ memcpy(dataCallList[i].type,temp_char,strlen(temp_char)+1);
+ free(temp_char);
+ }
temp_char = strdupReadString(p);
- memcpy(dataCallList[i].ifname,temp_char,strlen(temp_char)+1);
+ LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+ if(temp_char)
+ {
+ memcpy(dataCallList[i].ifname,temp_char,strlen(temp_char)+1);
+ free(temp_char);
+ }
temp_char = strdupReadString(p);
- memcpy(dataCallList[i].addresses,temp_char,strlen(temp_char)+1);
+ LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+ if(temp_char)
+ {
+ memcpy(dataCallList[i].addresses,temp_char,strlen(temp_char)+1);
+ free(temp_char);
+ }
temp_char = strdupReadString(p);
- memcpy(dataCallList[i].dnses,temp_char,strlen(temp_char)+1);
+ LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+ if(temp_char)
+ {
+ memcpy(dataCallList[i].dnses,temp_char,strlen(temp_char)+1);
+ free(temp_char);
+ }
temp_char = strdupReadString(p);
- memcpy(dataCallList[i].gateways,temp_char,strlen(temp_char)+1);
+ LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+ if(temp_char)
+ {
+ memcpy(dataCallList[i].gateways,temp_char,strlen(temp_char)+1);
+ free(temp_char);
+ }
temp_char = strdupReadString(p);
- memcpy(dataCallList[i].pcscf,temp_char,strlen(temp_char)+1);
+ LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
+ if(temp_char)
+ {
+ memcpy(dataCallList[i].pcscf,temp_char,strlen(temp_char)+1);
+ free(temp_char);
+ }
p.readInt32(&dataCallList[i].mtu);
}
}