[Bugfix][API-385][GSW][DATA]Insert the APN in reverse order

Change-Id: I99b9c6c3a691d5ff629a80a55add8e9892f21c53
diff --git a/lib/liblynq-data/lynq_data.cpp b/lib/liblynq-data/lynq_data.cpp
index bd7ec21..bfa0c94 100755
--- a/lib/liblynq-data/lynq_data.cpp
+++ b/lib/liblynq-data/lynq_data.cpp
@@ -13,6 +13,7 @@
 #include <pthread.h>
 #include "liblog/lynq_deflog.h"
 #include <sys/time.h>
+#include <include/lynq_uci.h>
 #define LYNQ_SERVICE_PORT 8088
 #define LYNQ_URC_SERVICE_PORT 8086
 #define LYNQ_REC_BUF 8192
@@ -20,6 +21,12 @@
 #define LYQN_SEDN_BUF 1024*8+sizeof(int)*3
 #define USER_LOG_TAG "LYNQ_DATA"
 
+#define LYNQ_DATA_UCI_BUF 258
+#define LYNQ_DATA_UCI_APN_SECTION "lynq_apn_info"
+#define LYNQ_DATA_UCI_APN_KEY "insertId"
+
+
+
 using ::android::Parcel;
 typedef struct{
     int uToken;
@@ -886,7 +893,34 @@
 /*Typethree add for T800 platform 2022/04/21 start*/
 int insert_apn_char(char *agc, char *mcc, char *mnc, char *apn, char *apntype, char *user, char *password, char *normalprotocol, char *roamingprotocol, char *carrier)
 {
+    int ret = 0;
+    int fact_apn_id=0;
+    int tmp_id_num = 0;
+    char tmp_ID[16]="";
+    char apn_info_buf[LYNQ_DATA_UCI_BUF]="";
+    char apn_info_outbuf[LYNQ_DATA_UCI_BUF];
     char strtmp[10][32];
+
+    sprintf(apn_info_buf,"%s.%s.%s",LYNQ_UCI_FILE,LYNQ_DATA_UCI_APN_SECTION,LYNQ_DATA_UCI_APN_KEY);
+    ret = lynq_uci_get(apn_info_buf,apn_info_outbuf);
+    if (ret != UCI_OK)
+    {
+        LYERRLOG("Description APN failed to allocate an ID :ret = -1");
+        return -1;
+    }
+    tmp_id_num = atoi(apn_info_outbuf);
+    fact_apn_id = -tmp_id_num;
+    tmp_id_num = tmp_id_num + 1;
+
+    apn_info_buf[LYNQ_DATA_UCI_BUF]="";
+    sprintf(apn_info_buf,"%s.%s.%s=%d",LYNQ_UCI_FILE,LYNQ_DATA_UCI_APN_SECTION,LYNQ_DATA_UCI_APN_KEY,tmp_id_num);
+
+    ret = lynq_uci_set(apn_info_buf);
+    if (ret != UCI_OK)
+    {
+        LYERRLOG("Description APN failed to allocate an ID :ret = -2");
+        return -1;
+    }
     if (mcc == NULL)
     {
         sprintf(strtmp[1], "mcc=;");
@@ -959,7 +993,8 @@
     {
         sprintf(strtmp[9], "carrier=%s;", carrier);
     }
-    sprintf(agc, "%s%s%s%s%s%s%s%s%s", strtmp[1], strtmp[2], strtmp[3], strtmp[4], strtmp[5], strtmp[6], strtmp[7], strtmp[8], strtmp[9]);
+    sprintf(agc, "id=%d;%s%s%s%s%s%s%s%s%s",fact_apn_id, strtmp[1], strtmp[2], strtmp[3], strtmp[4], strtmp[5], strtmp[6], strtmp[7], strtmp[8], strtmp[9]);
+
     return 0;
 }
 
@@ -1157,11 +1192,16 @@
     lynq_client_t client;
     char argc[512];
     char recvline[LYNQ_REC_BUF];
-    int len = 0;
+    int res = 0;
     Parcel p;
     if (cmd == 0) // insert apn db
     {
-        insert_apn_char(argc, mcc, mnc, apn, apntype, user, password, normalprotocol, roamingprotocol, carrier);
+        res = insert_apn_char(argc, mcc, mnc, apn, apntype, user, password, normalprotocol, roamingprotocol, carrier);
+        if (res != UCI_OK)
+        {
+            LYERRLOG("Description APN failed to allocate an ID");
+            return -1;
+        }
         client.uToken = Global_uToken;
         client.request = 2000 + 193; // RIL_REQUEST_MODIFY_APN
         client.paramLen = 2;