[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)
     {