[Bugfix][API-616][network] lynq_set_state_buffer_valid_period_of_network set exception value, no error return

Change-Id: Id05a3493e98ecfd375b4dcf0e96e2e2c3936f97c
diff --git a/src/lynq/lib/liblynq-network/include/lynq_network/lynq_network.h b/src/lynq/lib/liblynq-network/include/lynq_network/lynq_network.h
index 9f32bed..8c40b68 100755
--- a/src/lynq/lib/liblynq-network/include/lynq_network/lynq_network.h
+++ b/src/lynq/lib/liblynq-network/include/lynq_network/lynq_network.h
@@ -72,12 +72,14 @@
 int lynq_set_ims(const int ims_mode);

 int lynq_wait_signalchanges(int *handle);

 int lynq_get_urc_info(const int handle,signalStrength_t *solSigStren,int *slot_id);

-void lynq_set_voice_registration_valid_period(int valid_period);

-void lynq_set_data_registration_valid_period(int valid_period);

-void lynq_set_ims_registration_valid_period(int valid_period);

-int lynq_get_voice_registration_valid_period();

-int lynq_get_data_registration_valid_period();

-int lynq_get_ims_registration_valid_period();

+typedef enum {

+    NETWORK_STATE_BUFFER_TYPE_VOICE_REG,

+    NETWORK_STATE_BUFFER_TYPE_DATA_REG,

+    NETWORK_STATE_BUFFER_TYPE_IMS_REG,

+    NETWORK_STATE_BUFFER_TYPE_MAX,

+}lynq_network_state_buffer_type;    

+int lynq_set_state_buffer_valid_period_of_network(lynq_network_state_buffer_type type,int valid_period);

+int lynq_get_state_buffer_valid_period_of_network(lynq_network_state_buffer_type type);

 #ifdef MODEM_GEN97

 /**@brief set or get OOS recover timer interval

 * @param mode [IN] <mode>:

diff --git a/src/lynq/lib/liblynq-network/lynq_network.cpp b/src/lynq/lib/liblynq-network/lynq_network.cpp
index 2212648..2fc1480 100755
--- a/src/lynq/lib/liblynq-network/lynq_network.cpp
+++ b/src/lynq/lib/liblynq-network/lynq_network.cpp
@@ -451,7 +451,7 @@
             {

                 case RIL_UNSOL_RESPONSE_VOICE_NETWORK_STATE_CHANGED:

                 {

-                    set_register_voice_buffer_valid(false);

+                    set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,false);

                     network_wait_urc_id = urc_id;

                     LYINFLOG("slot_id = %d",network_urc_slot_id);

                     send_signal_changes();

@@ -459,7 +459,7 @@
                 }

                 case RIL_UNSOL_RESPONSE_PS_NETWORK_STATE_CHANGED:

                 {                    

-                    set_register_data_buffer_valid(false);

+                    set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_DATA_REG,false);

                     network_wait_urc_id = urc_id;

                     LYINFLOG("slot_id = %d",network_urc_slot_id);

                     send_signal_changes();

@@ -467,7 +467,7 @@
                 }

                 case RIL_UNSOL_RESPONSE_IMS_NETWORK_STATE_CHANGED:

                 {                   

-                    set_register_ims_buffer_valid(false);

+                    set_state_buffer_valid(NETWORK_STATE_BUFFER_TYPE_IMS_REG,false);

                     network_wait_urc_id = urc_id;

                     LYINFLOG("slot_id = %d",network_urc_slot_id);

                     send_signal_changes();

@@ -1131,21 +1131,21 @@
     strUpper(str);

     if(!strcmp(str,"VOICE"))

     {

-        if(lynq_get_registration_state_to_buf_voice(regState,netType,netRejected)==0)

+        if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,regState,netType,netRejected,0)==0)

         {

-            return 0;

+            return RESULT_OK;  

         }       

         request = RIL_REQUEST_VOICE_REGISTRATION_STATE;

     }else if(!strcmp(str,"DATA")){

-        if(lynq_get_registration_state_to_buf_data(regState,LAC,CID,netType)==0)

+        if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,2,regState,netType,2,LAC,CID)==0)

         {

-            return 0;

+            return RESULT_OK;  

         }      

         request = RIL_REQUEST_DATA_REGISTRATION_STATE;

     }else if(!strcmp(str,"IMS")){

-        if(lynq_get_registration_state_to_buf_ims(imsRegState,radioTechFam)==0)

+        if(get_state_from_buf(NETWORK_STATE_BUFFER_TYPE_IMS_REG,2,imsRegState,radioTechFam,0)==0)

         {

-            return 0;

+            return RESULT_OK;  

         }       

         request = RIL_REQUEST_IMS_REGISTRATION_STATE;

     }else{

@@ -1195,7 +1195,7 @@
                 lynqStrdupReadString(p);

                 lynqStrdupReadString(p);

                 *netRejected = atoi(lynqStrdupReadString(p));       

-                lynq_set_registration_state_to_buf_voice(*regState,*netType,*netRejected);

+                set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_VOICE_REG,3,*regState,*netType,*netRejected,0);

             }

             else 

             {

@@ -1216,7 +1216,7 @@
                 resp[1] = lynqStrdupReadString(p);

                 strcpy(CID,resp[1]);

                 *netType = atoi(lynqStrdupReadString(p));

-                lynq_set_registration_state_to_buf_data(*regState,LAC,CID,*netType);

+                set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_DATA_REG,2,*regState,*netType,2,LAC,CID);

             }

             else 

             {

@@ -1233,7 +1233,7 @@
             {

                 p->readInt32(imsRegState);

                 p->readInt32(radioTechFam);

-                lynq_set_registration_state_to_buf_ims(*imsRegState,*radioTechFam);

+                set_state_to_buf(NETWORK_STATE_BUFFER_TYPE_IMS_REG,2,*imsRegState,*radioTechFam,0);

             }

             else 

             {

diff --git a/src/lynq/lib/liblynq-network/lynq_network_state_buffer.cpp b/src/lynq/lib/liblynq-network/lynq_network_state_buffer.cpp
index 2fdea32..7b41533 100755
--- a/src/lynq/lib/liblynq-network/lynq_network_state_buffer.cpp
+++ b/src/lynq/lib/liblynq-network/lynq_network_state_buffer.cpp
@@ -7,160 +7,129 @@
 #include <signal.h>

 #include <errno.h>
 #include <fcntl.h>

+#include <stdarg.h>

+#include <climits>

 #include "liblog/lynq_deflog.h"

 #include "lynq_network.h"

 #include "lynq_network_state_buffer.h"

 

 #define USER_LOG_TAG "LYNQ_NETWORK"

 

+static timer_t s_state_buffer_timer[NETWORK_STATE_BUFFER_TYPE_MAX];

+

+static int s_state_buffer_sig_value[NETWORK_STATE_BUFFER_TYPE_MAX]={2,3,4};

+

+static int s_state_buffer_valid[NETWORK_STATE_BUFFER_TYPE_MAX]={false,false,false};

+

+static char* s_state_buffer_file[NETWORK_STATE_BUFFER_TYPE_MAX]={

+     "/data/ril/network/.network_register_voice_buffer",

+     "/data/ril/network/.network_register_data_buffer",

+     "/data/ril/network/.network_register_ims_buffer"

+};

+

+#define STATE_BUFFER_CONFIG_FILE  "/data/ril/network/.state_buffer_cfg"

 typedef struct{

-    int voice_valid_period;

-    int data_valid_period;

-    int ims_valid_period;

-}lynq_network_register_buf_cfg;

-

-lynq_network_register_buf_cfg s_register_cfg;

-static timer_t s_register_timer_voice;

-static timer_t s_register_timer_data;

-static timer_t s_register_timer_ims;

-static int register_sig_value_voice = 2;

-static int register_sig_value_data = 3;

-static int register_sig_value_ims = 4;

-static int s_register_voice_valid=false;

-static int s_register_data_valid=false;

-static int s_register_ims_valid=false;

+    int valid_period[NETWORK_STATE_BUFFER_TYPE_MAX];   

+}network_state_buffer_cfg;

+static network_state_buffer_cfg s_state_buffer_cfg;

 static pthread_mutex_t mtx = PTHREAD_MUTEX_INITIALIZER;

-#define VOICE_REG_BUFFER_FILE  "/data/ril/network/.network_register_voice_buffer"

-#define DATA_REG_BUFFER_FILE  "/data/ril/network/.network_register_data_buffer"

-#define IMS_REG_BUFFER_FILE  "/data/ril/network/.network_register_ims_buffer"

-#define REG_CONFIG_FILE  "/data/ril/network/.network_cfg"

 

-void get_network_register_timer_length_from_file()

+void get_state_buffer_timer_length_from_file()

 {

     int fd_backup;

     int ret;

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

-    fd_backup = open(REG_CONFIG_FILE,O_RDONLY | O_CREAT,0777);

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

+    fd_backup = open(STATE_BUFFER_CONFIG_FILE,O_RDONLY | O_CREAT,0777);

     if (fd_backup < 0) {

-        LYERRLOG("when get, Error opening register cfg file: %s\n",strerror(errno));       

+        LYERRLOG("%s open file faile, error is %s\n",__func__,strerror(errno));       

         return;

     }

       

-    ret = read(fd_backup,&s_register_cfg,sizeof (s_register_cfg));

+    ret = read(fd_backup,&s_state_buffer_cfg,sizeof (s_state_buffer_cfg));

     if(ret<=0)

     {

-        LYERRLOG("%s get register cfg fail, ret is %d",__func__,ret);       

+        LYERRLOG("%s read fail, ret is %d",__func__,ret);

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

     } 

     else 

     {

-        LYINFLOG("%s get register cfg suc %d",__func__);  

+        LYINFLOG("%s suc",__func__);  

     }    

     close(fd_backup);   

    

     return;   

 }

 

-void set_network_register_timer_length_to_file()

+int set_state_buffer_timer_length_to_file()

 {

     int fd_backup;

     int ret;

-    fd_backup = open(REG_CONFIG_FILE,O_WRONLY | O_CREAT,0777);

+    fd_backup = open(STATE_BUFFER_CONFIG_FILE,O_WRONLY | O_CREAT,0777);

     if (fd_backup < 0) {

-        LYERRLOG("when set, Error opening register cfg file: %s\n",strerror(errno));       

-        return;

+        LYERRLOG("%s open file fail, error is %s\n",__func__,strerror(errno));       

+        return -1;

     }

       

-    ret = write(fd_backup,&s_register_cfg,sizeof (s_register_cfg));

+    ret = write(fd_backup,&s_state_buffer_cfg,sizeof (s_state_buffer_cfg));

     if(ret<=0)

     {

-        LYERRLOG("%s set register cfg fail, ret is %d",__func__,ret);       

+        LYERRLOG("%s write fail, ret is %d",__func__,ret);         

     } 

     else 

     {

-        LYINFLOG("%s set register cfg suc %d",__func__);  

+        LYINFLOG("%s suc",__func__);  

     }    

     close(fd_backup);   

    

-    return;   

-}

-

-void set_register_voice_buffer_valid(int valid)

-{

-    s_register_voice_valid = valid;

-    if(valid==false)

-    {

-        stop_network_timer(s_register_timer_voice, register_sig_value_voice);

-    }

-}

-

-void set_register_data_buffer_valid(int valid)

-{

-    s_register_data_valid = valid;

-    if(valid==false)

-    {

-        stop_network_timer(s_register_timer_data, register_sig_value_data);

-    }

-}

-

-void set_register_ims_buffer_valid(int valid)

-{

-    s_register_ims_valid = valid;

-    if(valid==false)

-    {

-        stop_network_timer(s_register_timer_ims, register_sig_value_ims);

-    }

+    return ret>0? 0:-2;   

 }

 

 void start_network_timer(timer_t timer, int signal_value, int milliseconds) {

     LYINFLOG("start_network_timer(), timer_id=%ld, signal_value=%d, time=%d",(long)timer, signal_value, milliseconds);

-
-    struct itimerspec expire;
-    expire.it_interval.tv_sec = 0;
-    expire.it_interval.tv_nsec = 0;
-    expire.it_value.tv_sec = milliseconds/1000;
-    expire.it_value.tv_nsec = (milliseconds%1000)*1000000;
-    if (timer_settime(timer, 0, &expire, NULL) == -1) {
+

+    struct itimerspec expire;

+    expire.it_interval.tv_sec = 0;

+    expire.it_interval.tv_nsec = 0;

+    expire.it_value.tv_sec = milliseconds/1000;

+    expire.it_value.tv_nsec = (milliseconds%1000)*1000000;

+    if (timer_settime(timer, 0, &expire, NULL) == -1) {

         LYERRLOG("timer_settime  failed reason=[%s]", strerror(errno));

-    }
-}
-
+    }

+}

+

 void stop_network_timer(timer_t timer, int signal_value) {

     LYINFLOG("stop_network_timer(), timer_id=%ld, signal_value=%d", (long)timer, signal_value);

-    struct itimerspec timespec;
-    if(timer_gettime(timer, &timespec) == -1) {
+    struct itimerspec timespec;

+    if(timer_gettime(timer, &timespec) == -1) {

         LYERRLOG("stop_network_timer(), get time fail(%s)", strerror(errno));

-        return;
-    }
+        return;

+    }

     LYINFLOG("stop_network_timer(), tv_sec=%ld, tv_nsec=%ld",timespec.it_value.tv_sec, timespec.it_value.tv_nsec);

-    if((timespec.it_value.tv_sec == 0)  && (timespec.it_value.tv_nsec == 0) ) {
+    if((timespec.it_value.tv_sec == 0)  && (timespec.it_value.tv_nsec == 0) ) {

         LYINFLOG("stop_network_timer(), timer_id(%ld) had stopped, just return", (long)timer);

-        return;
-    } else {
+        return;

+    } else {

         start_network_timer(timer, signal_value, 0);

-    }
+    }

 }

 

 void network_timer_handler(sigval_t sig) {    

     LYINFLOG("network_timer_handler, sig_value: %d", sig.sival_int);

     int s;   

-    s = pthread_mutex_lock(&mtx);
-    if(s != 0) {
+    s = pthread_mutex_lock(&mtx);

+    if(s != 0) {

         LYERRLOG("network_timer_handler, pthead_mutex_lock fail");

     }   

-    if(sig.sival_int == register_sig_value_voice) 

+    for(int i=0;i<NETWORK_STATE_BUFFER_TYPE_MAX;i++)

     {

-        s_register_voice_valid=false;       

-    }        

-    else if(sig.sival_int == register_sig_value_data) 

-    {

-        s_register_data_valid=false;     

-    }        

-    else if(sig.sival_int == register_sig_value_ims) 

-    {   

-        s_register_ims_valid=false;        

-    }        

-    s = pthread_mutex_unlock(&mtx);
-    if(s != 0) {
+        if(sig.sival_int == s_state_buffer_sig_value[i]) 

+        {

+            s_state_buffer_valid[i]=false; 

+            break;

+        }        

+    }    

+    s = pthread_mutex_unlock(&mtx);

+    if(s != 0) {

         LYERRLOG("network_timer_handler, pthread_mutex_unlock fail");

     }

 }

@@ -168,414 +137,250 @@
 void init_network_timer(timer_t* timer, int signal_value) 

 {

     struct sigevent sevp;

-    memset(&sevp, 0, sizeof(sevp));
-    sevp.sigev_value.sival_int = signal_value;
-    sevp.sigev_notify = SIGEV_THREAD;
+    memset(&sevp, 0, sizeof(sevp));

+    sevp.sigev_value.sival_int = signal_value;

+    sevp.sigev_notify = SIGEV_THREAD;

     sevp.sigev_notify_function = network_timer_handler;

-
-    if(timer_create(CLOCK_MONOTONIC, &sevp, timer) == -1) {
-        LYERRLOG("init_network_timer()  failed reason=[%s]", strerror(errno));

-    }
-    LYINFLOG("init_network_timer(), timer_Id = %ld, signal_value=%d", (long)(*timer), signal_value);

-}
-
-void init_network_timer_all() {

-    init_network_timer(&s_register_timer_voice,register_sig_value_voice);    

-    init_network_timer(&s_register_timer_data,register_sig_value_data); 

-    init_network_timer(&s_register_timer_ims,register_sig_value_ims); 

-    s_register_voice_valid = false;

-    s_register_data_valid = false;

-    s_register_ims_valid = false;   

 

-    get_network_register_timer_length_from_file();

+    if(timer_create(CLOCK_MONOTONIC, &sevp, timer) == -1) {

+        LYERRLOG("init_network_timer()  failed reason=[%s]", strerror(errno));

+    }

+    LYINFLOG("init_network_timer(), timer_Id = %ld, signal_value=%d", (long)(*timer), signal_value);

+}

+

+void init_network_timer_all() {

+

+    for(int i=0;i<NETWORK_STATE_BUFFER_TYPE_MAX;i++){

+        init_network_timer(&s_state_buffer_timer[i],s_state_buffer_sig_value[i]); 

+        s_state_buffer_valid[i] = false;

+    }

+    get_state_buffer_timer_length_from_file();

 }

 

 void deinit_network_timer_all() 

 {

-    stop_network_timer(s_register_timer_voice, register_sig_value_voice);

-    stop_network_timer(s_register_timer_data, register_sig_value_data);

-    stop_network_timer(s_register_timer_ims, register_sig_value_ims);

-    s_register_voice_valid = false;

-    s_register_data_valid = false;

-    s_register_ims_valid = false;    

+    for(int i=0;i<NETWORK_STATE_BUFFER_TYPE_MAX;i++){

+        stop_network_timer(&s_state_buffer_timer[i],s_state_buffer_sig_value[i]); 

+        s_state_buffer_valid[i] = false;

+    }

 }

 

-void lynq_set_registration_state_to_buf_voice(int regState,int netType,int netRejected)

+int is_period_equal_not_valid(int period)

+{

+    return period<=0 || (period > INT_MAX/1000);

+}

+

+void set_state_buffer_valid(lynq_network_state_buffer_type type,int valid)

+{

+    if(is_period_equal_not_valid(s_state_buffer_cfg.valid_period[type]))

+    {

+        valid=false;

+    }

+    s_state_buffer_valid[type] = valid;

+    if(s_state_buffer_valid[type]==false)

+    {

+        stop_network_timer(s_state_buffer_timer[type], s_state_buffer_sig_value[type]);

+    }

+    else 

+    {

+        start_network_timer(s_state_buffer_timer[type], s_state_buffer_sig_value[type],s_state_buffer_cfg.valid_period[type]*1000);

+    }

+    LYINFLOG("%s type %d valid is %d",__func__,type,valid);    

+}

+

+int get_state_buffer_valid(lynq_network_state_buffer_type type)

+{

+    return s_state_buffer_valid[type];

+}

+

+void set_state_to_buf(lynq_network_state_buffer_type type,...)

 {

     int ret;

     int fd_backup;

-

-    if(s_register_cfg.voice_valid_period<=0)

+    

+    if(is_period_equal_not_valid(s_state_buffer_cfg.valid_period[type]))

     {

-        LYINFLOG("%s timer length is not greater than 0",__func__);

+        LYINFLOG("%s type %d timer length %d is equal not valid",__func__,type,s_state_buffer_cfg.valid_period[type]);

         return;

     }

         

-    fd_backup = open(VOICE_REG_BUFFER_FILE,O_WRONLY | O_CREAT,0777);

+    fd_backup = open(s_state_buffer_file[type],O_WRONLY | O_CREAT,0777);

 

     if (fd_backup < 0) {

-        LYERRLOG("Error opening registrate voice buffer file: %s\n",strerror(errno));

+        LYERRLOG("%s Error opening registrate buffer file: %s\n",__func__,strerror(errno));

         return ;

     }

-      

-    ret = write(fd_backup,&regState,sizeof (regState));

-    if(ret<=0)

+

+    va_list pArgs;

+    va_start(pArgs, type);

+

+    int int_num;

+    int i,int_value;

+

+    int_num = va_arg(pArgs, int);

+    LYINFLOG("%s int_num is %d",__func__,int_num);

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

     {

-        LYERRLOG("%s set regState fail, ret is %d",__func__, ret);

-        goto error_done; 

-    }

-

-    ret = write(fd_backup,&netType,sizeof (netType));

-    if(ret<=0)

-    {

-        LYERRLOG("%s set netType fail, ret is %d",__func__, ret);

-        goto error_done; 

-    }

-

-    ret = write(fd_backup,&netRejected,sizeof (netRejected));

-    if(ret<=0)

-    {

-        LYERRLOG("%s set netRejected fail, ret is %d",__func__, ret);

-        goto error_done;  

-    }   

-    

-    sync();

-	close(fd_backup); 

-    start_network_timer(s_register_timer_voice,register_sig_value_voice,s_register_cfg.voice_valid_period*1000);

-    s_register_voice_valid=true;  

-

-    LYINFLOG("set_registration_state voice suc, regState is %d, netType is %d, netRejected is %d",regState,netType,netRejected);

-    return;

-

-error_done:

-    

-    close(fd_backup); 

-    return;

-}

-void lynq_set_registration_state_to_buf_data(int regState,char * LAC,char * CID,int netType)

-{

-    int ret;

-    int stringLen; 

-    int fd_backup;

-

-    if(s_register_cfg.data_valid_period <=0)

-    {

-        LYINFLOG("%s timer length is not greater than 0",__func__);

-        return;

-    }

+        int_value=va_arg(pArgs, int);

+        LYINFLOG("%s int_value is %d",__func__,int_value);

+        ret = write(fd_backup,&int_value,sizeof (int));

+        if(ret<=0)

+        {

+            LYERRLOG("%s write int %d value %d fail, ret is %d",__func__,i,int_value,ret);

+            goto set_state_error_done;  

+        }   

         

-    fd_backup = open(DATA_REG_BUFFER_FILE,O_WRONLY | O_CREAT,0777);

-

-    if (fd_backup < 0) {

-        LYERRLOG("Error opening registrate data buffer file: %s\n",strerror(errno));

-        return ;

-    }

-      

-    ret = write(fd_backup,&regState,sizeof (regState));

-    if(ret<=0)

-    {

-        LYERRLOG("%s set regState fail, ret is %d",__func__, ret);

-        goto error_done; 

     }

 

-    ret = write(fd_backup,&netType,sizeof (netType));

-    if(ret<=0)

-    {

-        LYERRLOG("%s set netType fail, ret is %d",__func__, ret);

-        goto error_done;

-    }

+    int stringNum;

+    char * p_value;

+    int stringLen;

 

-    stringLen=strlen(LAC)+1;

-    ret = write(fd_backup,&stringLen,sizeof (stringLen));

-    if(ret<=0)

+    stringNum = va_arg(pArgs, int);

+    LYINFLOG("%s stringNum is %d",__func__,stringNum);

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

     {

-        LYERRLOG("%s set lac stringLen %d fail, ret is %d",__func__, stringLen, ret);

-        goto error_done;

-    }

-    

-    ret = write(fd_backup,LAC,stringLen);

-    if(ret<=0)

-    {

-        LYERRLOG("%s set lac fail, ret is %d",__func__, ret);

-        goto error_done;

+        p_value=va_arg(pArgs, char*);

+        stringLen=strlen(p_value)+1;

+        LYINFLOG("%s p_value is %s,stringlen is %d",__func__,p_value,stringLen);

+        ret = write(fd_backup,&stringLen,sizeof(int));

+        if(ret<=0)

+        {

+            LYERRLOG("%s write %i stringlen %d fail, ret is %d",__func__,i,stringLen,ret);

+            goto set_state_error_done;

+        }   

+        ret = write(fd_backup,p_value,stringLen);  

+        if(ret<=0)

+        {

+            LYERRLOG("%s write string %d stringlen %d fail, ret is %d",__func__,i, stringLen,ret);

+            goto set_state_error_done;  

+        }   

     }   

 

-    stringLen=strlen(CID)+1;

-    ret = write(fd_backup,&stringLen,sizeof (stringLen));

-    if(ret<=0)

-    {

-        LYERRLOG("%s set cid stringLen %d fail, ret is %d",__func__, stringLen, ret);

-        goto error_done;

-    }

-    

-    ret = write(fd_backup,CID,stringLen);

-    if(ret<=0)

-    {

-        LYERRLOG("%s set cid fail, ret is %d",__func__, ret);

-        goto error_done;

-    }   

-    

-    sync();

-	close(fd_backup); 

-    start_network_timer(s_register_timer_data,register_sig_value_data,s_register_cfg.data_valid_period*1000);

-    s_register_data_valid=true;  

-

-    LYINFLOG("set_registration_state data suc, regState is %d, netType is %d, LAC is %s, CID is %s",regState,netType,LAC,CID);

-    return;

-

-error_done:

-    

-    close(fd_backup); 

-    return;

-}

-void lynq_set_registration_state_to_buf_ims(int imsRegState,int radioTechFam)

-{

-    int ret;

-    int fd_backup;

-

-    if(s_register_cfg.ims_valid_period<=0)

-    {

-        LYINFLOG("%s timer length is not greater than 0",__func__);

-        return;

-    }

-        

-    fd_backup = open(IMS_REG_BUFFER_FILE,O_WRONLY | O_CREAT,0777);

-

-    if (fd_backup < 0) {

-        LYERRLOG("Error opening registrate ims buffer file: %s\n",strerror(errno));

-        return ;

-    }

-      

-    ret = write(fd_backup,&imsRegState,sizeof (imsRegState));

-    if(ret<=0)

-    {

-        LYERRLOG("%s set imsRegState fail, ret is %d",__func__, ret);

-        goto error_done;

-    }

-

-    ret = write(fd_backup,&radioTechFam,sizeof (radioTechFam));

-    if(ret<=0)

-    {

-        LYERRLOG("%s set radioTechFam fail, ret is %d",__func__, ret);

-        goto error_done;

-    }

+    va_end(pArgs);

 

     sync();

     close(fd_backup); 

-    start_network_timer(s_register_timer_ims,register_sig_value_ims,s_register_cfg.ims_valid_period*1000);

-    s_register_ims_valid=true;   

-

-    LYINFLOG("set_registration_state ims suc, imsRegState is %d, radioTechFam is %d",imsRegState,radioTechFam);

+    set_state_buffer_valid(type,true);  

+    LYINFLOG("%s type %d suc",__func__,type);

     return;

 

-error_done:

-    

+set_state_error_done:    

+    set_state_buffer_valid(type,false);

     close(fd_backup); 

-    return;

+    return;   

 }

 

-int lynq_get_registration_state_to_buf_voice(int* regState,int *netType,int *netRejected)

+int get_state_from_buf(lynq_network_state_buffer_type type,...)

 {

     int ret;

     int fd_backup;

-

-    if(!s_register_voice_valid)

+    

+    if(!get_state_buffer_valid(type))

     {

-        LYINFLOG("registration voice buffer is false");

+        LYINFLOG("%s type %d buffer not valid",__func__,type);

         return 1;

     }

 

-    fd_backup = open(VOICE_REG_BUFFER_FILE, O_RDONLY);

+    fd_backup = open(s_state_buffer_file[type], O_RDONLY);

 

     if (fd_backup < 0) {

-        LYERRLOG("Error opening registrate voice buffer file: %s\n",strerror(errno));

-        s_register_voice_valid=false;

+        LYERRLOG("%s Error opening type %d buffer file: %s\n",__func__,type,strerror(errno));

+        set_state_buffer_valid(type,false); 

         return -1;

     }

-      

-    ret = read(fd_backup,regState,sizeof (int));

-    if(ret<=0)

+

+    va_list pArgs;

+    va_start(pArgs, type);

+    int int_p_num; 

+    int i;

+    int* int_p_value;

+

+    int_p_num= va_arg(pArgs, int); 

+    LYINFLOG("%s int_num is %d",__func__,int_p_num);

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

     {

-        LYERRLOG("%s get regState fail, ret is %d",__func__,ret);

-        goto error_done;

+        int_p_value=va_arg(pArgs, int*);        

+        ret = read(fd_backup,int_p_value,sizeof (int));

+        LYINFLOG("%s int_p_value is %d",__func__,(*int_p_value));

+        if(ret<=0)

+        {

+            LYERRLOG("%s read int %d fail, ret is %d",__func__,i,ret);

+            goto get_state_error_done;  

+        }   

+        

     }

 

-    ret = read(fd_backup,netType,sizeof (int));

-    if(ret<=0)

-    {

-        LYERRLOG("%s get netType fail, ret is %d",__func__,ret);

-        goto error_done;

-    }

+    int stringNum;

+    char * p_value;

+    int stringLen;

 

-    ret = read(fd_backup,netRejected,sizeof (int));

-    if(ret<=0)

+    stringNum = va_arg(pArgs, int);

+    LYINFLOG("%s stringNum is %d",__func__,stringNum);

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

     {

-        LYERRLOG("%s get netRejected fail, ret is %d",__func__,ret);

-        goto error_done;

-    }       

+        ret = read(fd_backup,&stringLen,sizeof (int));

+        if(ret<=0)

+        {

+            LYERRLOG("%s get %d string len fail, ret is %d",__func__,i,ret);

+            goto get_state_error_done;

+        }

+        LYINFLOG("%s stringlen is %d",__func__,stringLen);

+        p_value=va_arg(pArgs, char*);          

+        ret = read(fd_backup,p_value,stringLen);

+        if(ret<=0)

+        {

+            LYERRLOG("%s get %d string fail, stringlen is %d,  ret is %d",__func__, stringLen,ret);

+            goto get_state_error_done;

+        } 

+        LYINFLOG("%s p_value is %s",__func__,p_value);

+    } 

+    va_end(pArgs);

 

-    

-	close(fd_backup);   

-    LYINFLOG("get_registration_state voice suc, regState is %d, netType is %d, netRejected is %d",*regState,*netType,*netRejected);

-    return 0;   

-

-error_done:

-     s_register_voice_valid=false;

-     close(fd_backup); 

-     return -1;

-}

-int lynq_get_registration_state_to_buf_data(int* regState,char * LAC,char * CID,int *netType)

-{

-    int ret;

-    int stringLen;   

-    int fd_backup;

-

-    if(!s_register_data_valid)

-    {

-        LYINFLOG("registration data buffer is false");

-        return 1;

-    }

-

-    fd_backup = open(DATA_REG_BUFFER_FILE,O_RDONLY);

-

-    if (fd_backup < 0) {

-        LYERRLOG("Error opening registrate data buffer file: %s\n",strerror(errno));     

-        return -1;

-    }

-      

-    ret = read(fd_backup,regState,sizeof (int));

-    if(ret<=0)

-    {

-        LYERRLOG("%s get regState fail, ret is %d",__func__, ret);

-        goto error_done;

-    }

-

-    ret = read(fd_backup,netType,sizeof (int));

-    if(ret<=0)

-    {

-        LYERRLOG("%s get netType fail, ret is %d",__func__, ret);

-        goto error_done;

-    }

-

-    ret = read(fd_backup,&stringLen,sizeof (int));

-    if(ret<=0)

-    {

-        LYERRLOG("%s get lac stringLen fail, ret is %d",__func__, ret);

-        goto error_done;

-    }

-    

-    ret = read(fd_backup,LAC,stringLen);

-    if(ret<=0)

-    {

-        LYERRLOG("%s get lac fail, ret is %d, stringLen is %d",__func__, ret,stringLen);

-        goto error_done;

-    }   

-

- 

-    ret = read(fd_backup,&stringLen,sizeof (int));

-    if(ret<=0)

-    {

-        LYERRLOG("%s get cid stringLen fail, ret is %d",__func__, ret);

-        goto error_done;

-    }

-    

-    ret = read(fd_backup,CID,stringLen);

-    if(ret<=0)

-    {

-        LYERRLOG("%s get cid fail, ret is %d, stringLen is %d",__func__, ret,stringLen);

-        goto error_done;

-    }        

-    

     close(fd_backup);   

-

-    LYINFLOG("get_registration_state data suc, regState is %d, netType is %d, LAC is %s, CID is %s",*regState,*netType,LAC,CID);

-    return 0;

-

-error_done:

-    s_register_data_valid =false;

+    LYINFLOG("%s type %d suc",__func__,type);

+    return 0;  

+    

+get_state_error_done:

+    set_state_buffer_valid(type,false); 

     close(fd_backup); 

     return -1;

-    

 }

-int lynq_get_registration_state_to_buf_ims(int* imsRegState,int *radioTechFam)

+

+int lynq_set_state_buffer_valid_period_of_network(lynq_network_state_buffer_type type,int valid_period)

 {

-    int ret;

-    int fd_backup;

-

-    if(!s_register_ims_valid)

+    if(type>NETWORK_STATE_BUFFER_TYPE_MAX || type <0)

     {

-        LYINFLOG("registration ims buffer is false");

-        return 1;

-    }

-

-    fd_backup = open(IMS_REG_BUFFER_FILE,O_RDONLY);

-

-    if (fd_backup < 0) {

-        LYERRLOG("Error opening registrate ims buffer file: %s\n",strerror(errno));

+        LYERRLOG("%s type %d error",__func__,type);

         return -1;

     }

-      

-    ret = read(fd_backup,imsRegState,sizeof (int));

-    if(ret<=0)

+    if(valid_period>INT_MAX/1000 || valid_period <0)

     {

-        LYERRLOG("%s get imsRegState fail, ret is %d",__func__, ret);

-        goto error_done;

+        LYERRLOG("%s type %d error",__func__,valid_period);

+        return -2;

     }

-

-    ret = read(fd_backup,radioTechFam,sizeof (int));

-    if(ret<=0)

-    {

-        LYERRLOG("%s get radioTechFam fail, ret is %d",__func__, ret);

-        goto error_done;

-    }    

    

-    close(fd_backup);   

-

-    LYINFLOG("get_registration_state ims suc, imsRegState is %d, radioTechFam is %d",*imsRegState,*radioTechFam);

-    return 0;

-

-error_done:

-    s_register_ims_valid =false;

-    close(fd_backup); 

-    return -1;

+    network_state_buffer_cfg cfg_back=s_state_buffer_cfg;

+    s_state_buffer_cfg.valid_period[type]=valid_period;    

+    int ret=set_state_buffer_timer_length_to_file();

+    if(ret!=0)

+    {

+        s_state_buffer_cfg=cfg_back;

+    }

+    else 

+    {

+        set_state_buffer_valid(type,false);   

+    }

+    LYINFLOG("%s type %d period %d ret is %d",__func__,type,valid_period,ret);

+    return ret;

 }

 

-void lynq_set_voice_registration_valid_period(int valid_period)

+int lynq_get_state_buffer_valid_period_of_network(lynq_network_state_buffer_type type)

 {

-    s_register_cfg.voice_valid_period=valid_period;

-    stop_network_timer(s_register_timer_voice, register_sig_value_voice);

-    s_register_voice_valid=false;

-    set_network_register_timer_length_to_file();

+    if(type>NETWORK_STATE_BUFFER_TYPE_MAX || type <0)

+    {

+        LYERRLOG("%s type %d error",__func__,type);

+        return 0;

+    }

+    return s_state_buffer_cfg.valid_period[type];

 }

-

-void lynq_set_data_registration_valid_period(int valid_period)

-{

-    s_register_cfg.data_valid_period = valid_period;

-    stop_network_timer(s_register_timer_data, register_sig_value_data);

-    s_register_data_valid=false;

-    set_network_register_timer_length_to_file();    

-}

-

-void lynq_set_ims_registration_valid_period(int valid_period)

-{

-    s_register_cfg.ims_valid_period=valid_period;

-    stop_network_timer(s_register_timer_ims, register_sig_value_ims);

-    s_register_ims_valid=false;

-    set_network_register_timer_length_to_file();

-}

-

-int lynq_get_voice_registration_valid_period()

-{

-    return s_register_cfg.voice_valid_period;

-}

-

-int lynq_get_data_registration_valid_period()

-{

-    return s_register_cfg.data_valid_period;

-}

-

-int lynq_get_ims_registration_valid_period()

-{

-    return s_register_cfg.ims_valid_period;

-}

-

diff --git a/src/lynq/lib/liblynq-network/lynq_network_state_buffer.h b/src/lynq/lib/liblynq-network/lynq_network_state_buffer.h
index c0e20be..b451c65 100755
--- a/src/lynq/lib/liblynq-network/lynq_network_state_buffer.h
+++ b/src/lynq/lib/liblynq-network/lynq_network_state_buffer.h
@@ -3,20 +3,11 @@
 #ifdef __cplusplus

 extern "C" {

 #endif

-void set_register_voice_buffer_valid(int valid);

-void set_register_data_buffer_valid(int valid);

-void set_register_ims_buffer_valid(int valid);

-void stop_network_timer(timer_t timer, int signal_value);

-void start_network_timer(timer_t timer, int signal_value, int milliseconds);

+void set_state_buffer_valid(lynq_network_state_buffer_type type,int valid);

+void set_state_to_buf(lynq_network_state_buffer_type type,...);

+int get_state_from_buf(lynq_network_state_buffer_type type,...);

 void init_network_timer_all();

 void deinit_network_timer_all();

-void lynq_set_registration_state_to_buf_voice(int regState,int netType,int netRejected);

-void lynq_set_registration_state_to_buf_data(int regState,char * LAC,char * CID,int netType);

-void lynq_set_registration_state_to_buf_ims(int imsRegState,int radioTechFam);

-int lynq_get_registration_state_to_buf_voice(int* regState,int *netType,int *netRejected);

-int lynq_get_registration_state_to_buf_data(int* regState,char * LAC,char * CID,int *netType);

-int lynq_get_registration_state_to_buf_ims(int* imsRegState,int *radioTechFam);

-

 #ifdef __cplusplus

 }

 #endif