[Feature][DATA][T8TSK-211]support the handle value of setup_data_call set to a valid value after timeout
Change-Id: I4a263d2aa6057ad67f5912325d827540e9dbcd38
(cherry picked from commit d1128cd00dd22fbe8a5c23d0762934b16308702d)
diff --git a/lib/liblynq-data/lynq_data.cpp b/lib/liblynq-data/lynq_data.cpp
index 3d38cdf..45967f4 100755
--- a/lib/liblynq-data/lynq_data.cpp
+++ b/lib/liblynq-data/lynq_data.cpp
@@ -57,6 +57,8 @@
int lynq_client_sockfd = 0;
int Global_uToken = 0;
+struct sockaddr_in lynq_data_socket_server_addr;
+int lynq_data_socket_server_addr_len;
int lynq_data_call_change_id = -1;
pthread_t lynq_data_tid =-1;
@@ -171,8 +173,11 @@
{
int ret = 0;
ret = getUnusedElement();
- memcpy(lynq_apn_table[ret].apnType,apnType,strlen(apnType)+1);
- lynq_apn_table[ret].hasUsed = 1;
+ if(ret)
+ {
+ memcpy(lynq_apn_table[ret].apnType,apnType,strlen(apnType)+1);
+ lynq_apn_table[ret].hasUsed = 1;
+ }
return ret;
}
@@ -261,10 +266,11 @@
char recvline[LYNQ_REC_BUF];
bzero(recvline,LYNQ_REC_BUF);
/* receive data from server */
- len = read(sockfd, recvline, LYNQ_REC_BUF);
+ len = recvfrom(sockfd,recvline,LYNQ_REC_BUF,0,(struct sockaddr *)&lynq_data_socket_server_addr,(socklen_t *)&lynq_data_socket_server_addr_len);
+ //len = read(sockfd, recvline, LYNQ_REC_BUF);
if(len == -1)
{
- LYERRLOG("read error");
+ LYERRLOG("get_response fail,errno:%d",errno);
return -1;
}
if (recvline != NULL) {
@@ -315,12 +321,12 @@
/*Warren add for T800 platform 2021/11/19 start*/
int lynq_socket_client_start()
{
- struct sockaddr_in lynq_data_socket_server_addr;
/* init lynq_socket_server_addr */
bzero(&lynq_data_socket_server_addr, sizeof(lynq_data_socket_server_addr));
lynq_data_socket_server_addr.sin_family = AF_INET;
lynq_data_socket_server_addr.sin_port = htons(LYNQ_SERVICE_PORT);
lynq_data_socket_server_addr.sin_addr.s_addr = inet_addr(LYNQ_ADDRESS);
+ lynq_data_socket_server_addr_len = sizeof(lynq_data_socket_server_addr);
/*
if(inet_pton(AF_INET,"127.0.0.1", &lynq_socket_server_addr.sin_addr) <= 0)
{
@@ -336,7 +342,7 @@
if (setsockopt(lynq_client_sockfd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0)
{
- LYERRLOG("time out setting failed");
+ LYERRLOG("time out setting failed");
}
if(connect(lynq_client_sockfd, (struct sockaddr *)&lynq_data_socket_server_addr, sizeof(lynq_data_socket_server_addr)) == -1)
{
@@ -674,15 +680,17 @@
if (lynq_data_call_id < 0)
{
LYERRLOG("update apn table fail error id = %d",lynq_data_call_id);
- return -1;
+ return LYNQ_E_NULL_ANONALY+1;
}
+ *handle = lynq_data_call_id;//T8TSK-211 (2023/5/16) why? If it times out, the client application will also try to reconnect.
+ //Reconnection needs to be deactivated first, and deactivation needs to know which apn to activate.
lynq_data_call = 1;
pthread_mutex_lock(&g_lynq_data_sendto_mutex);
if(send_request(lynq_client_sockfd,&client)==-1)
{
LYERRLOG("send request fail");
perror("[LYNQ_DATA] send request fail:");
- return -1;
+ return LYNQ_E_NULL_ANONALY+2;
}
get_response(lynq_client_sockfd,p);
pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
@@ -705,7 +713,6 @@
printf_apn_table_debug(__FUNCTION__,__LINE__);
return error;
}
- *handle = lynq_data_call_id;
}
printf_apn_table_debug(__FUNCTION__,__LINE__);
#endif //GSW_RIL_CFG
@@ -785,7 +792,7 @@
if(handle==NULL||apn==NULL||apnType==NULL)
{
LYERRLOG("handle ,apn or apntype is null!!!");
- return -1;
+ return LYNQ_E_NULL_ANONALY;
}
#endif //GSW_RIL_CFG
if(user==NULL)
@@ -849,15 +856,16 @@
if (lynq_data_call_id < 0)
{
LYERRLOG("update apn table fail error id = %d",lynq_data_call_id);
- return -1;
+ return LYNQ_E_NULL_ANONALY+1;
}
+ *handle = lynq_data_call_id;//T8TSK-211 (2023/5/16)
lynq_data_call = 1;
pthread_mutex_lock(&g_lynq_data_sendto_mutex);
if(send_request(lynq_client_sockfd,&client)==-1)
{
LYERRLOG("send request fail");
perror("[LYNQ_DATA] send request fail:");
- return -1;
+ return LYNQ_E_NULL_ANONALY+2;
}
get_response(lynq_client_sockfd,p);
pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
@@ -865,7 +873,7 @@
LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
if(error==0)
{
- data_timelimit = 1;
+ data_timelimit = 1;
if(waitDataCallstateChange(60000)==ETIMEDOUT)//60s
{
error = LYNQ_E_TIME_OUT;
@@ -880,7 +888,6 @@
printf_apn_table_debug(__FUNCTION__,__LINE__);
return error;
}
- *handle = lynq_data_call_id;
}
printf_apn_table_debug(__FUNCTION__,__LINE__);
return error;
@@ -934,6 +941,7 @@
LYERRLOG("dataCallList is null!!!");
return -1;
}
+ Global_uToken++;
client.uToken = Global_uToken;
client.request = 57;//RIL_REQUEST_DATA_CALL_LIST
client.paramLen = 0;
@@ -960,7 +968,7 @@
{
return -1;
}
- LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
+ LYINFLOG("resp_type=%d,uToken=%d,request=%d,slot_id=%d,error_code=%d",resp_type,token,request,slot_id,error);
p.readInt32(&version);
if(version==11)
{