[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;
}