Merge "[Feature][T8TSK-209][Modem]Update Modem version to P4 0511" into GSW3.0-No-Connman
diff --git a/meta/meta-mediatek-mt2735/recipes-support/dnsmasq/dnsmasq_%.bbappend b/meta/meta-mediatek-mt2735/recipes-support/dnsmasq/dnsmasq_%.bbappend
new file mode 100755
index 0000000..b7e5ed0
--- /dev/null
+++ b/meta/meta-mediatek-mt2735/recipes-support/dnsmasq/dnsmasq_%.bbappend
@@ -0,0 +1,15 @@
+FILESEXTRAPATHS_append := ":${THISDIR}/files"
+
+SRC_URI += "\
+            file://dnsmasq.service \
+            file://init_dns_srv \
+            "
+
+FILES_${PN} += "${datadir}/init/init_dns_srv"
+
+do_install_append()  {
+	install -d ${D}${datadir}/init
+    install -m 0755 ${WORKDIR}/init_dns_srv ${D}${datadir}/init/
+	install -m 0644 ${WORKDIR}/dnsmasq.service ${D}${systemd_unitdir}/system/dnsmasq.service
+}
+
diff --git a/meta/meta-mediatek-mt2735/recipes-support/dnsmasq/files/dnsmasq.service b/meta/meta-mediatek-mt2735/recipes-support/dnsmasq/files/dnsmasq.service
new file mode 100644
index 0000000..67d99c2
--- /dev/null
+++ b/meta/meta-mediatek-mt2735/recipes-support/dnsmasq/files/dnsmasq.service
@@ -0,0 +1,15 @@
+[Unit]
+Description=DNS forwarder and DHCP server
+After=network.target
+
+[Service]
+Type=forking
+PIDFile=/run/dnsmasq.pid
+ExecStartPre=/usr/share/init/init_dns_srv
+ExecStart=/usr/bin/dnsmasq -x /run/dnsmasq.pid -7 /etc/dnsmasq.d --local-service -C /tmp/dns_srv.conf
+ExecStop=/bin/kill $MAINPID
+ExecReload=/bin/kill -HUP $MAINPID
+
+[Install]
+WantedBy=multi-user.target
+
diff --git a/meta/meta-mediatek-mt2735/recipes-support/dnsmasq/files/init_dns_srv b/meta/meta-mediatek-mt2735/recipes-support/dnsmasq/files/init_dns_srv
new file mode 100644
index 0000000..0eaf4b4
--- /dev/null
+++ b/meta/meta-mediatek-mt2735/recipes-support/dnsmasq/files/init_dns_srv
@@ -0,0 +1,8 @@
+#!/bin/sh
+
+mkdir -p /var/run/connman
+touch /var/run/connman/resolv.conf
+echo "# DO NOT EDIT THIS FILE BY HAND -- YOUR CHANGES WILL BE OVERWRITTEN" > /tmp/dns_srv.conf
+echo "cache-size=150" >> /tmp/dns_srv.conf
+echo "strict-order" >> /tmp/dns_srv.conf
+
diff --git a/src/lynq/lib/liblynq-sms/lynq_module_common.h b/src/lynq/lib/liblynq-sms/lynq_module_common.h
index 590971a..60719ef 100755
--- a/src/lynq/lib/liblynq-sms/lynq_module_common.h
+++ b/src/lynq/lib/liblynq-sms/lynq_module_common.h
@@ -64,6 +64,7 @@
     LYNQ_E_ECALL_MSD_LENGTH_ERROR =9004,

     LYNQ_E_ECALL_DAILING_NO_ANSWER =9005,

 #endif

+    LYNQ_E_SMS_MSGLEN_OUT_OF_RANGE = 9006,

 }LYNQ_E;

 

 #define MODULE_CLOSED (0)

diff --git a/src/lynq/lib/liblynq-sms/lynq_sms.cpp b/src/lynq/lib/liblynq-sms/lynq_sms.cpp
index 46f2119..f457d7c 100755
--- a/src/lynq/lib/liblynq-sms/lynq_sms.cpp
+++ b/src/lynq/lib/liblynq-sms/lynq_sms.cpp
@@ -27,7 +27,6 @@
 

 using ::android::Parcel;

 

-#define MAX_SMS_BUF 1024

 

 int sms_storage_index = 0;

 

@@ -118,13 +117,9 @@
 void ArrayToStr(unsigned char *Buff, unsigned int BuffLen, char *OutputStr)

 {

     int i = 0;

-    char TempBuff[MAX_SMS_BUF] = {0};

-    char strBuff[MAX_SMS_BUF] = {0};

-    if(sizeof(Buff) < BuffLen)

-    {

-        LYERRLOG("BuffLen is error\n");

-        return;

-    }

+    char TempBuff[MSG_MAX_LEN * 2 +1] = {0};

+    char strBuff[MSG_MAX_LEN * 2 +1] = {0};

+

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

     {

         sprintf(TempBuff,"%02x",(unsigned char)Buff[i]);

@@ -136,6 +131,12 @@
 

 int lynq_send_sms(char telephony_num[TELEPHONE_NUM_LEN], int charset, char *msg, int msglen)

 {

+    LYINFLOG("charset is %d, msglen %d\n", charset, msglen);

+    if(msglen > MSG_MAX_LEN || msglen < 0)

+    {

+        LYERRLOG("msglen out of the range");

+        return LYNQ_E_SMS_MSGLEN_OUT_OF_RANGE;

+    }

     if(g_module_init_flag != MODULE_RUNNING)

     {

         LYERRLOG("%s module state %d error",__func__,g_module_init_flag);

@@ -146,6 +147,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);

         if(ret!=RESULT_OK)

         {

diff --git a/src/lynq/lib/liblynq-wifi6/libwifi6.c b/src/lynq/lib/liblynq-wifi6/libwifi6.c
index 2bfbd1e..368ae4f 100755
--- a/src/lynq/lib/liblynq-wifi6/libwifi6.c
+++ b/src/lynq/lib/liblynq-wifi6/libwifi6.c
@@ -170,10 +170,41 @@
     return system(str_cmd);
 }
 
+static int exec_cmd(const char *str_cmd, char * str_cmd_ret, size_t max_len);
+
+static const char * inner_get_ap_interface_name()
+{
+    char * p;
+    char cmd[128]={0};
+
+    sprintf(cmd, "%s %d", get_interface_name_script, LYNQ_WIFI_INTERFACE_1);
+    if (0 != exec_cmd(cmd, s_ap_iterface_name, sizeof(s_ap_iterface_name)) || s_ap_iterface_name[0] == '\0')
+    {
+        memset(s_ap_iterface_name, 0, sizeof (s_ap_iterface_name));
+        return NULL;
+    }
+    p = strchr(s_ap_iterface_name, ' ');
+    if (NULL != p)
+    {
+        *p = '\0';
+    }
+    p = strchr(s_ap_iterface_name, '\n');
+    if (NULL != p)
+    {
+        *p = '\0';
+    }
+    if (s_ap_iterface_name[0] == '\0')
+    {
+        return NULL;
+    }
+
+    return s_ap_iterface_name;
+}
+
 static void check_tether_and_notify()
 {
     RLOGD("check_tether_and_notify called");
-    if (s_ap_iterface_name[0] != '\0' && 0 == system_call_v("ifconfig | grep %s", s_ap_iterface_name))
+    if (inner_get_ap_interface_name() == NULL || 0 == system_call_v("ifconfig | grep %s", s_ap_iterface_name))
     {
         return;
     }
@@ -279,8 +310,6 @@
     }while (0)
 
 
-static int exec_cmd(const char *str_cmd, char * str_cmd_ret, size_t max_len);
-
 static int check_connection(struct wpa_ctrl * wpa_ctrl)
 {
     size_t reply_len = MAX_RET;
@@ -1886,9 +1915,9 @@
 
     CHECK_WPA_CTRL(CTRL_AP);
 
-    sprintf(LYNQ_WIFI_CMD, "%s %d", get_interface_name_script, LYNQ_WIFI_INTERFACE_1);
-    if (0 != exec_cmd(LYNQ_WIFI_CMD, s_ap_iterface_name, sizeof(s_ap_iterface_name)) || s_ap_iterface_name[0] == '\0')
+    if (inner_get_ap_interface_name() == NULL)
     {
+        RLOGE("lynq_wifi_ap_start get ap name fail");
         return -1;
     }
 
@@ -1898,8 +1927,6 @@
     sprintf(LYNQ_WIFI_CMD,"SELECT_NETWORK %d",AP_NETWORK_0);
     DO_OK_FAIL_REQUEST(LYNQ_WIFI_CMD);
 
-    check_tether_and_notify();
-
     ret = system_call_v("%s %s", start_stop_ap_script, "start");
     if (ret != 0)
     {
@@ -1907,6 +1934,8 @@
         return -1;
     }
 
+    check_tether_and_notify();
+
     return 0;
 }
 
@@ -3159,7 +3188,11 @@
 
     CHECK_WPA_CTRL(CTRL_STA);
 
-//    system(clean_last_re); // youchen @ 2023-04-14 temp delete ,next time to fix the orginal bug
+    if (g_sta_scan_finish_flag == 1 && s_sta_status == INNER_STA_STATUS_INIT) // temp add
+    {
+        RLOGD("tmp clear scanlist");
+        system(clean_last_re);
+    }
     g_sta_scan_finish_flag = 0;
     DO_REQUEST(lynq_scan_cmd);
     if (reply_len >=9 && memcmp(cmd_reply, "FAIL-BUSY", 9) == 0 )
@@ -3431,7 +3464,12 @@
 
     if (idx == 1)
     {
-       ifaName = s_ap_iterface_name;
+       ifaName = inner_get_ap_interface_name();
+       if (ifaName == NULL)
+       {
+           RLOGE("[lynq_get_interface_ip] ap name get fail");
+           return -1;
+       }
     }
     else if (idx != 0)
     {
@@ -3740,7 +3778,7 @@
     nmax = 6;
     ncheckcount = nidlecount = 0;
 
-    if (s_ap_iterface_name[0] == '\0')
+    if (inner_get_ap_interface_name() == NULL)
     {
         RLOGE("------gbw thread run\n");
         return;
diff --git a/src/lynq/lib/liblynq-wifi6/scripts/start_stop_ap.sh b/src/lynq/lib/liblynq-wifi6/scripts/start_stop_ap.sh
index cbf3e4c..5415602 100755
--- a/src/lynq/lib/liblynq-wifi6/scripts/start_stop_ap.sh
+++ b/src/lynq/lib/liblynq-wifi6/scripts/start_stop_ap.sh
@@ -7,8 +7,9 @@
 		exit 1
 	fi
 	mkdir -p /run/wg870/dnsmasq.d
-	echo "interface=ap0" > /run/wg870/dnsmasq.conf
-	echo "listen-address=127.0.0.1,192.168.15.1" >> /run/wg870/dnsmasq.conf
+	echo "port=0" > /run/wg870/dnsmasq.conf
+	echo "interface=ap0" >> /run/wg870/dnsmasq.conf
+	echo "listen-address=192.168.15.1" >> /run/wg870/dnsmasq.conf
 	echo "bind-interfaces"  >> /run/wg870/dnsmasq.conf
 	echo "localise-queries" >> /run/wg870/dnsmasq.conf
 	echo "dhcp-range=192.168.15.2,192.168.15.14,255.255.255.240,1h"  >> /run/wg870/dnsmasq.conf
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcTracker.cpp b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcTracker.cpp
index f92fd54..4c37b77 100644
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcTracker.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/DcTracker.cpp
@@ -1202,7 +1202,11 @@
             RFX_LOG_D(RFX_LOG_TAG, "reTrySetupData, retry with apnType: %s, request: RIL_REQUEST_SETUP_DATA_CALL, delay time: %ld",
                 apnType.c_str(),
                 delay);
-            DcTracker::mRpDataController->retryRequest(apnType, setupDataMessage, reason, delay);
+            if (apnType == TEXT_APN_TYPE_DEFAULT) {
+		DcTracker::mRpDataController->retryRequest(apnType, setupDataMessage, reason, delay);
+            } else {
+                DcTracker::mRpDataController->retryRequest2(apnType, setupDataMessage, reason, delay);
+            }
             return;
         }
     } else {
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.cpp b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.cpp
index 4dc7432..b80a565 100644
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.cpp
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.cpp
@@ -63,7 +63,7 @@
 RFX_IMPLEMENT_CLASS("RpDataController", RpDataController, RfxController);
 
 RpDataController::RpDataController() :
-    mRetryTimerHandle(NULL){
+    mRetryTimerHandle(NULL), mRetryTimerHandle2(NULL){
 }
 
 RpDataController::~RpDataController() {
@@ -401,6 +401,39 @@
     RpDataController::mDcTracker.trySetupData(apnType, request, reason);
 }
 
+void RpDataController::retryRequest2(string apnType, const sp<RfxMessage>& request, string reason, long delay) {
+
+    logD(RFX_LOG_TAG, "RpDataController::retryRequest2, retry with apnType: %s, request: %s, delay time: %ld",
+            apnType.c_str(),
+            RpDataUtils::requestOrUrcToString(request->getId()),
+            delay);
+    logD(RFX_LOG_TAG, "Step1,  mRetryTimerHandle2=%x", mRetryTimerHandle2);
+    if (RpDataController::mRetryTimerHandle2 != NULL) {
+        RfxTimer::stop(mRetryTimerHandle2);
+    }
+     logD(RFX_LOG_TAG, "Step2,  mRetryTimerHandle2=%x", mRetryTimerHandle2);
+    // anyway record the latest retry info.
+    RpDataController::mRetryInfo2.apnType = apnType;
+    RpDataController::mRetryInfo2.request = request;
+    RpDataController::mRetryInfo2.reason = reason;
+     logD(RFX_LOG_TAG, "Step3,  mRetryTimerHandle2=%x", mRetryTimerHandle2);
+    RpDataController::mRetryTimerHandle2 = RfxTimer::start(RfxCallback0(this,
+            &RpDataController::onTimer2), ms2ns(delay));
+}
+
+void RpDataController::onTimer2() {
+    string apnType = RpDataController::mRetryInfo2.apnType;
+    sp<RfxMessage> request = RpDataController::mRetryInfo2.request;
+    string reason = RpDataController::mRetryInfo2.reason;
+
+    logD(RFX_LOG_TAG, "RpDataController::onTimer2, retry with apnType: %s, request: %s, delay time: %s",
+            apnType.c_str(),
+            RpDataUtils::requestOrUrcToString(request->getId()),
+            reason.c_str());
+
+    RpDataController::mDcTracker.trySetupData(apnType, request, reason);
+}
+
 void RpDataController::onApnReady() {
     logD(RFX_LOG_TAG, "RpDataController::onApnReady");
 
diff --git a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.h b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.h
index 5a34862..d270e08 100644
--- a/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.h
+++ b/src/telephonyware/3.0/libvendor-ril/mtk-rilproxy/telephony/data/RpDataController.h
@@ -58,6 +58,8 @@
     void notifyWorld(const sp<RfxMessage>& response);
     void retryRequest(string apnType, const sp<RfxMessage>& request, string reason, long delay);
     void onTimer();
+    void retryRequest2(string apnType, const sp<RfxMessage>& request, string reason, long delay);
+    void onTimer2();
     void onApnReady();
 
     void sendToMD(const sp<RfxMessage>& request);
@@ -121,8 +123,9 @@
 private:
     DcTracker mDcTracker;
     TimerHandle mRetryTimerHandle;
-
+    TimerHandle mRetryTimerHandle2;
     RetryInfo mRetryInfo;
+    RetryInfo mRetryInfo2;
 
 };