[Bugfix][API-597][call] lib call\network wait service response Architecture Refactoring

Change-Id: I0ab6f59d468f3ec4ffebe01944fea3548977fc96
diff --git a/lib/liblynq-network/lynq_network.cpp b/lib/liblynq-network/lynq_network.cpp
index 7d33b31..350d65d 100755
--- a/lib/liblynq-network/lynq_network.cpp
+++ b/lib/liblynq-network/lynq_network.cpp
@@ -51,303 +51,7 @@
     LYLOGSET(LOG_INFO);

     LYLOGEINIT(USER_LOG_TAG);

     

-    client.uToken = network_Global_uToken;

-    network_Global_uToken=(network_Global_uToken+1)%10000;/*0-10000*/

-    client.request = request_id;

-    client.paramLen = argc;

-    bzero(client.param,LYNQ_REQUEST_PARAM_BUF);

-    if(argc!=0)

-    {

-        va_list args;

-        va_start(args, format);

-        vsnprintf(client.param, LYNQ_REQUEST_PARAM_BUF, format, args);

-        va_end(args);    

-    }

-    LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);

-    pthread_mutex_lock(&g_lynq_network_sendto_mutex);

-    if(g_inner_test==0)

-    {

-        send_num = sendto(network_sock_fd,&client,sizeof(client),0,(struct sockaddr *)&network_addr_serv,network_len_addr_serv); 

-    }

-    else 

-    {

-        send_num = 1;

-        g_inner_test = 0;

-    }

-    pthread_mutex_unlock(&g_lynq_network_sendto_mutex);

-

-    if(send_num <= 0)       

-    {

-        LYERRLOG("send request fail, send num is %d", send_num);

-        return -1;

-    }

-    ret = waitResponse(p, client.uToken,time_out);

-   

-    return ret;    

-}

-

-

-int wait_signal_changes()

-{

-    int ret = 0;

-    pthread_mutex_lock(&signal_state_change_mutex);

-    ret = pthread_cond_wait(&signal_state_change_cond,&signal_state_change_mutex);

-    pthread_mutex_unlock(&signal_state_change_mutex);

-    return 0;

-}

-

-void send_signal_changes()

-{

-    pthread_mutex_lock(&signal_state_change_mutex);

-    pthread_cond_signal(&signal_state_change_cond);

-    pthread_mutex_unlock(&signal_state_change_mutex);

-    return;

-}

-

-/**@ a thread just for recv\buffer solicited msg's response and notice waiting thread

-* @param p [IN]: no meaning

-* @return

-* always null

-*/

-void *thread_rc_recv(void *p)

-{

-    Parcel* rc_p;

-    std::list<Parcel*>::iterator iter;

-    int resp_type = -1;   

-    char rc_data[LYNQ_REC_BUF];

-    int rc_len;

-    int null_cnt=0;

-    int wakeup_token; 

- 

-    LYINFLOG("rc thread is running");

-    while(network_rc_status)

-    {

-        bzero(rc_data,LYNQ_REC_BUF);

-        while(true)

-        {

-            rc_len = recvfrom(network_sock_fd,rc_data,sizeof(rc_data),0,(struct sockaddr *)&network_addr_serv,(socklen_t *)&network_len_addr_serv);

-            if(rc_len<sizeof(int32_t)*2)

-            {

-                 LYERRLOG("%s recv len %d less %d",__func__, rc_len,sizeof(int)*2);

-                 continue;

-            } 

-            rc_p= new Parcel;

-            if(rc_p==NULL)

-            {

-                null_cnt++;

-                LYERRLOG("%s rc_p is NULL, cnt is %d",__func__, null_cnt);

-                if(null_cnt>20)

-                {

-                    goto rc_recv_end;

-                }

-                continue;

-            }

-            else 

-            {

-                null_cnt=0;

-            }

-                

-            rc_p->setData((uint8_t *)rc_data,rc_len); // p.setData((uint8_t *) buffer, buflen);

-            rc_p->setDataPosition(0);

-            if(rc_p->dataAvail()>0)

-            {

-                rc_p->readInt32(&resp_type); 

-                rc_p->readInt32(&wakeup_token); 

-                BLOCK_RC_MSG_LOCK();

-                g_recv_parcel_list.push_back(rc_p);                

-                LYINFLOG("%s wakeup token is %d, list size is %d!",__func__,wakeup_token,g_recv_parcel_list.size());

-                if(g_recv_parcel_list.size()>20) //max 20

-                {

-                    iter=g_recv_parcel_list.begin();

-                    (*iter)->setDataPosition(0);

-                    (*iter)->readInt32(&resp_type); 

-                    (*iter)->readInt32(&wakeup_token); 

-                    delete (*(g_recv_parcel_list.begin()));

-                    LYERRLOG("%s wakeup token %d is deleted!",__func__,wakeup_token);

-                    g_recv_parcel_list.erase(iter);

-                }                   

-                BLOCK_WAKEUP_RECV_MSG();

-                BLOCK_RC_MSG_UNLOCK();

-                break;

-            }

-            else

-            {

-                LYERRLOG("%s rc_p data Avail %d not greater than 0",__func__, rc_p->dataAvail());

-                delete rc_p;

-            }

-        }

-    }                 

-

-rc_recv_end:    

-    return NULL;

-}

-

-void *thread_urc_recv(void *p)

-{

-    Parcel *urc_p =NULL;

-    char urc_data[LYNQ_REC_BUF];

-    int resp_type = -1;

-    int urc_id = -1;

-    int res = 0;

-    int none = 0;

-    int NR_sum = 0;

-    int urc_LTE_signalstrength = 0;

-    int urc_WCDMA_signalstrength = 0;

-    LYINFLOG("urc thread is running");

-    while(network_urc_status)

-    {

-        bzero(urc_data,LYNQ_REC_BUF);

-        res = recvfrom(network_urc_sock_fd,urc_data,sizeof(urc_data),0,(struct sockaddr *)&network_urc_addr_serv,(socklen_t*)&network_len_urc_addr_serv);

-        if(res<=0)

-        {

-            LYERRLOG("thread_urc_recv step2 fail:");

-            break;

-        }

-        urc_p = new Parcel();

-        if(urc_p == NULL)

-        {

-            LYERRLOG("new parcel failure!!!");

-            break;

-        }

-        urc_p->setData((uint8_t *)urc_data,res); // p.setData((uint8_t *) buffer, buflen);

-        urc_p->setDataPosition(0);

-        if(urc_p->dataAvail()>0)

-        {

-            urc_p->readInt32(&resp_type);

-            urc_p->readInt32(&urc_id);

-            urc_p->readInt32(&network_urc_slot_id);

-            switch(urc_id)

-            {

-                case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:

-                {

-                    set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,false);

-                    network_wait_urc_id = urc_id;

-                    LYINFLOG("slot_id = %d",network_urc_slot_id);

-                    send_signal_changes();

-                    break;

-                }

-                case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:

-                {                    

-                    set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_DATA_REG,false);

-                    network_wait_urc_id = urc_id;

-                    LYINFLOG("slot_id = %d",network_urc_slot_id);

-                    send_signal_changes();

-                    break;

-                }

-                case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:

-                {                   

-                    set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_IMS_REG,false);

-                    network_wait_urc_id = urc_id;

-                    LYINFLOG("slot_id = %d",network_urc_slot_id);

-                    send_signal_changes();

-                    break;

-                }

-                case RIL_UNSOL_SIGNAL_STRENGTH:

-                {

-                    urc_p->readInt32(&network_urc_solSigStren.rssi);

-                    if((network_urc_solSigStren.rssi!=99)&&(network_urc_solSigStren.rssi!=0))

-                    {

-                        network_urc_solSigStren.gw_sig_valid = 1;

-                    }else{

-                        network_urc_solSigStren.gw_sig_valid = 0;

-                    }

-                    if(network_urc_solSigStren.gw_sig_valid == 1)

-                    {

-                        LYINFLOG("urc_GSM_signalstrength:%d",network_urc_solSigStren.rssi);

-                    }

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&urc_LTE_signalstrength);

-                    // p.readInt32(&solSigStren->signalStrength.LTE_SignalStrength.signalStrength);

-                    urc_p->readInt32(&network_urc_solSigStren.rsrp);

-                    urc_p->readInt32(&network_urc_solSigStren.rsrq);

-                    urc_p->readInt32(&network_urc_solSigStren.rssnr);

-                    if((urc_LTE_signalstrength!=99)&&(urc_LTE_signalstrength!=0))

-                    {

-                        network_urc_solSigStren.lte_sig_valid = 1;

-                    }else{

-                        network_urc_solSigStren.lte_sig_valid = 0;

-                    }

-                    if(network_urc_solSigStren.lte_sig_valid == 1)

-                    {

-                        LYINFLOG("urc_LTE_signalstrength:%d",urc_LTE_signalstrength);

-                    }

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&urc_WCDMA_signalstrength);

-                    urc_p->readInt32(&none);

-                    urc_p->readInt32(&network_urc_solSigStren.rscp);

-                    urc_p->readInt32(&network_urc_solSigStren.ecno);

-                    if((urc_WCDMA_signalstrength!=99)&&(urc_WCDMA_signalstrength!=0))

-                    {

-                        network_urc_solSigStren.wcdma_sig_valid = 1;

-                    }else{

-                        network_urc_solSigStren.wcdma_sig_valid = 0;

-                    }

-                    if(network_urc_solSigStren.wcdma_sig_valid == 1)

-                    {

-                        LYINFLOG("urc_WCDMA_signalstrength:%d",urc_WCDMA_signalstrength);

-                    }

-                    urc_p->readInt32(&network_urc_solSigStren.ssRsrp);

-                    urc_p->readInt32(&network_urc_solSigStren.ssRsrq);

-                    urc_p->readInt32(&network_urc_solSigStren.ssSinr);

-                    urc_p->readInt32(&network_urc_solSigStren.csiRsrp);

-                    urc_p->readInt32(&network_urc_solSigStren.csiRsrq);

-                    urc_p->readInt32(&network_urc_solSigStren.csiSinr);

-                    NR_sum = (network_urc_solSigStren.ssRsrp) + (network_urc_solSigStren.ssRsrq) + (network_urc_solSigStren.ssSinr) + (network_urc_solSigStren.csiRsrp)+\

-                    (network_urc_solSigStren.csiRsrq) + (network_urc_solSigStren.csiSinr);

-                    if(NR_sum != 0)

-                    {

-                        network_urc_solSigStren.nr_sig_valid = 1;

-                    }else{

-                        network_urc_solSigStren.nr_sig_valid = 0;

-                    }

-                    if(network_urc_solSigStren.nr_sig_valid == 1)

-                    {

-                        LYINFLOG("[NR signal]ssRsrp is %d , ssRsrq is %d , ssSinr is %d , csiRsrp is %d , csiRsrq is %d , csiSinr is %d",\

-                        network_urc_solSigStren.ssRsrp,network_urc_solSigStren.ssRsrq,network_urc_solSigStren.ssSinr, \

-                        network_urc_solSigStren.csiRsrp,network_urc_solSigStren.csiRsrq,network_urc_solSigStren.csiSinr);

-                    }

-                    network_wait_urc_id = urc_id;

-                    send_signal_changes();

-                    break;

-                }

-            }

-        }

-        delete urc_p;

-        urc_p = NULL;

-    }

-    return NULL;

-}

-

-int lynq_server_socket_start()

-{

-//    struct timeval timeOut;

-    network_sock_fd = socket(AF_INET, SOCK_DGRAM, 0);

-    if(-1 == network_sock_fd)

-    {

-        LYERRLOG("socket open error");

-        return -1;

-    }

-# if 0

-    timeOut.tv_sec = 5;

-    timeOut.tv_usec = 0;

-    if (setsockopt(network_sock_fd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0)

-    {

-        LYERRLOG("time out setting failed\n");

-        return -1;

-    }

-#endif

-

-    LYINFLOG("network_sock_fd = %d",network_sock_fd);

+    int ret;

 

     init_network_timer_all();

 

@@ -725,7 +429,7 @@
         }

         if(NULL != resp[3])

         {

-            strcpy(NetStatus,resp[3]);

+            strcpy(NetStatus,resp[2]);

         }

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

         {

@@ -803,46 +507,14 @@
         p->readInt32(&num);

         if(num == 15)

         {

-            p->readInt32(&num);

-            if(num == 15)

-            {

-                *regState = atoi(lynqStrdupReadString(p));

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                *netType = atoi(lynqStrdupReadString(p));

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                lynqStrdupReadString(p);

-                *netRejected = atoi(lynqStrdupReadString(p));       

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

-            }

-            else 

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

             {

                 resp[i]=lynqStrdupReadString(p);

             }            

-        }

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

-            p->readInt32(&num);

-            if(num == 11)

-            {

-                char *resp[LYNQ_RESP_BUF];

-                *regState = atoi(lynqStrdupReadString(p));

-                resp[0] = lynqStrdupReadString(p);

-                strcpy(LAC,resp[0]);

-

-                resp[1] = lynqStrdupReadString(p);

-                strcpy(CID,resp[1]);

-                *netType = atoi(lynqStrdupReadString(p));

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

-            }

-            else 

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

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

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

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

             {

                 if(resp[i]!=NULL)

                 {

@@ -864,11 +536,13 @@
         {                

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

             {

-                p->readInt32(imsRegState);

-                p->readInt32(radioTechFam);

-                set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_IMS_REG,2,*imsRegState,*radioTechFam,0);

-            }

-            else 

+                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)

                 {