Merge "[Bugfix][ZK-78][FOTA]get process and upgrade status error when start fota up status"
diff --git a/IC_src/mtk/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/data/RpDataController.cpp b/IC_src/mtk/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/data/RpDataController.cpp
index 24aa3ad..d937316 100755
--- a/IC_src/mtk/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/data/RpDataController.cpp
+++ b/IC_src/mtk/telephonyware/3.0/hardware/ril/fusion/libril/rilmipc/telephony/data/RpDataController.cpp
@@ -1651,10 +1651,10 @@
             case -4: return PDP_FAIL_PREF_RADIO_TECH_CHANGED;
             case -5: return PDP_FAIL_RADIO_POWER_OFF;
             case -6: return PDP_FAIL_TETHERED_CALL_ACTIVE;
-            default: return PDP_FAIL_ERROR_UNSPECIFIED;
+            default: return (RIL_DataCallFailCause)cause;
         }
     } else {
-        return PDP_FAIL_ERROR_UNSPECIFIED;
+        return (RIL_DataCallFailCause)cause;
     }
 }
 
diff --git a/common_src/lib/liblynq-network/lynq_network.cpp b/common_src/lib/liblynq-network/lynq_network.cpp
index ca07f55..311a360 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)

diff --git a/common_src/lib/liblynq-sms/lynq_sms.cpp b/common_src/lib/liblynq-sms/lynq_sms.cpp
index 4522fb6..938eedf 100755
--- a/common_src/lib/liblynq-sms/lynq_sms.cpp
+++ b/common_src/lib/liblynq-sms/lynq_sms.cpp
@@ -152,7 +152,7 @@
         char msg_e_b[msglen*2+1] = {0};// +1 for end of string.*2:A char array contains two elements of a string for each value

         ArrayToStr(msg, msglen, msg_e_b);

         LYINFLOG("tel, charset, msg_e_b: %s, %d, %s", telephony_num, charset, msg_e_b);

-        int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SEND_SMS,3,"%s %d %s",telephony_num, charset, msg_e_b);

+        int ret=lynq_send_common_request(p,20,RIL_REQUEST_SEND_SMS,3,"%s %d %s",telephony_num, charset, msg_e_b);

         if(ret!=RESULT_OK)

         {

             LYERRLOG("%s  8bit send error %d",__func__,__LINE__);

@@ -163,7 +163,7 @@
     }

     else//other bit

     {

-        int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SEND_SMS,3,"%s %d %s",telephony_num, charset, msg);

+        int ret=lynq_send_common_request(p,20,RIL_REQUEST_SEND_SMS,3,"%s %d %s",telephony_num, charset, msg);

         if(ret!=RESULT_OK)

         {

             LYERRLOG("%s  7bit send error %d",__func__,__LINE__);