blob: 3d3cddac4daa45afeb1a14edfa4981dbf6f1cc0d [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 }
185 else if(*net_data > 200)
186 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800187 LOGE("[qser_data] cid[%d] is open.", *net_data - 201);
wangyouqianga24887d2024-04-08 18:31:23 +0800188 }
189 else if(*net_data == 1)
190 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800191 LOGE("[qser_data] pdp is open.");
wangyouqianga24887d2024-04-08 18:31:23 +0800192 }
193 else
194 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800195 LOGE("[qser_data] unkonwn param [%d].", *net_data);
wangyouqiang84179c82024-01-05 15:42:55 +0800196 }
197}
wangyouqiange2498f12024-01-06 17:55:36 +0800198
199static void* data_call_async_thread(void* arg)
200{
201 qser_data_call_error_e err;
wangyouqianga24887d2024-04-08 18:31:23 +0800202
203 qser_data_call_s qser_data_backup = {0};
204 if(arg != NULL)
205 {
206 memcpy(&qser_data_backup, (qser_data_call_s *)arg, sizeof(qser_data_call_s));
207 }
208 else
209 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800210 LOGE("[qser_data] arg is NULL.");
wangyouqianga24887d2024-04-08 18:31:23 +0800211 }
212
213 qser_data_call_state_s state = {0};
214 qser_state_init(&state);
215 state.profile_idx = qser_data_backup.profile_idx;
216 state.ip_family = qser_data_backup.ip_family;
217
wangyouqiange2498f12024-01-06 17:55:36 +0800218 int ret = qser_data_call_start(&qser_data_backup, &err);
219 if(ret != QSER_RESULT_SUCCESS)
220 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800221 LOGE("[qser_data] qser_data_call_start() fail.");
wangyouqianga24887d2024-04-08 18:31:23 +0800222 state.err = err;
223 if(qser_net_status_cb != NULL)
224 {
225 qser_net_status_cb(&state);
226 }
wangyouqiange2498f12024-01-06 17:55:36 +0800227 }
wangyouqianga24887d2024-04-08 18:31:23 +0800228
229 qser_data_call_info_s info = {0};
230 ret = qser_data_call_info_get(qser_data_backup.profile_idx, qser_data_backup.ip_family, &info, &err);
231 if(ret != QSER_RESULT_SUCCESS)
232 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800233 LOGE("[qser_data] qser_data_call_info_get() fail.");
wangyouqianga24887d2024-04-08 18:31:23 +0800234 state.err = err;
235 if(qser_net_status_cb != NULL)
236 {
237 qser_net_status_cb(&state);
238 }
239 }
240
241 snprintf(state.name, 16, "ccinet%d", qser_data_backup.profile_idx);
242 state.state = QSER_DATA_CALL_CONNECTED;
243 state.err = err;
244 memcpy(&(state.v4), &(info.v4.addr), sizeof(struct v4_address_status));
245 memcpy(&(state.v6), &(info.v6.addr), sizeof(struct v6_address_status));
246 if(qser_net_status_cb != NULL)
247 {
248 qser_net_status_cb(&state);
249 }
wangyouqiange2498f12024-01-06 17:55:36 +0800250 return NULL;
251}
252
wangyouqiang84179c82024-01-05 15:42:55 +0800253/******************************FUNC*****************************************/
254
255/****************************API***************************************/
b.liu5fa9e772023-11-23 18:00:55 +0800256int qser_data_call_init(qser_data_call_evt_cb_t evt_cb)
257{
wangyouqiang84179c82024-01-05 15:42:55 +0800258 //UNUSED(evt_cb);
259 if(!inited && qser_info_handle == NULL)
260 {
261 qser_info_handle = mbtk_info_handle_get();
262 if(qser_info_handle)
263 {
264 qser_info_handle_num++;
265 inited = TRUE;
266 mbtk_pdp_state_change_cb_reg(qser_info_handle, qser_wan_net_state_change_cb);
267 }
268 else
269 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800270 LOGE("[qser_data] mbtk_info_handle_get() fail.");
wangyouqiang84179c82024-01-05 15:42:55 +0800271 return QSER_RESULT_FAIL;
272 }
273 }
274 else
275 {
276 if(!inited)
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 }
283 qser_net_status_cb = evt_cb;
b.liu5fa9e772023-11-23 18:00:55 +0800284
wangyouqiangc42b85d2024-04-24 17:05:06 +0800285 LOGE("[qser_data] mbtk_info_handle_get() success.");
wangyouqiang84179c82024-01-05 15:42:55 +0800286 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800287}
288
289void qser_data_call_destroy(void)
290{
wangyouqiang84179c82024-01-05 15:42:55 +0800291 if(qser_info_handle)
292 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800293 LOGE("[qser_data] qser_info_handle_num = %d", qser_info_handle_num);
wangyouqiang84179c82024-01-05 15:42:55 +0800294 if(qser_info_handle_num == 1)
295 { // 最后一个引用,可释放。
296 int ret = mbtk_info_handle_free(&qser_info_handle);
297 if(ret)
298 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800299 LOGE("[qser_data] mbtk_info_handle_free() fail.");
wangyouqiang84179c82024-01-05 15:42:55 +0800300 }
301 else
302 {
303 qser_info_handle_num = 0;
304 qser_info_handle = NULL;
wangyouqiang45cfff82024-04-15 19:35:15 +0800305 qser_net_status_cb = NULL;
wangyouqiang84179c82024-01-05 15:42:55 +0800306 inited = FALSE;
307 }
308 }
309 else
310 {
311 qser_info_handle_num--;
wangyouqiang45cfff82024-04-15 19:35:15 +0800312 qser_net_status_cb = NULL;
wangyouqiang84179c82024-01-05 15:42:55 +0800313 }
314 }
315 else
316 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800317 LOGE("[qser_data] handle not inited.");
wangyouqiang84179c82024-01-05 15:42:55 +0800318 }
b.liu5fa9e772023-11-23 18:00:55 +0800319}
320
321int qser_data_call_start(qser_data_call_s *data_call, qser_data_call_error_e *err)
322{
wangyouqiang84179c82024-01-05 15:42:55 +0800323 //UNUSED(data_call);
324 //UNUSED(err);
325 if(data_call == NULL || err == NULL)
326 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800327 LOGE("[qser_data] data_call or err is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800328 if(err != NULL)
329 {
330 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
331 }
332 return QSER_RESULT_FAIL;
333 }
334
335 if(qser_info_handle == NULL)
336 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800337 LOGE("[qser_data] handle is NULL.");
b.liuf37bd332024-03-18 13:51:24 +0800338 *err = QSER_DATA_CALL_ERROR_NO_INIT;
wangyouqiang84179c82024-01-05 15:42:55 +0800339 return QSER_RESULT_FAIL;
340 }
b.liu5fa9e772023-11-23 18:00:55 +0800341
wangyouqiang84179c82024-01-05 15:42:55 +0800342 int ret = -1;
343 ret = mbtk_data_call_start(qser_info_handle, data_call->profile_idx + 1, 0, FALSE, 0);
344 if(ret != 0)
345 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800346 LOGE("[qser_data] mbtk_data_call_start fail.[ret = %d]", ret);
b.liuf37bd332024-03-18 13:51:24 +0800347 if(ret == MBTK_INFO_ERR_CID_EXIST)
348 {
349 *err = QSER_DATA_CALL_ERROR_PDP_ACTIVATE;
350 }
351 else
352 {
353 *err = QSER_DATA_CALL_ERROR_UNKNOWN;
354 }
wangyouqiang84179c82024-01-05 15:42:55 +0800355 return QSER_RESULT_FAIL;
356 }
357 else
358 {
359 *err = QSER_DATA_CALL_ERROR_NONE;
360 }
wangyouqiange2498f12024-01-06 17:55:36 +0800361
wangyouqiange2498f12024-01-06 17:55:36 +0800362 return QSER_RESULT_SUCCESS;
363}
364
365int qser_data_call_start_async(qser_data_call_s *data_call, qser_data_call_error_e *err)
366{
367 //UNUSED(data_call);
368 UNUSED(err);
369 if(data_call == NULL || err == NULL)
370 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800371 LOGE("[qser_data] data_call or err is NULL.");
wangyouqiange2498f12024-01-06 17:55:36 +0800372 if(err != NULL)
373 {
374 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
375 }
376 return QSER_RESULT_FAIL;
377 }
378
379 if(qser_info_handle == NULL)
380 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800381 LOGE("[qser_data] handle is NULL.");
b.liuf37bd332024-03-18 13:51:24 +0800382 *err = QSER_DATA_CALL_ERROR_NO_INIT;
wangyouqiange2498f12024-01-06 17:55:36 +0800383 return QSER_RESULT_FAIL;
384 }
385
wangyouqiange2498f12024-01-06 17:55:36 +0800386 pthread_attr_t thread_attr;
387 pthread_t data_call_thread_id;
388 pthread_attr_init(&thread_attr);
389 if(pthread_attr_setdetachstate(&thread_attr, PTHREAD_CREATE_DETACHED))
390 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800391 LOGE("[qser_data] pthread_attr_setdetachstate() fail.");
b.liuf37bd332024-03-18 13:51:24 +0800392 *err = QSER_DATA_CALL_ERROR_UNKNOWN;
wangyouqiange2498f12024-01-06 17:55:36 +0800393 return QSER_RESULT_FAIL;
394 }
395
wangyouqianga24887d2024-04-08 18:31:23 +0800396 //memcpy(&qser_data_backup, data_call, sizeof(qser_data_call_s));
397 if(pthread_create(&data_call_thread_id, &thread_attr, data_call_async_thread, (void *) data_call))
wangyouqiange2498f12024-01-06 17:55:36 +0800398 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800399 LOGE("[qser_data] pthread_create() fail.");
b.liuf37bd332024-03-18 13:51:24 +0800400 *err = QSER_DATA_CALL_ERROR_UNKNOWN;
wangyouqiange2498f12024-01-06 17:55:36 +0800401 return QSER_RESULT_FAIL;
402 }
403 pthread_attr_destroy(&thread_attr);
wangyouqiange2498f12024-01-06 17:55:36 +0800404
wangyouqiang84179c82024-01-05 15:42:55 +0800405 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800406}
407
408int qser_data_call_stop(char profile_idx, qser_data_call_ip_family_e ip_family, qser_data_call_error_e *err)
409{
wangyouqiang84179c82024-01-05 15:42:55 +0800410 //UNUSED(profile_idx);
b.liu5fa9e772023-11-23 18:00:55 +0800411 UNUSED(ip_family);
wangyouqiang84179c82024-01-05 15:42:55 +0800412 //UNUSED(err);
413 if(err == NULL)
414 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800415 LOGE("[qser_data] err is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800416 return QSER_RESULT_FAIL;
417 }
b.liu5fa9e772023-11-23 18:00:55 +0800418
wangyouqiang84179c82024-01-05 15:42:55 +0800419 if(qser_info_handle == NULL)
420 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800421 LOGE("[qser_data] handle is NULL.");
b.liuf37bd332024-03-18 13:51:24 +0800422 *err = QSER_DATA_CALL_ERROR_NO_INIT;
wangyouqiang84179c82024-01-05 15:42:55 +0800423 return QSER_RESULT_FAIL;
424 }
425
wangyouqiang84179c82024-01-05 15:42:55 +0800426 int ret = -1;
427 ret = mbtk_data_call_stop(qser_info_handle, profile_idx + 1, 15);
428 if(ret != 0)
429 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800430 LOGE("[qser_data] mbtk_data_call_stop fail.[ret = %d]", ret);
b.liuf37bd332024-03-18 13:51:24 +0800431 if(ret == MBTK_INFO_ERR_CID_NO_EXIST)
432 {
433 *err = QSER_DATA_CALL_ERROR_PDP_NO_ACTIVATE;
434 }
435 else
436 {
437 *err = QSER_DATA_CALL_ERROR_UNKNOWN;
438 }
wangyouqiang84179c82024-01-05 15:42:55 +0800439 return QSER_RESULT_FAIL;
440 }
441 else
442 {
443 *err = QSER_DATA_CALL_ERROR_NONE;
444 }
wangyouqiange2498f12024-01-06 17:55:36 +0800445
wangyouqiang84179c82024-01-05 15:42:55 +0800446 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800447}
448
449int qser_data_call_info_get(char profile_idx,qser_data_call_ip_family_e ip_family,
450 qser_data_call_info_s *info, qser_data_call_error_e *err)
451{
wangyouqiang84179c82024-01-05 15:42:55 +0800452 //UNUSED(profile_idx);
b.liu5fa9e772023-11-23 18:00:55 +0800453 UNUSED(ip_family);
wangyouqiang84179c82024-01-05 15:42:55 +0800454 //UNUSED(info);
455 //UNUSED(err);
b.liu5fa9e772023-11-23 18:00:55 +0800456
wangyouqiang84179c82024-01-05 15:42:55 +0800457 if(info == NULL || err == NULL)
458 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800459 LOGE("[qser_data] info or err is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800460 if(err != NULL)
461 {
462 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
463 }
464 return QSER_RESULT_FAIL;
465 }
466
467 if(qser_info_handle == NULL)
468 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800469 LOGE("[qser_data] handle is NULL.");
b.liuf37bd332024-03-18 13:51:24 +0800470 *err = QSER_DATA_CALL_ERROR_NO_INIT;
wangyouqiang84179c82024-01-05 15:42:55 +0800471 return QSER_RESULT_FAIL;
472 }
473
wangyouqiang84179c82024-01-05 15:42:55 +0800474 int ret = -1;
475 mbtk_ipv4_info_t ipv4;
476 mbtk_ipv6_info_t ipv6;
477#ifdef QSER_TEST
478 char v4_buff[32] = {0};
479 char v6_buff[128] = {0};
480#endif
481 memset(info, 0, sizeof(qser_data_call_info_s));
482 ret = mbtk_data_call_state_get(qser_info_handle, profile_idx + 1, &ipv4, &ipv6);
483 if(ret != 0)
484 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800485 LOGE("[qser_data] mbtk_data_call_state_get fail.[ret = %d]", ret);
b.liuf37bd332024-03-18 13:51:24 +0800486 if(ret == MBTK_INFO_ERR_CID_NO_EXIST)
487 {
488 *err = QSER_DATA_CALL_ERROR_PDP_NO_ACTIVATE;
489 }
490 else
491 {
492 *err = QSER_DATA_CALL_ERROR_UNKNOWN;
493 }
wangyouqiang84179c82024-01-05 15:42:55 +0800494 return QSER_RESULT_FAIL;
495 }
496 else
497 {
498 info->profile_idx = profile_idx;
499 if(ipv4.valid)
500 {
501 info->ip_family = QSER_DATA_CALL_TYPE_IPV4;
502 info->v4.state = QSER_DATA_CALL_CONNECTED;
503 sprintf(info->v4.name, "ccinet%d", profile_idx);
b.liuf37bd332024-03-18 13:51:24 +0800504 info->v4.addr.ip.s_addr = ipv4.IPAddr;
505 info->v4.addr.pri_dns.s_addr = ipv4.PrimaryDNS;
506 info->v4.addr.sec_dns.s_addr = ipv4.SecondaryDNS;
507
wangyouqiang84179c82024-01-05 15:42:55 +0800508#ifdef QSER_TEST
wangyouqiangc42b85d2024-04-24 17:05:06 +0800509 //LOGE("[qser_data] IP: %x pri_DNS: %x sec_DNS: %x.", ipv4.IPAddr, ipv4.PrimaryDNS, ipv4.SecondaryDNS);
wangyouqiang84179c82024-01-05 15:42:55 +0800510 if(inet_ntop(AF_INET, &(info->v4.addr.ip), v4_buff, 32) == NULL) {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800511 LOGE("[qser_data] IP error.");
wangyouqiang84179c82024-01-05 15:42:55 +0800512 } else {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800513 LOGE("[qser_data] IP : %s", v4_buff);
wangyouqiang84179c82024-01-05 15:42:55 +0800514 }
515 if(inet_ntop(AF_INET, &(info->v4.addr.pri_dns), v4_buff, 32) == NULL) {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800516 LOGE("[qser_data] PrimaryDNS error.");
wangyouqiang84179c82024-01-05 15:42:55 +0800517 } else {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800518 LOGE("[qser_data] PrimaryDNS : %s", v4_buff);
wangyouqiang84179c82024-01-05 15:42:55 +0800519 }
520 if(inet_ntop(AF_INET, &(info->v4.addr.sec_dns), v4_buff, 32) == NULL) {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800521 LOGE("[qser_data] SecondaryDNS error.");
wangyouqiang84179c82024-01-05 15:42:55 +0800522 } else {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800523 LOGE("[qser_data] SecondaryDNS : %s", v4_buff);
wangyouqiang84179c82024-01-05 15:42:55 +0800524 }
525#endif
526 }
527
528 if(ipv6.valid)
529 {
530 info->ip_family = QSER_DATA_CALL_TYPE_IPV6;
531 info->v6.state = QSER_DATA_CALL_CONNECTED;
532 sprintf(info->v6.name, "ccinet%d", profile_idx);
b.liuf37bd332024-03-18 13:51:24 +0800533 memcpy(&(info->v6.addr.ip), &(ipv6.IPV6Addr), sizeof(ipv6.IPV6Addr));
534 memcpy(&(info->v6.addr.pri_dns), &(ipv6.PrimaryDNS), sizeof(ipv6.PrimaryDNS));
535 memcpy(&(info->v6.addr.sec_dns), &(ipv6.SecondaryDNS), sizeof(ipv6.SecondaryDNS));
wangyouqiang84179c82024-01-05 15:42:55 +0800536#ifdef QSER_TEST
537 if(ipv6_2_str(&(info->v6.addr.ip), v6_buff))
538 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800539 LOGE("[qser_data] IP error.");
wangyouqiang84179c82024-01-05 15:42:55 +0800540 } else {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800541 LOGE("[qser_data] IP : %s", v6_buff);
wangyouqiang84179c82024-01-05 15:42:55 +0800542 }
543 if(ipv6_2_str(&(info->v6.addr.pri_dns), v6_buff))
544 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800545 LOGE("[qser_data] PrimaryDNS error.");
wangyouqiang84179c82024-01-05 15:42:55 +0800546 } else {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800547 LOGE("[qser_data] PrimaryDNS : %s", v6_buff);
wangyouqiang84179c82024-01-05 15:42:55 +0800548 }
549 if(ipv6_2_str(&(info->v6.addr.sec_dns), v6_buff))
550 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800551 LOGE("[qser_data] SecondaryDNS error.");
wangyouqiang84179c82024-01-05 15:42:55 +0800552 } else {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800553 LOGE("[qser_data] SecondaryDNS : %s", v6_buff);
wangyouqiang84179c82024-01-05 15:42:55 +0800554 }
555#endif
556 }
557
558 if(ipv4.valid && ipv6.valid)
559 {
560 info->ip_family = QSER_DATA_CALL_TYPE_IPV4V6;
561 }
562
563 if(!ipv4.valid && !ipv6.valid)
564 {
565 info->v4.state = QSER_DATA_CALL_DISCONNECTED;
566 info->v6.state = QSER_DATA_CALL_DISCONNECTED;
567 }
568 }
569
570 *err = QSER_DATA_CALL_ERROR_NONE;
571 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800572}
573
574int qser_apn_set(qser_apn_info_s *apn)
575{
wangyouqiang84179c82024-01-05 15:42:55 +0800576 //UNUSED(apn);
577 if(qser_info_handle == NULL)
578 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800579 LOGE("[qser_data] handle is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800580 return QSER_RESULT_FAIL;
581 }
582
583 if(apn == NULL)
584 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800585 LOGE("[qser_data] apn param is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800586 return QSER_RESULT_FAIL;
587 }
b.liu5fa9e772023-11-23 18:00:55 +0800588
wangyouqiang80487e42024-05-24 15:06:20 +0800589 int ret = 0;
590 mbtk_qser_apn_info_s apninfo;
591 memset(&apninfo, 0x0, sizeof(mbtk_qser_apn_info_s));
592 apninfo.cid = apn->profile_idx + 1;
593
wangyouqiang84179c82024-01-05 15:42:55 +0800594 if(apn->pdp_type == QSER_APN_PDP_TYPE_IPV4)
595 {
wangyouqiang80487e42024-05-24 15:06:20 +0800596 apninfo.ip_type = MBTK_IP_TYPE_IP;
wangyouqiang84179c82024-01-05 15:42:55 +0800597 }
598 else if(apn->pdp_type == QSER_APN_PDP_TYPE_IPV6)
599 {
wangyouqiang80487e42024-05-24 15:06:20 +0800600 apninfo.ip_type = MBTK_IP_TYPE_IPV6;
wangyouqiang84179c82024-01-05 15:42:55 +0800601 }
602 else if(apn->pdp_type == QSER_APN_PDP_TYPE_IPV4V6)
603 {
wangyouqiang80487e42024-05-24 15:06:20 +0800604 apninfo.ip_type = MBTK_IP_TYPE_IPV4V6;
wangyouqiang84179c82024-01-05 15:42:55 +0800605 }
606 else if(apn->pdp_type == QSER_APN_PDP_TYPE_PPP)
607 {
wangyouqiang80487e42024-05-24 15:06:20 +0800608 apninfo.ip_type = MBTK_IP_TYPE_PPP;
wangyouqiang84179c82024-01-05 15:42:55 +0800609 }
610 else
611 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800612 LOGE("[qser_data] pdp_type error.");
wangyouqiang84179c82024-01-05 15:42:55 +0800613 return QSER_RESULT_FAIL;
614 }
615
wangyouqiange2498f12024-01-06 17:55:36 +0800616
wangyouqiang80487e42024-05-24 15:06:20 +0800617 apninfo.req_type = MBTK_APN_REQ_TYPE_SET;
618 apninfo.auth_proto = (mbtk_apn_auth_proto_enum)apn->auth_proto;
619 if(strlen(apn->apn_name))
wangyouqiang84179c82024-01-05 15:42:55 +0800620 {
wangyouqiang80487e42024-05-24 15:06:20 +0800621 memcpy(apninfo.apn_name, apn->apn_name, strlen(apn->apn_name));
622 }
623 else
624 {
625 LOGE("[qser_data] apn_name is NULL.");
626 return QSER_RESULT_FAIL;
627 }
628 if(strlen(apn->username))
629 {
630 memcpy(apninfo.user_name, apn->username, strlen(apn->username));
631 }
632 if(strlen(apn->password))
633 {
634 memcpy(apninfo.user_pass, apn->password, strlen(apn->password));
635 }
636 if(strlen(apn->apn_type))
637 {
638 memcpy(apninfo.apn_type, apn->apn_type, strlen(apn->apn_type));
639 }
640 ret = mbtk_qser_apn_set(qser_info_handle, &apninfo, NULL);
641 if(ret != 0)
642 {
643 LOGE("[qser_data] mbtk_qser_apn_set fail.");
wangyouqiang84179c82024-01-05 15:42:55 +0800644 return QSER_RESULT_FAIL;
645 }
646
wangyouqiang84179c82024-01-05 15:42:55 +0800647 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800648}
649
650int qser_apn_get(unsigned char profile_idx, qser_apn_info_s *apn)
651{
wangyouqiang84179c82024-01-05 15:42:55 +0800652 //UNUSED(profile_idx);
653 //UNUSED(apn);
654 if(qser_info_handle == NULL)
655 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800656 LOGE("[qser_data] handle is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800657 return QSER_RESULT_FAIL;
658 }
659
660 if(apn == NULL)
661 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800662 LOGE("[qser_data] apn param is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800663 return QSER_RESULT_FAIL;
664 }
b.liu5fa9e772023-11-23 18:00:55 +0800665
wangyouqiang84179c82024-01-05 15:42:55 +0800666 //get apn info
wangyouqiang80487e42024-05-24 15:06:20 +0800667 mbtk_qser_apn_info_s apns[10] = {0};
wangyouqiang84179c82024-01-05 15:42:55 +0800668 int apn_num = 10;
wangyouqiang80487e42024-05-24 15:06:20 +0800669 int ret = mbtk_qser_apn_get(qser_info_handle, &apn_num, apns);
wangyouqiang84179c82024-01-05 15:42:55 +0800670 if(ret != 0)
671 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800672 LOGE("[qser_data] mbtk_apn_get fail. [ret = %d]",ret);
wangyouqiang84179c82024-01-05 15:42:55 +0800673 return QSER_RESULT_FAIL;
674 }
675 else
676 {
677 int i = 0;
678 for(i = 0; i < apn_num; i++)
679 {
680 if(apns[i].cid == profile_idx + 1)
681 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800682 LOGE("[qser_data] find IDX.");
wangyouqiang84179c82024-01-05 15:42:55 +0800683 break;
684 }
685 }
686
687 if(i == apn_num)
688 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800689 LOGE("[qser_data] not find IDX.[apn_num = %d]", apn_num);
wangyouqiang84179c82024-01-05 15:42:55 +0800690 return QSER_RESULT_FAIL;
691 }
692
693 if(qser_apn_info_param_convert(profile_idx, apn, &apns[i]) != 0)
694 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800695 LOGE("[qser_data] qser_apn_info_param_convert fail");
wangyouqiang84179c82024-01-05 15:42:55 +0800696 return QSER_RESULT_FAIL;
697 }
698 }
699 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800700}
701
702int qser_apn_add(qser_apn_add_s *apn, unsigned char *profile_idx)
703{
wangyouqiange2498f12024-01-06 17:55:36 +0800704 //UNUSED(apn);
705 //UNUSED(profile_idx);
706 if(qser_info_handle == NULL)
707 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800708 LOGE("[qser_data] handle is NULL.");
wangyouqiange2498f12024-01-06 17:55:36 +0800709 return QSER_RESULT_FAIL;
710 }
711
wangyouqiang80487e42024-05-24 15:06:20 +0800712 if(apn == NULL || profile_idx == NULL)
wangyouqiange2498f12024-01-06 17:55:36 +0800713 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800714 LOGE("[qser_data] apn param is NULL.");
wangyouqiange2498f12024-01-06 17:55:36 +0800715 return QSER_RESULT_FAIL;
716 }
b.liu5fa9e772023-11-23 18:00:55 +0800717
wangyouqiange2498f12024-01-06 17:55:36 +0800718 int ret = 0;
wangyouqiang80487e42024-05-24 15:06:20 +0800719 unsigned char idx[2] = {0};
720 mbtk_qser_apn_info_s apninfo;
721 memset(&apninfo, 0x0, sizeof(mbtk_qser_apn_info_s));
722 apninfo.cid = 0;
723
724 if(apn->pdp_type == QSER_APN_PDP_TYPE_IPV4)
wangyouqiange2498f12024-01-06 17:55:36 +0800725 {
wangyouqiang80487e42024-05-24 15:06:20 +0800726 apninfo.ip_type = MBTK_IP_TYPE_IP;
727 }
728 else if(apn->pdp_type == QSER_APN_PDP_TYPE_IPV6)
729 {
730 apninfo.ip_type = MBTK_IP_TYPE_IPV6;
731 }
732 else if(apn->pdp_type == QSER_APN_PDP_TYPE_IPV4V6)
733 {
734 apninfo.ip_type = MBTK_IP_TYPE_IPV4V6;
735 }
736 else if(apn->pdp_type == QSER_APN_PDP_TYPE_PPP)
737 {
738 apninfo.ip_type = MBTK_IP_TYPE_PPP;
wangyouqiange2498f12024-01-06 17:55:36 +0800739 }
740 else
741 {
wangyouqiang80487e42024-05-24 15:06:20 +0800742 LOGE("[qser_data] pdp_type error.");
743 return QSER_RESULT_FAIL;
wangyouqiange2498f12024-01-06 17:55:36 +0800744 }
wangyouqiang80487e42024-05-24 15:06:20 +0800745
746
747 apninfo.req_type = MBTK_APN_REQ_TYPE_ADD;
748 apninfo.auth_proto = (mbtk_apn_auth_proto_enum)apn->auth_proto;
749 if(strlen(apn->apn_name))
750 {
751 memcpy(apninfo.apn_name, apn->apn_name, strlen(apn->apn_name));
752 }
753 else
754 {
755 LOGE("[qser_data] apn_name is NULL.");
756 return QSER_RESULT_FAIL;
757 }
758 if(strlen(apn->username))
759 {
760 memcpy(apninfo.user_name, apn->username, strlen(apn->username));
761 }
762 if(strlen(apn->password))
763 {
764 memcpy(apninfo.user_pass, apn->password, strlen(apn->password));
765 }
766 if(strlen(apn->apn_type))
767 {
768 memcpy(apninfo.apn_type, apn->apn_type, strlen(apn->apn_type));
769 }
770 ret = mbtk_qser_apn_set(qser_info_handle, &apninfo, idx);
771 if(ret != 0)
772 {
773 LOGE("[qser_data] mbtk_qser_apn_set fail.");
774 return QSER_RESULT_FAIL;
775 }
776 *profile_idx = idx[0] - 1;
wangyouqiange2498f12024-01-06 17:55:36 +0800777 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800778}
779
780int qser_apn_del(unsigned char profile_idx)
781{
liuyang0e49d9a2024-04-23 21:04:54 +0800782 int ret = 0;
783
wangyouqiange2498f12024-01-06 17:55:36 +0800784 //UNUSED(profile_idx);
785 if(qser_info_handle == NULL)
786 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800787 LOGE("[qser_data] handle is NULL.");
wangyouqiange2498f12024-01-06 17:55:36 +0800788 return QSER_RESULT_FAIL;
789 }
wangyouqiange2498f12024-01-06 17:55:36 +0800790
liuyang0e49d9a2024-04-23 21:04:54 +0800791 ret = mbtk_apn_del(qser_info_handle, profile_idx);
liuyang0e49d9a2024-04-23 21:04:54 +0800792 if(ret < 0)
793 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800794 LOGE("[qser_data] mbtk_apn_del fail!");
liuyang0e49d9a2024-04-23 21:04:54 +0800795 return QSER_RESULT_FAIL;
796 }
wangyouqiange2498f12024-01-06 17:55:36 +0800797 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800798}
799
800int qser_apn_get_list(qser_apn_info_list_s *apn_list)
801{
wangyouqiang84179c82024-01-05 15:42:55 +0800802 //UNUSED(apn_list);
b.liu5fa9e772023-11-23 18:00:55 +0800803
wangyouqiang84179c82024-01-05 15:42:55 +0800804 if(qser_info_handle == NULL)
805 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800806 LOGE("[qser_data] handle is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800807 return QSER_RESULT_FAIL;
808 }
809
810 if(apn_list == NULL)
811 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800812 LOGE("[qser_data] apn_list param is NULL.");
wangyouqiang84179c82024-01-05 15:42:55 +0800813 return QSER_RESULT_FAIL;
814 }
815
wangyouqiang80487e42024-05-24 15:06:20 +0800816 mbtk_qser_apn_info_s apns[10] = {0};
wangyouqiang84179c82024-01-05 15:42:55 +0800817 int apn_num = 10;
wangyouqiang80487e42024-05-24 15:06:20 +0800818 int ret = mbtk_qser_apn_get(qser_info_handle, &apn_num, apns);
wangyouqiang84179c82024-01-05 15:42:55 +0800819 if(ret != 0)
820 {
wangyouqiangc1d72d22024-04-25 10:15:58 +0800821 if(ret == MBTK_INFO_ERR_NO_APN)
822 {
823 apn_list->cnt = 0;
824 return QSER_RESULT_SUCCESS;
825 }
wangyouqiangc42b85d2024-04-24 17:05:06 +0800826 LOGE("[qser_data] mbtk_apn_get fail. [ret = %d]",ret);
wangyouqiang84179c82024-01-05 15:42:55 +0800827 return QSER_RESULT_FAIL;
828 }
829 else
830 {
831 if(apn_num > 0 && apn_num <= QSER_APN_MAX_LIST)
832 {
833 int i = 0;
wangyouqiange2498f12024-01-06 17:55:36 +0800834 apn_list->cnt = 0;
wangyouqiang84179c82024-01-05 15:42:55 +0800835 for(i = 0; i < apn_num; i++)
836 {
wangyouqiang8ebeafe2024-04-15 10:07:44 +0800837 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 +0800838 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800839 LOGE("[qser_data] qser_apn_info_param_convert fail");
wangyouqiang84179c82024-01-05 15:42:55 +0800840 return QSER_RESULT_FAIL;
841 }
wangyouqiange2498f12024-01-06 17:55:36 +0800842 apn_list->cnt++;
wangyouqiang84179c82024-01-05 15:42:55 +0800843 }
wangyouqiang84179c82024-01-05 15:42:55 +0800844 }
845 else if(apn_num > QSER_APN_MAX_LIST)
846 {
wangyouqiangc42b85d2024-04-24 17:05:06 +0800847 LOGE("[qser_data] apn_num overlong");
wangyouqiang84179c82024-01-05 15:42:55 +0800848 return QSER_RESULT_FAIL;
849 }
850 else
851 {
852 apn_list->cnt = 0;
853 }
854 }
855 return QSER_RESULT_SUCCESS;
b.liu5fa9e772023-11-23 18:00:55 +0800856}
wangyouqiang84179c82024-01-05 15:42:55 +0800857/****************************API***************************************/
b.liu5fa9e772023-11-23 18:00:55 +0800858