Merge "[Bugfix][T106BUG-105][Network]lynq_query_radio_state,  return 7100, Only Configure: No, Affected branch: unknown, Affected module: unknown, Is it affected on both ZXIC and MTK: Yes, Self-test: Yes, Doc Update: No"
diff --git a/cap/zx297520v3/src/lynq/lib/liblynq-network/lynq_network.cpp b/cap/zx297520v3/src/lynq/lib/liblynq-network/lynq_network.cpp
index 17bf4d8..bba641e 100755
--- a/cap/zx297520v3/src/lynq/lib/liblynq-network/lynq_network.cpp
+++ b/cap/zx297520v3/src/lynq/lib/liblynq-network/lynq_network.cpp
@@ -450,6 +450,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)

@@ -474,14 +548,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;  

         }      

@@ -511,36 +585,15 @@
     if(!strcmp(str,"VOICE"))

     {        

         p->readInt32(&num);        

-        if(num ==15)

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

         {

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

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

+            if(ret!=RESULT_OK)

             {

-                resp[i]=lynqStrdupReadString(p);            

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

+                goto registration_return;       

             }  

-            if(resp[0]==NULL || resp[3]==NULL)

-            {

-                LYERRLOG("%s voice resp[0] resp[3] %s %s is NULL",__func__,resp[0],resp[3]);

-                ret=LYNQ_E_INNER_ERROR;

-                goto registration_return;

-            }        

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

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

-            if(*regState==3)

-            {

-                if(resp[13]==NULL)

-                {    

-                    LYERRLOG("%s resp[13] is NULL",__func__);

-                    ret=LYNQ_E_INNER_ERROR;

-                    goto registration_return;                    

-                }                

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

-            }    

-            else

-            {

-                *netRejected=0;

-            

-}

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

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

             goto registration_return;

         }

         else 

@@ -552,39 +605,16 @@
     }

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

         p->readInt32(&num);

-        if(num >=5 && num <=11)

-        {          

-            num=5;

-            for(i=0;i<num;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);

-            }            

-            if(resp[0]==NULL || resp[1]==NULL || resp[2]==NULL || resp[3]==NULL)

-            {

-                LYERRLOG("%s data resp[0] resp[1] resp[2] resp[3] %s %s %s %s is NULL",__func__,resp[0],resp[1],resp[2],resp[3]);

-                ret=LYNQ_E_INNER_ERROR;

-                goto registration_return;

-            }

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

-            if(*regState==3)

-            {

-                if(resp[4]==NULL)

-                {    

-                    LYERRLOG("%s resp[4] is NULL",__func__);

-                    ret=LYNQ_E_INNER_ERROR;

-                    goto registration_return;                    

-                }                

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

-            }    

-            else

-            {

-                *netRejected=0;

-            

-            }

-            strcpy(LAC,resp[1]);

-            strcpy(CID,resp[2]);

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

-            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 

@@ -617,15 +647,8 @@
     if(ret==RESULT_OK)

     {

         LYINFLOG("%s suc",__func__); 

-    }

-    

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

-    {

-        if(resp[i]!=NULL)

-        {

-            free(resp[i]);            

-        }            

-    }            

+    }    

+   

     delete p;

     return ret;