blob: a4e452e79c51e6b768e47d0a44c14533072be87f [file] [log] [blame]
xf.li2fc84552023-06-23 05:26:47 -07001#include <stdio.h>
2#include <stdint.h>
3#include <sys/types.h>
4#include <arpa/inet.h>
5#include <string.h>
6#include <stdlib.h>
7#include <unistd.h>
8#include <log/log.h>
9#include <libdata/lynq_data.h>
10#include <liblog/lynq_deflog.h>
11#include <pthread.h>
12#include <libxml/tree.h>
13#include <libxml/parser.h>
14#include "lynq-qser-data.h"
15
16#define USER_LOG_TAG "LYNQ_QSER_DATA"
17
18#define RESULT_OK (0)
19#define RESULT_ERROR (-1)
20
xf.lib33d4862023-12-13 00:40:37 -080021typedef enum{
22 LYNQ_E_NO_INIT=9002
23}LYNQ_E;
24
25static int g_lynq_qser_data_init_flag = 0;
xf.li2fc84552023-06-23 05:26:47 -070026static pthread_t s_cb_tid = -1;
27static int s_qser_data_cb_thread_status = 0;
28static pthread_mutex_t s_qser_data_cb_mutex = PTHREAD_MUTEX_INITIALIZER;
29static pthread_cond_t s_qser_data_cb_cond = PTHREAD_COND_INITIALIZER;
30
xf.li807fd132023-07-02 02:45:36 -070031#define data_xml_path "/mnt/userdata/lynq_qser_data_apn.xml"
xf.li7b0bfd02023-08-03 01:11:52 -070032#define COPY_XML_RETRY_TIMES 3
xf.li2fc84552023-06-23 05:26:47 -070033
34static qser_data_call_evt_cb_t s_data_call_cb = NULL;
xf.lie3f55f42023-12-01 22:47:33 -080035static xmlDocPtr apn_table_xml_pdoc = NULL;
xf.li2fc84552023-06-23 05:26:47 -070036const int apndb_offset = 683;
37
38void lynq_ipv4_aton_urc(lynq_data_call_response_v11_t *libdata,qser_data_call_state_s *data_res)
39{
xf.li3c0a4752023-09-03 20:46:19 -070040#ifdef MOBILETEK_TARGET_PLATFORM_T106
41 char *tmp_char = NULL;
42 char *addresses = NULL;
43 char *dnses = NULL;
44 const char addresses_separator[2] = "/";
45 const char dnses_separator[2] = " ";
46
47 addresses = libdata->addresses;
48 dnses = libdata->dnses;
49 //get addresses
50 tmp_char = strsep(&addresses, addresses_separator);
51 if(tmp_char != NULL)
52 {
53 LYINFLOG("ipv4 addresses = %s", tmp_char);
54 inet_aton(tmp_char,&(data_res->v4.ip));
55 }
56
57 //get dnses
58 tmp_char = strsep(&dnses, dnses_separator);
59 if(tmp_char != NULL)
60 {
61 LYINFLOG("ipv4 pri_dns = %s", tmp_char);
62 inet_aton(tmp_char,&(data_res->v4.pri_dns));
63 }
64 tmp_char = strsep(&dnses, dnses_separator);
65 if(tmp_char != NULL)
66 {
67 LYINFLOG("ipv4 sec_dns = %s", tmp_char);
68 inet_aton(tmp_char, &(data_res->v4.sec_dns));
69 }
70 //get gateway
71 inet_pton(AF_INET6,libdata->gateways,&(data_res->v6.gateway));
72
73#else
xf.li2fc84552023-06-23 05:26:47 -070074 inet_aton(libdata->addresses,&(data_res->v4.ip));
75 inet_aton(libdata->gateways,&(data_res->v4.gateway));
76 inet_aton(libdata->dnses,&(data_res->v4.pri_dns));
77 inet_aton(libdata->dnses,&(data_res->v4.sec_dns));
xf.li3c0a4752023-09-03 20:46:19 -070078#endif
xf.li2fc84552023-06-23 05:26:47 -070079 return ;
80}
81
82void lynq_ipv6_inet_pton_urc(lynq_data_call_response_v11_t *libdata,qser_data_call_state_s *data_res)
83{
xf.li3c0a4752023-09-03 20:46:19 -070084#ifdef MOBILETEK_TARGET_PLATFORM_T106
85 char *tmp_char = NULL;
86 char *addresses = NULL;
87 char *dnses = NULL;
88 const char addresses_separator[2] = "/";
89 const char dnses_separator[2] = " ";
90
91 addresses = libdata->addresses;
92 dnses = libdata->dnses;
93 //get addresses
94 tmp_char = strsep(&addresses, addresses_separator);
95 if(tmp_char != NULL)
96 {
97 LYINFLOG("ipv6 addresses = %s", tmp_char);
98 inet_pton(AF_INET6, tmp_char, &(data_res->v6.ip));
99 }
100 //get dnses
101 tmp_char = strsep(&dnses, dnses_separator);
102 if(tmp_char != NULL)
103 {
104 LYINFLOG("ipv6 pri_dns = %s", tmp_char);
105 inet_pton(AF_INET6, tmp_char, &(data_res->v6.pri_dns));
106 }
107 tmp_char = strsep(&dnses, dnses_separator);
108 if(tmp_char != NULL)
109 {
110 LYINFLOG("ipv6 sec_dns = %s", tmp_char);
111 inet_pton(AF_INET6, tmp_char, &(data_res->v6.sec_dns));
112 }
113 inet_pton(AF_INET6,libdata->gateways,&(data_res->v6.gateway));
114#else
xf.li2fc84552023-06-23 05:26:47 -0700115 inet_pton(AF_INET6,libdata->addresses,&(data_res->v6.ip));
116 inet_pton(AF_INET6,libdata->gateways,&(data_res->v6.gateway));
117 inet_pton(AF_INET6,libdata->dnses,&(data_res->v6.pri_dns));
118 inet_pton(AF_INET6,libdata->dnses,&(data_res->v6.sec_dns));
xf.li3c0a4752023-09-03 20:46:19 -0700119#endif
120
121 return ;
122}
123
124void lynq_ipv4v6_inet_pton_urc(lynq_data_call_response_v11_t *libdata,qser_data_call_state_s *data_res)
125{
126 char *tmp_char = NULL;
127 char *addresses = NULL;
128 char *dnses = NULL;
129 const char addresses_separator[2] = "/";
130 const char dnses_separator[2] = " ";
131
xf.li03baf1f2023-12-19 21:30:38 -0800132 char buf_ip[64] = {0};
133 char buf_gateway[64] = {0};
134 char buf_pri_dns[64] = {0};
135 char buf_sec_dns[64] = {0};
136
xf.li3c0a4752023-09-03 20:46:19 -0700137 addresses = libdata->addresses;
138 dnses = libdata->dnses;
139 //get addresses
140 tmp_char = strsep(&addresses, addresses_separator);
141 if(tmp_char != NULL)
142 {
143 LYINFLOG("ipv4 addresses = %s", tmp_char);
144 inet_aton(tmp_char,&(data_res->v4.ip));
145 }
146 tmp_char = strsep(&addresses, addresses_separator);
147 if(tmp_char != NULL)
148 {
149 LYINFLOG("ipv6 addresses = %s", tmp_char);
150 inet_pton(AF_INET6, tmp_char, &(data_res->v6.ip));
151 }
152 //get dnses
153 tmp_char = strsep(&dnses, dnses_separator);
154 if(tmp_char != NULL)
155 {
156 LYINFLOG("ipv4 pri_dns = %s", tmp_char);
157 inet_aton(tmp_char,&(data_res->v4.pri_dns));
158 }
159 tmp_char = strsep(&dnses, dnses_separator);
160 if(tmp_char != NULL)
161 {
162 LYINFLOG("ipv4 sec_dns = %s", tmp_char);
163 inet_aton(tmp_char, &(data_res->v4.sec_dns));
164 }
165 tmp_char = strsep(&dnses, dnses_separator);
166 if(tmp_char != NULL)
167 {
168 LYINFLOG("ipv6 pri_dns = %s", tmp_char);
169 inet_pton(AF_INET6, tmp_char, &(data_res->v6.pri_dns));
170 }
171 tmp_char = strsep(&dnses, dnses_separator);
172 if(tmp_char != NULL)
173 {
174 LYINFLOG("ipv6 sec_dns = %s", tmp_char);
175 inet_pton(AF_INET6, tmp_char, &(data_res->v6.sec_dns));
176 }
177 //get gateway
xf.li03baf1f2023-12-19 21:30:38 -0800178 inet_aton(libdata->gateways,&(data_res->v4.gateway));
xf.li3c0a4752023-09-03 20:46:19 -0700179 inet_pton(AF_INET6,libdata->gateways,&(data_res->v6.gateway));
180
xf.li03baf1f2023-12-19 21:30:38 -0800181 LYINFLOG("v4.ip=%s", inet_ntoa(data_res->v4.ip));
182 LYINFLOG("v4.pri_dns=%s", inet_ntoa(data_res->v4.pri_dns));
183 LYINFLOG("v4.sec_dns=%s", inet_ntoa(data_res->v4.sec_dns));
184
185 inet_ntop(AF_INET6, &(data_res->v6.ip), buf_ip, sizeof(buf_ip));
186 inet_ntop(AF_INET6, &(data_res->v6.gateway), buf_gateway, sizeof(buf_gateway));
187 inet_ntop(AF_INET6, &(data_res->v6.pri_dns), buf_pri_dns, sizeof(buf_pri_dns));
188 inet_ntop(AF_INET6, &(data_res->v6.sec_dns), buf_sec_dns, sizeof(buf_sec_dns));
189 LYINFLOG("v6.ip=%s, v6.gateway=%s, v6.pri_dns=%s, v6.sec_dns=%s\n"
190 , buf_ip, buf_gateway, buf_pri_dns, buf_sec_dns);
xf.li2fc84552023-06-23 05:26:47 -0700191 return ;
192}
193
194void lynq_ipv4_aton_getinfo(lynq_data_call_response_v11_t *libdata,qser_data_call_info_s *data_res)
195{
xf.li3c0a4752023-09-03 20:46:19 -0700196#ifdef MOBILETEK_TARGET_PLATFORM_T106
197 char *tmp_char = NULL;
198 char *addresses = NULL;
199 char *dnses = NULL;
200 const char addresses_separator[2] = "/";
201 const char dnses_separator[2] = " ";
202
203 addresses = libdata->addresses;
204 dnses = libdata->dnses;
205 //get addresses
206 tmp_char = strsep(&addresses, addresses_separator);
207 if(tmp_char != NULL)
208 {
209 LYINFLOG("ipv4 addresses = %s", tmp_char);
210 inet_aton(tmp_char,&(data_res->v4.addr.ip));
211 }
212 //get dnses
213 tmp_char = strsep(&dnses, dnses_separator);
214 if(tmp_char != NULL)
215 {
216 LYINFLOG("ipv4 pri_dns = %s", tmp_char);
217 inet_aton(tmp_char,&(data_res->v4.addr.pri_dns));
218 }
219 tmp_char = strsep(&dnses, dnses_separator);
220 if(tmp_char != NULL)
221 {
222 LYINFLOG("ipv4 sec_dns = %s", tmp_char);
223 inet_aton(tmp_char, &(data_res->v4.addr.sec_dns));
224 }
225 //get gateway
226 LYINFLOG("ipv4 gateways = %s", libdata->gateways);
227 inet_aton(libdata->gateways,&(data_res->v4.addr.gateway));
228
229 LYINFLOG("v4.ip=%s", inet_ntoa(data_res->v4.addr.ip));
230 LYINFLOG("v4.pri_dns=%s", inet_ntoa(data_res->v4.addr.pri_dns));
231 LYINFLOG("v4.sec_dns=%s", inet_ntoa(data_res->v4.addr.sec_dns));
232#else
xf.li2fc84552023-06-23 05:26:47 -0700233 inet_aton(libdata->addresses,&(data_res->v4.addr.ip));
234 inet_aton(libdata->gateways,&(data_res->v4.addr.gateway));
235 inet_aton(libdata->dnses,&(data_res->v4.addr.pri_dns));
236 inet_aton(libdata->dnses,&(data_res->v4.addr.sec_dns));
xf.li3c0a4752023-09-03 20:46:19 -0700237#endif
xf.li2fc84552023-06-23 05:26:47 -0700238 data_res->v4.stats.pkts_tx = 0;
239 data_res->v4.stats.pkts_rx = 0;
240 data_res->v4.stats.bytes_tx = 0;
241 data_res->v4.stats.bytes_rx = 0;
242 data_res->v4.stats.pkts_dropped_tx = 0;
243 data_res->v4.stats.pkts_dropped_rx = 0;
244 return ;
245}
246
247void lynq_ipv6_inet_pton_getinfo(lynq_data_call_response_v11_t *libdata,qser_data_call_info_s *data_res)
248{
xf.li3c0a4752023-09-03 20:46:19 -0700249#ifdef MOBILETEK_TARGET_PLATFORM_T106
250 char *tmp_char = NULL;
251 char *addresses = NULL;
252 char *dnses = NULL;
253 const char addresses_separator[2] = "/";
254 const char dnses_separator[2] = " ";
255
256 addresses = libdata->addresses;
257 dnses = libdata->dnses;
258 //get addresses
259 tmp_char = strsep(&addresses, addresses_separator);
260 if(tmp_char != NULL)
261 {
262 LYINFLOG("ipv6 addresses = %s", tmp_char);
263 inet_pton(AF_INET6, tmp_char, &(data_res->v6.addr.ip));
264 }
265 //get dnses
266 tmp_char = strsep(&dnses, dnses_separator);
267 if(tmp_char != NULL)
268 {
269 LYINFLOG("ipv6 pri_dns = %s", tmp_char);
270 inet_pton(AF_INET6, tmp_char, &(data_res->v6.addr.pri_dns));
271 }
272 tmp_char = strsep(&dnses, dnses_separator);
273 if(tmp_char != NULL)
274 {
275 LYINFLOG("ipv6 sec_dns = %s", tmp_char);
276 inet_pton(AF_INET6, tmp_char, &(data_res->v6.addr.sec_dns));
277 }
278 inet_pton(AF_INET6,libdata->gateways,&(data_res->v6.addr.gateway));
279#else
xf.li2fc84552023-06-23 05:26:47 -0700280 inet_pton(AF_INET6,libdata->addresses,&(data_res->v6.addr.ip));
281 inet_pton(AF_INET6,libdata->gateways,&(data_res->v6.addr.gateway));
282 inet_pton(AF_INET6,libdata->dnses,&(data_res->v6.addr.pri_dns));
283 inet_pton(AF_INET6,libdata->dnses,&(data_res->v6.addr.sec_dns));
xf.li3c0a4752023-09-03 20:46:19 -0700284#endif
285 data_res->v6.stats.pkts_tx = 0;
286 data_res->v6.stats.pkts_rx = 0;
287 data_res->v6.stats.bytes_tx = 0;
288 data_res->v6.stats.bytes_rx = 0;
289 data_res->v6.stats.pkts_dropped_tx = 0;
290 data_res->v6.stats.pkts_dropped_rx = 0;
291 return ;
292}
293void lynq_ipv4v6_inet_pton_getinfo(lynq_data_call_response_v11_t *libdata,qser_data_call_info_s *data_res)
294{
295 char *tmp_char = NULL;
296 char *addresses = NULL;
297 char *dnses = NULL;
298 const char addresses_separator[2] = "/";
299 const char dnses_separator[2] = " ";
300
301 char buf_ip[64] = {0};
302 char buf_gateway[64] = {0};
303 char buf_pri_dns[64] = {0};
304 char buf_sec_dns[64] = {0};
305
306 addresses = libdata->addresses;
307 dnses = libdata->dnses;
308 //get addresses
309 tmp_char = strsep(&addresses, addresses_separator);
310 if(tmp_char != NULL)
311 {
312 LYINFLOG("ipv4 addresses = %s", tmp_char);
313 inet_aton(tmp_char,&(data_res->v4.addr.ip));
314 }
315 tmp_char = strsep(&addresses, addresses_separator);
316 if(tmp_char != NULL)
317 {
318 LYINFLOG("ipv6 addresses = %s", tmp_char);
319 inet_pton(AF_INET6, tmp_char, &(data_res->v6.addr.ip));
320 }
321 //get dnses
322 tmp_char = strsep(&dnses, dnses_separator);
323 if(tmp_char != NULL)
324 {
325 LYINFLOG("ipv4 pri_dns = %s", tmp_char);
326 inet_aton(tmp_char,&(data_res->v4.addr.pri_dns));
327 }
328 tmp_char = strsep(&dnses, dnses_separator);
329 if(tmp_char != NULL)
330 {
331 LYINFLOG("ipv4 sec_dns = %s", tmp_char);
332 inet_aton(tmp_char, &(data_res->v4.addr.sec_dns));
333 }
334 tmp_char = strsep(&dnses, dnses_separator);
335 if(tmp_char != NULL)
336 {
337 LYINFLOG("ipv6 pri_dns = %s", tmp_char);
338 inet_pton(AF_INET6, tmp_char, &(data_res->v6.addr.pri_dns));
339 }
340 tmp_char = strsep(&dnses, dnses_separator);
341 if(tmp_char != NULL)
342 {
343 LYINFLOG("ipv6 sec_dns = %s", tmp_char);
344 inet_pton(AF_INET6, tmp_char, &(data_res->v6.addr.sec_dns));
345 }
346 //get gateway
xf.li03baf1f2023-12-19 21:30:38 -0800347 inet_aton(libdata->gateways,&(data_res->v4.addr.gateway));
xf.li3c0a4752023-09-03 20:46:19 -0700348 inet_pton(AF_INET6,libdata->gateways,&(data_res->v6.addr.gateway));
349
350 LYINFLOG("v4.ip=%s", inet_ntoa(data_res->v4.addr.ip));
xf.li03baf1f2023-12-19 21:30:38 -0800351 LYINFLOG("ipv4 gateways = %s", inet_ntoa(data_res->v4.addr.gateway));
xf.li3c0a4752023-09-03 20:46:19 -0700352 LYINFLOG("v4.pri_dns=%s", inet_ntoa(data_res->v4.addr.pri_dns));
353 LYINFLOG("v4.sec_dns=%s", inet_ntoa(data_res->v4.addr.sec_dns));
354
355 inet_ntop(AF_INET6, &(data_res->v6.addr.ip), buf_ip, sizeof(buf_ip));
356 inet_ntop(AF_INET6, &(data_res->v6.addr.gateway), buf_gateway, sizeof(buf_gateway));
357 inet_ntop(AF_INET6, &(data_res->v6.addr.pri_dns), buf_pri_dns, sizeof(buf_pri_dns));
358 inet_ntop(AF_INET6, &(data_res->v6.addr.sec_dns), buf_sec_dns, sizeof(buf_sec_dns));
359 LYINFLOG("v6.ip=%s, v6.gateway=%s, v6.pri_dns=%s, v6.sec_dns=%s\n"
360 , buf_ip, buf_gateway, buf_pri_dns, buf_sec_dns);
361 data_res->v4.stats.pkts_tx = 0;
362 data_res->v4.stats.pkts_rx = 0;
363 data_res->v4.stats.bytes_tx = 0;
364 data_res->v4.stats.bytes_rx = 0;
365 data_res->v4.stats.pkts_dropped_tx = 0;
366 data_res->v4.stats.pkts_dropped_rx = 0;
367
xf.li2fc84552023-06-23 05:26:47 -0700368 data_res->v6.stats.pkts_tx = 0;
369 data_res->v6.stats.pkts_rx = 0;
370 data_res->v6.stats.bytes_tx = 0;
371 data_res->v6.stats.bytes_rx = 0;
372 data_res->v6.stats.pkts_dropped_tx = 0;
373 data_res->v6.stats.pkts_dropped_rx = 0;
374 return ;
375}
376
377void datacall_ipv4_status_judge(int state,qser_data_call_info_s *data_res)
378{
xf.lib5dc0632023-11-30 18:20:35 -0800379 if(state != 0)
xf.li2fc84552023-06-23 05:26:47 -0700380 {
381 data_res->v4.state = QSER_DATA_CALL_CONNECTED;
382 data_res->v4.reconnect = 1;
383 }
384 else
385 {
386 data_res->v4.state = QSER_DATA_CALL_DISCONNECTED;
387 data_res->v4.reconnect = 0;
388 }
389 return ;
390}
391
392void datacall_ipv6_status_judge(int state,qser_data_call_info_s *data_res)
393{
xf.lib5dc0632023-11-30 18:20:35 -0800394 if(state != 0)
xf.li2fc84552023-06-23 05:26:47 -0700395 {
396 data_res->v6.state = QSER_DATA_CALL_CONNECTED;
397 data_res->v6.reconnect = 1;
398 }
399 else
400 {
401 data_res->v6.state = QSER_DATA_CALL_DISCONNECTED;
402 data_res->v6.reconnect = 0;
403 }
404 return ;
405}
406
xf.li0fd6acf2023-12-20 18:16:34 -0800407int apn_xml_handle_get_profile(int handle, unsigned char *profile_idx)
408{
409 //xmlDocPtr apn_table_xml_pdoc = NULL;
410 xmlNodePtr node = NULL;
411 xmlNodePtr modify_node = NULL;
412 unsigned char temp = NULL;
413 //apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
414 if(NULL == apn_table_xml_pdoc)
415 {
416 LYERRLOG("open xml file error");
417 goto FAILED;
418 }
419
420 node = xmlDocGetRootElement(apn_table_xml_pdoc);
421 if (NULL == node)
422 {
423 LYERRLOG("xmlDocGetRootElement() error");
424 goto FAILED;
425 }
426 modify_node = node->xmlChildrenNode;
427 if(modify_node != NULL)
428 {
429 modify_node = modify_node->next;
430 }
431 else
432 {
433 LYERRLOG("modify_node is null\n");
434 goto FAILED;
435 }
436 for (;;)
437 {
438 if(modify_node == NULL)
439 {
440 LYERRLOG("modify_node is null\n");
441 goto FAILED;
442 }
443 if (xmlGetProp(modify_node, "handle") == NULL) //Null Node
444 {
445 modify_node = modify_node->next;
446 continue;
447 }
448 else if((int)atoi(xmlGetProp(modify_node, "handle")) == handle)
449 {
450 break;
451 }
452 modify_node = modify_node->next;
453 }
454 if(modify_node == NULL)
455 {
456 LYERRLOG("modify_node is null\n");
457 goto FAILED;
458 }
459 *profile_idx = (unsigned char)atoi(xmlGetProp(modify_node, "profile_idx"));
460 //xmlFreeDoc(apn_table_xml_pdoc);
461 return RESULT_OK;
462
463 FAILED:
464 // if (apn_table_xml_pdoc)
465 // {
466 // xmlFreeDoc(apn_table_xml_pdoc);
467 // }
468 return RESULT_ERROR;
469}
470int apn_xml_handle_set(unsigned char profile_idx, int handle)
471{
472 int node_num = 0;
473 char temp_buff[12];
474 //xmlDocPtr apn_table_xml_pdoc = NULL;
475 xmlNodePtr node = NULL;
476 xmlNodePtr modify_node = NULL;
477 xmlNodePtr check_node = NULL;
478 //apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
479 if(NULL == apn_table_xml_pdoc)
480 {
481 LYERRLOG("open xml file error");
482 goto FAILED;
483 }
484 node = xmlDocGetRootElement(apn_table_xml_pdoc);
485 if (NULL == node)
486 {
487 LYERRLOG("xmlDocGetRootElement() error");
488 goto FAILED;
489 }
490 modify_node = node->xmlChildrenNode;
491 if(modify_node != NULL)
492 {
493 modify_node = modify_node->next;
494 }
495 else
496 {
497 LYERRLOG("modify_node is null\n");
498 goto FAILED;
499 }
500 for (;;)
501 {
502 if(modify_node == NULL)
503 {
504 LYERRLOG("modify_node is null\n");
505 goto FAILED;
506 }
507 if (xmlGetProp(modify_node, "profile_idx") == NULL) //Null Node
508 {
509 modify_node = modify_node->next;
510 node_num--;
511 continue;
512 }
513 else if((int)atoi(xmlGetProp(modify_node, "profile_idx")) == (int)profile_idx)
514 {
515 break;
516 }
517 modify_node = modify_node->next;
518 }
519 if(modify_node == NULL)
520 {
521 LYERRLOG("modify_node is null\n");
522 goto FAILED;
523 }
524 bzero(temp_buff,12);
525 snprintf(temp_buff,sizeof(temp_buff),"%d",handle);
526 xmlSetProp(modify_node,BAD_CAST"handle",(xmlChar *)temp_buff);
527 xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
528 //xmlFreeDoc(apn_table_xml_pdoc);
529 return RESULT_OK;
530
531 FAILED:
532 // if (apn_table_xml_pdoc)
533 // {
534 // xmlFreeDoc(apn_table_xml_pdoc);
535 // }
536 return RESULT_ERROR;
537}
538int apn_xml_handle_get(unsigned char profile_idx, int *handle)
539{
540 int node_num = 0;
541 //xmlDocPtr apn_table_xml_pdoc = NULL;
542 xmlNodePtr node = NULL;
543 xmlNodePtr modify_node = NULL;
544 unsigned char temp = NULL;
545 //apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
546 if(NULL == apn_table_xml_pdoc)
547 {
548 LYERRLOG("open xml file error");
549 goto FAILED;
550 }
551
552 node = xmlDocGetRootElement(apn_table_xml_pdoc);
553 if (NULL == node)
554 {
555 LYERRLOG("xmlDocGetRootElement() error");
556 goto FAILED;
557 }
558 modify_node = node->xmlChildrenNode;
559 if(modify_node != NULL)
560 {
561 modify_node = modify_node->next;
562 }
563 else
564 {
565 LYERRLOG("modify_node is null\n");
566 goto FAILED;
567 }
568 LYINFLOG("profile_idx is %d\n", (int)profile_idx);
569 for (;;)
570 {
571 if(modify_node == NULL)
572 {
573 LYERRLOG("modify_node is null\n");
574 goto FAILED;
575 }
576 if (xmlGetProp(modify_node, "profile_idx") == NULL) //Null Node
577 {
578 modify_node = modify_node->next;
579 node_num--;
580 continue;
581 }
582 else if((int)atoi(xmlGetProp(modify_node, "profile_idx")) == (int)profile_idx)
583 {
584 break;
585 }
586 modify_node = modify_node->next;
587 }
588 if(modify_node == NULL)
589 {
590 LYERRLOG("modify_node is null\n");
591 goto FAILED;
592 }
593 *handle = (int)atoi(xmlGetProp(modify_node, "handle"));
594 xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
595 //xmlFreeDoc(apn_table_xml_pdoc);
596 return RESULT_OK;
597
598 FAILED:
599 // if (apn_table_xml_pdoc)
600 // {
601 // xmlFreeDoc(apn_table_xml_pdoc);
602 // }
603 return RESULT_ERROR;
604}
xf.li2fc84552023-06-23 05:26:47 -0700605
xf.li63b87e82024-01-04 00:43:35 -0800606int apn_xml_handle_clean()
607{
608 int node_num = 0;
609 int default_handle = LYNQ_APN_CHANNEL_MAX + 1;
610 xmlNodePtr node = NULL;
611 xmlNodePtr modify_node = NULL;
612 xmlChar *temp_char;
613 char temp_buff[12];
614
615 if(NULL == apn_table_xml_pdoc)
616 {
617 LYERRLOG("open xml file error");
618 goto FAILED;
619 }
620
621 node = xmlDocGetRootElement(apn_table_xml_pdoc);
622 if (NULL == node)
623 {
624 LYERRLOG("xmlDocGetRootElement() error");
625 goto FAILED;
626 }
627 modify_node = node->xmlChildrenNode;
628 if(modify_node != NULL)
629 {
630 modify_node = modify_node->next;
631 }
632 else
633 {
634 LYERRLOG("modify_node is null\n");
635 goto FAILED;
636 }
637 while (modify_node != NULL)
638 {
639 temp_char = xmlGetProp(modify_node, "handle");
640 if (temp_char == NULL)
641 {
642 modify_node = modify_node->next;
643 continue;
644 }
645 bzero(temp_buff,12);
646 snprintf(temp_buff,sizeof(temp_buff),"%d",default_handle);
647 xmlSetProp(modify_node,BAD_CAST"handle",(xmlChar *)temp_buff);
648 modify_node = modify_node->next;
649 }
650 xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
651 return RESULT_OK;
652
653 FAILED:
654 // if (apn_table_xml_pdoc)
655 // {
656 // xmlFreeDoc(apn_table_xml_pdoc);
657 // }
658 return RESULT_ERROR;
659}
660
xf.li2fc84552023-06-23 05:26:47 -0700661int apn_xml_add(qser_apn_add_s *apn,unsigned char *apn_num)
662{
663 int node_num = 0;
664 char temp_buff[12];
xf.li0fd6acf2023-12-20 18:16:34 -0800665 int default_handle = LYNQ_APN_CHANNEL_MAX + 1;
xf.lie3f55f42023-12-01 22:47:33 -0800666 //xmlDocPtr apn_table_xml_pdoc = NULL;
xf.li2fc84552023-06-23 05:26:47 -0700667 xmlNodePtr node = NULL;
668 xmlNodePtr tmp_node = NULL;
669 xmlNodePtr sum_node = NULL;
xf.lie3f55f42023-12-01 22:47:33 -0800670
671// apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
672 if(NULL == apn_table_xml_pdoc)
xf.li2fc84552023-06-23 05:26:47 -0700673 {
674 LYERRLOG("open xml file error");
675 goto FAILED;
676 }
677
xf.lie3f55f42023-12-01 22:47:33 -0800678 node = xmlDocGetRootElement(apn_table_xml_pdoc);
xf.li2fc84552023-06-23 05:26:47 -0700679 if (NULL == node)
680 {
681 LYERRLOG("xmlDocGetRootElement() error");
682 goto FAILED;
683 }
684 sum_node = node->xmlChildrenNode;
685 sum_node = sum_node->next;
686 while (sum_node != NULL)
687 {
688 if (xmlGetProp(sum_node, "profile_idx") == NULL) //Null Node
689 {
690 sum_node = sum_node->next;
691 continue;
692 }
xf.lif7c68e32023-10-10 23:18:42 -0700693 else if(strcmp((char *)xmlGetProp(sum_node, "apn_type"), apn->apn_type) == 0)
694 {
695 LYERRLOG("apntype already exists\n");
696 goto FAILED;
697 }
xf.li2fc84552023-06-23 05:26:47 -0700698 node_num++;
699 sum_node = sum_node->next;
700 }
xf.li3f891cb2023-08-23 23:11:24 -0700701 LYINFLOG("apn_num = %d ",node_num);
702 if(node_num >= QSER_APN_MAX_LIST)
703 {
704 LYERRLOG("apn num reached the max");
705 goto FAILED;
706 }
xf.li2fc84552023-06-23 05:26:47 -0700707 tmp_node = xmlNewNode(NULL,BAD_CAST"apn");
708 *apn_num = node_num;
xf.li2fc84552023-06-23 05:26:47 -0700709 bzero(temp_buff,12);
710 snprintf(temp_buff,sizeof(temp_buff),"%d",*apn_num);
711 xmlNewProp(tmp_node,BAD_CAST"profile_idx",(xmlChar *)temp_buff);
712 bzero(temp_buff,12);
713 snprintf(temp_buff,sizeof(temp_buff),"%d",apn->pdp_type);
714 xmlNewProp(tmp_node,BAD_CAST"pdp_type",(xmlChar *)temp_buff);
715 bzero(temp_buff,12);
716 snprintf(temp_buff,sizeof(temp_buff),"%d",apn->auth_proto);
717 xmlNewProp(tmp_node,BAD_CAST"auth_proto",(xmlChar *)temp_buff);
718 xmlNewProp(tmp_node,BAD_CAST"apn_name",(xmlChar *)apn->apn_name);
719 xmlNewProp(tmp_node,BAD_CAST"username",(xmlChar *)apn->username);
720 xmlNewProp(tmp_node,BAD_CAST"password",(xmlChar *)apn->password);
721 xmlNewProp(tmp_node,BAD_CAST"apn_type",(xmlChar *)apn->apn_type);
xf.li0fd6acf2023-12-20 18:16:34 -0800722 bzero(temp_buff,12);
723 snprintf(temp_buff,sizeof(temp_buff),"%d",default_handle);
724 xmlNewProp(tmp_node,BAD_CAST"handle",(xmlChar *)temp_buff);
xf.li2fc84552023-06-23 05:26:47 -0700725 xmlAddChild(node,tmp_node);
xf.lie3f55f42023-12-01 22:47:33 -0800726 xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
727
728// xmlFreeDoc(apn_table_xml_pdoc);
xf.li2fc84552023-06-23 05:26:47 -0700729 return RESULT_OK;
730
731 FAILED:
xf.lie3f55f42023-12-01 22:47:33 -0800732 /* if (apn_table_xml_pdoc)
xf.li2fc84552023-06-23 05:26:47 -0700733 {
xf.lie3f55f42023-12-01 22:47:33 -0800734 xmlFreeDoc(apn_table_xml_pdoc);
735 }*/
xf.li2fc84552023-06-23 05:26:47 -0700736 return RESULT_ERROR;
737}
738
739int apn_xml_delete(unsigned char profile_idx)
740{
741 int node_num = 0;
742 char temp_buff[12];
xf.lie3f55f42023-12-01 22:47:33 -0800743 //xmlDocPtr apn_table_xml_pdoc = NULL;
xf.li2fc84552023-06-23 05:26:47 -0700744 xmlNodePtr node = NULL;
745 xmlNodePtr modify_node = NULL;
xf.lie3f55f42023-12-01 22:47:33 -0800746 // apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
747 if(NULL == apn_table_xml_pdoc)
xf.li2fc84552023-06-23 05:26:47 -0700748 {
749 LYERRLOG("open xml file error");
750 goto FAILED;
751 }
752
xf.lie3f55f42023-12-01 22:47:33 -0800753 node = xmlDocGetRootElement(apn_table_xml_pdoc);
xf.li2fc84552023-06-23 05:26:47 -0700754 if (NULL == node)
755 {
756 LYERRLOG("xmlDocGetRootElement() error");
757 goto FAILED;
758 }
759 modify_node = node->xmlChildrenNode;
xf.li029a9e72023-11-04 02:29:45 -0700760 if(modify_node != NULL)
761 {
762 modify_node = modify_node->next;
763 }
764 else
765 {
766 LYERRLOG("modify_node is null\n");
767 goto FAILED;
768 }
xf.li2fc84552023-06-23 05:26:47 -0700769 for (node_num=0 ;node_num<(int)profile_idx ; node_num++)
770 {
xf.li029a9e72023-11-04 02:29:45 -0700771 if(modify_node == NULL)
772 {
773 LYERRLOG("modify_node is null\n");
774 goto FAILED;
775 }
xf.li2fc84552023-06-23 05:26:47 -0700776 if (xmlGetProp(modify_node, "profile_idx") == NULL) //Null Node
777 {
778 modify_node = modify_node->next;
779 node_num--;
780 continue;
781 }
782 modify_node = modify_node->next;
783 }
xf.li029a9e72023-11-04 02:29:45 -0700784 if(modify_node == NULL)
785 {
786 LYERRLOG("modify_node is null\n");
787 goto FAILED;
788 }
xf.li2fc84552023-06-23 05:26:47 -0700789 xmlUnlinkNode(modify_node);
790 xmlFreeNode(modify_node);
791 modify_node = NULL;
792 node_num = 0;
793 modify_node = node->xmlChildrenNode;
794 modify_node = modify_node->next;
795 while (modify_node != NULL)
796 {
797 if (xmlGetProp(modify_node, "profile_idx") == NULL) //Null Node
798 {
799 modify_node = modify_node->next;
800 continue;
801 }
802 bzero(temp_buff,12);
803 snprintf(temp_buff,sizeof(temp_buff),"%d",node_num);
804 xmlSetProp(modify_node,BAD_CAST"profile_idx",(xmlChar *)temp_buff);
805 modify_node = modify_node->next;
806 node_num++;
807 }
xf.lie3f55f42023-12-01 22:47:33 -0800808 xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
809// xmlFreeDoc(apn_table_xml_pdoc);
xf.li2fc84552023-06-23 05:26:47 -0700810 return RESULT_OK;
811
812 FAILED:
xf.lie3f55f42023-12-01 22:47:33 -0800813 // if (apn_table_xml_pdoc)
814 // {
815 // xmlFreeDoc(apn_table_xml_pdoc);
816 // }
xf.li2fc84552023-06-23 05:26:47 -0700817 return RESULT_ERROR;
818}
819
820int apn_xml_modify(qser_apn_info_s *apn)
821{
822 int node_num = 0;
823 char temp_buff[12];
xf.lie3f55f42023-12-01 22:47:33 -0800824 //xmlDocPtr apn_table_xml_pdoc = NULL;
xf.li2fc84552023-06-23 05:26:47 -0700825 xmlNodePtr node = NULL;
826 xmlNodePtr modify_node = NULL;
xf.li4b18fa62023-12-19 19:38:10 -0800827 xmlNodePtr check_node = NULL;
xf.lie3f55f42023-12-01 22:47:33 -0800828// apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
829 if(NULL == apn_table_xml_pdoc)
xf.li2fc84552023-06-23 05:26:47 -0700830 {
831 LYERRLOG("open xml file error");
832 goto FAILED;
833 }
834
xf.lie3f55f42023-12-01 22:47:33 -0800835 node = xmlDocGetRootElement(apn_table_xml_pdoc);
xf.li2fc84552023-06-23 05:26:47 -0700836 if (NULL == node)
837 {
838 LYERRLOG("xmlDocGetRootElement() error");
839 goto FAILED;
840 }
841 modify_node = node->xmlChildrenNode;
xf.lifb8bf042023-12-13 18:09:49 -0800842 if(modify_node != NULL)
843 {
844 modify_node = modify_node->next;
845 }
846 else
847 {
848 LYERRLOG("modify_node is null\n");
849 goto FAILED;
850 }
xf.li4b18fa62023-12-19 19:38:10 -0800851 //check apn_type
852 check_node = modify_node;
xf.li3a971c32024-01-17 19:38:56 -0800853 bzero(temp_buff,12);
854 snprintf(temp_buff,sizeof(temp_buff),"%d",(unsigned int)apn->profile_idx);
xf.li4b18fa62023-12-19 19:38:10 -0800855 while (check_node != NULL)
856 {
857 if (xmlGetProp(check_node, "profile_idx") == NULL) //Null Node
858 {
859 check_node = check_node->next;
860 continue;
861 }
862 else if(strcmp((char *)xmlGetProp(check_node, "apn_type"), apn->apn_type) == 0)
863 {
xf.li3a971c32024-01-17 19:38:56 -0800864 if(strcmp((char *)xmlGetProp(check_node, "profile_idx"), temp_buff) == 0)
865 {
866 check_node = check_node->next;
867 continue;
868 }
xf.li4b18fa62023-12-19 19:38:10 -0800869 LYERRLOG("apntype already exists\n");
870 goto FAILED;
871 }
872 check_node = check_node->next;
873 }
874 //check apn_type end
xf.li2fc84552023-06-23 05:26:47 -0700875 for (node_num=0; node_num<(int)apn->profile_idx;node_num++)
876 {
xf.lifb8bf042023-12-13 18:09:49 -0800877 if(modify_node == NULL)
878 {
879 LYERRLOG("modify_node is null\n");
880 goto FAILED;
881 }
xf.li2fc84552023-06-23 05:26:47 -0700882 if (xmlGetProp(modify_node, "profile_idx") == NULL) //Null Node
883 {
884 modify_node = modify_node->next;
885 node_num--;
886 continue;
887 }
888 modify_node = modify_node->next;
889 }
xf.lifb8bf042023-12-13 18:09:49 -0800890 if(modify_node == NULL)
891 {
892 LYERRLOG("modify_node is null\n");
893 goto FAILED;
894 }
xf.li2fc84552023-06-23 05:26:47 -0700895 bzero(temp_buff,12);
896 snprintf(temp_buff,sizeof(temp_buff),"%d",node_num);
897 xmlSetProp(modify_node,BAD_CAST"profile_idx",(xmlChar *)temp_buff);
898 bzero(temp_buff,12);
899 snprintf(temp_buff,sizeof(temp_buff),"%d",apn->pdp_type);
900 xmlSetProp(modify_node,BAD_CAST"pdp_type",(xmlChar *)temp_buff);
901 bzero(temp_buff,12);
902 snprintf(temp_buff,sizeof(temp_buff),"%d",apn->auth_proto);
903 xmlSetProp(modify_node,BAD_CAST"auth_proto",(xmlChar *)temp_buff);
904 xmlSetProp(modify_node,BAD_CAST"apn_name",(xmlChar *)apn->apn_name);
905 xmlSetProp(modify_node,BAD_CAST"username",(xmlChar *)apn->username);
906 xmlSetProp(modify_node,BAD_CAST"password",(xmlChar *)apn->password);
907 xmlSetProp(modify_node,BAD_CAST"apn_type",(xmlChar *)apn->apn_type);
xf.lie3f55f42023-12-01 22:47:33 -0800908 xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
909// xmlFreeDoc(apn_table_xml_pdoc);
xf.li2fc84552023-06-23 05:26:47 -0700910 return RESULT_OK;
911
912 FAILED:
xf.lie3f55f42023-12-01 22:47:33 -0800913 // if (apn_table_xml_pdoc)
914 // {
915 // xmlFreeDoc(apn_table_xml_pdoc);
916 // }
xf.li2fc84552023-06-23 05:26:47 -0700917 return RESULT_ERROR;
918}
919
920
921int apn_xml_query(unsigned char profile_idx,qser_apn_info_s *apn)
922{
923 int node_num = 0;
xf.lie3f55f42023-12-01 22:47:33 -0800924 //xmlDocPtr apn_table_xml_pdoc = NULL;
xf.li2fc84552023-06-23 05:26:47 -0700925 xmlNodePtr node = NULL;
926 xmlNodePtr modify_node = NULL;
927 unsigned char temp = NULL;
xf.lie3f55f42023-12-01 22:47:33 -0800928// apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
929 if(NULL == apn_table_xml_pdoc)
xf.li2fc84552023-06-23 05:26:47 -0700930 {
931 LYERRLOG("open xml file error");
932 goto FAILED;
933 }
934
xf.lie3f55f42023-12-01 22:47:33 -0800935 node = xmlDocGetRootElement(apn_table_xml_pdoc);
xf.li2fc84552023-06-23 05:26:47 -0700936 if (NULL == node)
937 {
938 LYERRLOG("xmlDocGetRootElement() error");
939 goto FAILED;
940 }
941 modify_node = node->xmlChildrenNode;
xf.libf9df4c2023-07-02 02:42:35 -0700942 if(modify_node != NULL)
xf.li2fc84552023-06-23 05:26:47 -0700943 {
xf.libf9df4c2023-07-02 02:42:35 -0700944 modify_node = modify_node->next;
945 }
946 else
947 {
948 LYERRLOG("modify_node is null\n");
949 goto FAILED;
950 }
951 LYINFLOG("profile_idx is %d\n", (int)profile_idx);
952 for (node_num = 0;(node_num<(int)profile_idx);node_num++)
953 {
954 if(modify_node == NULL)
955 {
956 LYERRLOG("modify_node is null\n");
957 goto FAILED;
958 }
xf.li2fc84552023-06-23 05:26:47 -0700959 if (xmlGetProp(modify_node, "profile_idx") == NULL) //Null Node
960 {
961 modify_node = modify_node->next;
962 node_num--;
963 continue;
964 }
965 modify_node = modify_node->next;
xf.li029a9e72023-11-04 02:29:45 -0700966 }
967 if(modify_node == NULL)
968 {
969 LYERRLOG("modify_node is null\n");
970 goto FAILED;
xf.li2fc84552023-06-23 05:26:47 -0700971 }
972 apn->profile_idx = (unsigned char)atoi(xmlGetProp(modify_node, "profile_idx"));
973 apn->pdp_type = (qser_apn_pdp_type_e)atoi(xmlGetProp(modify_node, "pdp_type"));
974 apn->auth_proto = (qser_apn_auth_proto_e)atoi(xmlGetProp(modify_node, "auth_proto"));
xf.li6c7e3972023-10-27 20:01:59 -0700975 strncpy(apn->apn_name,(char *)xmlGetProp(modify_node, "apn_name"), QSER_APN_NAME_SIZE);
976 strncpy(apn->username,(char *)xmlGetProp(modify_node, "username"), QSER_APN_USERNAME_SIZE);
977 strncpy(apn->password,(char *)xmlGetProp(modify_node, "password"), QSER_APN_PASSWORD_SIZE);
978 strncpy(apn->apn_type,(char *)xmlGetProp(modify_node, "apn_type"), QSER_APN_NAME_SIZE);
xf.lie3f55f42023-12-01 22:47:33 -0800979// xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
980// xmlFreeDoc(apn_table_xml_pdoc);
xf.li2fc84552023-06-23 05:26:47 -0700981 return RESULT_OK;
982
983 FAILED:
xf.lie3f55f42023-12-01 22:47:33 -0800984 // if (apn_table_xml_pdoc)
985 // {
986 // xmlFreeDoc(apn_table_xml_pdoc);
987 // }
xf.li2fc84552023-06-23 05:26:47 -0700988 return RESULT_ERROR;
989}
990
991int apn_xml_query_list(qser_apn_info_list_s *apn_list)
992{
993 int node_num = 0;
xf.lie3f55f42023-12-01 22:47:33 -0800994 //xmlDocPtr apn_table_xml_pdoc = NULL;
xf.li2fc84552023-06-23 05:26:47 -0700995 xmlNodePtr node = NULL;
996 xmlNodePtr modify_node = NULL;
997 xmlChar *temp_char;
998 char temp[64];
xf.lie3f55f42023-12-01 22:47:33 -0800999// apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
1000 if(NULL == apn_table_xml_pdoc)
xf.li2fc84552023-06-23 05:26:47 -07001001 {
1002 LYERRLOG("open xml file error");
1003 goto FAILED;
1004 }
1005
xf.lie3f55f42023-12-01 22:47:33 -08001006 node = xmlDocGetRootElement(apn_table_xml_pdoc);
xf.li2fc84552023-06-23 05:26:47 -07001007 if (NULL == node)
1008 {
1009 LYERRLOG("xmlDocGetRootElement() error");
1010 goto FAILED;
1011 }
1012 modify_node = node->xmlChildrenNode;
1013 modify_node = modify_node->next;
1014 while (modify_node != NULL)
1015 {
1016 temp_char = xmlGetProp(modify_node, "profile_idx");
1017 if (temp_char == NULL)
1018 {
1019 modify_node = modify_node->next;
1020 continue;
1021 }
1022 sprintf(temp,"%s",temp_char);
1023 apn_list->apn[node_num].profile_idx = (unsigned char)atoi(temp);
1024 apn_list->apn[node_num].pdp_type = (qser_apn_pdp_type_e)atoi(xmlGetProp(modify_node, "pdp_type"));
1025 apn_list->apn[node_num].auth_proto = (qser_apn_auth_proto_e)atoi(xmlGetProp(modify_node, "auth_proto"));
xf.li6c7e3972023-10-27 20:01:59 -07001026 strncpy(apn_list->apn[node_num].apn_name,(char *)xmlGetProp(modify_node, "apn_name"), QSER_APN_NAME_SIZE);
1027 strncpy(apn_list->apn[node_num].username,(char *)xmlGetProp(modify_node, "username"), QSER_APN_USERNAME_SIZE);
1028 strncpy(apn_list->apn[node_num].password,(char *)xmlGetProp(modify_node, "password"), QSER_APN_PASSWORD_SIZE);
1029 strncpy(apn_list->apn[node_num].apn_type,(char *)xmlGetProp(modify_node, "apn_type"), QSER_APN_NAME_SIZE);
xf.li2fc84552023-06-23 05:26:47 -07001030 node_num ++;
1031 modify_node = modify_node->next;
1032 }
1033 apn_list->cnt = node_num;
xf.lie3f55f42023-12-01 22:47:33 -08001034// xmlSaveFormatFileEnc(data_xml_path, apn_table_xml_pdoc, "UTF-8", 1);
1035// xmlFreeDoc(apn_table_xml_pdoc);
xf.li2fc84552023-06-23 05:26:47 -07001036 return RESULT_OK;
1037
1038 FAILED:
xf.lie3f55f42023-12-01 22:47:33 -08001039 // if (apn_table_xml_pdoc)
1040 // {
1041 // xmlFreeDoc(apn_table_xml_pdoc);
1042 // }
xf.li2fc84552023-06-23 05:26:47 -07001043 return RESULT_ERROR;
1044}
1045
1046void judge_pdp_type(qser_apn_pdp_type_e pdp_type,char *out_pdp_type)
1047{
1048 switch (pdp_type)
1049 {
1050 case QSER_APN_PDP_TYPE_IPV4:
xf.li9e27f3d2023-11-30 00:43:13 -08001051#ifdef MOBILETEK_TARGET_PLATFORM_T106
1052 strcpy(out_pdp_type,"IP");
1053#else
xf.li2fc84552023-06-23 05:26:47 -07001054 strcpy(out_pdp_type,"IPV4");
xf.li9e27f3d2023-11-30 00:43:13 -08001055#endif
xf.li2fc84552023-06-23 05:26:47 -07001056 break;
1057 case QSER_APN_PDP_TYPE_PPP:
1058 strcpy(out_pdp_type,"PPP");
1059 break;
1060 case QSER_APN_PDP_TYPE_IPV6:
1061 strcpy(out_pdp_type,"IPV6");
1062 break;
1063 case QSER_APN_PDP_TYPE_IPV4V6:
1064 strcpy(out_pdp_type,"IPV4V6");
1065 break;
1066 default:
1067 strcpy(out_pdp_type,"NULL");
1068 break;
1069 }
1070 return;
1071}
1072void judge_authtype(qser_apn_auth_proto_e auth_proto,char *out_proto)
1073{
1074 switch (auth_proto)
1075 {
1076 case QSER_APN_AUTH_PROTO_DEFAULT:
1077 strcpy(out_proto,"NULL;authType=0");
1078 break;
1079 case QSER_APN_AUTH_PROTO_NONE:
1080 strcpy(out_proto,"NULL;authType=1");
1081 break;
1082 case QSER_APN_AUTH_PROTO_PAP:
1083 strcpy(out_proto,"NULL;authType=2");
1084 break;
1085 case QSER_APN_AUTH_PROTO_CHAP:
1086 strcpy(out_proto,"NULL;authtype=3");
1087 break;
1088 case QSER_APN_AUTH_PROTO_PAP_CHAP:
1089 strcpy(out_proto,"NULL;authtype=4");
1090 break;
1091 default:
1092 strcpy(out_proto,"NULL;authType=NULL");
1093 break;
1094 }
1095 return ;
1096}
1097
1098int data_call_handle_get(const char profile_idx,int *handle)
1099{
1100 int num = LYNQ_APN_CHANNEL_MAX;
1101 int table_num = 0;
1102 lynq_apn_info **apn_table = NULL;
1103 qser_apn_info_s apn;
xf.li0fc26502023-09-16 02:10:17 -07001104 int ret = 0;
xf.li2fc84552023-06-23 05:26:47 -07001105 apn_table = (lynq_apn_info **)malloc(sizeof(lynq_apn_info *)*LYNQ_APN_CHANNEL_MAX);
1106 if (NULL == apn_table)
1107 {
1108 LYERRLOG("malloc apn_table fail ");
1109 return RESULT_ERROR;
1110 }
1111 for(int i =0;i<10;i++)
1112 {
1113 apn_table[i] = (lynq_apn_info*)malloc(sizeof(lynq_apn_info));
1114 if (apn_table[i]==NULL)
1115 {
1116 for (int n=0;n<i;n++)
1117 {
1118 free(apn_table[n]);
1119 }
1120 return RESULT_ERROR;
1121 }
1122 memset(apn_table[i],0,sizeof(lynq_apn_info));
1123 }
1124 lynq_get_apn_table(&table_num,apn_table);
1125 memset(&apn,0,sizeof(qser_apn_info_s));
xf.li0fc26502023-09-16 02:10:17 -07001126 ret = apn_xml_query(profile_idx,&apn);
1127 if (ret < 0)
1128 {
1129 LYERRLOG("apn_xml_query error");
1130 return ret;
1131 }
xf.li2fc84552023-06-23 05:26:47 -07001132 for (int j = 0;j < table_num;j++)
1133 {
1134 if (strcmp(apn.apn_type,apn_table[j]->apnType) == 0)
1135 {
1136 *handle = apn_table[j]->index;
1137 LYINFLOG("apn_table->index:%d,handle:%d ",apn_table[j]->index,*handle);
1138 break;
1139 }
1140 }
1141
1142 for (int i = 0; i < LYNQ_APN_CHANNEL_MAX; i++)
1143 {
1144 if (apn_table[i]!=NULL)
1145 {
1146 free(apn_table[i]);
1147 apn_table[i]=NULL;
1148 }
1149 }
1150 free(apn_table);
1151 apn_table=NULL;
1152 LYINFLOG("data_call_handle_get end");
1153 return RESULT_OK;
1154}
1155
1156void *thread_wait_cb_status(void)
1157{
1158 int handle = -1;
xf.li6b0d8502023-09-04 18:49:12 -07001159 int ret = 0;
xf.li0fd6acf2023-12-20 18:16:34 -08001160 int default_handle = LYNQ_APN_CHANNEL_MAX + 1;
xf.li8535bc02023-12-12 23:28:35 -08001161 lynq_data_call_response_v11_t data_urc_info = {0};
xf.li2fc84552023-06-23 05:26:47 -07001162 qser_data_call_state_s data_cb_state;
1163 while (s_qser_data_cb_thread_status)
1164 {
xf.li6b0d8502023-09-04 18:49:12 -07001165 ret = lynq_wait_data_call_state_change(&handle);
1166 LYINFLOG("ret = %d, wait data call state change end!!!\n", ret);
1167 if(s_qser_data_cb_thread_status == 0)
1168 {
1169 return NULL;
1170 }
1171 else if(ret < 0)
1172 {
1173 continue;
1174 }
xf.li8535bc02023-12-12 23:28:35 -08001175 LYINFLOG("[thread_wait_cb_status]: handle = %d", handle);
1176 memset(&data_urc_info, 0, sizeof(data_urc_info));
1177 memset(&data_cb_state, 0, sizeof(data_cb_state));
xf.li2fc84552023-06-23 05:26:47 -07001178 lynq_get_data_call_list(&handle,&data_urc_info);
1179 /*compare paramter*/
xf.li0fd6acf2023-12-20 18:16:34 -08001180 //data_cb_state.profile_idx = (char)handle;
1181 apn_xml_handle_get_profile(handle, &data_cb_state.profile_idx);
xf.li8535bc02023-12-12 23:28:35 -08001182 LYINFLOG("[thread_wait_cb_status]: status=%d, suggestedRetryTime=%d, cid=%d, active=%d, type=%s, ifname=%s, addresses=%s, dnses=%s, gateways=%s, pcscf=%s, mtu=%d\n",
1183 data_urc_info.status, data_urc_info.suggestedRetryTime, data_urc_info.cid, data_urc_info.active,
1184 data_urc_info.type, data_urc_info.ifname, data_urc_info.addresses, data_urc_info.dnses, data_urc_info.gateways, data_urc_info.pcscf,
1185 data_urc_info.mtu);
xf.li2fc84552023-06-23 05:26:47 -07001186 memcpy(data_cb_state.name,data_urc_info.ifname,strlen(data_urc_info.ifname)+1);
xf.li9e27f3d2023-11-30 00:43:13 -08001187 if ((strcmp(data_urc_info.type,"IPV4") == 0) || (strcmp(data_urc_info.type,"IP") == 0))
xf.li2fc84552023-06-23 05:26:47 -07001188 {
1189 data_cb_state.ip_family = QSER_DATA_CALL_TYPE_IPV4;
1190 }
1191 else if (!strcmp(data_urc_info.type,"IPV6"))
1192 {
1193 data_cb_state.ip_family = QSER_DATA_CALL_TYPE_IPV6;
1194 }
xf.li8535bc02023-12-12 23:28:35 -08001195 else if (!strcmp(data_urc_info.type,"IPV4V6"))
xf.li2fc84552023-06-23 05:26:47 -07001196 {
1197 data_cb_state.ip_family = QSER_DATA_CALL_TYPE_IPV4V6;
1198 }
1199 else
1200 {
xf.li8535bc02023-12-12 23:28:35 -08001201 LYERRLOG("unknow data call type: %s", data_urc_info.type);
xf.li2fc84552023-06-23 05:26:47 -07001202 }
1203
xf.li8535bc02023-12-12 23:28:35 -08001204 if (data_urc_info.active != 0)
xf.li2fc84552023-06-23 05:26:47 -07001205 {
1206 data_cb_state.state = QSER_DATA_CALL_CONNECTED;
1207 }
1208 else
1209 {
1210 data_cb_state.state = QSER_DATA_CALL_DISCONNECTED;
xf.li0fd6acf2023-12-20 18:16:34 -08001211 ret = apn_xml_handle_set(data_cb_state.profile_idx, default_handle);
1212 if(ret != 0)
1213 {
1214 LYERRLOG("handle set error");
1215 }
xf.li2fc84552023-06-23 05:26:47 -07001216 }
1217 if (data_cb_state.ip_family == QSER_DATA_CALL_TYPE_IPV4)
1218 {
1219 lynq_ipv4_aton_urc(&data_urc_info,&data_cb_state);
1220 }
1221 else if (data_cb_state.ip_family == QSER_DATA_CALL_TYPE_IPV6)
1222 {
1223 lynq_ipv6_inet_pton_urc(&data_urc_info,&data_cb_state);
1224 }
1225 else if (data_cb_state.ip_family == QSER_DATA_CALL_TYPE_IPV4V6)
1226 {
xf.li3c0a4752023-09-03 20:46:19 -07001227#ifdef MOBILETEK_TARGET_PLATFORM_T106
1228 lynq_ipv4v6_inet_pton_urc(&data_urc_info,&data_cb_state);
1229#else
xf.li2fc84552023-06-23 05:26:47 -07001230 lynq_ipv6_inet_pton_urc(&data_urc_info,&data_cb_state);
xf.li3c0a4752023-09-03 20:46:19 -07001231#endif
xf.li2fc84552023-06-23 05:26:47 -07001232 }
1233 else
1234 {
1235 LYERRLOG("unknow ip_family");
1236 continue;
1237 }
1238 if (s_data_call_cb != NULL)
1239 {
1240 s_data_call_cb(&data_cb_state);
1241 }
1242 }
1243 return NULL;
1244}
1245
1246int qser_cb_pthread_create()
1247{
1248 int ret;
1249 s_qser_data_cb_thread_status = 1;
1250 ret = pthread_create(&s_cb_tid,NULL,thread_wait_cb_status,NULL);
1251 if (ret < 0)
1252 {
1253 LYERRLOG("pthread create fail");
1254 s_qser_data_cb_thread_status = 0;
1255 return RESULT_ERROR;
1256 }
1257 return RESULT_OK;
1258}
1259
1260void qser_cb_pthread_cancel()
1261{
xf.li2fc84552023-06-23 05:26:47 -07001262 s_qser_data_cb_thread_status = 0;
1263 if (s_cb_tid != -1)
1264 {
xf.li6b0d8502023-09-04 18:49:12 -07001265 lynq_release_wait_data_call();
xf.li2fc84552023-06-23 05:26:47 -07001266 }
1267 return;
1268}
xf.li7b0bfd02023-08-03 01:11:52 -07001269int check_xml_file(const char *file)
1270{
1271 /* Check for existence */
1272 if((access(file, F_OK)) == -1)
1273 {
1274 LYERRLOG("no such xml file.\n");
1275 system("cp /data/lynq_qser_data_apn.xml /mnt/userdata/");
1276 }
1277
1278 if((access(file, F_OK)) == -1)
1279 {
1280 LYERRLOG("error copy xml file.\n");
1281 return -1;
1282 }
1283 return RESULT_OK;
1284}
xf.li2fc84552023-06-23 05:26:47 -07001285
1286int qser_data_call_init(qser_data_call_evt_cb_t evt_cb)
1287{
1288 int ret = 0;
1289 int utoken = 0;
1290 if (NULL == evt_cb)
1291 {
1292 LYERRLOG("init incoming paramters error");
1293 return RESULT_ERROR;
1294 }
xf.li7b0bfd02023-08-03 01:11:52 -07001295
1296 ret = check_xml_file(data_xml_path);
1297 if (ret != RESULT_OK)
1298 {
1299 LYERRLOG("check xml file error");
1300 return RESULT_ERROR;
1301 }
1302
xf.li2fc84552023-06-23 05:26:47 -07001303 s_data_call_cb = evt_cb;
xf.li6b0d8502023-09-04 18:49:12 -07001304
xf.li2fc84552023-06-23 05:26:47 -07001305 ret = lynq_init_data(utoken);
1306 if (ret != RESULT_OK)
1307 {
xf.li6b0d8502023-09-04 18:49:12 -07001308 //qser_cb_pthread_cancel();
xf.li2fc84552023-06-23 05:26:47 -07001309 s_data_call_cb = NULL;
1310 return RESULT_ERROR;
1311 }
xf.li6b0d8502023-09-04 18:49:12 -07001312 qser_cb_pthread_create();
xf.lie3f55f42023-12-01 22:47:33 -08001313 apn_table_xml_pdoc = xmlReadFile(data_xml_path ,"UTF-8",XML_PARSE_RECOVER);
1314 if(NULL == apn_table_xml_pdoc)
1315 {
1316 LYERRLOG("open xml file error");
1317 return RESULT_ERROR;
1318 }
xf.li63b87e82024-01-04 00:43:35 -08001319 ret = apn_xml_handle_clean();
1320 if(ret != RESULT_OK)
1321 {
1322 LYERRLOG("clean handle error");
1323 return RESULT_ERROR;
1324 }
xf.lib33d4862023-12-13 00:40:37 -08001325 g_lynq_qser_data_init_flag = 1;
xf.li2fc84552023-06-23 05:26:47 -07001326 return RESULT_OK;
1327}
1328
1329void qser_data_call_destroy(void)
1330{
xf.li6b0d8502023-09-04 18:49:12 -07001331 LYINFLOG("[%s] start [%d]",__FUNCTION__,__LINE__);
xf.lie3f55f42023-12-01 22:47:33 -08001332 if(apn_table_xml_pdoc)
1333 {
1334 xmlFreeDoc(apn_table_xml_pdoc);
1335 }
xf.li2fc84552023-06-23 05:26:47 -07001336 lynq_deinit_data();
xf.li6b0d8502023-09-04 18:49:12 -07001337 qser_cb_pthread_cancel();
xf.li2fc84552023-06-23 05:26:47 -07001338 s_data_call_cb = NULL;
xf.lib33d4862023-12-13 00:40:37 -08001339 g_lynq_qser_data_init_flag = 0;
xf.li6b0d8502023-09-04 18:49:12 -07001340 LYINFLOG("[%s] end [%d]",__FUNCTION__,__LINE__);
xf.li2fc84552023-06-23 05:26:47 -07001341 return ;
1342}
1343
1344int qser_data_call_start(qser_data_call_s *data_call, qser_data_call_error_e *err)
1345{
1346 int ret = -1;
xf.li0fd6acf2023-12-20 18:16:34 -08001347 int error = -1;
xf.li2fc84552023-06-23 05:26:47 -07001348 int handle = 0;
xf.lib33d4862023-12-13 00:40:37 -08001349 if(g_lynq_qser_data_init_flag == 0)
1350 {
1351 if(err != NULL)
1352 {
1353 *err = QSER_DATA_CALL_ERROR_NO_INIT;
1354 }
1355 return LYNQ_E_NO_INIT;
1356 }
xf.li2fc84552023-06-23 05:26:47 -07001357 if (NULL == data_call || NULL == err)
1358 {
1359 LYERRLOG("call start incoming paramters error");
xf.lic12b3702023-11-22 22:39:01 -08001360 if(err != NULL)
1361 {
1362 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
1363 }
xf.li2fc84552023-06-23 05:26:47 -07001364 return ret;
1365 }
1366 if (data_call->profile_idx == 0)
1367 {
1368 ret = lynq_setup_data_call(&handle);
1369 }
1370 else
1371 {
1372 char pdptype[16];
1373 qser_apn_info_s apn_info;
xf.li0fc26502023-09-16 02:10:17 -07001374 ret = qser_apn_get(data_call->profile_idx,&apn_info);
1375 if (ret != 0)
1376 {
1377 LYERRLOG("qser_apn_get error");
xf.lic12b3702023-11-22 22:39:01 -08001378 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
xf.li0fc26502023-09-16 02:10:17 -07001379 return ret;
1380 }
xf.li2fc84552023-06-23 05:26:47 -07001381 judge_pdp_type(apn_info.pdp_type,pdptype);
1382 ret = lynq_setup_data_call_sp(&handle,apn_info.apn_name,apn_info.apn_type,apn_info.username,apn_info.password,NULL,pdptype,pdptype);
1383 }
xf.lic12b3702023-11-22 22:39:01 -08001384 if (ret != 0)
xf.li2fc84552023-06-23 05:26:47 -07001385 {
1386 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
1387 }
xf.li0fd6acf2023-12-20 18:16:34 -08001388 else
1389 {
1390 error = apn_xml_handle_set(data_call->profile_idx, handle);
1391 if(error != 0)
1392 {
1393 LYERRLOG("handle set error");
1394 }
1395 }
xf.li2fc84552023-06-23 05:26:47 -07001396 return ret;
1397}
1398
xf.li8535bc02023-12-12 23:28:35 -08001399int qser_data_call_start_async(qser_data_call_s *data_call, qser_data_call_error_e *err)
1400{
1401 int ret = -1;
xf.li0fd6acf2023-12-20 18:16:34 -08001402 int error = -1;
xf.li8535bc02023-12-12 23:28:35 -08001403 int handle = 0;
xf.lib33d4862023-12-13 00:40:37 -08001404 if(g_lynq_qser_data_init_flag == 0)
1405 {
1406 if(err != NULL)
1407 {
1408 *err = QSER_DATA_CALL_ERROR_NO_INIT;
1409 }
1410 return LYNQ_E_NO_INIT;
1411 }
xf.li8535bc02023-12-12 23:28:35 -08001412 if (NULL == data_call || NULL == err)
1413 {
1414 LYERRLOG("call start incoming paramters error");
1415 if(err != NULL)
1416 {
1417 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
1418 }
1419 return ret;
1420 }
1421 if (data_call->profile_idx == 0)
1422 {
1423 ret = lynq_setup_data_call_sp_t106_async(&handle,"default","default",NULL,NULL,NULL,NULL,NULL);
1424 }
1425 else
1426 {
1427 char pdptype[16];
1428 qser_apn_info_s apn_info;
1429 ret = qser_apn_get(data_call->profile_idx,&apn_info);
1430 if (ret != 0)
1431 {
1432 LYERRLOG("qser_apn_get error");
1433 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
1434 return ret;
1435 }
1436 judge_pdp_type(apn_info.pdp_type,pdptype);
1437 ret = lynq_setup_data_call_sp_t106_async(&handle,apn_info.apn_name,apn_info.apn_type,apn_info.username,apn_info.password,NULL,pdptype,pdptype);
1438 }
1439 if (ret != 0)
1440 {
1441 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
1442 }
xf.li0fd6acf2023-12-20 18:16:34 -08001443 else
1444 {
1445 error = apn_xml_handle_set(data_call->profile_idx, handle);
1446 if(error != 0)
1447 {
1448 LYERRLOG("handle set error");
1449 }
1450 }
xf.li8535bc02023-12-12 23:28:35 -08001451 return ret;
1452}
1453
xf.li2fc84552023-06-23 05:26:47 -07001454int qser_data_call_stop(char profile_idx, qser_data_call_ip_family_e ip_family, qser_data_call_error_e *err)
1455{
1456 int ret = 0;
1457 int handle = -1;
1458
xf.lib33d4862023-12-13 00:40:37 -08001459 if(g_lynq_qser_data_init_flag == 0)
1460 {
1461 if(err != NULL)
1462 {
1463 *err = QSER_DATA_CALL_ERROR_NO_INIT;
1464 }
1465 return LYNQ_E_NO_INIT;
1466 }
xf.li2fc84552023-06-23 05:26:47 -07001467 if (NULL == err)
1468 {
1469 LYERRLOG("call stop incoming paramters error");
1470 return ret;
1471 }
xf.lic12b3702023-11-22 22:39:01 -08001472 ret = data_call_handle_get(profile_idx,&handle);
1473 if(ret != 0)
1474 {
1475 LYERRLOG("datacall handle get error");
1476 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
1477 return ret;
1478 }
xf.li2fc84552023-06-23 05:26:47 -07001479 ret = lynq_deactive_data_call(&handle);
xf.lic12b3702023-11-22 22:39:01 -08001480 if (ret != 0)
xf.li2fc84552023-06-23 05:26:47 -07001481 {
1482 *err = QSER_DATA_CALL_ERROR_INVALID_PARAMS;
xf.lic12b3702023-11-22 22:39:01 -08001483 return ret;
xf.li2fc84552023-06-23 05:26:47 -07001484 }
xy.hee2daacc2023-09-18 00:57:51 -07001485 return ret;
xf.li2fc84552023-06-23 05:26:47 -07001486}
1487int qser_data_call_info_get(char profile_idx,qser_data_call_ip_family_e ip_family,qser_data_call_info_s *info,qser_data_call_error_e *err)
1488{
1489 int ret = 0;
1490 int handle = -1;
xf.lib33d4862023-12-13 00:40:37 -08001491 if(g_lynq_qser_data_init_flag == 0)
1492 {
1493 if(err != NULL)
1494 {
1495 *err = QSER_DATA_CALL_ERROR_NO_INIT;
1496 }
1497 return LYNQ_E_NO_INIT;
1498 }
xf.li2fc84552023-06-23 05:26:47 -07001499 lynq_data_call_response_v11_t data_call_info;
1500 data_call_handle_get(profile_idx,&handle);
1501 ret = lynq_get_data_call_list(&handle,&data_call_info);
1502 if (ret == 0)
1503 {
1504 info->profile_idx = profile_idx;
1505 info->ip_family = ip_family;
xf.li157f7e92023-10-19 23:22:46 -07001506 if ((strncmp(data_call_info.type,"IPV4", strlen("IPV4") + 1) == 0) || (strncmp(data_call_info.type,"IP", strlen("IP") + 1) == 0))
xf.li2fc84552023-06-23 05:26:47 -07001507 {
1508 strcpy(info->v4.name,data_call_info.ifname);
xf.lib5dc0632023-11-30 18:20:35 -08001509 datacall_ipv4_status_judge(data_call_info.active,info);
xf.li2fc84552023-06-23 05:26:47 -07001510 LYINFLOG("[IPV4]addresses:%s,gateways:%s,dnses:%s",data_call_info.addresses,data_call_info.gateways,data_call_info.dnses);
1511 lynq_ipv4_aton_getinfo(&data_call_info,info);
1512 }
xf.li3c0a4752023-09-03 20:46:19 -07001513 else if (strncmp(data_call_info.type,"IPV6", strlen("IPV6") + 1) == 0)
xf.li2fc84552023-06-23 05:26:47 -07001514 {
1515 strcpy(info->v6.name,data_call_info.ifname);
xf.lib5dc0632023-11-30 18:20:35 -08001516 datacall_ipv6_status_judge(data_call_info.active,info);
xf.li2fc84552023-06-23 05:26:47 -07001517 LYINFLOG("[IPV6]addresses:%s,gateways:%s,dnses:%s",data_call_info.addresses,data_call_info.gateways,data_call_info.dnses);
1518 lynq_ipv6_inet_pton_getinfo(&data_call_info,info);
1519 }
xf.li3c0a4752023-09-03 20:46:19 -07001520 else if (strncmp(data_call_info.type,"IPV4V6", strlen("IPV4V6") + 1) == 0)
xf.li2fc84552023-06-23 05:26:47 -07001521 {
1522 strcpy(info->v4.name,data_call_info.ifname);
xf.lib5dc0632023-11-30 18:20:35 -08001523 datacall_ipv4_status_judge(data_call_info.active,info);
xf.li2fc84552023-06-23 05:26:47 -07001524 LYINFLOG("[IPV4V6]addresses:%s,gateways:%s,dnses:%s",data_call_info.addresses,data_call_info.gateways,data_call_info.dnses);
xf.li3c0a4752023-09-03 20:46:19 -07001525#ifndef MOBILETEK_TARGET_PLATFORM_T106
xf.li2fc84552023-06-23 05:26:47 -07001526 lynq_ipv4_aton_getinfo(&data_call_info,info);
xf.li3c0a4752023-09-03 20:46:19 -07001527#endif
xf.li2fc84552023-06-23 05:26:47 -07001528 strcpy(info->v6.name,data_call_info.ifname);
xf.lib5dc0632023-11-30 18:20:35 -08001529 datacall_ipv6_status_judge(data_call_info.active,info);
xf.li2fc84552023-06-23 05:26:47 -07001530 LYINFLOG("[IPV4V6]addresses:%s,gateways:%s,dnses:%s",data_call_info.addresses,data_call_info.gateways,data_call_info.dnses);
xf.li3c0a4752023-09-03 20:46:19 -07001531#ifndef MOBILETEK_TARGET_PLATFORM_T106
xf.li2fc84552023-06-23 05:26:47 -07001532 lynq_ipv6_inet_pton_getinfo(&data_call_info,info);
xf.li3c0a4752023-09-03 20:46:19 -07001533#endif
1534#ifdef MOBILETEK_TARGET_PLATFORM_T106
1535 lynq_ipv4v6_inet_pton_getinfo(&data_call_info,info);
1536#endif
xf.li2fc84552023-06-23 05:26:47 -07001537 }
1538 else
1539 {
1540 LYERRLOG("useless qser_data_call_ip_family_e");
1541 }
1542 }
1543 return ret;
1544}
1545int qser_apn_set(qser_apn_info_s *apn)
1546{
1547 int ret = 0;
xf.li0fd6acf2023-12-20 18:16:34 -08001548 int handle = -1;
xf.lib33d4862023-12-13 00:40:37 -08001549 if(g_lynq_qser_data_init_flag == 0)
1550 {
1551 return LYNQ_E_NO_INIT;
1552 }
xf.li4b18fa62023-12-19 19:38:10 -08001553 if (NULL == apn || apn->profile_idx == 0)
xf.li2fc84552023-06-23 05:26:47 -07001554 {
1555 LYERRLOG("apn set incoming paramters error");
1556 return RESULT_ERROR;
1557 }
xf.li0fd6acf2023-12-20 18:16:34 -08001558 ret = apn_xml_handle_get(apn->profile_idx, &handle);
1559 if(ret != 0)
1560 {
1561 LYERRLOG("handle set error");
1562 }
1563 if(handle >= 0 && handle < LYNQ_APN_CHANNEL_MAX)
1564 {
1565 LYERRLOG("It has setup datacall");
1566 return RESULT_ERROR;
1567 }
xf.li2fc84552023-06-23 05:26:47 -07001568 ret = apn_xml_modify(apn);
1569 if (ret < 0)
1570 {
1571 LYERRLOG("apn_xml_modify error");
1572 return ret;
1573 }
xf.li6c7e3972023-10-27 20:01:59 -07001574#ifndef MOBILETEK_TARGET_PLATFORM_T106
xf.li2fc84552023-06-23 05:26:47 -07001575 int apn_id = 0;
1576 char tmp_id[12];
1577 char *outinfo = NULL;
1578 char normalprotocol[16];
1579 char authtype[32];
1580 outinfo = (char *)malloc(sizeof(char)*512);
1581 bzero(tmp_id,12);
1582 bzero(outinfo,512);
1583 apn_id = apn->profile_idx + apndb_offset;
1584 snprintf(tmp_id,sizeof(tmp_id),"%d",apn_id);
1585 judge_pdp_type(apn->pdp_type,normalprotocol);
1586 judge_authtype(apn->auth_proto,authtype);
1587 lynq_modify_apn_db(3,tmp_id,NULL,NULL,apn->apn_name,apn->apn_type,apn->username,apn->password,normalprotocol,normalprotocol,authtype,outinfo);
1588 LYINFLOG("[output]:%s",outinfo);
1589 free(outinfo);
1590 outinfo = NULL;
xf.li6c7e3972023-10-27 20:01:59 -07001591#endif
1592 return ret;
xf.li2fc84552023-06-23 05:26:47 -07001593}
1594
1595int qser_apn_get(unsigned char profile_idx, qser_apn_info_s *apn)
1596{
xf.lib33d4862023-12-13 00:40:37 -08001597 if(g_lynq_qser_data_init_flag == 0)
1598 {
1599 return LYNQ_E_NO_INIT;
1600 }
xf.li2fc84552023-06-23 05:26:47 -07001601 if (profile_idx < 0 || profile_idx > 24 || NULL == apn)
1602 {
1603 LYERRLOG("apn get incoming paramters error");
1604 return RESULT_ERROR;
1605 }
1606 int ret = 0;
1607 ret = apn_xml_query(profile_idx,apn);
1608 if (ret < 0)
1609 {
1610 LYERRLOG("apn_xml_query error");
1611 return ret;
1612 }
1613 return ret;
1614}
1615
1616int qser_apn_add(qser_apn_add_s *apn, unsigned char *profile_idx)
1617{
1618 int ret = 0;
xf.lib33d4862023-12-13 00:40:37 -08001619 if(g_lynq_qser_data_init_flag == 0)
1620 {
1621 return LYNQ_E_NO_INIT;
1622 }
xf.li2fc84552023-06-23 05:26:47 -07001623 if (NULL == apn || NULL == profile_idx)
1624 {
1625 LYERRLOG("apn add incoming paramters error");
1626 return RESULT_ERROR;
1627 }
1628 ret = apn_xml_add(apn,profile_idx);
1629 if (ret < 0)
1630 {
1631 LYERRLOG("apn_xml_add error");
1632 return ret;
1633 }
xf.li6c7e3972023-10-27 20:01:59 -07001634#ifndef MOBILETEK_TARGET_PLATFORM_T106
xf.li2fc84552023-06-23 05:26:47 -07001635 int apn_id = 0;
1636 char tmp_id[12];
1637 char *outinfo = NULL;
1638 char normalprotocol[16];
1639 char authtype[32];
1640 outinfo = (char *)malloc(sizeof(char)*512);
1641 bzero(tmp_id,12);
1642 bzero(outinfo,512);
1643 snprintf(tmp_id,sizeof(tmp_id),"%d",apn_id);
1644 judge_pdp_type(apn->pdp_type,normalprotocol);
1645 judge_authtype(apn->auth_proto,authtype);
1646 lynq_modify_apn_db(0,tmp_id,NULL,NULL,apn->apn_name,apn->apn_type,apn->username,apn->password,normalprotocol,normalprotocol,authtype,outinfo);
1647 LYINFLOG("[output]:%s",outinfo);
1648 free(outinfo);
1649 outinfo = NULL;
xf.li6c7e3972023-10-27 20:01:59 -07001650#endif
1651 return ret;
xf.li2fc84552023-06-23 05:26:47 -07001652}
1653
1654int qser_apn_del(unsigned char profile_idx)
1655{
xf.lib33d4862023-12-13 00:40:37 -08001656 if(g_lynq_qser_data_init_flag == 0)
1657 {
1658 return LYNQ_E_NO_INIT;
1659 }
xf.li4b18fa62023-12-19 19:38:10 -08001660 if (profile_idx <= 0 || profile_idx > QSER_APN_MAX_LIST)
xf.li2fc84552023-06-23 05:26:47 -07001661 {
1662 LYERRLOG("apn del incoming paramters error");
xf.li4b18fa62023-12-19 19:38:10 -08001663 return RESULT_ERROR;
xf.li2fc84552023-06-23 05:26:47 -07001664 }
1665 int ret = 0;
xf.li0fd6acf2023-12-20 18:16:34 -08001666 int handle = -1;
1667 ret = apn_xml_handle_get(profile_idx, &handle);
1668 if(ret != 0)
1669 {
1670 LYERRLOG("handle set error");
1671 }
1672 if(handle >= 0 && handle < LYNQ_APN_CHANNEL_MAX)
1673 {
1674 LYERRLOG("It has setup datacall");
1675 return RESULT_ERROR;
1676 }
xf.li2fc84552023-06-23 05:26:47 -07001677 ret = apn_xml_delete(profile_idx);
1678 if (ret < 0)
1679 {
1680 LYERRLOG("apn_xml_delete error");
1681 return ret;
1682 }
xf.li6c7e3972023-10-27 20:01:59 -07001683#ifndef MOBILETEK_TARGET_PLATFORM_T106
xf.li2fc84552023-06-23 05:26:47 -07001684 int apn_id = 0;
1685 char tmp_id[12];
1686 char *outinfo = NULL;
1687 outinfo = (char *)malloc(sizeof(char)*512);
1688 bzero(tmp_id,12);
1689 bzero(outinfo,512);
1690 apn_id = profile_idx+apndb_offset;
1691 snprintf(tmp_id,sizeof(tmp_id),"%d",apn_id);
1692 lynq_modify_apn_db(1,tmp_id,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,NULL,outinfo);
1693 LYINFLOG("[output]:%s",outinfo);
1694 free(outinfo);
1695 outinfo = NULL;
xf.li6c7e3972023-10-27 20:01:59 -07001696#endif
xf.li2fc84552023-06-23 05:26:47 -07001697 return ret;
1698}
1699
1700int qser_apn_get_list(qser_apn_info_list_s *apn_list)
1701{
xf.lib33d4862023-12-13 00:40:37 -08001702 if(g_lynq_qser_data_init_flag == 0)
1703 {
1704 return LYNQ_E_NO_INIT;
1705 }
xf.li2fc84552023-06-23 05:26:47 -07001706 if (NULL == apn_list)
1707 {
1708 LYERRLOG("apn_list incoming paramters error");
1709 return RESULT_ERROR;
1710 }
1711 int ret = 0;
1712 ret = apn_xml_query_list(apn_list);
1713 if (ret < 0)
1714 {
1715 LYERRLOG("apn_xml_query_list error");
1716 return ret;
1717 }
1718 return ret;
xf.li3f891cb2023-08-23 23:11:24 -07001719}
you.chen21c62b72023-09-08 09:41:11 +08001720
1721DEFINE_LYNQ_LIB_LOG(LYNQ_QSER_DATA)
1722