[Bugfix][API-1473][mdlog] lynq_query_registration_state type Voice  lac
cid error

       Affected branch: unknown
       Affected module: unknown
       Is it affected on both ZXIC and MTK: both
       Self-test: Yes
       Doc Update: No

Change-Id: Ic0c8bc48646a7ad57e3243fcf8c960cad19abd34
diff --git a/common_src/lib/liblynq-network/lynq_network.cpp b/common_src/lib/liblynq-network/lynq_network.cpp
index 13a2318..f811c65 100755
--- a/common_src/lib/liblynq-network/lynq_network.cpp
+++ b/common_src/lib/liblynq-network/lynq_network.cpp
@@ -468,6 +468,80 @@
     return RESULT_OK;  

 }

 

+int lynq_query_registration_state_from_parcel(Parcel* p, int num,int reject_index, int* regState,char * LAC,char * CID,int *netType,int *netRejected)

+{

+    int i;

+    char *resp[LYNQ_RESP_STRING_MAX_NUM]={0};    

+    int ret = RESULT_OK;

+    for(i=0;i<num;i++)

+    {

+        resp[i]=lynqStrdupReadString(p);

+    }            

+    if(resp[0]==NULL)

+    {

+        LYERRLOG("%s resp[0] %s is NULL",__func__,resp[0]);

+        ret = LYNQ_E_INNER_ERROR;

+        goto registration_from_parcel_return;

+    }

+    *regState = atoi(resp[0]);   

+    strcpy(CID,""); 

+    strcpy(LAC,"");

+    *netType = RADIO_TECH_UNKNOWN;            

+    *netRejected = -1;                   

+    if((*regState)==1 || (*regState)==5) 

+    {   

+        if(resp[1]!=NULL) 

+        {

+            strcpy(LAC,resp[1]);

+        }

+        else 

+        {           

+            LYERRLOG("%s resp[1] %s is NULL",__func__);

+        }

+        

+        if(resp[2]!=NULL) 

+        {

+            strcpy(CID,resp[2]);

+        }

+        else 

+        {                

+            LYERRLOG("%s resp[2] %s is NULL",__func__);

+        }

+

+        if(resp[3]!=NULL) 

+        {

+            *netType = atoi(resp[3]);

+        }

+        else 

+        {            

+            LYERRLOG("%s data resp[3] %s is NULL",__func__);

+        }

+    }

+    else if((*regState)==3 || (*regState)==13)

+    {    

+        if(resp[reject_index]==NULL)

+        {    

+            LYERRLOG("%s resp[%d] is NULL",__func__,reject_index);            

+        }  

+        else 

+        {

+            *netRejected = atoi(resp[reject_index]);            

+        }        

+    }    

+

+registration_from_parcel_return:

+

+    for(i=0;i<num;i++)

+    {

+        if(resp[i]!=NULL)

+        {

+            free(resp[i]);             

+        }            

+    }                  

+    return ret;

+}

+

+

 int lynq_query_registration_state(const char *type,int* regState,int* imsRegState,char * LAC,char * CID,int *netType,int *radioTechFam,int *netRejected)

 {

     if(g_module_init_flag != MODULE_RUNNING)

@@ -492,14 +566,14 @@
     memcpy(str,type,strlen(type)+1);

     strUpper(str);

     if(!strcmp(str,"VOICE"))

-    {

-        if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,regState,netType,netRejected,0)==0)

+    {    

+        if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,regState,netType,netRejected,2,LAC,CID)==0)

         {

             return RESULT_OK;  

         }       

         request = RIL_REQUEST_VOICE_REGISTRATION_STATE;

     }else if(!strcmp(str,"DATA")){

-        if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,2,regState,netType,2,LAC,CID)==0)

+        if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,3,regState,netType,netRejected,2,LAC,CID)==0)

         {

             return RESULT_OK;  

         }      

@@ -524,28 +598,21 @@
         return ret;  

     }   

     

-    int num,i;

-    char *resp[LYNQ_RESP_STRING_MAX_NUM];       

+    int num;

+    char *resp[LYNQ_RESP_STRING_MAX_NUM]={0};       

     if(!strcmp(str,"VOICE"))

-    {

-        p->readInt32(&num);

-        if(num == 15)

+    {        

+        p->readInt32(&num);        

+        if(num >0 && num<=15)

         {

-            for(i=0;i<15;i++)

+            ret=lynq_query_registration_state_from_parcel(p, num, 13, regState, LAC,CID,netType,netRejected);

+            if(ret!=RESULT_OK)

             {

-                resp[i]=lynqStrdupReadString(p);

-            }            

-            *regState = atoi(resp[0]);

-            *netType = atoi(resp[3]);

-            *netRejected = atoi(resp[14]);     

-            for(i=0;i<15;i++)

-            {

-                if(resp[i]!=NULL)

-                {

-                    free(resp[i]);            

-                }            

-            }            

-            set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,*regState,*netType,*netRejected,0);

+                LYERRLOG("%s call lynq_query_registration_state_from_parcel fail",__func__);             

+                goto registration_return;       

+            }  

+            set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,*regState,*netType,*netRejected,2,LAC,CID);

+            goto registration_return;

         }

         else 

         {

@@ -556,24 +623,17 @@
     }

     else if(!strcmp(str,"DATA")){

         p->readInt32(&num);

-        if(num == 11)

-        {                

-            for(i=0;i<4;i++)

+        if(num >0 && num <=11)

+        {        

+            ret=lynq_query_registration_state_from_parcel(p, num, 4, regState, LAC,CID,netType,netRejected);

+            if(ret!=RESULT_OK)

             {

-                resp[i]=lynqStrdupReadString(p);

-            }            

-            *regState = atoi(resp[0]);

-            strcpy(LAC,resp[1]);

-            strcpy(CID,resp[2]);

-            *netType = atoi(resp[3]);

-            for(i=0;i<4;i++)

-            {

-                if(resp[i]!=NULL)

-                {

-                    free(resp[i]);            

-                }           

-            }            

-            set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,2,*regState,*netType,2,LAC,CID);

+                LYERRLOG("%s call lynq_query_registration_state_from_parcel fail",__func__);             

+                goto registration_return;       

+            }              

+                        

+            set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,3,*regState,*netType,*netRejected,2,LAC,CID);                

+            goto registration_return;

         }

         else 

         {

@@ -598,10 +658,18 @@
             delete p;

             return LYNQ_E_INNER_ERROR;

         }            

-    }

-    LYINFLOG("%s suc",__func__); 

-    delete p;        

-    return RESULT_OK;     

+    }  

+     

+registration_return:

+

+    if(ret==RESULT_OK)

+    {

+        LYINFLOG("%s suc",__func__); 

+    }    

+   

+    delete p;

+    return ret;

+    

 }

 

 int lynq_query_prefferred_networktype(int *preNetType)