[Feature][DATA][T8TSK-211]support the handle value of setup_data_call set to a valid value after timeout 2
Change-Id: I035bd34033785b3fc6e28cf6b9231b470ebf54d1
(cherry picked from commit 8dd6fc61cbf404e58fcc60966758664162f62f76)
diff --git a/lib/liblynq-data/lynq_data.cpp b/lib/liblynq-data/lynq_data.cpp
index 10795bf..dfee4e0 100755
--- a/lib/liblynq-data/lynq_data.cpp
+++ b/lib/liblynq-data/lynq_data.cpp
@@ -98,6 +98,8 @@
char ifaceName[LYNQ_IFACE_NAME_MAX_LEN];
int hasUsed;
int hasTimeout;
+ int status;
+ char statusApnType[LYNQ_APN_TYPE_MAX_LEN];
}lynq_apn_t;
lynq_apn_t lynq_apn_table[LYNQ_APN_CHANNEL_MAX] = {};
lynq_data_call_response_v11_t lynq_data_call_lists[LYNQ_APN_CHANNEL_MAX] = {};
@@ -109,7 +111,7 @@
int len = 0;
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);
+ len = 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)
{
@@ -119,6 +121,22 @@
return -1;
}
+int getDeactApnID(char apnType[])
+{
+ int ret = 0;
+ int len = 0;
+ for(ret;ret<LYNQ_APN_CHANNEL_MAX;ret++)
+ {
+ len = 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].statusApnType,apnType,len)==0)
+ {
+ return ret;
+ }
+ }
+ return -1;
+}
+
void updateApnTable(lynq_apn_t *apn_table,char apn[],char apntype[],char ifaceName[])
{
LYDBGLOG("[updateApnTable] apn:%s,apntype:%s,ifaceName:%s",apn,apntype,ifaceName);
@@ -137,7 +155,7 @@
void cleanOnceApnTable(int apnId)
{
- LYDBGLOG("apn id:%d",apnId);
+ LYDBGLOG("%s:apn id:%d",__FUNCTION__,apnId);
if((apnId < 0) || (apnId > LYNQ_APN_CHANNEL_MAX-1))
{
LYERRLOG("apn id is invalid!!!");
@@ -145,18 +163,44 @@
}
lynq_apn_table[apnId].hasTimeout = 0;
lynq_apn_table[apnId].hasUsed = 0;
+ memcpy(lynq_apn_table[apnId].statusApnType,lynq_apn_table[apnId].apnType,strlen(lynq_apn_table[apnId].apnType));
bzero(lynq_apn_table[apnId].apn,LYNQ_APN_MAX_LEN);
- //bzero(lynq_apn_table[apnId].apnType,LYNQ_APN_TYPE_MAX_LEN);
+ bzero(lynq_apn_table[apnId].apnType,LYNQ_APN_TYPE_MAX_LEN);
bzero(lynq_apn_table[apnId].ifaceName,LYNQ_IFACE_NAME_MAX_LEN);
+ lynq_apn_table[apnId].status = 32;
return;
}
+void cleanDeactApn(int apnId)
+{
+ LYDBGLOG("%s:apn id:%d",__FUNCTION__,apnId);
+ if((apnId < 0) || (apnId > LYNQ_APN_CHANNEL_MAX-1))
+ {
+ LYERRLOG("apn id is invalid!!!");
+ return;
+ }
+ lynq_apn_table[apnId].status = 0;
+ bzero(lynq_apn_table[apnId].statusApnType,LYNQ_APN_TYPE_MAX_LEN);
+}
+
+void updateDeactApn(int apnId,int pdnState)
+{
+ LYDBGLOG("%s:apn id:%d",__FUNCTION__,apnId);
+ if((apnId < 0) || (apnId > LYNQ_APN_CHANNEL_MAX-1))
+ {
+ LYERRLOG("apn id is invalid!!!");
+ return;
+ }
+ lynq_apn_table[apnId].status = pdnState;
+}
+
+
int getUnusedElement()
{
- if (lynq_apn_table == NULL)
- {
- LYERRLOG("get UnusedElemnt apn_table is null");
- return -1;
- }
+ if (lynq_apn_table == NULL)
+ {
+ LYERRLOG("get UnusedElemnt apn_table is null");
+ return -1;
+ }
for(int i=0;i < LYNQ_APN_CHANNEL_MAX; i++)
{
if(lynq_apn_table[i].hasUsed!=1)
@@ -374,9 +418,9 @@
}
for(ret;ret<LYNQ_APN_CHANNEL_MAX;ret++)
{
- LYINFLOG("[%s][%d] apn=%s ;apntype=%s ;ifname=%s ;hasTimeout = %d ; hasUsed = %d",__FUNCTION__,ret, \
+ LYINFLOG("[%s][%d] apn=%s ;apntype=%s ;ifname=%s ;hasTimeout = %d ; hasUsed = %d,status = %d,statusDeactApn = %s",__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);
+ lynq_apn_table[ret].hasTimeout,lynq_apn_table[ret].hasUsed,lynq_apn_table[ret].status,lynq_apn_table[ret].statusApnType);
}
return 0;
}
@@ -394,6 +438,7 @@
int urcid;
int slot_id;
int check_count = 0;
+ static int apnId=-1;
int pdnState = 0;
char apn[LYNQ_APN_MAX_LEN];
@@ -437,10 +482,10 @@
}
free(urc_msg);
//sendSignalDataCallStateChange();
- int apnId = getLynqApnID(apnType);
- LYINFLOG("URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d,handle:%d",apnType,ifaceName,apn,pdnState,apnId);
+ apnId = getLynqApnID(apnType);
if(apnId >= 0)
{
+ LYINFLOG("URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d,handle:%d",apnType,ifaceName,apn,pdnState,apnId);
if(lynq_apn_table[apnId].hasTimeout==1)
{
/*whether timeout?,real or not,*/
@@ -465,9 +510,16 @@
else
{
data_invaild_error = 1;
- printf_apn_table();
- LYERRLOG("invalid apnId:%d",apnId);
- break;
+ printf_apn_table_debug(__FUNCTION__,__LINE__);
+ apnId = getDeactApnID(apnType);
+ if(apnId < 0)
+ {
+ LYERRLOG("[%d]invalid apnId:%d",__LINE__,apnId);
+ break;
+ }
+ LYINFLOG("URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d,handle:%d",apnType,ifaceName,apn,pdnState,apnId);
+ updateDeactApn(apnId,pdnState);
+ printf_apn_table_debug(__FUNCTION__,__LINE__);
}
pthread_mutex_lock(&s_lynq_urc_vector_mutex);
s_data_urc_wait_list.push_back(apnId);
@@ -506,16 +558,34 @@
}
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);
+ apnId = getLynqApnID(apnType);
if(apnId >= 0)
{
+ LYINFLOG("URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d,handle:%d",apnType,ifaceName,apn,pdnState,apnId);
+ lynq_data_call_change_id = apnId;
+ //bzero(lynq_apn_table[apnId].apnType,LYNQ_APN_TYPE_MAX_LEN);//async clean
+ pthread_mutex_lock(&s_lynq_urc_vector_mutex);
+ s_data_urc_wait_list.push_back(apnId);
+ pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
+ sendSignalPdnChange();
+ }
+ else
+ {
+ apnId = getDeactApnID(apnType);
+ if(apnId < 0)
+ {
+ LYERRLOG("[%d]invalid apnId:%d",__LINE__,apnId);
+ break;
+ }
+ LYINFLOG("URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d,handle:%d",apnType,ifaceName,apn,pdnState,apnId);
+ cleanDeactApn(apnId);
lynq_data_call_change_id = apnId;
bzero(lynq_apn_table[apnId].apnType,LYNQ_APN_TYPE_MAX_LEN);//async clean
pthread_mutex_lock(&s_lynq_urc_vector_mutex);
s_data_urc_wait_list.push_back(apnId);
pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
sendSignalPdnChange();
+ printf_apn_table_debug(__FUNCTION__,__LINE__);
}
LYDBGLOG("data call state:%d",lynq_data_call);
if(lynq_data_call==1)
@@ -1093,7 +1163,7 @@
s_data_urc_wait_list.erase(iter);
pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
- LYINFLOG("lynq data call id:%d",*handle);
+ LYINFLOG("lynq_wait_data_call_state_change handle:%d",*handle);
return 0;
}
/*Warren add for T800 platform 2021/11/19 end*/