[Feature][T108][bug-view-1495] fix data_call callback block

Only Configure: No
Affected branch: GSW_V1453
Affected module: DATA_CALL
Is it affected on IC: only ASR
Self-test: yes
Doc Update: no

Change-Id: I5108b9d2aa4c6e45a5aedd2f62048777c5d647ed
diff --git a/mbtk/libgsw_lib/gsw_data_interface.c b/mbtk/libgsw_lib/gsw_data_interface.c
index 1c21210..5017822 100755
--- a/mbtk/libgsw_lib/gsw_data_interface.c
+++ b/mbtk/libgsw_lib/gsw_data_interface.c
@@ -128,6 +128,15 @@
     uint8 apn_type[MBTK_APN_TYPE_SIZE];

 } mbtk_qser_apn_info_s;

 

+typedef struct{

+    uint8            cid; //cid number

+    bool             connect_state; //true: connect, false: disconnect;

+    bool             auto_urc; //urc generated by manual/auto dialing

+    uint8            pdp_result; //The cause of the dialing result 

+    mbtk_ipv4_info_t ipv4; //ipv4 info

+    mbtk_ipv6_info_t ipv6; //ipv6 info

+}mbtk_pdp_cb_info_s;

+

 static mbtk_info_handle_t* (*mbtk_info_handle_get)(void);

 static int (*mbtk_info_handle_free)(mbtk_info_handle_t** handle);

 int (*mbtk_pdp_state_change_cb_reg)(mbtk_info_handle_t* handle, mbtk_info_callback_func cb);

@@ -232,11 +241,10 @@
 //define

 #define lib_mbtk_path "/lib/libmbtk_lib.so"

 pthread_mutex_t data_mutex = PTHREAD_MUTEX_INITIALIZER;

-static int data_call_lock = 0;

 static int data_init_flag = 0;

-static void *dlHandle_mbtk;

+static void *dlHandle_mbtk = NULL;

 static mbtk_info_handle_t* data_info_handle = NULL;

-static gsw_data_call_evt_cb_t gsw_data_call_evt_cb;

+static gsw_data_call_evt_cb_t gsw_data_call_evt_cb = NULL;

 

 Wan_State_ind_s *linkState_arr;

 

@@ -416,103 +424,89 @@
 

 

 

-static int data_call_state_query(int call_id,Wan_State_ind_s *linkState)

+static int data_call_state_query(int call_id,Wan_State_ind_s *linkState, mbtk_ipv4_info_t *ipv4, mbtk_ipv6_info_t *ipv6)

 {

-    int ret = -1;

-    mbtk_ipv4_info_t ipv4;

-    mbtk_ipv6_info_t ipv6;

-

-    LOGE("mbtk_data_call_state_get start\n");

-    ret = mbtk_data_call_state_get(data_info_handle, call_id, &ipv4, &ipv6);

-    LOGE("mbtk_data_call_state_get end\n");

-    if (ret != 0) 

-    {

-        LOGE("mbtk_data_call_state_get fail\n");

-        return ret;

-    }

-

     //ifname

     sprintf(linkState->ifname, "ccinet%d", call_id-1);

 

     //type

-    if(ipv4.valid)

+    if(ipv4->valid)

     {

-        if(ipv6.valid)

+        if(ipv6->valid)

         {

             strcpy(linkState->type, "IPV4V6");

         } 

-        else {

+        else

+        {

             strcpy(linkState->type, "IP");

         }

     }

-    else if(ipv6.valid)

+    else if(ipv6->valid)

     {

         strcpy(linkState->type, "IPV6");

     }

 

     //ip

-    LOGE("ipv4.valid = %d\n", ipv4.valid);

-    if(ipv4.valid)

+    LOGD("ipv4.valid = %d", ipv4->valid);

+    if(ipv4->valid)

     {

         if(linkState==NULL)

         {

-            LOGE("linkState is NULL\n");

+            LOGE("linkState is NULL");

             return GSW_HAL_NORMAL_FAIL;

         }

 

         //parse ipv4_addr,gw,dns,sdns

-        if(inet_ntop(AF_INET, &(ipv4.IPAddr), linkState->v4_ip , GSW_PDP_ADDR_MAX_LEN) == NULL) {

-            LOGE("IPv4 error.\n");

+        if(inet_ntop(AF_INET, &(ipv4->IPAddr), linkState->v4_ip , GSW_PDP_ADDR_MAX_LEN) == NULL) {

+            LOGE("IPv4 error");

         } else {

-            LOGE("IPv4 : %s\n", linkState->v4_ip);

+            LOGD("IPv4 : %s", linkState->v4_ip);

             

         }

 

 

-        if(inet_ntop(AF_INET, &(ipv4.GateWay), linkState->v4_gw , GSW_PDP_ADDR_MAX_LEN) == NULL) {

-            LOGE("GateWay error.\n");

+        if(inet_ntop(AF_INET, &(ipv4->GateWay), linkState->v4_gw , GSW_PDP_ADDR_MAX_LEN) == NULL) {

+            LOGE("GateWay error");

         } else {

-            LOGE("GateWay : %s\n", linkState->v4_gw);

+            LOGE("GateWay : %s", linkState->v4_gw);

         }

 

-        if(inet_ntop(AF_INET, &(ipv4.PrimaryDNS), linkState->v4_pdns , GSW_DNS_ADDR_MAX_LEN) == NULL) {

-            LOGE("PrimaryDNS error.\n");

+        if(inet_ntop(AF_INET, &(ipv4->PrimaryDNS), linkState->v4_pdns , GSW_DNS_ADDR_MAX_LEN) == NULL) {

+            LOGE("PrimaryDNS error");

         } else {

-            LOGE("PrimaryDNS : %s\n", linkState->v4_pdns);

+            LOGD("PrimaryDNS : %s", linkState->v4_pdns);

         }

 

-        if(inet_ntop(AF_INET, &(ipv4.SecondaryDNS), linkState->v4_sdns , GSW_DNS_ADDR_MAX_LEN) == NULL) {

-            LOGE("SecondaryDNS error.\n");

+        if(inet_ntop(AF_INET, &(ipv4->SecondaryDNS), linkState->v4_sdns , GSW_DNS_ADDR_MAX_LEN) == NULL) {

+            LOGE("SecondaryDNS error");

         } else {

-            LOGE("SecondaryDNS : %s\n", linkState->v4_sdns);

+            LOGD("SecondaryDNS : %s", linkState->v4_sdns);

         }

     }

 

-    LOGE("ipv6.valid = %d\n", ipv6.valid);

-    if(ipv6.valid)

+    LOGD("ipv6.valid = %d", ipv6->valid);

+    if(ipv6->valid)

     {

         //parse ipv6_addr,gw,dns,sdns

-        if(ipv6_2_str(&(ipv6.IPV6Addr), linkState->v6_ip)) {

-            LOGE("IPv6 error.\n");

+        if(ipv6_2_str(&(ipv6->IPV6Addr), linkState->v6_ip)) {

+            LOGE("IPv6 error");

         } else {

-            LOGE("IPv6 : %s\n", linkState->v6_ip);

+            LOGD("IPv6 : %s", linkState->v6_ip);

         }

 

-        if(ipv6_2_str(&(ipv6.PrimaryDNS), linkState->v6_pdns)) {

-            LOGE("PrimaryDNS error.\n");

+        if(ipv6_2_str(&(ipv6->PrimaryDNS), linkState->v6_pdns)) {

+            LOGE("PrimaryDNS error");

         } else {

-            LOGE("PrimaryDNS : %s\n", linkState->v6_pdns);

+            LOGD("PrimaryDNS : %s", linkState->v6_pdns);

         }

 

-        if(ipv6_2_str(&(ipv6.SecondaryDNS), linkState->v6_sdns)) {

-            LOGE("SecondaryDNS error.\n");

+        if(ipv6_2_str(&(ipv6->SecondaryDNS), linkState->v6_sdns)) {

+            LOGE("SecondaryDNS error");

         } else {

-            LOGE("SecondaryDNS : %s\n", linkState->v6_sdns);

+            LOGD("SecondaryDNS : %s", linkState->v6_sdns);

         }

     }

 

-

-

     return GSW_HAL_SUCCESS;

 }

 

@@ -521,8 +515,9 @@
 {

     LOGE("data_call_state_change_cb() start\n");

 

-    if(data == NULL || data_len == 0)

+    if(data == NULL || data_len != sizeof(mbtk_pdp_cb_info_s))

     {

+        LOGE("data = [NULL], data_len(%d) != sizeof(mbtk_pdp_cb_info_s)(%d)", data_len, sizeof(mbtk_pdp_cb_info_s));

         return;

     }

 

@@ -546,83 +541,22 @@
         LOGE("linkState_arr is not NULL");

     }

 

-    uint8 *net_data = NULL;

-    net_data = (uint8 *)data;

-    //disconnected

-    LOGE("net_data = %d", *net_data);

-    if(*net_data > 100 && *net_data < 200)

-    {   

-        int cid = *net_data - 100;

-        LOGE("[%s] apn_id = %d", __func__, cid);

-        linkState_arr->state = 0;//disconnected

-        linkState_arr->cid = cid;

-        linkState_arr->handle = cid;

-

-        //get data_call_state

-#if 0

-        if(!data_call_lock)

-        {

-            data_call_state_query(cid, linkState_arr);

-        }

-#endif

-

-        if(gsw_data_call_evt_cb)

-        {

-            gsw_data_call_evt_cb(linkState_arr);

-        }

-    }

-

-    else if(*net_data > 200 && *net_data < 220)

+    mbtk_pdp_cb_info_s *pdp_cb_info = (mbtk_pdp_cb_info_s *)data;

+    linkState_arr->cid = pdp_cb_info->cid;

+    linkState_arr->handle = pdp_cb_info->cid;

+    if(pdp_cb_info->connect_state)

     {

-        LOGE("[%s] cid[%d] is open", __func__, *net_data - 200);

-        int cid = *net_data-200;

-        //int handle_temp = apn_id-2;

-

         linkState_arr->state = 2;//connected

-        linkState_arr->cid = cid;

-        linkState_arr->handle = cid;

-        //get data_call_state

-        if(!data_call_lock)

-        {

-            data_call_state_query(cid, linkState_arr);

-        }

-        

-        if(gsw_data_call_evt_cb)

-        {

-            gsw_data_call_evt_cb(linkState_arr);

-        }

+        data_call_state_query(pdp_cb_info->cid, linkState_arr, &(pdp_cb_info->ipv4), &(pdp_cb_info->ipv6));

     }

-

-    else if(*net_data > 220)

-    {

-        LOGE("cid [%d] is reopen.\n", *net_data - 220);

-        int cid = *net_data-220;

-        //int handle_temp = apn_id-2;

-        

-        linkState_arr->state = 2;//connected

-        linkState_arr->cid = cid;

-        linkState_arr->handle = cid;

-

-        //get data_call_state

-        if(!data_call_lock)

-        {

-            data_call_state_query(cid, linkState_arr);

-        }

-

-        if(gsw_data_call_evt_cb)

-        {

-            gsw_data_call_evt_cb(linkState_arr);

-        }

-    }

-

-    else if(*net_data == 1)

-    {

-        LOGE("pdp is open.\n");

-    }

-

     else

     {

-        LOGE("unknown param [%d].\n", *net_data);

+        linkState_arr->state = 0;//disconnected

+    }

+    

+    if(gsw_data_call_evt_cb)

+    {

+        gsw_data_call_evt_cb(linkState_arr);

     }

 

     ret = Wan_State_ind_free(&linkState_arr);

@@ -719,14 +653,13 @@
         return GSW_HAL_NORMAL_FAIL;

     }

 

-#if 0

     ret = mbtk_pdp_state_change_cb_reg((mbtk_info_handle_t*)data_info_handle, data_call_state_change_cb);

     if (ret != 0) 

     {

         LOGE("mbtk_pdp_state_change_cb_reg fail\n");

         return GSW_HAL_NORMAL_FAIL;

     }

-#endif

+    

     gsw_data_call_evt_cb = evt_cb;

     data_init_flag = 1;

     return GSW_HAL_SUCCESS;

@@ -870,7 +803,6 @@
 {

     int ret = -1;

     int cid = -1;

-    uint8_t cid_temp = 0;

     if(data_init_flag == 0 || data_info_handle == NULL)

     {

         return GSW_HAL_NORMAL_FAIL;

@@ -896,19 +828,13 @@
         return GSW_HAL_NORMAL_FAIL;

     }

     

-    data_call_lock = 1;

     ret = mbtk_data_call_start((mbtk_info_handle_t*)data_info_handle, cid, 0, FALSE, 0);

-    data_call_lock = 0;

     if(ret != 0)

     {

         LOGE("[%s] mbtk_data_call_start fail.[%d]", __func__, ret);

         return GSW_HAL_NORMAL_FAIL;

     }

 

-    cid_temp = (uint8_t)(cid + 200);

-    //LOGE("[%s] cid = %d, cid_temp = %d", __func__, cid, cid_temp);

-    data_call_state_change_cb(&cid_temp, sizeof(uint8_t));

-

     LinkInf->handle = cid;

     memset(LinkInf->apnid, 0x00, sizeof(LinkInf->apnid));

     sprintf(LinkInf->apnid, "%d", cid);

@@ -930,7 +856,6 @@
 {

     int ret = -1;

     int cid = -1;

-    uint8_t cid_temp = 0;

     if(data_init_flag == 0 || data_info_handle == NULL)

     {

         return GSW_HAL_NORMAL_FAIL;

@@ -949,18 +874,13 @@
         return GSW_HAL_NORMAL_FAIL;

     }

     

-    data_call_lock = 1;

     ret = mbtk_data_call_stop((mbtk_info_handle_t*)data_info_handle, cid, 15);

-    data_call_lock = 0;

     if(ret != 0)

     {

         LOGE("[%s] mbtk_data_call_stop() fail.[%d]",__func__, ret);

         return GSW_HAL_NORMAL_FAIL;

     }

 

-    cid_temp = (uint8_t)(cid + 100);

-    data_call_state_change_cb(&cid_temp, sizeof(uint8_t));

-

     return GSW_HAL_SUCCESS;

 }