[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);
         }
     }
diff --git a/lib/liblynq-data/lynq_data_urc.cpp b/lib/liblynq-data/lynq_data_urc.cpp
index 9f211eb..f5d127a 100755
--- a/lib/liblynq-data/lynq_data_urc.cpp
+++ b/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");