blob: d65c3b6da81d905de7619cced31304774214fd35 [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
wangyouqiang84179c82024-01-05 15:42:55 +08005/****************************DEFINE***************************************/
6#define QSER_RESULT_SUCCESS 0
7#define QSER_RESULT_FAIL -1
b.liu5fa9e772023-11-23 18:00:55 +08008
wangyouqiang84179c82024-01-05 15:42:55 +08009//default range: 0 - 7
10//AT+CGACT range: 1 - 8
11//1 default IDX, 8 IMS IDX
12#define QSER_PROFILE_IDX_MIN 1
13#define QSER_PROFILE_IDX_MAX 6
14/****************************DEFINE***************************************/
15
16/****************************VARIABLE***************************************/
17mbtk_info_handle_t* qser_info_handle = NULL;
18int qser_info_handle_num = 0;
19static bool inited = FALSE;
20static qser_data_call_evt_cb_t qser_net_status_cb = NULL;
21static qser_apn_info_s qser_apn_info[8] = {0};
22/****************************VARIABLE***************************************/
23
24/******************************FUNC*****************************************/
25int qser_apn_info_param_convert(int profile_idx, qser_apn_info_s *new_apn, mbtk_apn_info_t *old_apn)
26{
27 if(new_apn == NULL || old_apn == NULL)
28 {
29 LOGE("[qser_data_call] qser_apn_info_param_convert apn param is NULL.");
30 return QSER_RESULT_FAIL;
31 }
32
33 //get ip type
34 if(old_apn->ip_type == MBTK_IP_TYPE_IPV4V6) // IPV4V6
35 {
36 new_apn->pdp_type = QSER_APN_PDP_TYPE_IPV4V6;
37 }
38 else if(old_apn->ip_type == MBTK_IP_TYPE_IP) // IPV4
39 {
40 new_apn->pdp_type = QSER_APN_PDP_TYPE_IPV4;
41 }
42 else if(old_apn->ip_type == MBTK_IP_TYPE_IPV6) // IPV6
43 {
44 new_apn->pdp_type = QSER_APN_PDP_TYPE_IPV6;
45 }
46 else
47 {
48 new_apn->pdp_type = QSER_APN_PDP_TYPE_PPP;
49 }
50
51 //get apn name
52 if(strlen(old_apn->apn)+1 > QSER_APN_NAME_SIZE)
53 {
54 LOGE("[qser_data_call] apn_nmea length verylong.");
55 return QSER_RESULT_FAIL;
56 }
57 else
58 {
59 if(strlen(old_apn->apn) > 0)
60 {
61 memcpy(new_apn->apn_name, old_apn->apn,strlen(old_apn->apn)+1);
62 }
63 else
64 {
65 memset(new_apn->apn_name, 0x0, QSER_APN_NAME_SIZE);
66 }
67 }
68
69 //get apn user
70 if(strlen(old_apn->user)+1 > QSER_APN_USERNAME_SIZE)
71 {
72 LOGE("[qser_data_call] apn_user length verylong.");
73 return QSER_RESULT_FAIL;
74 }
75 else
76 {
77 if(strlen(old_apn->user) > 0)
78 {
79 memcpy(new_apn->username, old_apn->user, strlen(old_apn->user)+1);
80 }
81 else
82 {
83 memset(new_apn->username , 0x0, QSER_APN_USERNAME_SIZE);
84 }
85 }
86
87 //get apn password
88 if(strlen(old_apn->pass)+1 > QSER_APN_PASSWORD_SIZE)
89 {
90 LOGE("[qser_data_call] apn_password length verylong.");
91 return QSER_RESULT_FAIL;
92 }
93 else
94 {
95 if(strlen(old_apn->pass) > 0)
96 {
97 memcpy(new_apn->password, old_apn->pass, strlen(old_apn->pass)+1);
98 }
99 else
100 {
101 memset(new_apn->username , 0x0, QSER_APN_PASSWORD_SIZE);
102 }
103 }
104
105 //get apn proto
106 if(strlen(old_apn->auth) > 0)
107 {
108 if(strcmp(old_apn->auth, "NONE") == 0)
109 {
110 new_apn->auth_proto = QSER_APN_AUTH_PROTO_NONE;
111 }
112 else if(strcmp(old_apn->auth, "PAP") == 0)
113 {
114 new_apn->auth_proto = QSER_APN_AUTH_PROTO_PAP;
115 }
116 else if(strcmp(old_apn->auth, "CHAP") == 0)
117 {
118 new_apn->auth_proto = QSER_APN_AUTH_PROTO_CHAP;
119 }
120 else
121 {
122 LOGE("[qser_data_call] auth input error!");
123 return QSER_RESULT_FAIL;
124 }
125 }
126
127 //get apn type
128 new_apn->profile_idx = profile_idx;
129 memset(new_apn->apn_type, 0x0, QSER_APN_NAME_SIZE);
130 if(strlen(qser_apn_info[profile_idx].apn_type) > 0)
131 {
132 memcpy(new_apn->apn_type, qser_apn_info[profile_idx].apn_type, strlen(qser_apn_info[profile_idx].apn_type));
133 }
134
135 return QSER_RESULT_SUCCESS;
136}
137
138void qser_wan_net_state_change_cb(const void* data, int data_len)
139{
140 if(data == NULL || data_len == 0)
141 {
142 return;
143 }
144
145 uint8 *net_data = NULL;
146 net_data = (uint8 *)data;
147
148 if(qser_net_status_cb != NULL)
149 {
150 //
151 }
152}
153/******************************FUNC*****************************************/
154
155/****************************API***************************************/
b.liu5fa9e772023-11-23 18:00:55 +0800156int qser_data_call_init(qser_data_call_evt_cb_t evt_cb)
157{
wangyouqiang84179c82024-01-05 15:42:55 +0800158 //UNUSED(evt_cb);
159 if(!inited && qser_info_handle == NULL)
160 {
161 qser_info_handle = mbtk_info_handle_get();
162 if(qser_info_handle)
163 {
164 qser_info_handle_num++;
165 inited = TRUE;
166 mbtk_pdp_state_change_cb_reg(qser_info_handle, qser_wan_net_state_change_cb);
167 }
168 else
169 {
170 LOGE("[qser_data_call] mbtk_info_handle_get() fail.");
171 return QSER_RESULT_FAIL;
172 }
173 }
174 else
175 {
176 if(!inited)
177 {
178 qser_info_handle_num++;
179 inited = TRUE;
180 mbtk_pdp_state_change_cb_reg(qser_info_handle, qser_wan_net_state_change_cb);
181 }
182 }
183 qser_net_status_cb = evt_cb;
b.liu5fa9e772023-11-23 18:00:55 +0800184
wangyouqiang84179c82024-01-05 15:42:55 +0800185 LOGE("[qser_data_call] mbtk_info_handle_get() success.");
186 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800187}
188
189void qser_data_call_destroy(void)
190{
wangyouqiang84179c82024-01-05 15:42:55 +0800191 if(qser_info_handle)
192 {
193 LOGE("qser_info_handle_num = %d", qser_info_handle_num);
194 if(qser_info_handle_num == 1)
195 { // 最后一个引用,可释放。
196 int ret = mbtk_info_handle_free(&qser_info_handle);
197 if(ret)
198 {
199 LOGE("[qser_data_call] mbtk_info_handle_free() fail.");
200 }
201 else
202 {
203 qser_info_handle_num = 0;
204 qser_info_handle = NULL;
205 inited = FALSE;
206 }
207 }
208 else
209 {
210 qser_info_handle_num--;
211 }
212 }
213 else
214 {
215 LOGE("[qser_data_call] handle not inited.");
216 }
b.liu5fa9e772023-11-23 18:00:55 +0800217}
218
219int qser_data_call_start(qser_data_call_s *data_call, qser_data_call_error_e *err)
220{
wangyouqiang84179c82024-01-05 15:42:55 +0800221 //UNUSED(data_call);
222 //UNUSED(err);
223 if(data_call == NULL || err == NULL)
224 {
225 LOGE("[qser_data_call] data_call or err is NULL.");
226 if(err != NULL)
227 {
228 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
229 }
230 return QSER_RESULT_FAIL;
231 }
232
233 if(qser_info_handle == NULL)
234 {
235 LOGE("[qser_data_call] handle is NULL.");
236 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
237 return QSER_RESULT_FAIL;
238 }
b.liu5fa9e772023-11-23 18:00:55 +0800239
wangyouqiang84179c82024-01-05 15:42:55 +0800240 if(data_call->profile_idx < QSER_PROFILE_IDX_MIN || data_call->profile_idx > QSER_PROFILE_IDX_MAX)
241 {
242 LOGE("[qser_data_call] IDX range error.");
243 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
244 return QSER_RESULT_FAIL;
245 }
246
247 int ret = -1;
248 ret = mbtk_data_call_start(qser_info_handle, data_call->profile_idx + 1, 0, FALSE, 0);
249 if(ret != 0)
250 {
251 LOGE("[qser_data_call] mbtk_data_call_start fail.[ret = %d]", ret);
252 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
253 return QSER_RESULT_FAIL;
254 }
255 else
256 {
257 *err = QSER_DATA_CALL_ERROR_NONE;
258 }
259 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800260}
261
262int qser_data_call_stop(char profile_idx, qser_data_call_ip_family_e ip_family, qser_data_call_error_e *err)
263{
wangyouqiang84179c82024-01-05 15:42:55 +0800264 //UNUSED(profile_idx);
b.liu5fa9e772023-11-23 18:00:55 +0800265 UNUSED(ip_family);
wangyouqiang84179c82024-01-05 15:42:55 +0800266 //UNUSED(err);
267 if(err == NULL)
268 {
269 LOGE("[qser_data_call] err is NULL.");
270 return QSER_RESULT_FAIL;
271 }
b.liu5fa9e772023-11-23 18:00:55 +0800272
wangyouqiang84179c82024-01-05 15:42:55 +0800273 if(qser_info_handle == NULL)
274 {
275 LOGE("[qser_data_call] handle is NULL.");
276 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
277 return QSER_RESULT_FAIL;
278 }
279
280 if(profile_idx < QSER_PROFILE_IDX_MIN || profile_idx > QSER_PROFILE_IDX_MAX)
281 {
282 LOGE("[qser_data_call] IDX range error.");
283 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
284 return QSER_RESULT_FAIL;
285 }
286
287 int ret = -1;
288 ret = mbtk_data_call_stop(qser_info_handle, profile_idx + 1, 15);
289 if(ret != 0)
290 {
291 LOGE("[qser_data_call] mbtk_data_call_stop fail.[ret = %d]", ret);
292 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
293 return QSER_RESULT_FAIL;
294 }
295 else
296 {
297 *err = QSER_DATA_CALL_ERROR_NONE;
298 }
299
300 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800301}
302
303int qser_data_call_info_get(char profile_idx,qser_data_call_ip_family_e ip_family,
304 qser_data_call_info_s *info, qser_data_call_error_e *err)
305{
wangyouqiang84179c82024-01-05 15:42:55 +0800306 //UNUSED(profile_idx);
b.liu5fa9e772023-11-23 18:00:55 +0800307 UNUSED(ip_family);
wangyouqiang84179c82024-01-05 15:42:55 +0800308 //UNUSED(info);
309 //UNUSED(err);
b.liu5fa9e772023-11-23 18:00:55 +0800310
wangyouqiang84179c82024-01-05 15:42:55 +0800311 if(info == NULL || err == NULL)
312 {
313 LOGE("[qser_data_call] info or err is NULL.");
314 if(err != NULL)
315 {
316 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
317 }
318 return QSER_RESULT_FAIL;
319 }
320
321 if(qser_info_handle == NULL)
322 {
323 LOGE("[qser_data_call] handle is NULL.");
324 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
325 return QSER_RESULT_FAIL;
326 }
327
328 if(profile_idx < QSER_PROFILE_IDX_MIN || profile_idx > QSER_PROFILE_IDX_MAX)
329 {
330 LOGE("[qser_data_call] IDX range error.");
331 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
332 return QSER_RESULT_FAIL;
333 }
334
335 int ret = -1;
336 mbtk_ipv4_info_t ipv4;
337 mbtk_ipv6_info_t ipv6;
338#ifdef QSER_TEST
339 char v4_buff[32] = {0};
340 char v6_buff[128] = {0};
341#endif
342 memset(info, 0, sizeof(qser_data_call_info_s));
343 ret = mbtk_data_call_state_get(qser_info_handle, profile_idx + 1, &ipv4, &ipv6);
344 if(ret != 0)
345 {
346 LOGE("[qser_data_call] mbtk_data_call_state_get fail.[ret = %d]", ret);
347 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
348 return QSER_RESULT_FAIL;
349 }
350 else
351 {
352 info->profile_idx = profile_idx;
353 if(ipv4.valid)
354 {
355 info->ip_family = QSER_DATA_CALL_TYPE_IPV4;
356 info->v4.state = QSER_DATA_CALL_CONNECTED;
357 sprintf(info->v4.name, "ccinet%d", profile_idx);
358 memcpy(&(info->v4.addr.ip), &(ipv4.IPAddr), 32);
359 memcpy(&(info->v4.addr.pri_dns), &(ipv4.PrimaryDNS), 32);
360 memcpy(&(info->v4.addr.sec_dns), &(ipv4.SecondaryDNS), 32);
361#ifdef QSER_TEST
362 if(inet_ntop(AF_INET, &(info->v4.addr.ip), v4_buff, 32) == NULL) {
363 LOGE("[qser_data_call] IP error.");
364 } else {
365 LOGE("[qser_data_call] IP : %s", v4_buff);
366 }
367 if(inet_ntop(AF_INET, &(info->v4.addr.pri_dns), v4_buff, 32) == NULL) {
368 LOGE("[qser_data_call] PrimaryDNS error.");
369 } else {
370 LOGE("[qser_data_call] PrimaryDNS : %s", v4_buff);
371 }
372 if(inet_ntop(AF_INET, &(info->v4.addr.sec_dns), v4_buff, 32) == NULL) {
373 LOGE("[qser_data_call] SecondaryDNS error.");
374 } else {
375 LOGE("[qser_data_call] SecondaryDNS : %s", v4_buff);
376 }
377#endif
378 }
379
380 if(ipv6.valid)
381 {
382 info->ip_family = QSER_DATA_CALL_TYPE_IPV6;
383 info->v6.state = QSER_DATA_CALL_CONNECTED;
384 sprintf(info->v6.name, "ccinet%d", profile_idx);
385 memcpy(&(info->v6.addr.ip), &(ipv6.IPV6Addr), 128);
386 memcpy(&(info->v6.addr.pri_dns), &(ipv6.PrimaryDNS), 128);
387 memcpy(&(info->v6.addr.sec_dns), &(ipv6.SecondaryDNS), 128);
388#ifdef QSER_TEST
389 if(ipv6_2_str(&(info->v6.addr.ip), v6_buff))
390 {
391 LOGE("[qser_data_call] IP error.");
392 } else {
393 LOGE("[qser_data_call] IP : %s", v6_buff);
394 }
395 if(ipv6_2_str(&(info->v6.addr.pri_dns), v6_buff))
396 {
397 LOGE("[qser_data_call] PrimaryDNS error.");
398 } else {
399 LOGE("[qser_data_call] PrimaryDNS : %s", v6_buff);
400 }
401 if(ipv6_2_str(&(info->v6.addr.sec_dns), v6_buff))
402 {
403 LOGE("[qser_data_call] SecondaryDNS error.");
404 } else {
405 LOGE("[qser_data_call] SecondaryDNS : %s", v6_buff);
406 }
407#endif
408 }
409
410 if(ipv4.valid && ipv6.valid)
411 {
412 info->ip_family = QSER_DATA_CALL_TYPE_IPV4V6;
413 }
414
415 if(!ipv4.valid && !ipv6.valid)
416 {
417 info->v4.state = QSER_DATA_CALL_DISCONNECTED;
418 info->v6.state = QSER_DATA_CALL_DISCONNECTED;
419 }
420 }
421
422 *err = QSER_DATA_CALL_ERROR_NONE;
423 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800424}
425
426int qser_apn_set(qser_apn_info_s *apn)
427{
wangyouqiang84179c82024-01-05 15:42:55 +0800428 //UNUSED(apn);
429 if(qser_info_handle == NULL)
430 {
431 LOGE("[qser_data_call] handle is NULL.");
432 return QSER_RESULT_FAIL;
433 }
434
435 if(apn == NULL)
436 {
437 LOGE("[qser_data_call] apn param is NULL.");
438 return QSER_RESULT_FAIL;
439 }
b.liu5fa9e772023-11-23 18:00:55 +0800440
wangyouqiang84179c82024-01-05 15:42:55 +0800441 if(apn->profile_idx < QSER_PROFILE_IDX_MIN || apn->profile_idx > QSER_PROFILE_IDX_MAX)
442 {
443 LOGE("[qser_data_call] IDX range error.");
444 return QSER_RESULT_FAIL;
445 }
446
447 if(strlen(apn->apn_name) == 0)
448 {
449 LOGE("[qser_data_call] apn_name is NULL.");
450 return QSER_RESULT_FAIL;
451 }
452
453 int ret = -1;
454 char mbtk_auth[32]={0};
455 mbtk_ip_type_enum pdp_type = MBTK_IP_TYPE_IPV4V6;
456
457 if(apn->pdp_type == QSER_APN_PDP_TYPE_IPV4)
458 {
459 pdp_type = MBTK_IP_TYPE_IP;
460 }
461 else if(apn->pdp_type == QSER_APN_PDP_TYPE_IPV6)
462 {
463 pdp_type = MBTK_IP_TYPE_IPV6;
464 }
465 else if(apn->pdp_type == QSER_APN_PDP_TYPE_IPV4V6)
466 {
467 pdp_type = MBTK_IP_TYPE_IPV4V6;
468 }
469 else if(apn->pdp_type == QSER_APN_PDP_TYPE_PPP)
470 {
471 pdp_type = MBTK_IP_TYPE_PPP;
472 }
473 else
474 {
475 LOGE("[qser_data_call] pdp_type error.");
476 return QSER_RESULT_FAIL;
477 }
478
479 if(apn->auth_proto == QSER_APN_AUTH_PROTO_NONE || apn->auth_proto == QSER_APN_AUTH_PROTO_DEFAULT)
480 {
481 memcpy(mbtk_auth,"NONE",strlen("NONE")+1);
482 }
483 else if(apn->auth_proto == QSER_APN_AUTH_PROTO_PAP)
484 {
485 memcpy(mbtk_auth,"PAP",strlen("PAP")+1);
486 }
487 else if(apn->auth_proto == QSER_APN_AUTH_PROTO_CHAP)
488 {
489 memcpy(mbtk_auth,"CHAP",strlen("CHAP")+1);
490 }
491 #if 0
492 else if(apn->auth_proto == QSER_APN_AUTH_PROTO_PAP_CHAP)
493 {
494 //NOT SUPPORT
495 }
496 #endif
497 else
498 {
499 LOGE("[qser_data_call] auth input error!");
500 return QSER_RESULT_FAIL;
501 }
502
503 if(strlen(apn->username) > 0 && strlen(apn->password) > 0)
504 {
505 LOGE("[qser_data_call] setapn: %d, %d, %s, %s, %s, %s, %s.",apn->profile_idx, pdp_type, apn->apn_name, apn->username, apn->password, mbtk_auth, apn->apn_type);
506 }
507 else
508 {
509 LOGE("[qser_data_call] setapn: %d, %d, %s, NULL, NULL, %s, %s.",apn->profile_idx, pdp_type, apn->apn_name, apn->username, apn->password, mbtk_auth, apn->apn_type);
510 }
511
512 ret = mbtk_apn_set(qser_info_handle, apn->profile_idx + 1, pdp_type, apn->apn_name, apn->username, apn->password, mbtk_auth);
513 if(ret < 0)
514 {
515 LOGE("[qser_data_call] mbtk_apn_set fail!");
516 return QSER_RESULT_FAIL;
517 }
518
519 memcpy(&qser_apn_info[apn->profile_idx], apn, sizeof(qser_apn_info_s));
520 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800521}
522
523int qser_apn_get(unsigned char profile_idx, qser_apn_info_s *apn)
524{
wangyouqiang84179c82024-01-05 15:42:55 +0800525 //UNUSED(profile_idx);
526 //UNUSED(apn);
527 if(qser_info_handle == NULL)
528 {
529 LOGE("[qser_data_call] handle is NULL.");
530 return QSER_RESULT_FAIL;
531 }
532
533 if(apn == NULL)
534 {
535 LOGE("[qser_data_call] apn param is NULL.");
536 return QSER_RESULT_FAIL;
537 }
b.liu5fa9e772023-11-23 18:00:55 +0800538
wangyouqiang84179c82024-01-05 15:42:55 +0800539 if(profile_idx < QSER_PROFILE_IDX_MIN || profile_idx > QSER_PROFILE_IDX_MAX)
540 {
541 LOGE("[qser_data_call] IDX range error.");
542 return QSER_RESULT_FAIL;
543 }
544
545 //get apn info
546 mbtk_apn_info_t apns[10] = {0};
547 int apn_num = 10;
548 int ret = mbtk_apn_get(qser_info_handle, &apn_num, apns);
549 if(ret != 0)
550 {
551 LOGE("[qser_data_call] mbtk_apn_get fail. [ret = %d]",ret);
552 return QSER_RESULT_FAIL;
553 }
554 else
555 {
556 int i = 0;
557 for(i = 0; i < apn_num; i++)
558 {
559 if(apns[i].cid == profile_idx + 1)
560 {
561 LOGE("[qser_data_call] find IDX.");
562 break;
563 }
564 }
565
566 if(i == apn_num)
567 {
568 LOGE("[qser_data_call] not find IDX.[apn_num = %d]", apn_num);
569 return QSER_RESULT_FAIL;
570 }
571
572 if(qser_apn_info_param_convert(profile_idx, apn, &apns[i]) != 0)
573 {
574 LOGE("[qser_data_call] qser_apn_info_param_convert fail");
575 return QSER_RESULT_FAIL;
576 }
577 }
578 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800579}
580
581int qser_apn_add(qser_apn_add_s *apn, unsigned char *profile_idx)
582{
583 UNUSED(apn);
584 UNUSED(profile_idx);
585
586 return 0;
587}
588
589int qser_apn_del(unsigned char profile_idx)
590{
591 UNUSED(profile_idx);
592
593 return 0;
594}
595
596int qser_apn_get_list(qser_apn_info_list_s *apn_list)
597{
wangyouqiang84179c82024-01-05 15:42:55 +0800598 //UNUSED(apn_list);
b.liu5fa9e772023-11-23 18:00:55 +0800599
wangyouqiang84179c82024-01-05 15:42:55 +0800600 if(qser_info_handle == NULL)
601 {
602 LOGE("[qser_data_call] handle is NULL.");
603 return QSER_RESULT_FAIL;
604 }
605
606 if(apn_list == NULL)
607 {
608 LOGE("[qser_data_call] apn_list param is NULL.");
609 return QSER_RESULT_FAIL;
610 }
611
612 mbtk_apn_info_t apns[10] = {0};
613 int apn_num = 10;
614 int ret = mbtk_apn_get(qser_info_handle, &apn_num, apns);
615 if(ret != 0)
616 {
617 LOGE("[qser_data_call] mbtk_apn_get fail. [ret = %d]",ret);
618 return QSER_RESULT_FAIL;
619 }
620 else
621 {
622 if(apn_num > 0 && apn_num <= QSER_APN_MAX_LIST)
623 {
624 int i = 0;
625 for(i = 0; i < apn_num; i++)
626 {
627 if(qser_apn_info_param_convert(apns[i].cid - 1, &apn_list->apn[i], &apns[i]) != 0)
628 {
629 LOGE("[qser_data_call] qser_apn_info_param_convert fail");
630 return QSER_RESULT_FAIL;
631 }
632 }
633 apn_list->cnt = apn_num;
634 }
635 else if(apn_num > QSER_APN_MAX_LIST)
636 {
637 LOGE("[qser_data_call] apn_num overlong");
638 return QSER_RESULT_FAIL;
639 }
640 else
641 {
642 apn_list->cnt = 0;
643 }
644 }
645 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800646}
wangyouqiang84179c82024-01-05 15:42:55 +0800647/****************************API***************************************/
b.liu5fa9e772023-11-23 18:00:55 +0800648