blob: 73e4692eec94d08a7599cc1fe017ad5e60bb6848 [file] [log] [blame]
b.liu4e243dc2023-11-27 11:20:00 +08001#include "lynq-qser-data.h"
2#include "mbtk_type.h"
wangyouqiang84179c82024-01-05 15:42:55 +08003#include "mbtk_info_api.h"
b.liu5fa9e772023-11-23 18:00:55 +08004
wangyouqiange2498f12024-01-06 17:55:36 +08005#include <pthread.h>
6#include <cutils/properties.h>
7#include <string.h>
wangyouqiang805b0f92024-04-07 17:06:13 +08008#include <unistd.h>
9#include <sys/types.h>
10#include <sys/stat.h>
b.liuf37bd332024-03-18 13:51:24 +080011#include <fcntl.h>
wangyouqiang84179c82024-01-05 15:42:55 +080012/****************************DEFINE***************************************/
13#define QSER_RESULT_SUCCESS 0
14#define QSER_RESULT_FAIL -1
b.liu5fa9e772023-11-23 18:00:55 +080015
b.liuf37bd332024-03-18 13:51:24 +080016#define MBTK_INFO_ERR_CID_EXIST 311
17#define MBTK_INFO_ERR_CID_NO_EXIST 312
wangyouqiangc1d72d22024-04-25 10:15:58 +080018#define MBTK_INFO_ERR_NO_APN 500
b.liuf37bd332024-03-18 13:51:24 +080019
wangyouqiange2498f12024-01-06 17:55:36 +080020#define QSER_APN_NUM 8
wangyouqiang84179c82024-01-05 15:42:55 +080021//default range: 0 - 7
22//AT+CGACT range: 1 - 8
23//1 default IDX, 8 IMS IDX
b.liuf37bd332024-03-18 13:51:24 +080024#if defined(MBTK_ALL_CID_SUPPORT)
wangyouqiang3dcb3832024-04-24 15:22:50 +080025#if defined(MBTK_SG_SUPPORT)
b.liuf37bd332024-03-18 13:51:24 +080026#define QSER_PROFILE_IDX_MIN 0
27#else
wangyouqiang84179c82024-01-05 15:42:55 +080028#define QSER_PROFILE_IDX_MIN 1
b.liuf37bd332024-03-18 13:51:24 +080029#endif
wangyouqiang805b0f92024-04-07 17:06:13 +080030#else
31#define QSER_PROFILE_IDX_MIN 1
32#endif
wangyouqiang84179c82024-01-05 15:42:55 +080033#define QSER_PROFILE_IDX_MAX 6
wangyouqiange2498f12024-01-06 17:55:36 +080034
wangyouqiang84179c82024-01-05 15:42:55 +080035/****************************DEFINE***************************************/
36
37/****************************VARIABLE***************************************/
38mbtk_info_handle_t* qser_info_handle = NULL;
39int qser_info_handle_num = 0;
40static bool inited = FALSE;
41static qser_data_call_evt_cb_t qser_net_status_cb = NULL;
wangyouqiang84179c82024-01-05 15:42:55 +080042/****************************VARIABLE***************************************/
43
44/******************************FUNC*****************************************/
wangyouqiang80487e42024-05-24 15:06:20 +080045static int qser_apn_info_param_convert(int profile_idx, qser_apn_info_s *new_apn, mbtk_qser_apn_info_s *old_apn)
wangyouqiang84179c82024-01-05 15:42:55 +080046{
47 if(new_apn == NULL || old_apn == NULL)
48 {
wangyouqiangc42b85d2024-04-24 17:05:06 +080049 LOGE("[qser_data] qser_apn_info_param_convert apn param is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +080050 return QSER_RESULT_FAIL;
51 }
wangyouqiang80487e42024-05-24 15:06:20 +080052
53 memset(new_apn, 0x0, sizeof(qser_apn_info_s));
54 new_apn->profile_idx = old_apn->cid - 1;
wangyouqiang84179c82024-01-05 15:42:55 +080055 //get ip type
56 if(old_apn->ip_type == MBTK_IP_TYPE_IPV4V6) // IPV4V6
57 {
58 new_apn->pdp_type = QSER_APN_PDP_TYPE_IPV4V6;
59 }
60 else if(old_apn->ip_type == MBTK_IP_TYPE_IP) // IPV4
61 {
62 new_apn->pdp_type = QSER_APN_PDP_TYPE_IPV4;
63 }
64 else if(old_apn->ip_type == MBTK_IP_TYPE_IPV6) // IPV6
65 {
66 new_apn->pdp_type = QSER_APN_PDP_TYPE_IPV6;
67 }
68 else
69 {
70 new_apn->pdp_type = QSER_APN_PDP_TYPE_PPP;
71 }
72
73 //get apn name
wangyouqiang80487e42024-05-24 15:06:20 +080074 if(strlen((char *)old_apn->apn_name) > QSER_APN_NAME_SIZE)
wangyouqiang84179c82024-01-05 15:42:55 +080075 {
wangyouqiangc42b85d2024-04-24 17:05:06 +080076 LOGE("[qser_data] apn_nmea length verylong.");
wangyouqiang84179c82024-01-05 15:42:55 +080077 return QSER_RESULT_FAIL;
78 }
79 else
80 {
wangyouqiang80487e42024-05-24 15:06:20 +080081 if(strlen((char *)old_apn->apn_name) > 0)
wangyouqiang84179c82024-01-05 15:42:55 +080082 {
wangyouqiang80487e42024-05-24 15:06:20 +080083 memcpy(new_apn->apn_name, old_apn->apn_name,strlen((char *)old_apn->apn_name));
wangyouqiang84179c82024-01-05 15:42:55 +080084 }
85 }
86
87 //get apn user
wangyouqiang80487e42024-05-24 15:06:20 +080088 if(strlen((char *)old_apn->user_name) > QSER_APN_USERNAME_SIZE)
wangyouqiang84179c82024-01-05 15:42:55 +080089 {
wangyouqiangc42b85d2024-04-24 17:05:06 +080090 LOGE("[qser_data] apn_user length verylong.");
wangyouqiang84179c82024-01-05 15:42:55 +080091 return QSER_RESULT_FAIL;
92 }
93 else
94 {
wangyouqiang80487e42024-05-24 15:06:20 +080095 if(strlen((char *)old_apn->user_name) > 0)
wangyouqiang84179c82024-01-05 15:42:55 +080096 {
wangyouqiang80487e42024-05-24 15:06:20 +080097 memcpy(new_apn->username, old_apn->user_name, strlen((char *)old_apn->user_name));
wangyouqiang84179c82024-01-05 15:42:55 +080098 }
99 }
100
101 //get apn password
wangyouqiang80487e42024-05-24 15:06:20 +0800102 if(strlen((char *)old_apn->user_pass) > QSER_APN_PASSWORD_SIZE)
wangyouqiang84179c82024-01-05 15:42:55 +0800103 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800104 LOGE("[qser_data] apn_password length verylong.");
wangyouqiang84179c82024-01-05 15:42:55 +0800105 return QSER_RESULT_FAIL;
106 }
107 else
108 {
wangyouqiang80487e42024-05-24 15:06:20 +0800109 if(strlen((char *)old_apn->user_pass) > 0)
wangyouqiang84179c82024-01-05 15:42:55 +0800110 {
wangyouqiang80487e42024-05-24 15:06:20 +0800111 memcpy(new_apn->password, old_apn->user_pass, strlen((char *)old_apn->user_pass));
wangyouqiang84179c82024-01-05 15:42:55 +0800112 }
113 }
114
115 //get apn proto
wangyouqiang80487e42024-05-24 15:06:20 +0800116 new_apn->auth_proto = (qser_apn_auth_proto_e)old_apn->auth_proto;
wangyouqiang84179c82024-01-05 15:42:55 +0800117
118 //get apn type
wangyouqiang80487e42024-05-24 15:06:20 +0800119 if(strlen((char *)old_apn->apn_type) > QSER_APN_PASSWORD_SIZE)
wangyouqiang84179c82024-01-05 15:42:55 +0800120 {
wangyouqiang80487e42024-05-24 15:06:20 +0800121 LOGE("[qser_data] apn_type length verylong.");
wangyouqiang8ebeafe2024-04-15 10:07:44 +0800122 return QSER_RESULT_FAIL;
123 }
wangyouqiang8ebeafe2024-04-15 10:07:44 +0800124 else
125 {
wangyouqiang80487e42024-05-24 15:06:20 +0800126 if(strlen((char *)old_apn->apn_type) > 0)
wangyouqiang8ebeafe2024-04-15 10:07:44 +0800127 {
wangyouqiang80487e42024-05-24 15:06:20 +0800128 memcpy(new_apn->apn_type, old_apn->apn_type, strlen((char *)old_apn->apn_type));
r.xiaof6ec4822024-04-03 02:46:00 -0700129 }
130 }
131
132 return QSER_RESULT_SUCCESS;
133}
134
wangyouqiang12a87812024-04-22 14:54:52 +0800135static void qser_state_init(qser_data_call_state_s *state)
wangyouqiang805b0f92024-04-07 17:06:13 +0800136{
wangyouqianga24887d2024-04-08 18:31:23 +0800137 if(state != NULL)
wangyouqiang805b0f92024-04-07 17:06:13 +0800138 {
wangyouqianga24887d2024-04-08 18:31:23 +0800139 state->profile_idx = 0;
140 memset(state->name, 0x0, 16);
141 state->ip_family = QSER_DATA_CALL_TYPE_IPV4V6;
142 state->state = QSER_DATA_CALL_DISCONNECTED;
143 state->err = QSER_DATA_CALL_ERROR_NONE;
144 inet_aton("0.0.0.0", &(state->v4.ip));
145 inet_aton("0.0.0.0", &(state->v4.gateway));
146 inet_aton("0.0.0.0", &(state->v4.pri_dns));
147 inet_aton("0.0.0.0", &(state->v4.sec_dns));
148 inet_pton(AF_INET6, "::", &(state->v6.ip));
149 inet_pton(AF_INET6, "::", &(state->v6.gateway));
150 inet_pton(AF_INET6, "::", &(state->v6.pri_dns));
151 inet_pton(AF_INET6, "::", &(state->v6.sec_dns));
wangyouqiang805b0f92024-04-07 17:06:13 +0800152 }
wangyouqiang805b0f92024-04-07 17:06:13 +0800153}
r.xiaof6ec4822024-04-03 02:46:00 -0700154
wangyouqiang84179c82024-01-05 15:42:55 +0800155void qser_wan_net_state_change_cb(const void* data, int data_len)
156{
157 if(data == NULL || data_len == 0)
158 {
159 return;
160 }
161
162 uint8 *net_data = NULL;
163 net_data = (uint8 *)data;
164
wangyouqianga24887d2024-04-08 18:31:23 +0800165 if(*net_data > 100 && *net_data < 200)
wangyouqiang84179c82024-01-05 15:42:55 +0800166 {
wangyouqianga24887d2024-04-08 18:31:23 +0800167 int idx = *net_data - 101;
168 if(idx <= QSER_PROFILE_IDX_MAX)
wangyouqiange2498f12024-01-06 17:55:36 +0800169 {
wangyouqianga24887d2024-04-08 18:31:23 +0800170 qser_data_call_state_s state = {0};
171 qser_state_init(&state);
172 state.profile_idx = idx;
wangyouqiange2498f12024-01-06 17:55:36 +0800173 state.state = QSER_DATA_CALL_DISCONNECTED;
wangyouqianga24887d2024-04-08 18:31:23 +0800174 if(qser_net_status_cb != NULL)
175 {
176 qser_net_status_cb(&state);
177 }
wangyouqiange2498f12024-01-06 17:55:36 +0800178 }
179 else
180 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800181 LOGE("[qser_data] cb fail,idx is %d.", idx);
wangyouqiange2498f12024-01-06 17:55:36 +0800182 }
wangyouqianga24887d2024-04-08 18:31:23 +0800183
184 }
wangyouqiang3947b302024-07-04 17:26:08 +0800185 else if(*net_data > 200 && *net_data < 220)
wangyouqianga24887d2024-04-08 18:31:23 +0800186 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800187 LOGE("[qser_data] cid[%d] is open.", *net_data - 201);
wangyouqianga24887d2024-04-08 18:31:23 +0800188 }
wangyouqiang3947b302024-07-04 17:26:08 +0800189 else if(*net_data > 220)
190 {
191 LOGE("[qser_data] cid[%d] is reopen.", *net_data - 221);
192 int idx = *net_data - 221;
193 if(idx <= QSER_PROFILE_IDX_MAX)
194 {
195 qser_data_call_state_s state = {0};
196 qser_state_init(&state);
197 state.profile_idx = idx;
198 state.state = QSER_DATA_CALL_CONNECTED;
199 snprintf(state.name, 16, "ccinet%d", idx);
200 if(qser_net_status_cb != NULL)
201 {
202 qser_net_status_cb(&state);
203 }
204 }
205 }
wangyouqianga24887d2024-04-08 18:31:23 +0800206 else if(*net_data == 1)
207 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800208 LOGE("[qser_data] pdp is open.");
wangyouqianga24887d2024-04-08 18:31:23 +0800209 }
210 else
211 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800212 LOGE("[qser_data] unkonwn param [%d].", *net_data);
wangyouqiang84179c82024-01-05 15:42:55 +0800213 }
214}
wangyouqiange2498f12024-01-06 17:55:36 +0800215
216static void* data_call_async_thread(void* arg)
217{
liuyang2c21d622024-07-29 14:05:55 +0800218 LOGE("[qser_data] entry data_call_async_thread.");
219 qser_data_call_error_e err = QSER_DATA_CALL_ERROR_NONE;
wangyouqianga24887d2024-04-08 18:31:23 +0800220
221 qser_data_call_s qser_data_backup = {0};
liuyang2c21d622024-07-29 14:05:55 +0800222 qser_data_call_info_s info = {0};
wangyouqianga24887d2024-04-08 18:31:23 +0800223 if(arg != NULL)
224 {
225 memcpy(&qser_data_backup, (qser_data_call_s *)arg, sizeof(qser_data_call_s));
226 }
227 else
228 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800229 LOGE("[qser_data] arg is NULL.");
wangyouqianga24887d2024-04-08 18:31:23 +0800230 }
231
232 qser_data_call_state_s state = {0};
233 qser_state_init(&state);
234 state.profile_idx = qser_data_backup.profile_idx;
liuyang2c21d622024-07-29 14:05:55 +0800235 snprintf(state.name, 16, "ccinet%d", qser_data_backup.profile_idx);
wangyouqianga24887d2024-04-08 18:31:23 +0800236 state.ip_family = qser_data_backup.ip_family;
237
wangyouqiange2498f12024-01-06 17:55:36 +0800238 int ret = qser_data_call_start(&qser_data_backup, &err);
239 if(ret != QSER_RESULT_SUCCESS)
240 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800241 LOGE("[qser_data] qser_data_call_start() fail.");
wangyouqianga24887d2024-04-08 18:31:23 +0800242 state.err = err;
wangyouqiange2498f12024-01-06 17:55:36 +0800243 }
liuyang2c21d622024-07-29 14:05:55 +0800244 else
wangyouqianga24887d2024-04-08 18:31:23 +0800245 {
liuyang2c21d622024-07-29 14:05:55 +0800246 state.state = QSER_DATA_CALL_CONNECTED;
247 ret = qser_data_call_info_get(qser_data_backup.profile_idx, qser_data_backup.ip_family, &info, &err);
248 if(ret != QSER_RESULT_SUCCESS)
wangyouqianga24887d2024-04-08 18:31:23 +0800249 {
liuyang2c21d622024-07-29 14:05:55 +0800250 LOGE("[qser_data] qser_data_call_info_get() fail.");
251 state.err = err;
252 }
253 else
254 {
255 memcpy(&(state.v4), &(info.v4.addr), sizeof(struct v4_address_status));
256 memcpy(&(state.v6), &(info.v6.addr), sizeof(struct v6_address_status));
wangyouqianga24887d2024-04-08 18:31:23 +0800257 }
258 }
liuyang2c21d622024-07-29 14:05:55 +0800259
wangyouqianga24887d2024-04-08 18:31:23 +0800260 if(qser_net_status_cb != NULL)
261 {
262 qser_net_status_cb(&state);
263 }
wangyouqiange2498f12024-01-06 17:55:36 +0800264 return NULL;
265}
266
wangyouqiang84179c82024-01-05 15:42:55 +0800267/******************************FUNC*****************************************/
268
269/****************************API***************************************/
b.liu5fa9e772023-11-23 18:00:55 +0800270int qser_data_call_init(qser_data_call_evt_cb_t evt_cb)
271{
wangyouqiang84179c82024-01-05 15:42:55 +0800272 //UNUSED(evt_cb);
273 if(!inited && qser_info_handle == NULL)
274 {
275 qser_info_handle = mbtk_info_handle_get();
276 if(qser_info_handle)
277 {
278 qser_info_handle_num++;
279 inited = TRUE;
280 mbtk_pdp_state_change_cb_reg(qser_info_handle, qser_wan_net_state_change_cb);
281 }
282 else
283 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800284 LOGE("[qser_data] mbtk_info_handle_get() fail.");
wangyouqiang84179c82024-01-05 15:42:55 +0800285 return QSER_RESULT_FAIL;
286 }
287 }
288 else
289 {
290 if(!inited)
291 {
292 qser_info_handle_num++;
293 inited = TRUE;
294 mbtk_pdp_state_change_cb_reg(qser_info_handle, qser_wan_net_state_change_cb);
295 }
296 }
297 qser_net_status_cb = evt_cb;
b.liu5fa9e772023-11-23 18:00:55 +0800298
wangyouqiangc42b85d2024-04-24 17:05:06 +0800299 LOGE("[qser_data] mbtk_info_handle_get() success.");
wangyouqiang84179c82024-01-05 15:42:55 +0800300 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800301}
302
303void qser_data_call_destroy(void)
304{
wangyouqiang84179c82024-01-05 15:42:55 +0800305 if(qser_info_handle)
306 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800307 LOGE("[qser_data] qser_info_handle_num = %d", qser_info_handle_num);
wangyouqiang84179c82024-01-05 15:42:55 +0800308 if(qser_info_handle_num == 1)
309 { // 最后一个引用,可释放。
310 int ret = mbtk_info_handle_free(&qser_info_handle);
311 if(ret)
312 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800313 LOGE("[qser_data] mbtk_info_handle_free() fail.");
wangyouqiang84179c82024-01-05 15:42:55 +0800314 }
315 else
316 {
317 qser_info_handle_num = 0;
318 qser_info_handle = NULL;
wangyouqiang45cfff82024-04-15 19:35:15 +0800319 qser_net_status_cb = NULL;
wangyouqiang84179c82024-01-05 15:42:55 +0800320 inited = FALSE;
321 }
322 }
323 else
324 {
325 qser_info_handle_num--;
wangyouqiang45cfff82024-04-15 19:35:15 +0800326 qser_net_status_cb = NULL;
wangyouqiang84179c82024-01-05 15:42:55 +0800327 }
328 }
329 else
330 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800331 LOGE("[qser_data] handle not inited.");
wangyouqiang84179c82024-01-05 15:42:55 +0800332 }
b.liu5fa9e772023-11-23 18:00:55 +0800333}
334
335int qser_data_call_start(qser_data_call_s *data_call, qser_data_call_error_e *err)
336{
wangyouqiang84179c82024-01-05 15:42:55 +0800337 //UNUSED(data_call);
338 //UNUSED(err);
339 if(data_call == NULL || err == NULL)
340 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800341 LOGE("[qser_data] data_call or err is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800342 if(err != NULL)
343 {
344 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
345 }
346 return QSER_RESULT_FAIL;
347 }
348
349 if(qser_info_handle == NULL)
350 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800351 LOGE("[qser_data] handle is NULL.");
b.liuf37bd332024-03-18 13:51:24 +0800352 *err = QSER_DATA_CALL_ERROR_NO_INIT;
wangyouqiang84179c82024-01-05 15:42:55 +0800353 return QSER_RESULT_FAIL;
354 }
b.liu5fa9e772023-11-23 18:00:55 +0800355
wangyouqiang84179c82024-01-05 15:42:55 +0800356 int ret = -1;
357 ret = mbtk_data_call_start(qser_info_handle, data_call->profile_idx + 1, 0, FALSE, 0);
358 if(ret != 0)
359 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800360 LOGE("[qser_data] mbtk_data_call_start fail.[ret = %d]", ret);
b.liuf37bd332024-03-18 13:51:24 +0800361 if(ret == MBTK_INFO_ERR_CID_EXIST)
362 {
363 *err = QSER_DATA_CALL_ERROR_PDP_ACTIVATE;
364 }
365 else
366 {
367 *err = QSER_DATA_CALL_ERROR_UNKNOWN;
368 }
wangyouqiang84179c82024-01-05 15:42:55 +0800369 return QSER_RESULT_FAIL;
370 }
371 else
372 {
373 *err = QSER_DATA_CALL_ERROR_NONE;
374 }
wangyouqiange2498f12024-01-06 17:55:36 +0800375
wangyouqiange2498f12024-01-06 17:55:36 +0800376 return QSER_RESULT_SUCCESS;
377}
378
379int qser_data_call_start_async(qser_data_call_s *data_call, qser_data_call_error_e *err)
380{
381 //UNUSED(data_call);
382 UNUSED(err);
383 if(data_call == NULL || err == NULL)
384 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800385 LOGE("[qser_data] data_call or err is NULL.");
wangyouqiange2498f12024-01-06 17:55:36 +0800386 if(err != NULL)
387 {
388 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
389 }
390 return QSER_RESULT_FAIL;
391 }
392
393 if(qser_info_handle == NULL)
394 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800395 LOGE("[qser_data] handle is NULL.");
b.liuf37bd332024-03-18 13:51:24 +0800396 *err = QSER_DATA_CALL_ERROR_NO_INIT;
wangyouqiange2498f12024-01-06 17:55:36 +0800397 return QSER_RESULT_FAIL;
398 }
399
wangyouqiange2498f12024-01-06 17:55:36 +0800400 pthread_attr_t thread_attr;
401 pthread_t data_call_thread_id;
402 pthread_attr_init(&thread_attr);
403 if(pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED))
404 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800405 LOGE("[qser_data] pthread_attr_setdetachstate() fail.");
b.liuf37bd332024-03-18 13:51:24 +0800406 *err = QSER_DATA_CALL_ERROR_UNKNOWN;
wangyouqiange2498f12024-01-06 17:55:36 +0800407 return QSER_RESULT_FAIL;
408 }
409
wangyouqianga24887d2024-04-08 18:31:23 +0800410 //memcpy(&qser_data_backup, data_call, sizeof(qser_data_call_s));
411 if(pthread_create(&data_call_thread_id, &thread_attr, data_call_async_thread, (void *) data_call))
wangyouqiange2498f12024-01-06 17:55:36 +0800412 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800413 LOGE("[qser_data] pthread_create() fail.");
b.liuf37bd332024-03-18 13:51:24 +0800414 *err = QSER_DATA_CALL_ERROR_UNKNOWN;
wangyouqiange2498f12024-01-06 17:55:36 +0800415 return QSER_RESULT_FAIL;
416 }
417 pthread_attr_destroy(&thread_attr);
wangyouqiange2498f12024-01-06 17:55:36 +0800418
wangyouqiang84179c82024-01-05 15:42:55 +0800419 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800420}
421
422int qser_data_call_stop(char profile_idx, qser_data_call_ip_family_e ip_family, qser_data_call_error_e *err)
423{
wangyouqiang84179c82024-01-05 15:42:55 +0800424 //UNUSED(profile_idx);
b.liu5fa9e772023-11-23 18:00:55 +0800425 UNUSED(ip_family);
wangyouqiang84179c82024-01-05 15:42:55 +0800426 //UNUSED(err);
427 if(err == NULL)
428 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800429 LOGE("[qser_data] err is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800430 return QSER_RESULT_FAIL;
431 }
b.liu5fa9e772023-11-23 18:00:55 +0800432
wangyouqiang84179c82024-01-05 15:42:55 +0800433 if(qser_info_handle == NULL)
434 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800435 LOGE("[qser_data] handle is NULL.");
b.liuf37bd332024-03-18 13:51:24 +0800436 *err = QSER_DATA_CALL_ERROR_NO_INIT;
wangyouqiang84179c82024-01-05 15:42:55 +0800437 return QSER_RESULT_FAIL;
438 }
439
wangyouqiang84179c82024-01-05 15:42:55 +0800440 int ret = -1;
441 ret = mbtk_data_call_stop(qser_info_handle, profile_idx + 1, 15);
442 if(ret != 0)
443 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800444 LOGE("[qser_data] mbtk_data_call_stop fail.[ret = %d]", ret);
b.liuf37bd332024-03-18 13:51:24 +0800445 if(ret == MBTK_INFO_ERR_CID_NO_EXIST)
446 {
447 *err = QSER_DATA_CALL_ERROR_PDP_NO_ACTIVATE;
448 }
449 else
450 {
451 *err = QSER_DATA_CALL_ERROR_UNKNOWN;
452 }
wangyouqiang84179c82024-01-05 15:42:55 +0800453 return QSER_RESULT_FAIL;
454 }
455 else
456 {
457 *err = QSER_DATA_CALL_ERROR_NONE;
458 }
wangyouqiange2498f12024-01-06 17:55:36 +0800459
wangyouqiang84179c82024-01-05 15:42:55 +0800460 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800461}
462
463int qser_data_call_info_get(char profile_idx,qser_data_call_ip_family_e ip_family,
464 qser_data_call_info_s *info, qser_data_call_error_e *err)
465{
wangyouqiang84179c82024-01-05 15:42:55 +0800466 //UNUSED(profile_idx);
b.liu5fa9e772023-11-23 18:00:55 +0800467 UNUSED(ip_family);
wangyouqiang84179c82024-01-05 15:42:55 +0800468 //UNUSED(info);
469 //UNUSED(err);
b.liu5fa9e772023-11-23 18:00:55 +0800470
wangyouqiang84179c82024-01-05 15:42:55 +0800471 if(info == NULL || err == NULL)
472 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800473 LOGE("[qser_data] info or err is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800474 if(err != NULL)
475 {
476 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
477 }
478 return QSER_RESULT_FAIL;
479 }
480
481 if(qser_info_handle == NULL)
482 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800483 LOGE("[qser_data] handle is NULL.");
b.liuf37bd332024-03-18 13:51:24 +0800484 *err = QSER_DATA_CALL_ERROR_NO_INIT;
wangyouqiang84179c82024-01-05 15:42:55 +0800485 return QSER_RESULT_FAIL;
486 }
487
wangyouqiang84179c82024-01-05 15:42:55 +0800488 int ret = -1;
489 mbtk_ipv4_info_t ipv4;
490 mbtk_ipv6_info_t ipv6;
491#ifdef QSER_TEST
492 char v4_buff[32] = {0};
493 char v6_buff[128] = {0};
494#endif
495 memset(info, 0, sizeof(qser_data_call_info_s));
496 ret = mbtk_data_call_state_get(qser_info_handle, profile_idx + 1, &ipv4, &ipv6);
497 if(ret != 0)
498 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800499 LOGE("[qser_data] mbtk_data_call_state_get fail.[ret = %d]", ret);
b.liuf37bd332024-03-18 13:51:24 +0800500 if(ret == MBTK_INFO_ERR_CID_NO_EXIST)
501 {
502 *err = QSER_DATA_CALL_ERROR_PDP_NO_ACTIVATE;
503 }
504 else
505 {
506 *err = QSER_DATA_CALL_ERROR_UNKNOWN;
507 }
wangyouqiang84179c82024-01-05 15:42:55 +0800508 return QSER_RESULT_FAIL;
509 }
510 else
511 {
512 info->profile_idx = profile_idx;
513 if(ipv4.valid)
514 {
515 info->ip_family = QSER_DATA_CALL_TYPE_IPV4;
516 info->v4.state = QSER_DATA_CALL_CONNECTED;
517 sprintf(info->v4.name, "ccinet%d", profile_idx);
b.liuf37bd332024-03-18 13:51:24 +0800518 info->v4.addr.ip.s_addr = ipv4.IPAddr;
519 info->v4.addr.pri_dns.s_addr = ipv4.PrimaryDNS;
520 info->v4.addr.sec_dns.s_addr = ipv4.SecondaryDNS;
521
wangyouqiang84179c82024-01-05 15:42:55 +0800522#ifdef QSER_TEST
wangyouqiangc42b85d2024-04-24 17:05:06 +0800523 //LOGE("[qser_data] IP: %x pri_DNS: %x sec_DNS: %x.", ipv4.IPAddr, ipv4.PrimaryDNS, ipv4.SecondaryDNS);
wangyouqiang84179c82024-01-05 15:42:55 +0800524 if(inet_ntop(AF_INET, &(info->v4.addr.ip), v4_buff, 32) == NULL) {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800525 LOGE("[qser_data] IP error.");
wangyouqiang84179c82024-01-05 15:42:55 +0800526 } else {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800527 LOGE("[qser_data] IP : %s", v4_buff);
wangyouqiang84179c82024-01-05 15:42:55 +0800528 }
529 if(inet_ntop(AF_INET, &(info->v4.addr.pri_dns), v4_buff, 32) == NULL) {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800530 LOGE("[qser_data] PrimaryDNS error.");
wangyouqiang84179c82024-01-05 15:42:55 +0800531 } else {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800532 LOGE("[qser_data] PrimaryDNS : %s", v4_buff);
wangyouqiang84179c82024-01-05 15:42:55 +0800533 }
534 if(inet_ntop(AF_INET, &(info->v4.addr.sec_dns), v4_buff, 32) == NULL) {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800535 LOGE("[qser_data] SecondaryDNS error.");
wangyouqiang84179c82024-01-05 15:42:55 +0800536 } else {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800537 LOGE("[qser_data] SecondaryDNS : %s", v4_buff);
wangyouqiang84179c82024-01-05 15:42:55 +0800538 }
539#endif
540 }
541
542 if(ipv6.valid)
543 {
544 info->ip_family = QSER_DATA_CALL_TYPE_IPV6;
545 info->v6.state = QSER_DATA_CALL_CONNECTED;
546 sprintf(info->v6.name, "ccinet%d", profile_idx);
b.liuf37bd332024-03-18 13:51:24 +0800547 memcpy(&(info->v6.addr.ip), &(ipv6.IPV6Addr), sizeof(ipv6.IPV6Addr));
548 memcpy(&(info->v6.addr.pri_dns), &(ipv6.PrimaryDNS), sizeof(ipv6.PrimaryDNS));
549 memcpy(&(info->v6.addr.sec_dns), &(ipv6.SecondaryDNS), sizeof(ipv6.SecondaryDNS));
wangyouqiang84179c82024-01-05 15:42:55 +0800550#ifdef QSER_TEST
551 if(ipv6_2_str(&(info->v6.addr.ip), v6_buff))
552 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800553 LOGE("[qser_data] IP error.");
wangyouqiang84179c82024-01-05 15:42:55 +0800554 } else {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800555 LOGE("[qser_data] IP : %s", v6_buff);
wangyouqiang84179c82024-01-05 15:42:55 +0800556 }
557 if(ipv6_2_str(&(info->v6.addr.pri_dns), v6_buff))
558 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800559 LOGE("[qser_data] PrimaryDNS error.");
wangyouqiang84179c82024-01-05 15:42:55 +0800560 } else {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800561 LOGE("[qser_data] PrimaryDNS : %s", v6_buff);
wangyouqiang84179c82024-01-05 15:42:55 +0800562 }
563 if(ipv6_2_str(&(info->v6.addr.sec_dns), v6_buff))
564 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800565 LOGE("[qser_data] SecondaryDNS error.");
wangyouqiang84179c82024-01-05 15:42:55 +0800566 } else {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800567 LOGE("[qser_data] SecondaryDNS : %s", v6_buff);
wangyouqiang84179c82024-01-05 15:42:55 +0800568 }
569#endif
570 }
571
572 if(ipv4.valid && ipv6.valid)
573 {
574 info->ip_family = QSER_DATA_CALL_TYPE_IPV4V6;
575 }
576
577 if(!ipv4.valid && !ipv6.valid)
578 {
579 info->v4.state = QSER_DATA_CALL_DISCONNECTED;
580 info->v6.state = QSER_DATA_CALL_DISCONNECTED;
581 }
582 }
583
584 *err = QSER_DATA_CALL_ERROR_NONE;
585 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800586}
587
588int qser_apn_set(qser_apn_info_s *apn)
589{
wangyouqiang84179c82024-01-05 15:42:55 +0800590 //UNUSED(apn);
591 if(qser_info_handle == NULL)
592 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800593 LOGE("[qser_data] handle is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800594 return QSER_RESULT_FAIL;
595 }
596
597 if(apn == NULL)
598 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800599 LOGE("[qser_data] apn param is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800600 return QSER_RESULT_FAIL;
601 }
b.liu5fa9e772023-11-23 18:00:55 +0800602
wangyouqiang80487e42024-05-24 15:06:20 +0800603 int ret = 0;
604 mbtk_qser_apn_info_s apninfo;
605 memset(&apninfo, 0x0, sizeof(mbtk_qser_apn_info_s));
606 apninfo.cid = apn->profile_idx + 1;
607
wangyouqiang84179c82024-01-05 15:42:55 +0800608 if(apn->pdp_type == QSER_APN_PDP_TYPE_IPV4)
609 {
wangyouqiang80487e42024-05-24 15:06:20 +0800610 apninfo.ip_type = MBTK_IP_TYPE_IP;
wangyouqiang84179c82024-01-05 15:42:55 +0800611 }
612 else if(apn->pdp_type == QSER_APN_PDP_TYPE_IPV6)
613 {
wangyouqiang80487e42024-05-24 15:06:20 +0800614 apninfo.ip_type = MBTK_IP_TYPE_IPV6;
wangyouqiang84179c82024-01-05 15:42:55 +0800615 }
616 else if(apn->pdp_type == QSER_APN_PDP_TYPE_IPV4V6)
617 {
wangyouqiang80487e42024-05-24 15:06:20 +0800618 apninfo.ip_type = MBTK_IP_TYPE_IPV4V6;
wangyouqiang84179c82024-01-05 15:42:55 +0800619 }
620 else if(apn->pdp_type == QSER_APN_PDP_TYPE_PPP)
621 {
wangyouqiang80487e42024-05-24 15:06:20 +0800622 apninfo.ip_type = MBTK_IP_TYPE_PPP;
wangyouqiang84179c82024-01-05 15:42:55 +0800623 }
624 else
625 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800626 LOGE("[qser_data] pdp_type error.");
wangyouqiang84179c82024-01-05 15:42:55 +0800627 return QSER_RESULT_FAIL;
628 }
629
wangyouqiange2498f12024-01-06 17:55:36 +0800630
wangyouqiang80487e42024-05-24 15:06:20 +0800631 apninfo.req_type = MBTK_APN_REQ_TYPE_SET;
632 apninfo.auth_proto = (mbtk_apn_auth_proto_enum)apn->auth_proto;
633 if(strlen(apn->apn_name))
wangyouqiang84179c82024-01-05 15:42:55 +0800634 {
wangyouqiang80487e42024-05-24 15:06:20 +0800635 memcpy(apninfo.apn_name, apn->apn_name, strlen(apn->apn_name));
636 }
637 else
638 {
639 LOGE("[qser_data] apn_name is NULL.");
640 return QSER_RESULT_FAIL;
641 }
642 if(strlen(apn->username))
643 {
644 memcpy(apninfo.user_name, apn->username, strlen(apn->username));
645 }
646 if(strlen(apn->password))
647 {
648 memcpy(apninfo.user_pass, apn->password, strlen(apn->password));
649 }
650 if(strlen(apn->apn_type))
651 {
652 memcpy(apninfo.apn_type, apn->apn_type, strlen(apn->apn_type));
653 }
654 ret = mbtk_qser_apn_set(qser_info_handle, &apninfo, NULL);
655 if(ret != 0)
656 {
657 LOGE("[qser_data] mbtk_qser_apn_set fail.");
wangyouqiang84179c82024-01-05 15:42:55 +0800658 return QSER_RESULT_FAIL;
659 }
660
wangyouqiang84179c82024-01-05 15:42:55 +0800661 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800662}
663
664int qser_apn_get(unsigned char profile_idx, qser_apn_info_s *apn)
665{
wangyouqiang84179c82024-01-05 15:42:55 +0800666 //UNUSED(profile_idx);
667 //UNUSED(apn);
668 if(qser_info_handle == NULL)
669 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800670 LOGE("[qser_data] handle is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800671 return QSER_RESULT_FAIL;
672 }
673
674 if(apn == NULL)
675 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800676 LOGE("[qser_data] apn param is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800677 return QSER_RESULT_FAIL;
678 }
b.liu5fa9e772023-11-23 18:00:55 +0800679
wangyouqiang84179c82024-01-05 15:42:55 +0800680 //get apn info
wangyouqiang80487e42024-05-24 15:06:20 +0800681 mbtk_qser_apn_info_s apns[10] = {0};
wangyouqiang84179c82024-01-05 15:42:55 +0800682 int apn_num = 10;
wangyouqiang80487e42024-05-24 15:06:20 +0800683 int ret = mbtk_qser_apn_get(qser_info_handle, &apn_num, apns);
wangyouqiang84179c82024-01-05 15:42:55 +0800684 if(ret != 0)
685 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800686 LOGE("[qser_data] mbtk_apn_get fail. [ret = %d]",ret);
wangyouqiang84179c82024-01-05 15:42:55 +0800687 return QSER_RESULT_FAIL;
688 }
689 else
690 {
691 int i = 0;
692 for(i = 0; i < apn_num; i++)
693 {
694 if(apns[i].cid == profile_idx + 1)
695 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800696 LOGE("[qser_data] find IDX.");
wangyouqiang84179c82024-01-05 15:42:55 +0800697 break;
698 }
699 }
700
701 if(i == apn_num)
702 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800703 LOGE("[qser_data] not find IDX.[apn_num = %d]", apn_num);
wangyouqiang84179c82024-01-05 15:42:55 +0800704 return QSER_RESULT_FAIL;
705 }
706
707 if(qser_apn_info_param_convert(profile_idx, apn, &apns[i]) != 0)
708 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800709 LOGE("[qser_data] qser_apn_info_param_convert fail");
wangyouqiang84179c82024-01-05 15:42:55 +0800710 return QSER_RESULT_FAIL;
711 }
712 }
713 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800714}
715
716int qser_apn_add(qser_apn_add_s *apn, unsigned char *profile_idx)
717{
wangyouqiange2498f12024-01-06 17:55:36 +0800718 //UNUSED(apn);
719 //UNUSED(profile_idx);
720 if(qser_info_handle == NULL)
721 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800722 LOGE("[qser_data] handle is NULL.");
wangyouqiange2498f12024-01-06 17:55:36 +0800723 return QSER_RESULT_FAIL;
724 }
725
wangyouqiang80487e42024-05-24 15:06:20 +0800726 if(apn == NULL || profile_idx == NULL)
wangyouqiange2498f12024-01-06 17:55:36 +0800727 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800728 LOGE("[qser_data] apn param is NULL.");
wangyouqiange2498f12024-01-06 17:55:36 +0800729 return QSER_RESULT_FAIL;
730 }
b.liu5fa9e772023-11-23 18:00:55 +0800731
wangyouqiange2498f12024-01-06 17:55:36 +0800732 int ret = 0;
wangyouqiang80487e42024-05-24 15:06:20 +0800733 unsigned char idx[2] = {0};
734 mbtk_qser_apn_info_s apninfo;
735 memset(&apninfo, 0x0, sizeof(mbtk_qser_apn_info_s));
736 apninfo.cid = 0;
737
738 if(apn->pdp_type == QSER_APN_PDP_TYPE_IPV4)
wangyouqiange2498f12024-01-06 17:55:36 +0800739 {
wangyouqiang80487e42024-05-24 15:06:20 +0800740 apninfo.ip_type = MBTK_IP_TYPE_IP;
741 }
742 else if(apn->pdp_type == QSER_APN_PDP_TYPE_IPV6)
743 {
744 apninfo.ip_type = MBTK_IP_TYPE_IPV6;
745 }
746 else if(apn->pdp_type == QSER_APN_PDP_TYPE_IPV4V6)
747 {
748 apninfo.ip_type = MBTK_IP_TYPE_IPV4V6;
749 }
750 else if(apn->pdp_type == QSER_APN_PDP_TYPE_PPP)
751 {
752 apninfo.ip_type = MBTK_IP_TYPE_PPP;
wangyouqiange2498f12024-01-06 17:55:36 +0800753 }
754 else
755 {
wangyouqiang80487e42024-05-24 15:06:20 +0800756 LOGE("[qser_data] pdp_type error.");
757 return QSER_RESULT_FAIL;
wangyouqiange2498f12024-01-06 17:55:36 +0800758 }
wangyouqiang80487e42024-05-24 15:06:20 +0800759
wangyouqiang80487e42024-05-24 15:06:20 +0800760 apninfo.req_type = MBTK_APN_REQ_TYPE_ADD;
761 apninfo.auth_proto = (mbtk_apn_auth_proto_enum)apn->auth_proto;
762 if(strlen(apn->apn_name))
763 {
764 memcpy(apninfo.apn_name, apn->apn_name, strlen(apn->apn_name));
765 }
liuyangc3283982024-06-04 17:00:15 +0800766
wangyouqiang80487e42024-05-24 15:06:20 +0800767 if(strlen(apn->username))
768 {
769 memcpy(apninfo.user_name, apn->username, strlen(apn->username));
770 }
771 if(strlen(apn->password))
772 {
773 memcpy(apninfo.user_pass, apn->password, strlen(apn->password));
774 }
775 if(strlen(apn->apn_type))
776 {
777 memcpy(apninfo.apn_type, apn->apn_type, strlen(apn->apn_type));
778 }
779 ret = mbtk_qser_apn_set(qser_info_handle, &apninfo, idx);
780 if(ret != 0)
781 {
782 LOGE("[qser_data] mbtk_qser_apn_set fail.");
783 return QSER_RESULT_FAIL;
784 }
785 *profile_idx = idx[0] - 1;
wangyouqiange2498f12024-01-06 17:55:36 +0800786 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800787}
788
789int qser_apn_del(unsigned char profile_idx)
790{
liuyang0e49d9a2024-04-23 21:04:54 +0800791 int ret = 0;
792
wangyouqiange2498f12024-01-06 17:55:36 +0800793 //UNUSED(profile_idx);
794 if(qser_info_handle == NULL)
795 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800796 LOGE("[qser_data] handle is NULL.");
wangyouqiange2498f12024-01-06 17:55:36 +0800797 return QSER_RESULT_FAIL;
798 }
wangyouqiange2498f12024-01-06 17:55:36 +0800799
liuyang0e49d9a2024-04-23 21:04:54 +0800800 ret = mbtk_apn_del(qser_info_handle, profile_idx);
liuyang0e49d9a2024-04-23 21:04:54 +0800801 if(ret < 0)
802 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800803 LOGE("[qser_data] mbtk_apn_del fail!");
liuyang0e49d9a2024-04-23 21:04:54 +0800804 return QSER_RESULT_FAIL;
805 }
wangyouqiange2498f12024-01-06 17:55:36 +0800806 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800807}
808
809int qser_apn_get_list(qser_apn_info_list_s *apn_list)
810{
wangyouqiang84179c82024-01-05 15:42:55 +0800811 //UNUSED(apn_list);
b.liu5fa9e772023-11-23 18:00:55 +0800812
wangyouqiang84179c82024-01-05 15:42:55 +0800813 if(qser_info_handle == NULL)
814 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800815 LOGE("[qser_data] handle is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800816 return QSER_RESULT_FAIL;
817 }
818
819 if(apn_list == NULL)
820 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800821 LOGE("[qser_data] apn_list param is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800822 return QSER_RESULT_FAIL;
823 }
824
wangyouqiang80487e42024-05-24 15:06:20 +0800825 mbtk_qser_apn_info_s apns[10] = {0};
wangyouqiang84179c82024-01-05 15:42:55 +0800826 int apn_num = 10;
wangyouqiang80487e42024-05-24 15:06:20 +0800827 int ret = mbtk_qser_apn_get(qser_info_handle, &apn_num, apns);
wangyouqiang84179c82024-01-05 15:42:55 +0800828 if(ret != 0)
829 {
wangyouqiangc1d72d22024-04-25 10:15:58 +0800830 if(ret == MBTK_INFO_ERR_NO_APN)
831 {
832 apn_list->cnt = 0;
833 return QSER_RESULT_SUCCESS;
834 }
wangyouqiangc42b85d2024-04-24 17:05:06 +0800835 LOGE("[qser_data] mbtk_apn_get fail. [ret = %d]",ret);
wangyouqiang84179c82024-01-05 15:42:55 +0800836 return QSER_RESULT_FAIL;
837 }
838 else
839 {
840 if(apn_num > 0 && apn_num <= QSER_APN_MAX_LIST)
841 {
842 int i = 0;
wangyouqiange2498f12024-01-06 17:55:36 +0800843 apn_list->cnt = 0;
wangyouqiang84179c82024-01-05 15:42:55 +0800844 for(i = 0; i < apn_num; i++)
845 {
wangyouqiang8ebeafe2024-04-15 10:07:44 +0800846 if(qser_apn_info_param_convert(apns[i].cid - 1, &apn_list->apn[apn_list->cnt], &apns[i]) != 0)
wangyouqiang84179c82024-01-05 15:42:55 +0800847 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800848 LOGE("[qser_data] qser_apn_info_param_convert fail");
wangyouqiang84179c82024-01-05 15:42:55 +0800849 return QSER_RESULT_FAIL;
850 }
wangyouqiange2498f12024-01-06 17:55:36 +0800851 apn_list->cnt++;
wangyouqiang84179c82024-01-05 15:42:55 +0800852 }
wangyouqiang84179c82024-01-05 15:42:55 +0800853 }
854 else if(apn_num > QSER_APN_MAX_LIST)
855 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800856 LOGE("[qser_data] apn_num overlong");
wangyouqiang84179c82024-01-05 15:42:55 +0800857 return QSER_RESULT_FAIL;
858 }
859 else
860 {
861 apn_list->cnt = 0;
862 }
863 }
864 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800865}
wangyouqiang84179c82024-01-05 15:42:55 +0800866/****************************API***************************************/
b.liu5fa9e772023-11-23 18:00:55 +0800867