Merge "[Bugfix][API-782][rtp] add 1 set  audio parameter for rtp" into MR3.0-merge
diff --git a/src/lynq/framework/lynq-ril-service/src/data/data.cpp b/src/lynq/framework/lynq-ril-service/src/data/data.cpp
index 8d81825..0f8d6ce 100755
--- a/src/lynq/framework/lynq-ril-service/src/data/data.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/data/data.cpp
@@ -783,13 +783,13 @@
     if(argc > 2)
     {
         /*Warren add for t800 ril service 2021/12/25 start*/
-        char* apnType = argv[1];
+        char* apnType = argv[2];
         int result=0;
         RLOGD("[setupDataCall] apn_count1:%d\n",apn_count);
         for(int i = 0;i< LYNQ_APN_CHANNEL_MAX;i++)//代表已经有argv[1]类型的APN 已经被建立,
         {
-            RLOGD("apnType:%s,argv[1]:%s\n",apn_table[i].apntype,argv[1]);
-            if(strcmp(apn_table[i].apntype,argv[1])==0)
+            RLOGD("apnType:%s,argv[2]:%s\n",apn_table[i].apntype,argv[2]);
+            if(strcmp(apn_table[i].apntype,argv[2])==0)
             {
                 /*此处直接返回response,给client成功的结果码,并返回iface*/
                 Parcel urc_p;
@@ -801,7 +801,7 @@
                 urc_p.writeInt32(1);
                 urc_p.writeInt32(LYNQ_URC_DATA_CALL_STATUS_IND);
                 urc_p.writeInt32(socket_id);
-                urc_p.writeInt32(apn_table[i].apnstatus);
+                urc_p.writeInt32(apn_table[i].pdpstate);
                 writeStringToParcel(urc_p, apn_table[i].apn);
                 writeStringToParcel(urc_p, apn_table[i].apntype);
                 writeStringToParcel(urc_p, apn_table[i].ifaceName);
@@ -839,7 +839,7 @@
             urc_p.writeInt32(1);
             urc_p.writeInt32(LYNQ_URC_DATA_CALL_STATUS_IND);
             urc_p.writeInt32(socket_id);
-            urc_p.writeInt32(apn_table[i].apnstatus);
+            urc_p.writeInt32(apn_table[i].pdpstate);
             writeStringToParcel(urc_p, apn_table[i].apn);
             writeStringToParcel(urc_p, apn_table[i].apntype);
             writeStringToParcel(urc_p, apn_table[i].ifaceName);
diff --git a/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp b/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp
index dafea1a..9d3e4d2 100755
--- a/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/data/data_gdbus.cpp
@@ -130,7 +130,9 @@
                     p.writeInt32 (LYNQ_URC_DATA_CALL_STATUS_IND);
                     p.writeInt32 (0);//temporary plan
                     p.writeInt32(PDN_DISCONNECTED);
+                    writeStringToParcel(p,urc_response->apnName);
                     writeStringToParcel(p,urc_response->apnType);
+                    writeStringToParcel(p,urc_response->ifname);
                     android::LYNQ_RIL_urcBroadcast(p,LYNQ_URC_DATA_CALL_STATUS_IND);
                     RLOGD("removed apn:%s,apntype:%s",apn_table[i].apn,apn_table[i].apntype);
 #ifdef LED_SUPPORT
@@ -273,6 +275,41 @@
     {
         apnHasCreated = FALSE;
         RLOGD("[cid < 0] apn_count:%d\n",apn_count);
+        if(urc_response->pdnState==PDN_DISCONNECTED)//if user disable data call,the pdn state wiil change to disconnected.
+        {
+            for(int i = 0;i < LYNQ_APN_CHANNEL_MAX;i++)
+            {
+                #if DEBUG
+                printf("line %d [PDN_DISCONNECTED]apn_table[%d],apntype:%s,apnstatus:%d,,,urc_response->apnName:%s\n",__LINE__, i,apn_table[i].apntype,apn_table[i].apnstatus,urc_response->apnType);
+                #endif
+                RLOGD("[PDN_DISCONNECTED]apn_table[%d],apntype:%s,apnstatus:%d,,,urc_response->apnName:%s\n",i,apn_table[i].apntype,apn_table[i].apnstatus,urc_response->apnType);
+                if((strcmp(apn_table[i].apntype,urc_response->apnType)==0)&&(apn_table[i].apnstatus==0))
+                {
+                    bzero(apn_table[i].apn,LYNQ_APN_LEN_MAX);
+                    bzero(apn_table[i].apntype,LYNQ_APNTPYE_LEN_MAX);
+                    apn_table[i].used = 0;
+                    apn_table[i].netId = 0;
+                    apn_table[i].pdpstate = PDN_DISCONNECTED;
+                    apn_count--;
+                    p.writeInt32 (1);
+                    p.writeInt32 (LYNQ_URC_DATA_CALL_STATUS_IND);
+                    p.writeInt32 (0);//temporary plan
+                    p.writeInt32(PDN_DISCONNECTED);
+                    writeStringToParcel(p,urc_response->apnName);
+                    writeStringToParcel(p,urc_response->apnType);
+                    writeStringToParcel(p,urc_response->ifname);
+                    android::LYNQ_RIL_urcBroadcast(p,LYNQ_URC_DATA_CALL_STATUS_IND);
+                    RLOGD("removed apn:%s,apntype:%s",apn_table[i].apn,apn_table[i].apntype);
+                    break;
+                }
+            }
+            for(int i = 0;i < LYNQ_APN_CHANNEL_MAX;i++)
+            {
+                RLOGD("for apn_table[%d].apn:%s,apntype:%s,used:%d,apnstatus:%d\n",i,apn_table[i].apn,
+                apn_table[i].apntype,apn_table[i].used,apn_table[i].apnstatus);
+            }
+            return 0;
+        }
         if(apn_count>0)
         {
             int i = 0;
diff --git a/src/lynq/lib/liblynq-data/lynq_data.cpp b/src/lynq/lib/liblynq-data/lynq_data.cpp
index 4bf04f0..96882e4 100755
--- a/src/lynq/lib/liblynq-data/lynq_data.cpp
+++ b/src/lynq/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;
@@ -98,6 +100,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 +113,8 @@
     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)
         {
             return ret;
@@ -118,6 +123,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);
@@ -136,7 +157,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!!!");
@@ -144,18 +165,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].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)
@@ -170,8 +217,11 @@
 {
     int ret = 0;
     ret = getUnusedElement();
-    memcpy(lynq_apn_table[ret].apnType,apnType,strlen(apnType)+1);
-    lynq_apn_table[ret].hasUsed = 1;
+    if(ret >= 0)
+    {
+        memcpy(lynq_apn_table[ret].apnType,apnType,strlen(apnType)+1);
+        lynq_apn_table[ret].hasUsed = 1;
+    }
     return ret;
 }
 
@@ -260,10 +310,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) {
@@ -314,12 +365,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)
     {
@@ -335,7 +386,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)
     {
@@ -362,20 +413,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,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;
 }
 
+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)
 {
@@ -384,6 +440,7 @@
     int urcid;
     int slot_id;
     int check_count = 0;
+    static int apnId=-1;
 
     int pdnState = 0;
     char apn[LYNQ_APN_MAX_LEN];
@@ -407,27 +464,30 @@
             {
                 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);
+                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,*/
@@ -446,14 +506,22 @@
                         break;
                     }
                     updateApnTable(&lynq_apn_table[apnId],apn,apnType,ifaceName);
+                    printf_apn_table_debug(__FUNCTION__,__LINE__);
                 }
                 /*To be completed*/
                 else
                 {
-					data_invaild_error = 1;
-                    printf_apn_table();
-                    LYERRLOG("invalid apnId:%d",apnId);
-                    break;
+                    data_invaild_error = 1;
+                    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);
@@ -478,25 +546,48 @@
                     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);
+                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)
@@ -516,6 +607,7 @@
                     lynq_data_call = 0;
                     data_timelimit = 0;
                 }
+                printf_apn_table_debug(__FUNCTION__,__LINE__);
             }
             break;
         case LYNQ_URC_MODIFY_APNDB:
@@ -530,6 +622,7 @@
                 strcpy(g_lynq_apn_result, urc_msg);
                 sendSignalApnChange();
             }
+            free(urc_msg);
             break;
         case LYNQ_URC_RESET_APNDB:
             {
@@ -544,6 +637,7 @@
                     strcpy(g_lynq_apn_result, urc_msg);
                     sendSignalApnChange();
                 }
+                free(urc_msg);
             }
         default:
             break;
@@ -656,15 +750,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);
@@ -678,16 +774,17 @@
             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;
 }
@@ -716,17 +813,18 @@
     lynq_data_call_id = *handle;
     client.uToken = Global_uToken;
     client.request = 41;//RIL_REQUEST_DEACTIVATE_DATA_CALL
-    if(strcmp(lynq_apn_table[lynq_data_call_id].apnType,"default")==0)
-    {
-        client.paramLen = 0;
-        bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
-    }
-    else
+    client.paramLen = 0;
+    bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
+    #ifdef GSW_RIL_CFG
+    client.paramLen = 1;
+    sprintf(client.param,"%s",lynq_apn_table[lynq_data_call_id].apnType);
+    #else
+    if(strcmp(lynq_apn_table[lynq_data_call_id].apnType,"default")!=0)
     {
         client.paramLen = 1;
-        bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
         sprintf(client.param,"%s",lynq_apn_table[lynq_data_call_id].apnType);
     }
+    #endif //GSW_RIL_CFG
     LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
     pthread_mutex_lock(&g_lynq_data_sendto_mutex);
     if(send_request(lynq_client_sockfd,&client)==-1)
@@ -740,6 +838,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)
@@ -763,7 +862,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)
@@ -827,15 +926,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);
@@ -843,22 +943,23 @@
     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;
             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;
 }
 /*
@@ -910,6 +1011,7 @@
         LYERRLOG("dataCallList is null!!!");
         return -1;
     }
+    Global_uToken++;
     client.uToken = Global_uToken;
     client.request = 57;//RIL_REQUEST_DATA_CALL_LIST
     client.paramLen = 0;
@@ -936,7 +1038,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)
     {
@@ -949,17 +1051,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);
         }
     }
@@ -1033,7 +1165,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*/
diff --git a/src/lynq/lib/liblynq-data/lynq_data_urc.cpp b/src/lynq/lib/liblynq-data/lynq_data_urc.cpp
index 9f211eb..f5d127a 100755
--- a/src/lynq/lib/liblynq-data/lynq_data_urc.cpp
+++ b/src/lynq/lib/liblynq-data/lynq_data_urc.cpp
@@ -77,7 +77,7 @@
     {
         bzero(urc_data,LYNQ_REC_BUF);
         res = recvfrom(lynq_urc_sockfd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&urc_local_addr,(socklen_t*)&lynq_len_urc_addr_serv);
-        
+        LYINFLOG("[%s][%d] res:%d",__FUNCTION__,__LINE__,res);
         if(res<sizeof(int32_t)*2)
         {
             LYERRLOG("thread_urc_recv step2 fail: res is %d",res);
@@ -170,6 +170,7 @@
     struct sockaddr_in urc_local_addr;
     pthread_attr_t attr;
     lynq_urc_sockfd = socket(AF_INET,SOCK_DGRAM,0);
+    lynq_len_urc_addr_serv = sizeof(urc_local_addr);
     if(lynq_urc_sockfd < 0)
     {
         LYERRLOG("create socket for udp fail");