Merge "[Bugfix][bug-view-155]fix after reset modem, first call liblynq-sim api will return 1" into DSDS
diff --git a/common_src/lib/liblynq-sim/src/lynq_sim.cpp b/common_src/lib/liblynq-sim/src/lynq_sim.cpp
index 97a9292..2e0c5e2 100755
--- a/common_src/lib/liblynq-sim/src/lynq_sim.cpp
+++ b/common_src/lib/liblynq-sim/src/lynq_sim.cpp
@@ -51,6 +51,7 @@
 struct sockaddr_in addr_serv;
 static int sock_fd = 0;
 int Global_uToken = 0;
+static int default_cnt = 20;
 static pthread_mutex_t g_lynq_sim_sendto_mutex;
 /**
  * @brief mark call initialization state
@@ -141,15 +142,18 @@
         return RESULT_ERROR;
     }
 }
-
-int lynq_send_common_request(Parcel* p, int request_id, int argc, int cnt, const char* format,...)
+int get_utoken()
+{
+    return (Global_uToken++)%10000;/*0-10000*/
+}
+int lynq_send_common_request(Parcel* p, int request_id, int argc, int cnt, int sim_count, const char* format,...)
 {
     lynq_client_t client;
     int ret;
     int send_num;
     int recv_num;
     char res_data[MAX_LEN] = {0};
-    client.uToken = Global_uToken;
+    client.uToken = get_utoken();
     if(request_id == RIL_REQUEST_SCREEN_STATE)
     {
         client.request = LYNQ_REQUEST_CHANGE_SCREEN_STATE;
@@ -182,8 +186,13 @@
     }
     lynq_resp_t head;
     head.request = -1;
-    for(int i = 0; i < cnt;)
+    for(int i = 0; i < cnt; i++)
     {
+        head.resp_type = -1;
+        head.token = -1;
+        head.request = -1;
+        head.slot_id = -1;
+        head.error = -1;
         recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN, 0, (struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);
         if(recv_num <= 0)
         {
@@ -212,12 +221,30 @@
         if(ret!=0)
         {
             RLOGD("%s %d get head error %d",__FUNCTION__,client.uToken,ret);
+
+            if (head.token != client.uToken)
+            {
+                RLOGD("head.token is %d != client.uToken is %d", head.token, client.uToken);
+                ret = RESULT_ERROR;
+                continue;
+            }
+
             pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
             return ret;
         }
+        if (head.token != client.uToken)
+        {
+            RLOGD("head.token is %d != client.uToken is %d", head.token, client.uToken);
+            ret = RESULT_ERROR;
+            continue;
+        }
         if(request_id == head.request)
         {
-            i++;
+            sim_count--;
+            if(sim_count <= 0)
+                break;
+            else
+                continue;
         }
     }
     pthread_mutex_unlock(&g_lynq_sim_sendto_mutex);
@@ -320,7 +347,7 @@
         return -1;
     }
     Parcel p;
-    int res = lynq_send_common_request(&p,RIL_REQUEST_GET_SIM_STATUS,0,1,"");
+    int res = lynq_send_common_request(&p,RIL_REQUEST_GET_SIM_STATUS,0,default_cnt,1,"");
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -337,7 +364,7 @@
         return -1;
     }
     Parcel p;
-    int res = lynq_send_common_request(&p,RIL_REQUEST_GET_IMSI,0,1,"");
+    int res = lynq_send_common_request(&p,RIL_REQUEST_GET_IMSI,0,default_cnt,1,"");
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -358,7 +385,7 @@
         return -1;
     }
     Parcel p;
-    int res = lynq_send_common_request(&p,RIL_REQUEST_QUERY_ICCID,0,1,"");
+    int res = lynq_send_common_request(&p,RIL_REQUEST_QUERY_ICCID,0,default_cnt,1,"");
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -376,7 +403,7 @@
         return -1;
     }
     Parcel p;
-    int res = lynq_send_common_request(&p,RIL_REQUEST_SET_FACILITY_LOCK,4,1,"%s %s %s %s\n", "SC", pin, "11", "1");
+    int res = lynq_send_common_request(&p,RIL_REQUEST_SET_FACILITY_LOCK,4,default_cnt,1,"%s %s %s %s\n", "SC", pin, "11", "1");
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -392,7 +419,7 @@
         return -1;
     }
     Parcel p;
-    int res = lynq_send_common_request(&p,RIL_REQUEST_OEM_HOOK_RAW,1,1,"%s%d", "AT+ESIMPOWER=", mode);
+    int res = lynq_send_common_request(&p,RIL_REQUEST_OEM_HOOK_RAW,1,default_cnt,1,"%s%d", "AT+ESIMPOWER=", mode);
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -407,7 +434,7 @@
         return -1;
     }
     Parcel p;
-    int res = lynq_send_common_request(&p,RIL_REQUEST_SET_FACILITY_LOCK,4,1,"%s %s %s %s\n", "SC", pin, "11", "0");
+    int res = lynq_send_common_request(&p,RIL_REQUEST_SET_FACILITY_LOCK,4,default_cnt,1,"%s %s %s %s\n", "SC", pin, "11", "0");
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -422,7 +449,7 @@
         return -1;
     }
     Parcel p;
-    int res = lynq_send_common_request(&p,RIL_REQUEST_QUERY_FACILITY_LOCK,3,1,"%s %s %s\n", "SC", pin, "11");
+    int res = lynq_send_common_request(&p,RIL_REQUEST_QUERY_FACILITY_LOCK,3,default_cnt,1,"%s %s %s\n", "SC", pin, "11");
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -448,7 +475,7 @@
         return -1;
     }
     Parcel p;
-    int res = lynq_send_common_request(&p,RIL_REQUEST_ENTER_SIM_PIN,1,1,"%s\n", pin);
+    int res = lynq_send_common_request(&p,RIL_REQUEST_ENTER_SIM_PIN,1,default_cnt,1,"%s\n", pin);
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -470,7 +497,7 @@
     if(!strlen(old_pin))
         return res;
     Parcel p;
-    res = lynq_send_common_request(&p,RIL_REQUEST_CHANGE_SIM_PIN,2,1,"%s %s\n", old_pin, new_pin);
+    res = lynq_send_common_request(&p,RIL_REQUEST_CHANGE_SIM_PIN,2,default_cnt,1,"%s %s\n", old_pin, new_pin);
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -487,7 +514,7 @@
     if(puk == NULL || pin == NULL)
         return -1;
     Parcel p;
-    int res = lynq_send_common_request(&p,RIL_REQUEST_ENTER_SIM_PUK,2,1,"%s %s\n", puk, pin);
+    int res = lynq_send_common_request(&p,RIL_REQUEST_ENTER_SIM_PUK,2,default_cnt,1,"%s %s\n", puk, pin);
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -564,7 +591,7 @@
         return -1;
     }
     Parcel p;
-    int res = lynq_send_common_request(&p,RIL_REQUEST_OEM_HOOK_RAW,1,1,"%s\n", "AT+CNUM");
+    int res = lynq_send_common_request(&p,RIL_REQUEST_OEM_HOOK_RAW,1,default_cnt,1,"%s\n", "AT+CNUM");
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -590,7 +617,7 @@
         return -1;
     }
     Parcel p;
-    int res = lynq_send_common_request(&p,RIL_REQUEST_DEVICE_IDENTITY,0,1,"");
+    int res = lynq_send_common_request(&p,RIL_REQUEST_DEVICE_IDENTITY,0,default_cnt,1,"");
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -611,7 +638,7 @@
         return -1;
     }
     Parcel p;
-    int res = lynq_send_common_request(&p,RIL_REQUEST_DEVICE_IDENTITY,0,1,"");
+    int res = lynq_send_common_request(&p,RIL_REQUEST_DEVICE_IDENTITY,0,default_cnt,1,"");
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -722,7 +749,7 @@
     Parcel p;
     RLOGD(
 "send LYNQ_REQUEST_SET_DEFAULT_SIM_ALL_EXCEPT_DATA");
-    int res = lynq_send_common_request(&p,LYNQ_REQUEST_SET_DEFAULT_SIM_ALL_EXCEPT_DATA,1,1,"%d",slot);
+    int res = lynq_send_common_request(&p,LYNQ_REQUEST_SET_DEFAULT_SIM_ALL_EXCEPT_DATA,1,default_cnt,1,"%d",slot);
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -751,7 +778,7 @@
     
     RLOGD(
 "send LYNQ_REQUEST_GET_DEFAULT_SIM_ALL");
-    int res = lynq_send_common_request(&p,LYNQ_REQUEST_GET_DEFAULT_SIM_ALL,0,1,"");
+    int res = lynq_send_common_request(&p,LYNQ_REQUEST_GET_DEFAULT_SIM_ALL,0,default_cnt,1,"");
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -775,7 +802,7 @@
     lynq_client_t client_t;
     client_t.request = LYNQ_REQUEST_SET_DEFAULT_SIM_ALL;
     client_t.paramLen = 1;
-    client_t.uToken = Global_uToken;
+    client_t.uToken = get_utoken();
     sprintf(client_t.param, "%d\n", slot);
     pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
     send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv); //because ril of id = -1
@@ -800,7 +827,7 @@
     if(!judge(num))
         return -1;
     Parcel p;
-    int res = lynq_send_common_request(&p,RIL_REQUEST_SCREEN_STATE,1,2,"%d\n",num);
+    int res = lynq_send_common_request(&p,RIL_REQUEST_SCREEN_STATE,1,default_cnt,2,"%d\n",num);
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -822,7 +849,7 @@
     if(!judge(num))
         return -1;
     Parcel p;
-    int res = lynq_send_common_request(&p,RIL_REQUEST_RADIO_POWER,1,2,"%d\n",num);
+    int res = lynq_send_common_request(&p,RIL_REQUEST_RADIO_POWER,1,default_cnt,2,"%d\n",num);
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -905,7 +932,7 @@
         return -1;
     }
     Parcel p;
-    int res = lynq_send_common_request(&p,RIL_REQUEST_SIM_IO,9,1,"%d %d %s %d %d %d %s %s %s\n", list[0], list[1], path, list[2], list[3], list[4], data_buf, pin2_buf, aidPtr_buf);
+    int res = lynq_send_common_request(&p,RIL_REQUEST_SIM_IO,9,default_cnt,1,"%d %d %s %d %d %d %s %s %s\n", list[0], list[1], path, list[2], list[3], list[4], data_buf, pin2_buf, aidPtr_buf);
     if(res != 0)
     {
         RLOGD("function %s execute error", __FUNCTION__);
@@ -947,7 +974,7 @@
     lynq_client_t client_t;
     client_t.request = RIL_REQUEST_OEM_HOOK_RAW;
     client_t.paramLen = 1;
-    client_t.uToken = Global_uToken;
+    client_t.uToken = get_utoken();
     sprintf(client_t.param, "%s\n", "AT+LRSTMD");
     pthread_mutex_lock(&g_lynq_sim_sendto_mutex);
     send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);//because response not by ril callback