[Bugfix][API-1400]fix after reset modem, lynq_verify_pin fail

Only Configure: No
Affected branch: master
Affected module: sim
Is it affected on both ZXIC and MTK: only MTK
Self-test: Yes
Doc Update: No

Change-Id: I9c27af8c823c9824a24f71de8cd0251f1573b61e
diff --git a/common_src/lib/liblynq-sim/src/lynq_sim.cpp b/common_src/lib/liblynq-sim/src/lynq_sim.cpp
index c780859..0ce669e 100755
--- a/common_src/lib/liblynq-sim/src/lynq_sim.cpp
+++ b/common_src/lib/liblynq-sim/src/lynq_sim.cpp
@@ -49,6 +49,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
@@ -144,15 +145,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;
@@ -185,8 +189,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)
         {
@@ -200,12 +209,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);
@@ -296,7 +323,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__);
@@ -313,7 +340,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__);
@@ -334,7 +361,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__);
@@ -352,7 +379,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__);
@@ -368,7 +395,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__);
@@ -383,7 +410,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__);
@@ -398,7 +425,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__);
@@ -424,7 +451,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__);
@@ -446,7 +473,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__);
@@ -463,7 +490,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__);
@@ -540,7 +567,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__);
@@ -566,7 +593,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__);
@@ -587,7 +614,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__);
@@ -650,7 +677,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
@@ -675,7 +702,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__);
@@ -697,7 +724,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__);
@@ -780,7 +807,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__);
@@ -822,7 +849,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
@@ -914,3 +941,4 @@
     return 0;
 }
 
+