Merge "[Bugfix][API-1022] fix can't get connect ap ip of iQOO pro [Bugfix][API-1031] fix can't get hostname" into GSW3.0-No-Connman
diff --git a/meta/meta-mediatek-mt2735/recipes-lynq/suspend-service/files/autosuspend_wakeup_count.c b/meta/meta-mediatek-mt2735/recipes-lynq/suspend-service/files/autosuspend_wakeup_count.c
index db652dc..7c7db07 100755
--- a/meta/meta-mediatek-mt2735/recipes-lynq/suspend-service/files/autosuspend_wakeup_count.c
+++ b/meta/meta-mediatek-mt2735/recipes-lynq/suspend-service/files/autosuspend_wakeup_count.c
@@ -371,16 +371,12 @@
         lseek(wakeup_count_fd, 0, SEEK_SET);
         wakeup_count_len = read(wakeup_count_fd, wakeup_count,
                 sizeof(wakeup_count));
-        if (wakeup_count_len < 0) {
+        if (wakeup_count_len <= 0) {
             strerror_r(errno, buf, sizeof(buf));
             RLOGD("Error reading from %s: %s\n", SYS_POWER_WAKEUP_COUNT, buf);
             wakeup_count_len = 0;
             continue;
         }
-        if (!wakeup_count_len) {
-            RLOGD("Empty wakeup count\n");
-            continue;
-        }
 
         RLOGD("%s: wait\n", __func__);
         ret = sem_wait(&suspend_lockout);
@@ -394,6 +390,13 @@
         if (ret < 0) {
             strerror_r(errno, buf, sizeof(buf));
             RLOGD("Error writing to %s: %s\n", SYS_POWER_WAKEUP_COUNT,buf);
+            RLOGD("%s: sem_post\n", __func__);
+            ret = sem_post(&suspend_lockout);
+            if (ret < 0)
+            {
+                strerror_r(errno, buf, sizeof(buf));
+                ALOGI("Error releasing semaphore: %s\n", buf);
+            }
             continue;
         }
 
diff --git a/src/lynq/framework/lynq-ril-service/src/data/data.cpp b/src/lynq/framework/lynq-ril-service/src/data/data.cpp
index 8d81825..e8dd207 100755
--- a/src/lynq/framework/lynq-ril-service/src/data/data.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/data/data.cpp
@@ -783,13 +783,13 @@
     if(argc > 2)
     {
         /*Warren add for t800 ril service 2021/12/25 start*/
-        char* apnType = argv[1];
+        char* apnType = argv[2];
         int result=0;
         RLOGD("[setupDataCall] apn_count1:%d\n",apn_count);
         for(int i = 0;i< LYNQ_APN_CHANNEL_MAX;i++)//代表已经有argv[1]类型的APN 已经被建立,
         {
-            RLOGD("apnType:%s,argv[1]:%s\n",apn_table[i].apntype,argv[1]);
-            if(strcmp(apn_table[i].apntype,argv[1])==0)
+            RLOGD("apnType:%s,argv[2]:%s\n",apn_table[i].apntype,argv[2]);
+            if(strcmp(apn_table[i].apntype,argv[2])==0)
             {
                 /*此处直接返回response,给client成功的结果码,并返回iface*/
                 Parcel urc_p;
diff --git a/src/lynq/framework/lynq-ril-service/src/ril.cpp b/src/lynq/framework/lynq-ril-service/src/ril.cpp
index ffcd658..ccd0e01 100755
--- a/src/lynq/framework/lynq-ril-service/src/ril.cpp
+++ b/src/lynq/framework/lynq-ril-service/src/ril.cpp
@@ -169,7 +169,6 @@
 #define LYNQ_BRODCAST_PORT 8086
 #define LYNQ_SOCKET_BUFFER (1024*8+sizeof(int)*3+10)
 /*lei add*/
-#define DSET_IP_ADDRESS  "127.0.0.1"
 #define LYNQ_AT_SOCKET_BUFFER 1024
 #define MAX_AT_CMD 50
 /*lei add*/
@@ -5928,7 +5927,7 @@
     struct sockaddr_in lynqClient_addr;
     bzero(&server_addr, sizeof(server_addr));
     server_addr.sin_family = AF_INET;
-    server_addr.sin_addr.s_addr = inet_addr(DSET_IP_ADDRESS);
+    server_addr.sin_addr.s_addr = htonl(INADDR_ANY);
     server_addr.sin_port = htons(LYNQ_SERVICE_PORT);
     /* create socket */
     //int server_socket_fd = socket(AF_INET, SOCK_DGRAM, 0);
diff --git a/src/lynq/framework/lynq-sdk-ready/src/timer/lynq_timer.cpp b/src/lynq/framework/lynq-sdk-ready/src/timer/lynq_timer.cpp
index c6e65e9..bbe70a0 100755
--- a/src/lynq/framework/lynq-sdk-ready/src/timer/lynq_timer.cpp
+++ b/src/lynq/framework/lynq-sdk-ready/src/timer/lynq_timer.cpp
@@ -18,7 +18,7 @@
 #define DSET_IP_ADDRESS  "127.0.0.1"

 #define RIL_REQUEST_DEVICE_IDENTITY 98

 #define MAX_LEN 1024

-#define TIMER 60

+#define TIMER 30

 

 using ::android::Parcel;

 

@@ -90,7 +90,7 @@
 }

 

 /**

- * @brief 60s request imei

+ * @brief 30s request imei

  * 

  * @param arg 

  * @return void* 

@@ -119,21 +119,12 @@
         /*set uci*/

         return NULL;

     }

-    struct sockaddr_in addr_serv,svr_addr;

-    memset(&addr_serv, 0, sizeof(addr_serv));

-    int addr_len = sizeof(struct sockaddr_in);

-    addr_serv.sin_family = AF_INET;

-    addr_serv.sin_addr.s_addr = inet_addr(DSET_IP_ADDRESS);

-    addr_serv.sin_port = htons(7777);

-    int rt = bind(sock_fd ,(struct sockaddr*)&addr_serv, addr_len);

-    if (rt == -1)

-    {

-        RLOGD("bind failed");

-        return NULL;

-    }

-    svr_addr.sin_family = AF_INET;

-    svr_addr.sin_port = htons(8088);

-    svr_addr.sin_addr.s_addr = inet_addr(DSET_IP_ADDRESS);

+    struct sockaddr_in addr_serv;

+    memset(&addr_serv, 0, sizeof(addr_serv));  

+    addr_serv.sin_family = AF_INET;  

+    addr_serv.sin_addr.s_addr = inet_addr(DSET_IP_ADDRESS);  

+    addr_serv.sin_port = htons(DEST_PORT);  

+    int len_addr_serv = sizeof(addr_serv);

     int send_num = -1;

     int recv_num = -1;

     int resp_type = -1;

@@ -151,7 +142,7 @@
     {

         bzero(res_data, MAX_LEN);

         pthread_mutex_lock(&g_lynq_sim_sendto_mutex);

-        send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&svr_addr, addr_len);

+        send_num = sendto(sock_fd, &client_t, sizeof(client_t), 0, (struct sockaddr *)&addr_serv, len_addr_serv);

         RLOGD("send_num %d\n", send_num);

         if(send_num == 0)  

         {

@@ -170,7 +161,7 @@
             continue;

         }

         //get data msg

-        recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&svr_addr,(socklen_t*)&addr_len);

+        recv_num = recvfrom(sock_fd,res_data,sizeof(char)*MAX_LEN,0,(struct sockaddr *)&addr_serv,(socklen_t*)&len_addr_serv);

         RLOGD("recv_num %d\n", recv_num);

         if(recv_num == 0)

         {

diff --git a/src/lynq/lib/liblynq-data/lynq_data.cpp b/src/lynq/lib/liblynq-data/lynq_data.cpp
index 3d38cdf..10795bf 100755
--- a/src/lynq/lib/liblynq-data/lynq_data.cpp
+++ b/src/lynq/lib/liblynq-data/lynq_data.cpp
@@ -26,8 +26,6 @@
 
 #define LYNQ_DATA_UCI_BUF 258
 
-#define LYNQ_ADDRESS "127.0.0.1"
-
 using ::android::Parcel;
 typedef struct{
     int uToken;
@@ -57,6 +55,8 @@
 
 int lynq_client_sockfd = 0;
 int Global_uToken = 0;
+struct sockaddr_in lynq_data_socket_server_addr;
+int lynq_data_socket_server_addr_len;
 
 int lynq_data_call_change_id = -1;
 pthread_t lynq_data_tid =-1;
@@ -171,8 +171,11 @@
 {
     int ret = 0;
     ret = getUnusedElement();
-    memcpy(lynq_apn_table[ret].apnType,apnType,strlen(apnType)+1);
-    lynq_apn_table[ret].hasUsed = 1;
+    if(ret >= 0)
+    {
+        memcpy(lynq_apn_table[ret].apnType,apnType,strlen(apnType)+1);
+        lynq_apn_table[ret].hasUsed = 1;
+    }
     return ret;
 }
 
@@ -261,10 +264,11 @@
     char recvline[LYNQ_REC_BUF];
     bzero(recvline,LYNQ_REC_BUF);
     /* receive data from server */
-    len = read(sockfd, recvline, LYNQ_REC_BUF);
+    len = recvfrom(sockfd,recvline,LYNQ_REC_BUF,0,(struct sockaddr *)&lynq_data_socket_server_addr,(socklen_t *)&lynq_data_socket_server_addr_len);
+    //len = read(sockfd, recvline, LYNQ_REC_BUF);
     if(len == -1)
     {
-        LYERRLOG("read error");
+        LYERRLOG("get_response fail,errno:%d",errno);
         return -1;
     }
     if (recvline != NULL) {
@@ -315,12 +319,12 @@
 /*Warren add for T800 platform 2021/11/19 start*/
 int lynq_socket_client_start()
 {
-    struct sockaddr_in lynq_data_socket_server_addr;
     /* init lynq_socket_server_addr */
     bzero(&lynq_data_socket_server_addr, sizeof(lynq_data_socket_server_addr));
     lynq_data_socket_server_addr.sin_family = AF_INET;
     lynq_data_socket_server_addr.sin_port = htons(LYNQ_SERVICE_PORT);
-    lynq_data_socket_server_addr.sin_addr.s_addr = inet_addr(LYNQ_ADDRESS);
+    lynq_data_socket_server_addr.sin_addr.s_addr = htons(INADDR_ANY);
+    lynq_data_socket_server_addr_len = sizeof(lynq_data_socket_server_addr);
     /*
     if(inet_pton(AF_INET,"127.0.0.1", &lynq_socket_server_addr.sin_addr) <= 0)
     {
@@ -336,7 +340,7 @@
 
     if (setsockopt(lynq_client_sockfd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0) 
     { 
-    LYERRLOG("time out setting failed"); 
+        LYERRLOG("time out setting failed"); 
     } 
     if(connect(lynq_client_sockfd, (struct sockaddr *)&lynq_data_socket_server_addr, sizeof(lynq_data_socket_server_addr)) == -1)
     {
@@ -674,15 +678,17 @@
     if (lynq_data_call_id < 0)
     {
         LYERRLOG("update apn table fail error id = %d",lynq_data_call_id);
-        return -1;
+        return LYNQ_E_NULL_ANONALY+1;
     }
+    *handle = lynq_data_call_id;//T8TSK-211 (2023/5/16) why? If it times out, the client application will also try to reconnect.
+    //Reconnection needs to be deactivated first, and deactivation needs to know which apn to activate.
     lynq_data_call = 1;
     pthread_mutex_lock(&g_lynq_data_sendto_mutex);
     if(send_request(lynq_client_sockfd,&client)==-1)
     {
         LYERRLOG("send request fail");
         perror("[LYNQ_DATA] send request fail:");
-        return -1;
+        return LYNQ_E_NULL_ANONALY+2;
     }
     get_response(lynq_client_sockfd,p);
     pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
@@ -705,7 +711,6 @@
             printf_apn_table_debug(__FUNCTION__,__LINE__);
             return error;
         }
-        *handle = lynq_data_call_id;
     }
     printf_apn_table_debug(__FUNCTION__,__LINE__);
     #endif //GSW_RIL_CFG
@@ -785,7 +790,7 @@
     if(handle==NULL||apn==NULL||apnType==NULL)
     {
         LYERRLOG("handle ,apn or apntype is null!!!");
-        return -1;
+        return LYNQ_E_NULL_ANONALY;
     }
     #endif //GSW_RIL_CFG
     if(user==NULL)
@@ -849,15 +854,16 @@
     if (lynq_data_call_id < 0)
     {
         LYERRLOG("update apn table fail error id = %d",lynq_data_call_id);
-        return -1;
+        return LYNQ_E_NULL_ANONALY+1;
     }
+    *handle = lynq_data_call_id;//T8TSK-211 (2023/5/16)
     lynq_data_call = 1;
     pthread_mutex_lock(&g_lynq_data_sendto_mutex);
     if(send_request(lynq_client_sockfd,&client)==-1)
     {
         LYERRLOG("send request fail");
         perror("[LYNQ_DATA] send request fail:");
-        return -1;
+        return LYNQ_E_NULL_ANONALY+2;
     }
     get_response(lynq_client_sockfd,p);
     pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
@@ -865,7 +871,7 @@
     LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
     if(error==0)
     {
-        data_timelimit = 1;   
+        data_timelimit = 1;
         if(waitDataCallstateChange(60000)==ETIMEDOUT)//60s
         {
             error = LYNQ_E_TIME_OUT;
@@ -880,7 +886,6 @@
             printf_apn_table_debug(__FUNCTION__,__LINE__);
             return error;
         }
-        *handle = lynq_data_call_id;
     }
     printf_apn_table_debug(__FUNCTION__,__LINE__);
     return error;
@@ -934,6 +939,7 @@
         LYERRLOG("dataCallList is null!!!");
         return -1;
     }
+    Global_uToken++;
     client.uToken = Global_uToken;
     client.request = 57;//RIL_REQUEST_DATA_CALL_LIST
     client.paramLen = 0;
@@ -960,7 +966,7 @@
     {
         return -1;
     }
-    LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
+    LYINFLOG("resp_type=%d,uToken=%d,request=%d,slot_id=%d,error_code=%d",resp_type,token,request,slot_id,error);
     p.readInt32(&version);
     if(version==11)
     {
diff --git a/src/lynq/lib/liblynq-network/lynq_network.cpp b/src/lynq/lib/liblynq-network/lynq_network.cpp
index 31f88c5..c025404 100755
--- a/src/lynq/lib/liblynq-network/lynq_network.cpp
+++ b/src/lynq/lib/liblynq-network/lynq_network.cpp
@@ -1455,7 +1455,7 @@
         LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

         return LYNQ_E_CONFLICT;

     }

-     if(((recovery_threshold < 2) || (recovery_threshold > 10)) || ((fullband_timer < 90) || (fullband_timer > 360)) || 

+     if(((recovery_threshold < 2) || (recovery_threshold > 10)) || (fullband_timer < 90) || 

     ((sniffer_timer < 10) || (sniffer_timer > 60)) || ((inactive_mode < 0) || (inactive_mode > 1)))

     {

         LYERRLOG("%s paramter recovery_threshold %d fullband_timer %d sniffer_timer %d inactive_mode %d error!",__func__,recovery_threshold,fullband_timer,sniffer_timer,inactive_mode);