blob: e5b23e8618935b5fd13a12cd6fbbcb04c5d92c37 [file] [log] [blame]
lhf81a46f2022-02-13 23:57:37 -08001#include <stdio.h>
2#include <sys/types.h>
3#include <sys/socket.h>
4#include <arpa/inet.h>
5#include <fcntl.h>
6#include <string.h>
7#include <stdlib.h>
8#include <unistd.h>
9#include <binder/Parcel.h>
10#include <log/log.h>
11#include "lynq_data.h"
12#include <cutils/jstring.h>
13#include <pthread.h>
14#include "liblog/lynq_deflog.h"
15#include <sys/time.h>
rjw0cdacbc2022-06-22 10:51:07 +080016#include <include/lynq_uci.h>
rjw747deea2022-07-01 18:25:30 +080017#include <errno.h>
rjw7ee7bb42023-01-18 11:34:28 +080018#include <vector>
19#include "lynq_data_urc.h"
20
lhf81a46f2022-02-13 23:57:37 -080021#define LYNQ_SERVICE_PORT 8088
lh8d290112023-10-22 20:53:06 -070022#define LYNQ_RIL_FWK_IP "127.0.0.1"
23
lhf81a46f2022-02-13 23:57:37 -080024#define LYNQ_REC_BUF 8192
25#define LYNQ_REQUEST_PARAM_BUF 8192
26#define LYQN_SEDN_BUF 1024*8+sizeof(int)*3
27#define USER_LOG_TAG "LYNQ_DATA"
28
rjw0cdacbc2022-06-22 10:51:07 +080029#define LYNQ_DATA_UCI_BUF 258
Hong_Liu25edfe72023-06-16 01:13:42 -070030#define LYNQ_DATA_TIME_OUT 1000*120
xy.hef5d74f12023-10-23 06:48:52 -070031#define TELEPHONY_RESTART 10
Hong_Liu7163bbe2023-06-04 03:03:44 -070032
rjw61fcae32022-08-18 14:03:39 +080033
lhf81a46f2022-02-13 23:57:37 -080034using ::android::Parcel;
35typedef struct{
36 int uToken;
37 int request;
38 int paramLen;
39 char param[LYNQ_REQUEST_PARAM_BUF];
40}lynq_client_t;
lh13586612022-01-11 21:58:58 -080041typedef enum{
42 LYNQ_E_CARDSTATE_ERROR=8000,
43 /* The voice service state is out of service*/
44 LYNQ_E_STATE_OUT_OF_SERVICE=8001,
45 /* The voice service state is EMERGENCY_ONLY*/
46 LYNQ_E_STATE_EMERGENCY_ONLY=8002,
47 /* The radio power is power off*/
48 LYNQ_E_STATE_POWER_OFF=8003,
49 LYNQ_E_TIME_OUT=8004,
50 /*create or open sms DB fail */
51 LYNQ_E_SMS_DB_FAIL=8005,
52 /*Failed to execute sql statement*/
53 LYNQ_E_SMS_SQL_FAIL = 8006,
54 LYNQ_E_SMS_NOT_FIND = 8007,
Hong_Liu25edfe72023-06-16 01:13:42 -070055 LYNQ_E_GET_RESP_FAIL = 8008,
56 LYNQ_E_NOT_THIS_APN = 8087,
57 LYNQ_E_NOT_ANY_APN = 8088,
58 LYNQ_E_MD_NOT_READY = 8089,
lh13586612022-01-11 21:58:58 -080059 /* The logic conflict*/
60 LYNQ_E_CONFLICT=9000,
61 /*Null anomaly*/
62 LYNQ_E_NULL_ANONALY=9001
lhf81a46f2022-02-13 23:57:37 -080063}LYNQ_E;
64
lha62e0882023-10-31 05:17:11 -070065typedef enum {
66 PDN_IDLE,
67 PDN_CONNECTING,
68 PDN_CONNECTED,
69 PDN_DISCONNECTING,
70 PDN_DISCONNECTED,
71 PDN_RETRYING,
72 PDN_FAILED,
73 PDN_SCANNING,
74 PDN_TIMEOUT_CANCEL,
75} RIL_Data_Call_PdnState;
76
lhf81a46f2022-02-13 23:57:37 -080077int lynq_client_sockfd = 0;
78int Global_uToken = 0;
Hong_Liu7e1b85e2023-05-16 05:51:57 -070079struct sockaddr_in lynq_data_socket_server_addr;
80int lynq_data_socket_server_addr_len;
rjw7ee7bb42023-01-18 11:34:28 +080081
lhf81a46f2022-02-13 23:57:37 -080082int lynq_data_call_change_id = -1;
xy.hef5d74f12023-10-23 06:48:52 -070083int lynq_telephony_restart_g = 0;
lhf81a46f2022-02-13 23:57:37 -080084pthread_t lynq_data_tid =-1;
85static pthread_mutex_t s_data_call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
86static pthread_cond_t s_data_call_state_change_cond = PTHREAD_COND_INITIALIZER;
rjw7ee7bb42023-01-18 11:34:28 +080087
Hong_Liu25edfe72023-06-16 01:13:42 -070088static pthread_mutex_t s_data_call_deactived_mutex = PTHREAD_MUTEX_INITIALIZER;
89static pthread_cond_t s_data_call_deactived_cond = PTHREAD_COND_INITIALIZER;
90
91
rjw20006d12022-04-21 16:29:04 +080092static pthread_mutex_t s_lynq_apn_change_mutex = PTHREAD_MUTEX_INITIALIZER;
93static pthread_cond_t s_lynq_apn_change_cond = PTHREAD_COND_INITIALIZER;
rjw7ee7bb42023-01-18 11:34:28 +080094static pthread_mutex_t s_lynq_urc_vector_mutex = PTHREAD_MUTEX_INITIALIZER;
95static pthread_cond_t s_lynq_urc_vector_cond = PTHREAD_COND_INITIALIZER;
rjwed00d042022-05-25 09:18:16 +080096/**g_lynq_data_sendto_mutex
97* @brief mark data send request mutex
98*/
99static pthread_mutex_t g_lynq_data_sendto_mutex;
rjwf9ec3832023-04-12 10:59:15 +0800100/*This value data the state of the wait*/
rjwc3d6e582023-03-28 17:19:11 +0800101static int data_waiting_status = 0;
rjwf9ec3832023-04-12 10:59:15 +0800102/*The value indicates that 8085 error occurs in data*/
rjwc63abb42023-03-31 18:22:42 +0800103static int data_invaild_error = 0;
rjwf9ec3832023-04-12 10:59:15 +0800104/*This value ensure the data call timing is correct*/
105static int data_timelimit = 0;
rjwc63abb42023-03-31 18:22:42 +0800106
rjw22947c22022-03-15 09:21:29 +0800107/**g_lynq_data_init_flag
108* @brief mark data initialization state
109* 0:deinit status
110* 1:init state
111*/
112static int g_lynq_data_init_flag = 0;
rjw20006d12022-04-21 16:29:04 +0800113/**g_lynq_apn_result
114* @brief temp of apn result info
115*/
116char g_lynq_apn_result[1024] = {};
lha62e0882023-10-31 05:17:11 -0700117int g_data_call_timeout_value = LYNQ_DATA_TIME_OUT;
rjw747deea2022-07-01 18:25:30 +0800118
rjw7ee7bb42023-01-18 11:34:28 +0800119static std::vector<int> s_data_urc_wait_list;
120
rjw20006d12022-04-21 16:29:04 +0800121typedef struct
122{
lhf81a46f2022-02-13 23:57:37 -0800123 char apn[LYNQ_APN_MAX_LEN];
124 char apnType[LYNQ_APN_TYPE_MAX_LEN];
125 char ifaceName[LYNQ_IFACE_NAME_MAX_LEN];
126 int hasUsed;
127 int hasTimeout;
Hong_Liudc46d412023-05-18 13:36:26 -0700128 int status;
129 char statusApnType[LYNQ_APN_TYPE_MAX_LEN];
lhf81a46f2022-02-13 23:57:37 -0800130}lynq_apn_t;
131lynq_apn_t lynq_apn_table[LYNQ_APN_CHANNEL_MAX] = {};
132lynq_data_call_response_v11_t lynq_data_call_lists[LYNQ_APN_CHANNEL_MAX] = {};
133int lynq_data_call = 0;
lhf81a46f2022-02-13 23:57:37 -0800134
xy.hef5d74f12023-10-23 06:48:52 -0700135int radio_switch(int status);
136
lhf81a46f2022-02-13 23:57:37 -0800137int getLynqApnID(char apnType[])
138{
139 int ret = 0;
rjwc63abb42023-03-31 18:22:42 +0800140 int len = 0;
lhf81a46f2022-02-13 23:57:37 -0800141 for(ret;ret<LYNQ_APN_CHANNEL_MAX;ret++)
142 {
Hong_Liudc46d412023-05-18 13:36:26 -0700143 len = strlen(apnType);
Hong_Liu6149f182023-05-12 02:15:14 -0700144 LYINFLOG("apn_table[%d].apnType:%s,input apntype:%s,len:%d",ret,lynq_apn_table[ret].apnType,apnType,len);
rjwc63abb42023-03-31 18:22:42 +0800145 if(strncmp(lynq_apn_table[ret].apnType,apnType,len)==0)
lh13586612022-01-11 21:58:58 -0800146 {
lhf81a46f2022-02-13 23:57:37 -0800147 return ret;
148 }
149 }
150 return -1;
151}
rjw7ee7bb42023-01-18 11:34:28 +0800152
Hong_Liudc46d412023-05-18 13:36:26 -0700153int getDeactApnID(char apnType[])
154{
155 int ret = 0;
156 int len = 0;
157 for(ret;ret<LYNQ_APN_CHANNEL_MAX;ret++)
158 {
159 len = strlen(apnType);
160 LYINFLOG("apn_table[%d].apnType:%s,input apntype:%s,len:%d",ret,lynq_apn_table[ret].apnType,apnType,len);
161 if(strncmp(lynq_apn_table[ret].statusApnType,apnType,len)==0)
162 {
163 return ret;
164 }
165 }
166 return -1;
167}
168
lhf81a46f2022-02-13 23:57:37 -0800169void updateApnTable(lynq_apn_t *apn_table,char apn[],char apntype[],char ifaceName[])
170{
171 LYDBGLOG("[updateApnTable] apn:%s,apntype:%s,ifaceName:%s",apn,apntype,ifaceName);
172 if(apn_table==NULL)
173 {
174 LYERRLOG("apn_table is null");
175 return;
176 }
177 memcpy(apn_table->apn,apn,strlen(apn)+1);
178 memcpy(apn_table->apnType,apntype,strlen(apntype)+1);
179 memcpy(apn_table->ifaceName,ifaceName,strlen(ifaceName)+1);
180 apn_table->hasTimeout = 0;
181 apn_table->hasUsed = 1;
182 return;
183}
rjw7ee7bb42023-01-18 11:34:28 +0800184
lhf81a46f2022-02-13 23:57:37 -0800185void cleanOnceApnTable(int apnId)
186{
Hong_Liudc46d412023-05-18 13:36:26 -0700187 LYDBGLOG("%s:apn id:%d",__FUNCTION__,apnId);
lhf81a46f2022-02-13 23:57:37 -0800188 if((apnId < 0) || (apnId > LYNQ_APN_CHANNEL_MAX-1))
189 {
190 LYERRLOG("apn id is invalid!!!");
191 return;
192 }
193 lynq_apn_table[apnId].hasTimeout = 0;
194 lynq_apn_table[apnId].hasUsed = 0;
Hong_Liudc46d412023-05-18 13:36:26 -0700195 memcpy(lynq_apn_table[apnId].statusApnType,lynq_apn_table[apnId].apnType,strlen(lynq_apn_table[apnId].apnType));
lhf81a46f2022-02-13 23:57:37 -0800196 bzero(lynq_apn_table[apnId].apn,LYNQ_APN_MAX_LEN);
Hong_Liudc46d412023-05-18 13:36:26 -0700197 bzero(lynq_apn_table[apnId].apnType,LYNQ_APN_TYPE_MAX_LEN);
lhf81a46f2022-02-13 23:57:37 -0800198 bzero(lynq_apn_table[apnId].ifaceName,LYNQ_IFACE_NAME_MAX_LEN);
Hong_Liudc46d412023-05-18 13:36:26 -0700199 lynq_apn_table[apnId].status = 32;
lhf81a46f2022-02-13 23:57:37 -0800200 return;
201}
Hong_Liudc46d412023-05-18 13:36:26 -0700202void cleanDeactApn(int apnId)
203{
204 LYDBGLOG("%s:apn id:%d",__FUNCTION__,apnId);
205 if((apnId < 0) || (apnId > LYNQ_APN_CHANNEL_MAX-1))
206 {
207 LYERRLOG("apn id is invalid!!!");
208 return;
209 }
210 lynq_apn_table[apnId].status = 0;
211 bzero(lynq_apn_table[apnId].statusApnType,LYNQ_APN_TYPE_MAX_LEN);
212}
213
214void updateDeactApn(int apnId,int pdnState)
215{
216 LYDBGLOG("%s:apn id:%d",__FUNCTION__,apnId);
217 if((apnId < 0) || (apnId > LYNQ_APN_CHANNEL_MAX-1))
218 {
219 LYERRLOG("apn id is invalid!!!");
220 return;
221 }
222 lynq_apn_table[apnId].status = pdnState;
223}
224
225
lhf81a46f2022-02-13 23:57:37 -0800226int getUnusedElement()
227{
Hong_Liudc46d412023-05-18 13:36:26 -0700228 if (lynq_apn_table == NULL)
229 {
230 LYERRLOG("get UnusedElemnt apn_table is null");
231 return -1;
232 }
lhf81a46f2022-02-13 23:57:37 -0800233 for(int i=0;i < LYNQ_APN_CHANNEL_MAX; i++)
234 {
235 if(lynq_apn_table[i].hasUsed!=1)
236 {
237 return i;
238 }
239 }
rjwc63abb42023-03-31 18:22:42 +0800240 LYERRLOG("None of get unused Element");
lhf81a46f2022-02-13 23:57:37 -0800241 return -1;
242}
243int updateApn(char apnType[])
244{
245 int ret = 0;
246 ret = getUnusedElement();
Hong_Liu55668712023-05-16 21:49:17 -0700247 if(ret >= 0)
Hong_Liu7e1b85e2023-05-16 05:51:57 -0700248 {
249 memcpy(lynq_apn_table[ret].apnType,apnType,strlen(apnType)+1);
250 lynq_apn_table[ret].hasUsed = 1;
251 }
lhf81a46f2022-02-13 23:57:37 -0800252 return ret;
253}
Hong_Liu55c62f52023-08-24 19:05:50 -0700254//@return
255//other:this apn has been used in apn table
256//-1:this apn not has been used in apn table
257int check_used_apn(char apnType[])
258{
259 LYINFLOG("check_used_apn.apnType:%s",apnType);
260 int ret = 0;
261 int len = 0;
262 for(ret;ret<LYNQ_APN_CHANNEL_MAX;ret++)
263 {
264 len = strlen(apnType);
265 if(strncmp(lynq_apn_table[ret].apnType,apnType,len)==0)
266 {
267 LYINFLOG("check_used_apn.apnType:%s in apn table",apnType);
268 return ret;
269 }
270 }
271 return -1;
272}
273int get_handle(char apnType[])
274{
275 int call_id = 0;
276 call_id = check_used_apn(apnType);
277 if(call_id == -1)
278 {
279 call_id = updateApn(apnType);
280 }
281 LYINFLOG("handle:%d",call_id);
282 return call_id;
283}
rjw1309e232022-07-22 09:54:06 +0800284
285int handleCheck(int handle)
286{
Hong_Liu7163bbe2023-06-04 03:03:44 -0700287 if ((handle >= 0) && (handle <= 6))
rjw1309e232022-07-22 09:54:06 +0800288 {
Hong_Liu7163bbe2023-06-04 03:03:44 -0700289 if (lynq_apn_table[handle].hasUsed == 1)
290 {
291 return 0;
292 }
rjw1309e232022-07-22 09:54:06 +0800293 return -1;
294 }
Hong_Liu7163bbe2023-06-04 03:03:44 -0700295 return -1;
rjw1309e232022-07-22 09:54:06 +0800296}
rjw20006d12022-04-21 16:29:04 +0800297int waitApnResult()
298{
299 int ret = 0;
300 LYINFLOG("start wait apn result!!!");
301 int sec = 0;
302 int usec = 0;
303 struct timeval now;
304 struct timespec timeout;
305 gettimeofday(&now, NULL);
306 sec = 20000 / 1000;
307 usec = 20000 % 1000;
308 timeout.tv_sec = now.tv_sec + sec;
309 timeout.tv_nsec = now.tv_usec * 1000 + usec * 1000000;
310 pthread_mutex_lock(&s_lynq_apn_change_mutex);
311 ret = pthread_cond_timedwait(&s_lynq_apn_change_cond, &s_lynq_apn_change_mutex, &timeout);
312 pthread_mutex_unlock(&s_lynq_apn_change_mutex);
313 return ret;
314}
315
316void sendSignalApnChange()
317{
318 LYINFLOG("start send Signal Apn Change");
319 pthread_mutex_lock(&s_lynq_apn_change_mutex);
320 pthread_cond_signal(&s_lynq_apn_change_cond);
321 pthread_mutex_unlock(&s_lynq_apn_change_mutex);
322 return;
323}
lhf81a46f2022-02-13 23:57:37 -0800324
325int waitPdnChange()
326{
327 int ret = 0;
rjw7ee7bb42023-01-18 11:34:28 +0800328 pthread_mutex_lock(&s_lynq_urc_vector_mutex);
329 ret = pthread_cond_wait(&s_lynq_urc_vector_cond,&s_lynq_urc_vector_mutex);
330 pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
lhf81a46f2022-02-13 23:57:37 -0800331 return ret;
332}
333int waitDataCallstateChange(int mtime)
334{
335 int ret = 0;
336 int sec = 0;
337 int usec = 0;
338 struct timeval now;
339 struct timespec timeout;
340 gettimeofday(&now,NULL);
341 sec = mtime/1000;
342 usec = mtime%1000;
343 timeout.tv_sec = now.tv_sec+sec;
344 timeout.tv_nsec = now.tv_usec*1000+usec*1000000;
345 pthread_mutex_lock(&s_data_call_state_change_mutex);
346 ret = pthread_cond_timedwait(&s_data_call_state_change_cond,&s_data_call_state_change_mutex,&timeout);
347 pthread_mutex_unlock(&s_data_call_state_change_mutex);
348 return ret;
349}
350void sendSignalDataCallStateChange()
351{
352 pthread_mutex_lock(&s_data_call_state_change_mutex);
353 pthread_cond_signal(&s_data_call_state_change_cond);
354 pthread_mutex_unlock(&s_data_call_state_change_mutex);
355 return;
356}
Hong_Liu25edfe72023-06-16 01:13:42 -0700357int waitDeactived(int mtime)
358{
359 int ret = 0;
360 int sec = 0;
361 int usec = 0;
362 struct timeval now;
363 struct timespec timeout;
364 gettimeofday(&now,NULL);
365 sec = mtime/1000;
366 usec = mtime%1000;
367 timeout.tv_sec = now.tv_sec+sec;
368 timeout.tv_nsec = now.tv_usec*1000+usec*1000000;
369 pthread_mutex_lock(&s_data_call_deactived_mutex);
370 ret = pthread_cond_timedwait(&s_data_call_deactived_cond,&s_data_call_deactived_mutex,&timeout);
371 pthread_mutex_unlock(&s_data_call_deactived_mutex);
372 return ret;
373}
374void sendSignalDeactvied()
375{
376 pthread_mutex_lock(&s_data_call_deactived_mutex);
377 pthread_cond_signal(&s_data_call_deactived_cond);
378 pthread_mutex_unlock(&s_data_call_deactived_mutex);
379 return;
380}
381
lhf81a46f2022-02-13 23:57:37 -0800382void sendSignalPdnChange()
383{
rjw7ee7bb42023-01-18 11:34:28 +0800384 pthread_mutex_lock(&s_lynq_urc_vector_mutex);
385 pthread_cond_signal(&s_lynq_urc_vector_cond);
386 pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
lhf81a46f2022-02-13 23:57:37 -0800387 return;
388}
389
390int get_response(int sockfd,Parcel &p)
391{
392 int len = 0;
393 char recvline[LYNQ_REC_BUF];
394 bzero(recvline,LYNQ_REC_BUF);
395 /* receive data from server */
Hong_Liu7e1b85e2023-05-16 05:51:57 -0700396 len = recvfrom(sockfd,recvline,LYNQ_REC_BUF,0,(struct sockaddr *)&lynq_data_socket_server_addr,(socklen_t *)&lynq_data_socket_server_addr_len);
397 //len = read(sockfd, recvline, LYNQ_REC_BUF);
rjw08528682022-07-04 21:28:02 +0800398 if(len == -1)
lhf81a46f2022-02-13 23:57:37 -0800399 {
Hong_Liu7e1b85e2023-05-16 05:51:57 -0700400 LYERRLOG("get_response fail,errno:%d",errno);
lhf81a46f2022-02-13 23:57:37 -0800401 return -1;
402 }
403 if (recvline != NULL) {
404 p.setData((uint8_t *)recvline,len); // p.setData((uint8_t *) buffer, buflen);
405 p.setDataPosition(0);
406 }
407 return 0;
408}
Hong_Liu25edfe72023-06-16 01:13:42 -0700409/**@brief get utoken in range 0 to 10000
410* @return utoken
411*/
412int get_utoken()
lhf81a46f2022-02-13 23:57:37 -0800413{
Hong_Liu25edfe72023-06-16 01:13:42 -0700414 return (Global_uToken++)%10000;/*0-10000*/
415}
416/**@brief wait response with expected token and write msg to parcel in some time
417* @param fd [IN]: socket fd
418* @param p [OUT]: quote the parcel,if return success need delete p.
419* @param token [IN]: the expected token for the response msg
420* @return
421* 0:success
422* other:failure
423*/
424int wait_response(int sockfd,Parcel *& p,int utoken)
425{
426 int len = 0;
427 int flag = 1;
428 int count = 0;
429 int in_utoken = -1;
430 int resp_type = -1;
431 Parcel *temp = NULL;
432 char recvline[LYNQ_REC_BUF];
433 //Sometimes the socket is abnormal, causing the socket buffer to store the response of the last request.
434 //Here it does not return until the response corresponding to the request is read.
435 while(flag && (count < 20))//why?
lhf81a46f2022-02-13 23:57:37 -0800436 {
Hong_Liu25edfe72023-06-16 01:13:42 -0700437 bzero(recvline,LYNQ_REC_BUF);
438 count++;
439 LYINFLOG("wait_response,count:%d",count);
440 len = recvfrom(sockfd,recvline,LYNQ_REC_BUF,0,(struct sockaddr *)&lynq_data_socket_server_addr,(socklen_t *)&lynq_data_socket_server_addr_len);
441 if(len == -1)
442 {
443 LYERRLOG("wait_response fail,errno:%d",errno);
444 return LYNQ_E_GET_RESP_FAIL;
445 }
446 if (len != 0)
447 {
448 temp = new Parcel;
449 int i = 0;
450 while((NULL == temp) && (i < 100))
451 {
452 usleep(1000);
453 temp = new Parcel;
454 i++;
455 }
456 if((i >= 100) || (NULL == temp))
457 {
458 LYERRLOG("wait_response i:%d",i);
459 return LYNQ_E_GET_RESP_FAIL;
460 }
461 temp->setData((uint8_t *)recvline,len); // p.setData((uint8_t *) buffer, buflen);
462 temp->setDataPosition(0);
463 temp->readInt32(&resp_type);
464 temp->readInt32(&in_utoken);
465 LYINFLOG("[%s]in_utoken:%d,utoken:%d",__FUNCTION__,in_utoken,utoken);
466 if (in_utoken != utoken)
467 {
468 delete temp;
469 temp = NULL;
470 in_utoken = 0;
471 continue;
472 }
473 temp->setDataPosition(0);
474 p = temp;
475 flag = 0;
476 return 0;
477 }
478 else
479 {
480 LYERRLOG("recvline is null,errno:%d",errno);
481 return LYNQ_E_GET_RESP_FAIL;
482 }
483 }
484 return LYNQ_E_GET_RESP_FAIL;
485}
486
487int JumpHeader(Parcel *p,int *resp_type,int *utoken,int *request,int *slot_id,int *error)
488{
489 if(NULL == p)
490 {
491 LYERRLOG("JumpHeader is null");
492 return -1;
493 }
494 if(p->dataAvail() > 0)
495 {
496 p->readInt32(resp_type);
497 p->readInt32(utoken);
498 p->readInt32(request);
499 p->readInt32(slot_id);
500 p->readInt32(error);
lhf81a46f2022-02-13 23:57:37 -0800501 return 0;
502 }
503 else
504 {
505 return -1;
506 }
507}
Hong_Liu25edfe72023-06-16 01:13:42 -0700508void free_parcel(Parcel *p)
509{
510 if(p)
511 {
512 delete p;
513 p = NULL;
514 }
515}
lhf81a46f2022-02-13 23:57:37 -0800516int send_request(int sockfd,lynq_client_t *client_tmp)
517{
518 int ret=0;
lh8d290112023-10-22 20:53:06 -0700519 ret = sendto(sockfd,client_tmp,LYQN_SEDN_BUF,0,(struct sockaddr *)&lynq_data_socket_server_addr,lynq_data_socket_server_addr_len);
lhf81a46f2022-02-13 23:57:37 -0800520 if(ret==-1)
521 {
lh8d290112023-10-22 20:53:06 -0700522 LYERRLOG("%s:errno code:%d",__FUNCTION__,errno);
lhf81a46f2022-02-13 23:57:37 -0800523 return -1;
524 }
525 return 0;
526}
527static char *strdupReadString(Parcel &p) {
528 size_t stringlen;
529 const char16_t *s16;
530 s16 = p.readString16Inplace(&stringlen);
531 return strndup16to8(s16, stringlen);
532}
533static char *strdupReadString_p(Parcel *p) {
534 size_t stringlen;
535 const char16_t *s16;
536 s16 = p->readString16Inplace(&stringlen);
537 return strndup16to8(s16, stringlen);
538}
539
lhf81a46f2022-02-13 23:57:37 -0800540/*Warren add for T800 platform 2021/11/19 start*/
541int lynq_socket_client_start()
542{
lh8d290112023-10-22 20:53:06 -0700543 int ret;
544 struct timeval timeOut;
545 struct sockaddr_in liblynq_data_socket;
rjw747deea2022-07-01 18:25:30 +0800546
lh8d290112023-10-22 20:53:06 -0700547 ret = 0;
rjwa59bf312022-07-05 11:50:31 +0800548 timeOut.tv_sec = 30;
rjw747deea2022-07-01 18:25:30 +0800549 timeOut.tv_usec = 0;
lh8d290112023-10-22 20:53:06 -0700550 bzero(&liblynq_data_socket, sizeof(liblynq_data_socket));
551 bzero(&lynq_data_socket_server_addr, sizeof(lynq_data_socket_server_addr));
552
553 //set this lib socket config
554 liblynq_data_socket.sin_family = AF_INET;
555 liblynq_data_socket.sin_addr.s_addr = inet_addr(LYNQ_RIL_FWK_IP);
rjw747deea2022-07-01 18:25:30 +0800556
lh8d290112023-10-22 20:53:06 -0700557 //set ril service socket config
558 lynq_data_socket_server_addr.sin_family = AF_INET;
559 lynq_data_socket_server_addr.sin_port = htons(LYNQ_SERVICE_PORT);
560 lynq_data_socket_server_addr.sin_addr.s_addr = inet_addr(LYNQ_RIL_FWK_IP);
561 lynq_data_socket_server_addr_len = sizeof(lynq_data_socket_server_addr);
562
563 lynq_client_sockfd = socket(AF_INET, SOCK_DGRAM, 0);
564 ret = bind(lynq_client_sockfd, (struct sockaddr *)&liblynq_data_socket, sizeof(liblynq_data_socket));
565 if (-1 == ret)
566 {
567 LYERRLOG("liblynq_data_socket bind fail,errno:%d",errno);
568 return -1;
569 }
rjw747deea2022-07-01 18:25:30 +0800570 if (setsockopt(lynq_client_sockfd, SOL_SOCKET, SO_RCVTIMEO, &timeOut, sizeof(timeOut)) < 0)
571 {
lh8d290112023-10-22 20:53:06 -0700572 LYERRLOG("time out setting failed,errno:%d",errno);
lhf81a46f2022-02-13 23:57:37 -0800573 return -1;
574 }
575 return 0;
576}
rjw7ee7bb42023-01-18 11:34:28 +0800577
578bool is_support_urc(int urc_id)
lhf81a46f2022-02-13 23:57:37 -0800579{
rjw7ee7bb42023-01-18 11:34:28 +0800580 switch(urc_id)
581 {
582 case LYNQ_URC_DATA_CALL_STATUS_IND:
583
584 case LYNQ_URC_MODIFY_APNDB:
585 case LYNQ_URC_RESET_APNDB:
xy.hef5d74f12023-10-23 06:48:52 -0700586 case LYNQ_TELEPHONY_RESTART:
rjw7ee7bb42023-01-18 11:34:28 +0800587 return true;
588 default:
589 return false;
590 }
591}
592
rjwc63abb42023-03-31 18:22:42 +0800593int printf_apn_table()
594{
595 int ret = 0;
Hong_Liu6149f182023-05-12 02:15:14 -0700596 if (lynq_apn_table == NULL)
597 {
598 LYERRLOG("apn table is null");
599 return -1;
600 }
rjwc63abb42023-03-31 18:22:42 +0800601 for(ret;ret<LYNQ_APN_CHANNEL_MAX;ret++)
602 {
Hong_Liudc46d412023-05-18 13:36:26 -0700603 LYINFLOG("[%s][%d] apn=%s ;apntype=%s ;ifname=%s ;hasTimeout = %d ; hasUsed = %d,status = %d,statusDeactApn = %s",__FUNCTION__,ret, \
rjwc63abb42023-03-31 18:22:42 +0800604 lynq_apn_table[ret].apn,lynq_apn_table[ret].apnType,lynq_apn_table[ret].ifaceName, \
Hong_Liudc46d412023-05-18 13:36:26 -0700605 lynq_apn_table[ret].hasTimeout,lynq_apn_table[ret].hasUsed,lynq_apn_table[ret].status,lynq_apn_table[ret].statusApnType);
rjwc63abb42023-03-31 18:22:42 +0800606 }
607 return 0;
608}
609
Hong_Liu6149f182023-05-12 02:15:14 -0700610void printf_apn_table_debug(const char *fun,int line)
611{
612 LYINFLOG("[%s][%d]apn_table msg",fun,line);
613 printf_apn_table();
614}
rjwc63abb42023-03-31 18:22:42 +0800615
rjw7ee7bb42023-01-18 11:34:28 +0800616void urc_msg_process(Parcel *p)
617{
618 int len;
619 int resp_type;
620 int urcid;
621 int slot_id;
rjwf9ec3832023-04-12 10:59:15 +0800622 int check_count = 0;
Hong_Liudc46d412023-05-18 13:36:26 -0700623 static int apnId=-1;
rjw7ee7bb42023-01-18 11:34:28 +0800624
625 int pdnState = 0;
lhf81a46f2022-02-13 23:57:37 -0800626 char apn[LYNQ_APN_MAX_LEN];
627 char apnType[LYNQ_APN_TYPE_MAX_LEN];
lhf81a46f2022-02-13 23:57:37 -0800628 char ifaceName[LYNQ_IFACE_NAME_MAX_LEN];
lhf81a46f2022-02-13 23:57:37 -0800629 char *urc_msg = NULL;
rjw7ee7bb42023-01-18 11:34:28 +0800630
631 int size = p->dataSize();
632 p->readInt32(&resp_type);
633 p->readInt32(&urcid);
634 p->readInt32(&slot_id);
635 LYINFLOG("data lib recv urc:resp_type=%d,urcid=%d,slot_id=%d,size=%d\n",resp_type,urcid,slot_id,size);
636 switch(urcid)
lhf81a46f2022-02-13 23:57:37 -0800637 {
rjw7ee7bb42023-01-18 11:34:28 +0800638 case LYNQ_URC_DATA_CALL_STATUS_IND:
639 p->readInt32(&pdnState);
640 bzero(apn,LYNQ_APN_MAX_LEN);
641 bzero(apnType,LYNQ_APN_TYPE_MAX_LEN);
642 bzero(ifaceName,LYNQ_IFACE_NAME_MAX_LEN);
lha62e0882023-10-31 05:17:11 -0700643 if(pdnState != RIL_Data_Call_PdnState::PDN_DISCONNECTED)//PDN_DISCONNECTED
lhf81a46f2022-02-13 23:57:37 -0800644 {
rjw20006d12022-04-21 16:29:04 +0800645 urc_msg = strdupReadString_p(p);
rjw7ee7bb42023-01-18 11:34:28 +0800646 int len = strlen(urc_msg);
Hong_Liu6149f182023-05-12 02:15:14 -0700647 if((len < LYNQ_APN_MAX_LEN-1) && (len > 0))
rjw20006d12022-04-21 16:29:04 +0800648 {
rjw7ee7bb42023-01-18 11:34:28 +0800649 memcpy(apn,urc_msg,len+1);
rjw20006d12022-04-21 16:29:04 +0800650 }
Hong_Liu6149f182023-05-12 02:15:14 -0700651 free(urc_msg);
rjw7ee7bb42023-01-18 11:34:28 +0800652 urc_msg = strdupReadString_p(p);
653 len = strlen(urc_msg);
Hong_Liu6149f182023-05-12 02:15:14 -0700654 if((len < LYNQ_APN_TYPE_MAX_LEN-1) && (len > 0))
rjw7ee7bb42023-01-18 11:34:28 +0800655 {
656 memcpy(apnType,urc_msg,len+1);
657 }
Hong_Liu6149f182023-05-12 02:15:14 -0700658 free(urc_msg);
rjw7ee7bb42023-01-18 11:34:28 +0800659 urc_msg = strdupReadString_p(p);
660 len = strlen(urc_msg);
Hong_Liu6149f182023-05-12 02:15:14 -0700661 if((len < LYNQ_IFACE_NAME_MAX_LEN-1) && (len > 0))
rjw7ee7bb42023-01-18 11:34:28 +0800662 {
663 memcpy(ifaceName,urc_msg,strlen(urc_msg)+1);
664 }
Hong_Liu6149f182023-05-12 02:15:14 -0700665 free(urc_msg);
rjw7ee7bb42023-01-18 11:34:28 +0800666 //sendSignalDataCallStateChange();
Hong_Liudc46d412023-05-18 13:36:26 -0700667 apnId = getLynqApnID(apnType);
rjw7ee7bb42023-01-18 11:34:28 +0800668 if(apnId >= 0)
669 {
Hong_Liudc46d412023-05-18 13:36:26 -0700670 LYINFLOG("URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d,handle:%d",apnType,ifaceName,apn,pdnState,apnId);
rjw7ee7bb42023-01-18 11:34:28 +0800671 if(lynq_apn_table[apnId].hasTimeout==1)
672 {
rjwc63abb42023-03-31 18:22:42 +0800673 /*whether timeout?,real or not,*/
674 printf_apn_table();
rjw7ee7bb42023-01-18 11:34:28 +0800675 LYERRLOG("apn:%s has time out,deacive this apn",lynq_apn_table[apnId].apn);
rjw3938f262023-03-08 16:09:28 +0800676 if (NULL != lynq_apn_table[apnId].apn && NULL != lynq_apn_table[apnId].apnType && strlen(lynq_apn_table[apnId].apn)>0)
rjw7ee7bb42023-01-18 11:34:28 +0800677 {
678 LYERRLOG("deactive this time out APN");
679 lynq_deactive_data_call(&apnId);
680 }
rjwc63abb42023-03-31 18:22:42 +0800681 else
rjw7ee7bb42023-01-18 11:34:28 +0800682 {
rjwc63abb42023-03-31 18:22:42 +0800683 /*if apn lose,update apn and deactive all apn*/
684 LYERRLOG("this table is invalid update APN table");
rjw7ee7bb42023-01-18 11:34:28 +0800685 }
686 break;
687 }
rjwacdb2152023-02-07 14:12:49 +0800688 updateApnTable(&lynq_apn_table[apnId],apn,apnType,ifaceName);
Hong_Liu6149f182023-05-12 02:15:14 -0700689 printf_apn_table_debug(__FUNCTION__,__LINE__);
rjw7ee7bb42023-01-18 11:34:28 +0800690 }
691 /*To be completed*/
rjw20006d12022-04-21 16:29:04 +0800692 else
693 {
Hong_Liu6149f182023-05-12 02:15:14 -0700694 data_invaild_error = 1;
Hong_Liudc46d412023-05-18 13:36:26 -0700695 printf_apn_table_debug(__FUNCTION__,__LINE__);
696 apnId = getDeactApnID(apnType);
697 if(apnId < 0)
698 {
699 LYERRLOG("[%d]invalid apnId:%d",__LINE__,apnId);
700 break;
701 }
702 LYINFLOG("URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d,handle:%d",apnType,ifaceName,apn,pdnState,apnId);
703 updateDeactApn(apnId,pdnState);
704 printf_apn_table_debug(__FUNCTION__,__LINE__);
rjw20006d12022-04-21 16:29:04 +0800705 }
rjw7ee7bb42023-01-18 11:34:28 +0800706 pthread_mutex_lock(&s_lynq_urc_vector_mutex);
707 s_data_urc_wait_list.push_back(apnId);
708 pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
709 lynq_data_call_change_id = apnId;
rjwc3d6e582023-03-28 17:19:11 +0800710 sendSignalPdnChange();
rjw7ee7bb42023-01-18 11:34:28 +0800711 LYDBGLOG("data call state:%d",lynq_data_call);
712 if(lynq_data_call==1)
713 {
rjwf9ec3832023-04-12 10:59:15 +0800714 while (data_timelimit == 0)
715 {
716 LYINFLOG("client not ready to wait");
717 for (check_count = 0;check_count < 500;check_count++)
718 {
719 /*wait 10ms*/
720 usleep(10*1000);
721 }
722 LYERRLOG("client still without res");
723 break;
724 }
lha62e0882023-10-31 05:17:11 -0700725 if(pdnState == RIL_Data_Call_PdnState::PDN_TIMEOUT_CANCEL)
726 {
727 lynq_data_call = LYNQ_E_TIME_OUT;
728 }
729 else
730 {
731 lynq_data_call = 0;
732 }
rjw7ee7bb42023-01-18 11:34:28 +0800733 sendSignalDataCallStateChange();
rjwf9ec3832023-04-12 10:59:15 +0800734 data_timelimit = 0;
rjw7ee7bb42023-01-18 11:34:28 +0800735 }
Hong_Liu6149f182023-05-12 02:15:14 -0700736 printf_apn_table_debug(__FUNCTION__,__LINE__);
rjw20006d12022-04-21 16:29:04 +0800737 }
rjw7ee7bb42023-01-18 11:34:28 +0800738 else
rjw20006d12022-04-21 16:29:04 +0800739 {
rjw7ee7bb42023-01-18 11:34:28 +0800740 urc_msg = strdupReadString_p(p);
Hong_Liu6149f182023-05-12 02:15:14 -0700741 free(urc_msg);
742 urc_msg = strdupReadString_p(p);
rjw7ee7bb42023-01-18 11:34:28 +0800743 len = strlen(urc_msg);
744 if(len < LYNQ_APN_TYPE_MAX_LEN-1)
745 {
746 memcpy(apnType,urc_msg,len+1);
747 }
Hong_Liu6149f182023-05-12 02:15:14 -0700748 free(urc_msg);
rjw7ee7bb42023-01-18 11:34:28 +0800749 LYDBGLOG("[data thread_urc_recv] apntype:%s",apnType);
Hong_Liudc46d412023-05-18 13:36:26 -0700750 apnId = getLynqApnID(apnType);
rjw7ee7bb42023-01-18 11:34:28 +0800751 if(apnId >= 0)
752 {
Hong_Liu8d77acf2023-08-30 02:11:09 -0700753 LYINFLOG("[%d]URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d,handle:%d",__LINE__,apnType,ifaceName,apn,pdnState,apnId);
Hong_Liudc46d412023-05-18 13:36:26 -0700754 lynq_data_call_change_id = apnId;
755 //bzero(lynq_apn_table[apnId].apnType,LYNQ_APN_TYPE_MAX_LEN);//async clean
756 pthread_mutex_lock(&s_lynq_urc_vector_mutex);
757 s_data_urc_wait_list.push_back(apnId);
758 pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
759 sendSignalPdnChange();
760 }
761 else
762 {
763 apnId = getDeactApnID(apnType);
764 if(apnId < 0)
765 {
766 LYERRLOG("[%d]invalid apnId:%d",__LINE__,apnId);
767 break;
768 }
Hong_Liu8d77acf2023-08-30 02:11:09 -0700769 LYINFLOG("[%d]URC apnType:%s,ifaceName:%s,apn:%s pdnState:%d,handle:%d",__LINE__,apnType,ifaceName,apn,pdnState,apnId);
Hong_Liudc46d412023-05-18 13:36:26 -0700770 cleanDeactApn(apnId);
rjw7ee7bb42023-01-18 11:34:28 +0800771 lynq_data_call_change_id = apnId;
772 bzero(lynq_apn_table[apnId].apnType,LYNQ_APN_TYPE_MAX_LEN);//async clean
rjw3938f262023-03-08 16:09:28 +0800773 pthread_mutex_lock(&s_lynq_urc_vector_mutex);
774 s_data_urc_wait_list.push_back(apnId);
775 pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
Hong_Liu25edfe72023-06-16 01:13:42 -0700776 sendSignalDeactvied();
rjwc3d6e582023-03-28 17:19:11 +0800777 sendSignalPdnChange();
Hong_Liudc46d412023-05-18 13:36:26 -0700778 printf_apn_table_debug(__FUNCTION__,__LINE__);
rjw7ee7bb42023-01-18 11:34:28 +0800779 }
rjw7ee7bb42023-01-18 11:34:28 +0800780 LYDBGLOG("data call state:%d",lynq_data_call);
781 if(lynq_data_call==1)
782 {
rjwf9ec3832023-04-12 10:59:15 +0800783 while (data_timelimit == 0)
784 {
785 LYINFLOG("client not ready to wait");
786 for (check_count = 0;check_count < 500;check_count++)
787 {
788 /*wait 10ms*/
789 usleep(10*1000);
790 }
791 LYERRLOG("client still without res");
792 break;
793 }
rjw7ee7bb42023-01-18 11:34:28 +0800794 sendSignalDataCallStateChange();
795 lynq_data_call = 0;
rjwf9ec3832023-04-12 10:59:15 +0800796 data_timelimit = 0;
rjw7ee7bb42023-01-18 11:34:28 +0800797 }
Hong_Liu6149f182023-05-12 02:15:14 -0700798 printf_apn_table_debug(__FUNCTION__,__LINE__);
rjw7ee7bb42023-01-18 11:34:28 +0800799 }
800 break;
801 case LYNQ_URC_MODIFY_APNDB:
802 urc_msg = strdupReadString_p(p);
803 if (NULL == urc_msg)
804 {
805 LYERRLOG("error apn msg");
806 }
807 else
808 {
809 bzero(g_lynq_apn_result, 1024);
810 strcpy(g_lynq_apn_result, urc_msg);
811 sendSignalApnChange();
812 }
Hong_Liu6149f182023-05-12 02:15:14 -0700813 free(urc_msg);
rjw7ee7bb42023-01-18 11:34:28 +0800814 break;
815 case LYNQ_URC_RESET_APNDB:
816 {
rjw20006d12022-04-21 16:29:04 +0800817 urc_msg = strdupReadString_p(p);
818 if (NULL == urc_msg)
819 {
820 LYERRLOG("error apn msg");
821 }
822 else
823 {
824 bzero(g_lynq_apn_result, 1024);
825 strcpy(g_lynq_apn_result, urc_msg);
826 sendSignalApnChange();
827 }
Hong_Liu6149f182023-05-12 02:15:14 -0700828 free(urc_msg);
xy.heac05ee02023-11-29 14:36:31 +0800829 break;
rjw20006d12022-04-21 16:29:04 +0800830 }
xy.hef5d74f12023-10-23 06:48:52 -0700831 case LYNQ_TELEPHONY_RESTART:
832 {
833 if(slot_id == 0)
834 {
835 RLOGI("data has received telephony has restart");
836 RLOGI("handle set to 10");
837 lynq_telephony_restart_g = 1;
838 pthread_mutex_lock(&s_lynq_urc_vector_mutex);
839 s_data_urc_wait_list.push_back(TELEPHONY_RESTART);
840 pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
xy.hef5d74f12023-10-23 06:48:52 -0700841 sendSignalPdnChange();
842 }
xy.heac05ee02023-11-29 14:36:31 +0800843 break;
xy.hef5d74f12023-10-23 06:48:52 -0700844 }
rjw7ee7bb42023-01-18 11:34:28 +0800845 default:
846 break;
lhf81a46f2022-02-13 23:57:37 -0800847 }
rjw7ee7bb42023-01-18 11:34:28 +0800848
lhf81a46f2022-02-13 23:57:37 -0800849}
rjw7ee7bb42023-01-18 11:34:28 +0800850
rjw7ee7bb42023-01-18 11:34:28 +0800851int create_urc_vector_signal_thread()
852{
853 int ret;
rjw7ee7bb42023-01-18 11:34:28 +0800854 pthread_mutex_init(&s_lynq_urc_vector_mutex,NULL);
rjw7ee7bb42023-01-18 11:34:28 +0800855 pthread_mutex_lock(&s_lynq_urc_vector_mutex);
856 s_data_urc_wait_list.clear();
857 pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
lhf81a46f2022-02-13 23:57:37 -0800858 return 0;
859}
Hong_Liu25edfe72023-06-16 01:13:42 -0700860int get_imsi();
Hong_Liu7d9ac8d2023-07-24 00:40:31 -0700861int check_apn_status();
xy.hef5d74f12023-10-23 06:48:52 -0700862
lha62e0882023-10-31 05:17:11 -0700863int get_timeout_value();
lhf81a46f2022-02-13 23:57:37 -0800864int lynq_init_data(int uToken)
865{
rjw22947c22022-03-15 09:21:29 +0800866 if (g_lynq_data_init_flag == 1)
867 {
868 LYERRLOG("init twice is not allowed");
869 return -1;
870 }
871 g_lynq_data_init_flag = 1;
lhf81a46f2022-02-13 23:57:37 -0800872 int result = 0;
873 Global_uToken = uToken;
lhf81a46f2022-02-13 23:57:37 -0800874 LYLOGSET(LOG_INFO);
875 LYLOGEINIT(USER_LOG_TAG);
lha62e0882023-10-31 05:17:11 -0700876 int ret = get_timeout_value();
877 if(ret >= 30000)
878 {
879 g_data_call_timeout_value = ret;
880 }
881 else
882 {
883 LYERRLOG("timeout must greater or equal to 30s!!!");
884 }
lhf81a46f2022-02-13 23:57:37 -0800885 result = lynq_socket_client_start();
rjwed00d042022-05-25 09:18:16 +0800886 pthread_mutex_init(&g_lynq_data_sendto_mutex, NULL);
lhf81a46f2022-02-13 23:57:37 -0800887 if(result!=0)
888 {
889 LYERRLOG("init socket client fail!!!");
890 return -1;
891 }
rjw7ee7bb42023-01-18 11:34:28 +0800892 result = lynq_init_data_urc_thread();
893 if(result!=0)
894 {
895 LYERRLOG("init socket urc fail!!!");
896 return -1;
897 }
898
899 result = create_urc_vector_signal_thread();
lhf81a46f2022-02-13 23:57:37 -0800900 if(result!=0)
901 {
902 LYERRLOG("init socket urc fail!!!");
903 return -1;
904 }
905 memset(lynq_apn_table,0,sizeof(lynq_apn_table));
Hong_Liu7d9ac8d2023-07-24 00:40:31 -0700906 LYINFLOG("[%s] radio on/off solution 20230724",__FUNCTION__);
Hong_Liu25edfe72023-06-16 01:13:42 -0700907 int count = 0;
Hong_Liu7d9ac8d2023-07-24 00:40:31 -0700908 while(count < 2)//try recover the network within 10s.
909 {
910 result = check_apn_status();
911 if(result==0)
912 {
913 break;
914 }
915 radio_switch(0);
916 sleep(1);
917 radio_switch(1);
918 sleep(3);
919 count++;
920 }
921 LYINFLOG("[%s] count is %d",__FUNCTION__,count);
922 if(result!=0)
923 {
924 LYDBGLOG("lynq init call fail!!!");
925 return LYNQ_E_MD_NOT_READY;//
926 }
927 /* old
Hong_Liu25edfe72023-06-16 01:13:42 -0700928 while(count < 10)
929 {
930 result = get_imsi();
931 if(result==0)
932 {
933 break;
934 }
935 sleep(1);
936 count++;
937 }
938 LYINFLOG("[%s] count is %d",__FUNCTION__,count);
939 if(result!=0)
940 {
941 LYDBGLOG("lynq init call fail!!!");
942 return LYNQ_E_MD_NOT_READY;//
943 }
Hong_Liu7d9ac8d2023-07-24 00:40:31 -0700944 */
lhf81a46f2022-02-13 23:57:37 -0800945 LYDBGLOG("lynq init call success!!!");
946 return 0;
947
948}
949int lynq_deinit_data()
950{
951 int ret = -1;
rjw22947c22022-03-15 09:21:29 +0800952 if (g_lynq_data_init_flag == 0)
953 {
954 LYERRLOG("deinit twice is not allowed");
955 return ret;
956 }
957 g_lynq_data_init_flag = 0;
lhf81a46f2022-02-13 23:57:37 -0800958 for(int i =0;i<LYNQ_APN_CHANNEL_MAX;i++)
959 {
960 if(strlen(lynq_apn_table[i].apnType)!=0)
961 {
962 lynq_deactive_data_call(&i);
963 }
964 }
965 if(lynq_client_sockfd>0)
966 {
967 close(lynq_client_sockfd);
968 }
rjw7ee7bb42023-01-18 11:34:28 +0800969 ret = lynq_deinit_data_urc_thread();
rjweb65a2f2023-02-01 16:43:23 +0800970 if (ret != 0)
rjw22947c22022-03-15 09:21:29 +0800971 {
rjw7ee7bb42023-01-18 11:34:28 +0800972 LYERRLOG("lynq_deinit_data_urc_thread fail");
973 return ret;
rjw22947c22022-03-15 09:21:29 +0800974 }
rjwc3d6e582023-03-28 17:19:11 +0800975 pthread_mutex_lock(&s_lynq_urc_vector_mutex);
976 s_data_urc_wait_list.clear();
977 pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
lhf81a46f2022-02-13 23:57:37 -0800978 return 0;
979}
980int lynq_setup_data_call(int *handle)
981{
Hong_Liue54db8c2023-04-21 02:37:23 -0700982 int error = -1;
lha62e0882023-10-31 05:17:11 -0700983 if (g_lynq_data_init_flag == 0)
984 {
985 LYERRLOG("[%s][%d]Invalid operation",__FUNCTION__,__LINE__);
986 return error;
987 }
Hong_Liue54db8c2023-04-21 02:37:23 -0700988 #ifdef GSW_RIL_CFG //becuase gsw not have connman,data can not be triggered by connman.
989 LYINFLOG("[%s][%d]",__FUNCTION__,__LINE__);
Hong_Liue9879152023-04-25 20:40:26 -0700990 error = lynq_setup_data_call_sp(handle,NULL,"default",NULL,NULL,NULL,NULL,NULL);
Hong_Liue54db8c2023-04-21 02:37:23 -0700991 #else
Hong_Liu25edfe72023-06-16 01:13:42 -0700992 Parcel *p = NULL;
lhf81a46f2022-02-13 23:57:37 -0800993 lynq_client_t client;
994 int resp_type = -1;
995 int request = -1;
996 int slot_id = -1;
lhf81a46f2022-02-13 23:57:37 -0800997 int lynq_data_call_id = 0;
998 if(handle==NULL)
999 {
1000 LYERRLOG("handle is null!!!");
1001 return LYNQ_E_NULL_ANONALY;
1002 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001003 client.uToken = get_utoken();
lhf81a46f2022-02-13 23:57:37 -08001004 client.request = 27;//RIL_REQUEST_SETUP_DATA_CALL
1005 client.paramLen = 0;
1006 bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
1007 LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
Hong_Liu55c62f52023-08-24 19:05:50 -07001008 lynq_data_call_id = get_handle("default");
rjwc63abb42023-03-31 18:22:42 +08001009 if (lynq_data_call_id < 0)
1010 {
1011 LYERRLOG("update apn table fail error id = %d",lynq_data_call_id);
Hong_Liu7e1b85e2023-05-16 05:51:57 -07001012 return LYNQ_E_NULL_ANONALY+1;
rjwc63abb42023-03-31 18:22:42 +08001013 }
Hong_Liu7e1b85e2023-05-16 05:51:57 -07001014 *handle = lynq_data_call_id;//T8TSK-211 (2023/5/16) why? If it times out, the client application will also try to reconnect.
1015 //Reconnection needs to be deactivated first, and deactivation needs to know which apn to activate.
rjw733b9832023-04-03 10:20:08 +08001016 lynq_data_call = 1;
rjwed00d042022-05-25 09:18:16 +08001017 pthread_mutex_lock(&g_lynq_data_sendto_mutex);
lhf81a46f2022-02-13 23:57:37 -08001018 if(send_request(lynq_client_sockfd,&client)==-1)
1019 {
1020 LYERRLOG("send request fail");
1021 perror("[LYNQ_DATA] send request fail:");
Hong_Liu25edfe72023-06-16 01:13:42 -07001022 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
Hong_Liu7e1b85e2023-05-16 05:51:57 -07001023 return LYNQ_E_NULL_ANONALY+2;
lhf81a46f2022-02-13 23:57:37 -08001024 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001025 //get_response(lynq_client_sockfd,p);
1026 error = wait_response(lynq_client_sockfd,p,client.uToken);
1027 if(error!=0)
1028 {
1029 LYERRLOG("wait_response fail,ret:%d",error);
1030 printf_apn_table_debug(__FUNCTION__,__LINE__);
1031 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
1032 return error;
1033 }
rjwed00d042022-05-25 09:18:16 +08001034 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
Hong_Liuaa7f4b32023-07-19 07:51:25 -07001035 JumpHeader(p,&resp_type,&client.uToken,&request,&slot_id,&error);
Hong_Liu25edfe72023-06-16 01:13:42 -07001036 free_parcel(p);
lhf81a46f2022-02-13 23:57:37 -08001037 LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
lhf81a46f2022-02-13 23:57:37 -08001038 if(error==0)
1039 {
rjwf9ec3832023-04-12 10:59:15 +08001040 data_timelimit = 1;
lha62e0882023-10-31 05:17:11 -07001041 if (waitDataCallstateChange(g_data_call_timeout_value) == ETIMEDOUT)
lhf81a46f2022-02-13 23:57:37 -08001042 {
1043 error = LYNQ_E_TIME_OUT;
1044 LYERRLOG("timeout:wait data Call state fail!!!");
1045 lynq_apn_table[lynq_data_call_id].hasTimeout = 1;
Hong_Liu6149f182023-05-12 02:15:14 -07001046 if (data_invaild_error == 1)
1047 {
1048 data_invaild_error = 0;
1049 LYERRLOG("urc apn info error!!!");
1050 return 8085;
1051 }
1052 printf_apn_table_debug(__FUNCTION__,__LINE__);
lhf81a46f2022-02-13 23:57:37 -08001053 return error;
1054 }
lha62e0882023-10-31 05:17:11 -07001055 if(lynq_data_call == LYNQ_E_TIME_OUT)
1056 {
1057 error = LYNQ_E_TIME_OUT;
1058 LYERRLOG("PDN_TIMEOUT_CANCLE:wait data Call state fail!!!");
1059 printf_apn_table_debug(__FUNCTION__,__LINE__);
1060 return error;
1061 }
lhf81a46f2022-02-13 23:57:37 -08001062 }
Hong_Liu6149f182023-05-12 02:15:14 -07001063 printf_apn_table_debug(__FUNCTION__,__LINE__);
Hong_Liue54db8c2023-04-21 02:37:23 -07001064 #endif //GSW_RIL_CFG
lhf81a46f2022-02-13 23:57:37 -08001065 return error;
1066}
rjw7ee7bb42023-01-18 11:34:28 +08001067
lhf81a46f2022-02-13 23:57:37 -08001068int lynq_deactive_data_call(int *handle)
1069{
Hong_Liu25edfe72023-06-16 01:13:42 -07001070 Parcel *p = NULL;
lhf81a46f2022-02-13 23:57:37 -08001071 lynq_client_t client;
1072 int resp_type = -1;
1073 int request = -1;
1074 int slot_id = -1;
1075 int error = -1;
1076 int lynq_data_call_id = -1;
rjw1309e232022-07-22 09:54:06 +08001077 int ret = 0;
lha62e0882023-10-31 05:17:11 -07001078 if (g_lynq_data_init_flag == 0)
1079 {
1080 LYERRLOG("[%s][%d]Invalid operation",__FUNCTION__,__LINE__);
1081 return error;
1082 }
lhf81a46f2022-02-13 23:57:37 -08001083 if(handle==NULL)
1084 {
1085 LYERRLOG("handle is null!!!");
1086 return -1;
1087 }
rjw1309e232022-07-22 09:54:06 +08001088 ret = handleCheck(*handle);
1089 if (ret != 0)
1090 {
1091 LYERRLOG("incomming handle is invalid");
1092 return -1;
1093 }
1094 lynq_data_call_id = *handle;
Hong_Liu25edfe72023-06-16 01:13:42 -07001095 client.uToken = get_utoken();
lhf81a46f2022-02-13 23:57:37 -08001096 client.request = 41;//RIL_REQUEST_DEACTIVATE_DATA_CALL
Hong_Liue3d35262023-05-04 00:20:12 -07001097 client.paramLen = 0;
1098 bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
1099 #ifdef GSW_RIL_CFG
1100 client.paramLen = 1;
1101 sprintf(client.param,"%s",lynq_apn_table[lynq_data_call_id].apnType);
1102 #else
1103 if(strcmp(lynq_apn_table[lynq_data_call_id].apnType,"default")!=0)
lh13586612022-01-11 21:58:58 -08001104 {
lhf81a46f2022-02-13 23:57:37 -08001105 client.paramLen = 1;
lhf81a46f2022-02-13 23:57:37 -08001106 sprintf(client.param,"%s",lynq_apn_table[lynq_data_call_id].apnType);
1107 }
Hong_Liue3d35262023-05-04 00:20:12 -07001108 #endif //GSW_RIL_CFG
lhf81a46f2022-02-13 23:57:37 -08001109 LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
rjwed00d042022-05-25 09:18:16 +08001110 pthread_mutex_lock(&g_lynq_data_sendto_mutex);
lhf81a46f2022-02-13 23:57:37 -08001111 if(send_request(lynq_client_sockfd,&client)==-1)
1112 {
1113 LYERRLOG("send request fail");
1114 perror("[LYNQ_DATA] send request fail:");
Hong_Liu25edfe72023-06-16 01:13:42 -07001115 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
lhf81a46f2022-02-13 23:57:37 -08001116 return -1;
1117 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001118 //get_response(lynq_client_sockfd,p);
1119 error = wait_response(lynq_client_sockfd,p,client.uToken);
1120 if(error!=0)
1121 {
1122 LYERRLOG("wait_response fail,ret:%d",error);
1123 printf_apn_table_debug(__FUNCTION__,__LINE__);
1124 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
1125 return error;
1126 }
rjwed00d042022-05-25 09:18:16 +08001127 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
Hong_Liu25edfe72023-06-16 01:13:42 -07001128 JumpHeader(p,&resp_type,&client.uToken,&request,&slot_id,&error);
1129 LYINFLOG("resp_type=%d,uToken=%d,request=%d,slot_id=%d,error_code=%d",resp_type,client.uToken,request,slot_id,error);
lhf81a46f2022-02-13 23:57:37 -08001130 cleanOnceApnTable(lynq_data_call_id);
Hong_Liu6149f182023-05-12 02:15:14 -07001131 printf_apn_table_debug(__FUNCTION__,__LINE__);
Hong_Liu25edfe72023-06-16 01:13:42 -07001132 if(error==0)
1133 {
1134 if(waitDeactived(20000)==ETIMEDOUT)
1135 {
1136 error = LYNQ_E_TIME_OUT;
1137 LYERRLOG("[lynq_deactive_data_call] timeout:wait data Call state fail!!!");
1138 printf_apn_table_debug(__FUNCTION__,__LINE__);
1139 }
1140 }
1141 free_parcel(p);
lhf81a46f2022-02-13 23:57:37 -08001142 return error;
1143}
1144int lynq_setup_data_call_sp(int *handle,char *apn,char *apnType,char *user,char *password,char *authType,char *normalProtocol,char *roamingProtocol)
1145{
Hong_Liu25edfe72023-06-16 01:13:42 -07001146 Parcel *p = NULL;
lhf81a46f2022-02-13 23:57:37 -08001147 lynq_client_t client;
1148 int resp_type = -1;
1149 int request = -1;
1150 int slot_id = -1;
1151 int error = -1;
lhf81a46f2022-02-13 23:57:37 -08001152 int lynq_data_call_id = -1;
1153 char *argv[10] = {};
lha62e0882023-10-31 05:17:11 -07001154 if (g_lynq_data_init_flag == 0)
1155 {
1156 LYERRLOG("[%s][%d]Invalid operation",__FUNCTION__,__LINE__);
1157 return error;
1158 }
Hong_Liue54db8c2023-04-21 02:37:23 -07001159 #ifdef GSW_RIL_CFG
1160 LYINFLOG("[%s][%d]",__FUNCTION__,__LINE__);
1161 if(handle==NULL||apnType==NULL)
1162 {
1163 LYERRLOG("handle or apntype is null!!!");
1164 return -1;
1165 }
1166 #else
lhf81a46f2022-02-13 23:57:37 -08001167 if(handle==NULL||apn==NULL||apnType==NULL)
1168 {
1169 LYERRLOG("handle ,apn or apntype is null!!!");
Hong_Liu7e1b85e2023-05-16 05:51:57 -07001170 return LYNQ_E_NULL_ANONALY;
lhf81a46f2022-02-13 23:57:37 -08001171 }
Hong_Liue54db8c2023-04-21 02:37:23 -07001172 #endif //GSW_RIL_CFG
lhf81a46f2022-02-13 23:57:37 -08001173 if(user==NULL)
1174 {
1175 argv[1] = "null";
1176 }
1177 else
1178 {
1179 argv[1] = user;
lh13586612022-01-11 21:58:58 -08001180 }
1181 if(password==NULL)
1182 {
lhf81a46f2022-02-13 23:57:37 -08001183 argv[2] = "null";
lh13586612022-01-11 21:58:58 -08001184 }
1185 else
1186 {
lhf81a46f2022-02-13 23:57:37 -08001187 argv[2] = password;
lh13586612022-01-11 21:58:58 -08001188 }
1189 if(authType==NULL)
1190 {
lhf81a46f2022-02-13 23:57:37 -08001191 argv[3] = "null";
lh13586612022-01-11 21:58:58 -08001192 }
1193 else
1194 {
lhf81a46f2022-02-13 23:57:37 -08001195 argv[3] = authType;
lh13586612022-01-11 21:58:58 -08001196 }
1197 if(normalProtocol==NULL)
1198 {
lhf81a46f2022-02-13 23:57:37 -08001199 argv[4] = "null";
lh13586612022-01-11 21:58:58 -08001200 }
1201 else
1202 {
lhf81a46f2022-02-13 23:57:37 -08001203 argv[4] = normalProtocol;
lh13586612022-01-11 21:58:58 -08001204 }
1205 if(roamingProtocol==NULL)
1206 {
lhf81a46f2022-02-13 23:57:37 -08001207 argv[5] = "null";
lh13586612022-01-11 21:58:58 -08001208 }
1209 else
1210 {
lhf81a46f2022-02-13 23:57:37 -08001211 argv[5] = roamingProtocol;
1212 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001213 client.uToken = get_utoken();
lhf81a46f2022-02-13 23:57:37 -08001214 client.request = 27;//RIL_REQUEST_SETUP_DATA_CALL
1215 client.paramLen = 7;
1216 bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
Hong_Liue54db8c2023-04-21 02:37:23 -07001217 #ifdef GSW_RIL_CFG
1218 if(NULL == apn)
1219 {
1220 sprintf(client.param,"null %s %s %s %s %s %s",apnType,argv[1],argv[2],argv[3],argv[4],argv[5]);
1221 }
1222 else
1223 {
1224 sprintf(client.param,"%s %s %s %s %s %s %s",apn,apnType,argv[1],argv[2],argv[3],argv[4],argv[5]);
1225 }
1226 #else
lhf81a46f2022-02-13 23:57:37 -08001227 sprintf(client.param,"%s %s %s %s %s %s %s",apn,apnType,argv[1],argv[2],argv[3],argv[4],argv[5]);
Hong_Liue54db8c2023-04-21 02:37:23 -07001228 #endif //GSW_RIL_CFG
lhf81a46f2022-02-13 23:57:37 -08001229 LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
Hong_Liu55c62f52023-08-24 19:05:50 -07001230 lynq_data_call_id = get_handle(apnType);
rjwc63abb42023-03-31 18:22:42 +08001231 if (lynq_data_call_id < 0)
1232 {
1233 LYERRLOG("update apn table fail error id = %d",lynq_data_call_id);
Hong_Liu7e1b85e2023-05-16 05:51:57 -07001234 return LYNQ_E_NULL_ANONALY+1;
rjwc63abb42023-03-31 18:22:42 +08001235 }
Hong_Liu7e1b85e2023-05-16 05:51:57 -07001236 *handle = lynq_data_call_id;//T8TSK-211 (2023/5/16)
rjw733b9832023-04-03 10:20:08 +08001237 lynq_data_call = 1;
rjwed00d042022-05-25 09:18:16 +08001238 pthread_mutex_lock(&g_lynq_data_sendto_mutex);
lhf81a46f2022-02-13 23:57:37 -08001239 if(send_request(lynq_client_sockfd,&client)==-1)
1240 {
1241 LYERRLOG("send request fail");
1242 perror("[LYNQ_DATA] send request fail:");
Hong_Liu25edfe72023-06-16 01:13:42 -07001243 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
Hong_Liu7e1b85e2023-05-16 05:51:57 -07001244 return LYNQ_E_NULL_ANONALY+2;
lhf81a46f2022-02-13 23:57:37 -08001245 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001246 //get_response(lynq_client_sockfd,p);
1247 error = wait_response(lynq_client_sockfd,p,client.uToken);
1248 if(error!=0)
1249 {
1250 LYERRLOG("wait_response fail,ret:%d",error);
1251 printf_apn_table_debug(__FUNCTION__,__LINE__);
1252 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
1253 return error;
1254 }
rjwed00d042022-05-25 09:18:16 +08001255 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
Hong_Liu25edfe72023-06-16 01:13:42 -07001256 JumpHeader(p,&resp_type,&client.uToken,&request,&slot_id,&error);
1257 LYINFLOG("resp_type=%d,uToken=%d,request=%d,slot_id=%d,error_code=%d",resp_type,client.uToken,request,slot_id,error);
1258 free_parcel(p);
lhf81a46f2022-02-13 23:57:37 -08001259 if(error==0)
1260 {
Hong_Liu7e1b85e2023-05-16 05:51:57 -07001261 data_timelimit = 1;
lha62e0882023-10-31 05:17:11 -07001262 if(waitDataCallstateChange(g_data_call_timeout_value)==ETIMEDOUT)
lhf81a46f2022-02-13 23:57:37 -08001263 {
1264 error = LYNQ_E_TIME_OUT;
1265 LYERRLOG("timeout:wait data Call state fail!!!");
1266 lynq_apn_table[lynq_data_call_id].hasTimeout = 1;
Hong_Liu6149f182023-05-12 02:15:14 -07001267 if (data_invaild_error == 1)
1268 {
1269 data_invaild_error = 0;
1270 LYERRLOG("urc apn info error!!!");
1271 return 8085;
1272 }
1273 printf_apn_table_debug(__FUNCTION__,__LINE__);
lhf81a46f2022-02-13 23:57:37 -08001274 return error;
1275 }
lha62e0882023-10-31 05:17:11 -07001276 if(lynq_data_call == LYNQ_E_TIME_OUT)
1277 {
1278 error = LYNQ_E_TIME_OUT;
1279 LYERRLOG("PDN_TIMEOUT_CANCLE:wait data Call state fail!!!");
1280 printf_apn_table_debug(__FUNCTION__,__LINE__);
1281 return error;
1282 }
lhf81a46f2022-02-13 23:57:37 -08001283 }
Hong_Liu6149f182023-05-12 02:15:14 -07001284 printf_apn_table_debug(__FUNCTION__,__LINE__);
lhf81a46f2022-02-13 23:57:37 -08001285 return error;
1286}
1287/*
1288int lynq_deactive_data_call_sp(int *handle,char *apnType)
1289{
1290 Parcel p;
1291 lynq_client_t client;
1292 int resp_type = -1;
1293 int request = -1;
1294 int slot_id = -1;
1295 int error = -1;
1296 if(handle==NULL||apnType==NULL)
1297 {
1298 LYERRLOG("handle is null!!!");
1299 return -1;
1300 }
1301 client.uToken = Global_uToken;
1302 client.request = 41;//RIL_REQUEST_DEACTIVATE_DATA_CALL
1303 client.paramLen = 1;
1304 bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
1305 sprintf(client.param,"%s",apnType);
1306 LYERRLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
1307 if(send_request(lynq_client_sockfd,&client)==-1)
1308 {
1309 LYERRLOG("send request fail");
1310 perror("[LYNQ_DATA] send request fail:");
1311 return -1;
1312 }
1313 get_response(lynq_client_sockfd,p);
rjwfa532972022-09-16 13:39:41 +08001314 JumpHeader(p,&resp_type,&request,&slot_id,&error);
lhf81a46f2022-02-13 23:57:37 -08001315 LYINFLOG("resp_type=%d,request=%d,slot_id=%d,error_code=%d",resp_type,request,slot_id,error);
1316 return error;
1317}
1318*/
1319int getDataCallLists(lynq_data_call_response_v11_t dataCallList[LYNQ_APN_CHANNEL_MAX],int *realNum)
1320{
Hong_Liu25edfe72023-06-16 01:13:42 -07001321 Parcel *p = NULL;
lhf81a46f2022-02-13 23:57:37 -08001322 lynq_client_t client;
1323 int resp_type = -1;
q.huang7de1d662022-09-13 14:19:24 +08001324 int token;
Hong_Liu25edfe72023-06-16 01:13:42 -07001325 int request = -1;
lhf81a46f2022-02-13 23:57:37 -08001326 int slot_id = -1;
1327 int error = -1;
1328 int version =0;
1329 int num = 0;
lhf81a46f2022-02-13 23:57:37 -08001330 char *temp_char = NULL;
1331 if(dataCallList==NULL)
1332 {
1333 LYERRLOG("dataCallList is null!!!");
1334 return -1;
1335 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001336 client.uToken = get_utoken();;
lhf81a46f2022-02-13 23:57:37 -08001337 client.request = 57;//RIL_REQUEST_DATA_CALL_LIST
1338 client.paramLen = 0;
1339 bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
1340 LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
rjwed00d042022-05-25 09:18:16 +08001341 pthread_mutex_lock(&g_lynq_data_sendto_mutex);
lhf81a46f2022-02-13 23:57:37 -08001342 if(send_request(lynq_client_sockfd,&client)==-1)
1343 {
1344 LYERRLOG("send request fail");
1345 perror("[LYNQ_DATA] send request fail:");
Hong_Liu25edfe72023-06-16 01:13:42 -07001346 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
lhf81a46f2022-02-13 23:57:37 -08001347 return -1;
1348 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001349 //get_response(lynq_client_sockfd,p);
1350 error = wait_response(lynq_client_sockfd,p,client.uToken);
1351 if(error!=0)
1352 {
1353 LYERRLOG("wait_response fail,ret:%d",error);
1354 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
1355 return error;
1356 }
rjwed00d042022-05-25 09:18:16 +08001357 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
Hong_Liu25edfe72023-06-16 01:13:42 -07001358 if(JumpHeader(p,&resp_type,&client.uToken,&request,&slot_id,&error)!=0)
rjwfa532972022-09-16 13:39:41 +08001359 {
Hong_Liu25edfe72023-06-16 01:13:42 -07001360 LYERRLOG("JumpHeader fail");
rjwfa532972022-09-16 13:39:41 +08001361 return -1;
1362 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001363 LYINFLOG("resp_type=%d,uToken=%d,request=%d,slot_id=%d,error_code=%d",resp_type,client.uToken,request,slot_id,error);
1364 p->readInt32(&version);
lhf81a46f2022-02-13 23:57:37 -08001365 if(version==11)
1366 {
Hong_Liu25edfe72023-06-16 01:13:42 -07001367 p->readInt32(&num);
lhf81a46f2022-02-13 23:57:37 -08001368 *realNum = num;
1369 for (int i = 0; i < num; i++)
1370 {
Hong_Liu25edfe72023-06-16 01:13:42 -07001371 p->readInt32(&dataCallList[i].status);
1372 p->readInt32(&dataCallList[i].suggestedRetryTime);
1373 p->readInt32(&dataCallList[i].cid);
1374 p->readInt32(&dataCallList[i].active);
1375 temp_char = strdupReadString_p(p);
Hong_Liu6149f182023-05-12 02:15:14 -07001376 LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
1377 if(temp_char)
1378 {
1379 memcpy(dataCallList[i].type,temp_char,strlen(temp_char)+1);
1380 free(temp_char);
1381 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001382 temp_char = strdupReadString_p(p);
Hong_Liu6149f182023-05-12 02:15:14 -07001383 LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
1384 if(temp_char)
1385 {
1386 memcpy(dataCallList[i].ifname,temp_char,strlen(temp_char)+1);
1387 free(temp_char);
1388 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001389 temp_char = strdupReadString_p(p);
Hong_Liu6149f182023-05-12 02:15:14 -07001390 LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
1391 if(temp_char)
1392 {
1393 memcpy(dataCallList[i].addresses,temp_char,strlen(temp_char)+1);
1394 free(temp_char);
1395 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001396 temp_char = strdupReadString_p(p);
Hong_Liu6149f182023-05-12 02:15:14 -07001397 LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
1398 if(temp_char)
1399 {
1400 memcpy(dataCallList[i].dnses,temp_char,strlen(temp_char)+1);
1401 free(temp_char);
1402 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001403 temp_char = strdupReadString_p(p);
Hong_Liu6149f182023-05-12 02:15:14 -07001404 LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
1405 if(temp_char)
1406 {
1407 memcpy(dataCallList[i].gateways,temp_char,strlen(temp_char)+1);
1408 free(temp_char);
1409 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001410 temp_char = strdupReadString_p(p);
Hong_Liu6149f182023-05-12 02:15:14 -07001411 LYINFLOG("[%s][%d]%s",__FUNCTION__,__LINE__,temp_char);
1412 if(temp_char)
1413 {
1414 memcpy(dataCallList[i].pcscf,temp_char,strlen(temp_char)+1);
1415 free(temp_char);
1416 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001417 p->readInt32(&dataCallList[i].mtu);
lhf81a46f2022-02-13 23:57:37 -08001418 }
1419 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001420 free_parcel(p);
lhf81a46f2022-02-13 23:57:37 -08001421 return error;
1422}
Hong_Liu7163bbe2023-06-04 03:03:44 -07001423
1424int lynq_get_apn_msg(int handle,lynq_apn_msg_t *apn_msg)
1425{
1426 LYINFLOG("[lynq_get_apn_msg] enter,handle:%d",handle);
1427 if((handle < 0) || (handle > 6) || (NULL == apn_msg))
1428 {
1429 LYERRLOG("handle value error,or apn_msg is null");
1430 return LYNQ_E_NULL_ANONALY;
1431 }
1432 apn_msg->handle = handle;
1433 if(apn_msg->apn!=NULL)
1434 {
1435 memcpy(apn_msg->apn,lynq_apn_table[handle].apn,LYNQ_APN_MAX_LEN);
1436 }
1437 if(apn_msg->apnType!=NULL)
1438 {
1439 memcpy(apn_msg->apnType,lynq_apn_table[handle].apnType,LYNQ_APN_TYPE_MAX_LEN);
1440 }
1441 return 0;
1442}
1443
lhf81a46f2022-02-13 23:57:37 -08001444int lynq_get_data_call_list(int *handle,lynq_data_call_response_v11_t *dataCallList)
1445{
1446 lynq_data_call_response_v11_t interDataCallList[LYNQ_APN_CHANNEL_MAX]={};
1447 int number = 0;
1448 int lynq_data_call_id = 0;
1449 int error = 0;
lha62e0882023-10-31 05:17:11 -07001450 if (g_lynq_data_init_flag == 0)
1451 {
1452 LYERRLOG("[%s][%d]Invalid operation",__FUNCTION__,__LINE__);
1453 return -1;
1454 }
lhf81a46f2022-02-13 23:57:37 -08001455 lynq_data_call_id = *handle;
Hong_Liu7163bbe2023-06-04 03:03:44 -07001456 if((handle==NULL) || (dataCallList==NULL))
lhf81a46f2022-02-13 23:57:37 -08001457 {
Hong_Liu7163bbe2023-06-04 03:03:44 -07001458 LYERRLOG("[lynq_get_data_call_list] handle or datacalllist is NULL");
lhf81a46f2022-02-13 23:57:37 -08001459 return LYNQ_E_NULL_ANONALY;
1460 }
Hong_Liu7163bbe2023-06-04 03:03:44 -07001461 if ((*handle < 0) || (*handle > 6))
rjw3938f262023-03-08 16:09:28 +08001462 {
Hong_Liu7163bbe2023-06-04 03:03:44 -07001463 LYERRLOG("[lynq_get_data_call_list] handle value error");
1464 return LYNQ_E_NULL_ANONALY;
rjw3938f262023-03-08 16:09:28 +08001465 }
Hong_Liu7163bbe2023-06-04 03:03:44 -07001466 LYINFLOG("[lynq_get_data_call_list] incoming handle value: %d",*handle);
lhf81a46f2022-02-13 23:57:37 -08001467 memset(interDataCallList,0,sizeof(interDataCallList));
1468 error = getDataCallLists(interDataCallList,&number);
1469 if(error == 0)
1470 {
1471 for(int i = 0;i < number;i++)
1472 {
1473 if(strcmp(interDataCallList[i].ifname,lynq_apn_table[lynq_data_call_id].ifaceName)==0)
1474 {
1475 dataCallList->active = interDataCallList[i].active;
1476 dataCallList->suggestedRetryTime = interDataCallList[i].suggestedRetryTime;
1477 dataCallList->cid = interDataCallList[i].cid;
1478 dataCallList->status = interDataCallList[i].status;
1479 dataCallList->mtu = interDataCallList[i].mtu;
1480 memcpy(dataCallList->addresses,interDataCallList[i].addresses,sizeof(interDataCallList[i].addresses));
1481 memcpy(dataCallList->ifname,interDataCallList[i].ifname,sizeof(interDataCallList[i].ifname));
1482 memcpy(dataCallList->dnses,interDataCallList[i].dnses,sizeof(interDataCallList[i].dnses));
1483 memcpy(dataCallList->type,interDataCallList[i].type,sizeof(interDataCallList[i].type));
1484 memcpy(dataCallList->gateways,interDataCallList[i].gateways,sizeof(interDataCallList[i].gateways));
1485 memcpy(dataCallList->pcscf,interDataCallList[i].pcscf,sizeof(interDataCallList[i].pcscf));
1486 LYDBGLOG("ifname:%s,addr:%s",dataCallList->ifname,dataCallList->addresses);
1487 }
1488 }
1489 }
1490 return error;
1491}
1492int lynq_wait_data_call_state_change(int *handle)
1493{
rjwc3d6e582023-03-28 17:19:11 +08001494 if (data_waiting_status == 1)
1495 {
1496 LYDBGLOG("some thread is waiting");
1497 return -3;
1498 }
1499 LYDBGLOG("is empty :%d",s_data_urc_wait_list.empty());
1500 if (s_data_urc_wait_list.empty())
1501 {
1502 LYDBGLOG("start wait");
1503 data_waiting_status = 1;
1504 waitPdnChange();
1505 }
1506 data_waiting_status = 0;
rjw7ee7bb42023-01-18 11:34:28 +08001507 std::vector<int>::iterator iter;
rjw7ee7bb42023-01-18 11:34:28 +08001508
1509 pthread_mutex_lock(&s_lynq_urc_vector_mutex);
1510 iter = s_data_urc_wait_list.begin();
rjwc3d6e582023-03-28 17:19:11 +08001511 if (iter != s_data_urc_wait_list.end())
1512 {
1513 *handle = *iter;
1514 }
rjw7ee7bb42023-01-18 11:34:28 +08001515 s_data_urc_wait_list.erase(iter);
1516 pthread_mutex_unlock(&s_lynq_urc_vector_mutex);
1517
Hong_Liudc46d412023-05-18 13:36:26 -07001518 LYINFLOG("lynq_wait_data_call_state_change handle:%d",*handle);
lhf81a46f2022-02-13 23:57:37 -08001519 return 0;
1520}
1521/*Warren add for T800 platform 2021/11/19 end*/
rjw20006d12022-04-21 16:29:04 +08001522
1523/*Typethree add for T800 platform 2022/04/21 start*/
rjw61fcae32022-08-18 14:03:39 +08001524
1525int insert_apn_char(char *agc, char *id,char *mcc, char *mnc, char *apn, char *apntype, char *user, char *password, char *normalprotocol, char *roamingprotocol, char *carrier)
rjw20006d12022-04-21 16:29:04 +08001526{
1527 char strtmp[10][32];
rjw61fcae32022-08-18 14:03:39 +08001528 if (id == NULL)
rjw0cdacbc2022-06-22 10:51:07 +08001529 {
rjw61fcae32022-08-18 14:03:39 +08001530 sprintf(strtmp[0], "id=;");
rjw0cdacbc2022-06-22 10:51:07 +08001531 }
rjw61fcae32022-08-18 14:03:39 +08001532 else
rjw0cdacbc2022-06-22 10:51:07 +08001533 {
rjw61fcae32022-08-18 14:03:39 +08001534 sprintf(strtmp[0], "id=%s;", id);
rjw0cdacbc2022-06-22 10:51:07 +08001535 }
rjw20006d12022-04-21 16:29:04 +08001536 if (mcc == NULL)
1537 {
1538 sprintf(strtmp[1], "mcc=;");
1539 }
1540 else
1541 {
1542 sprintf(strtmp[1], "mcc=%s;", mcc);
1543 }
1544 if (mnc == NULL)
1545 {
rjw61fcae32022-08-18 14:03:39 +08001546 sprintf(strtmp[2], "mnc=;");
rjw20006d12022-04-21 16:29:04 +08001547 }
1548 else
1549 {
1550 sprintf(strtmp[2], "mnc=%s;", mnc);
1551 }
1552 if (apn == NULL)
1553 {
1554 sprintf(strtmp[3], "apn=;");
1555 }
1556 else
1557 {
1558 sprintf(strtmp[3], "apn=%s;", apn);
1559 }
1560 if (apntype == NULL)
1561 {
1562 sprintf(strtmp[4], "apntype=;");
1563 }
1564 else
1565 {
1566 sprintf(strtmp[4], "apntype=%s;", apntype);
1567 }
1568 if (user == NULL)
1569 {
1570 sprintf(strtmp[5], "user=;");
1571 }
1572 else
1573 {
1574 sprintf(strtmp[5], "user=%s;", user);
1575 }
1576 if (password == NULL)
1577 {
1578 sprintf(strtmp[6], "password=;");
1579 }
1580 else
1581 {
1582 sprintf(strtmp[6], "password=%s;", password);
1583 }
1584 if (normalprotocol == NULL)
1585 {
1586 sprintf(strtmp[7], "normalprotocol=;");
1587 }
1588 else
1589 {
1590 sprintf(strtmp[7], "normalprotocol=%s;", normalprotocol);
1591 }
1592 if (roamingprotocol == NULL)
1593 {
1594 sprintf(strtmp[8], "roamingprotocol=;");
1595 }
1596 else
1597 {
1598 sprintf(strtmp[8], "roamingprotocol=%s;", roamingprotocol);
1599 }
1600 if (carrier == NULL)
1601 {
1602 sprintf(strtmp[9], "carrier=;");
1603 }
1604 else
1605 {
1606 sprintf(strtmp[9], "carrier=%s;", carrier);
1607 }
rjw61fcae32022-08-18 14:03:39 +08001608 sprintf(agc, "%s%s%s%s%s%s%s%s%s%s",strtmp[0], strtmp[1], strtmp[2], strtmp[3], strtmp[4], strtmp[5], strtmp[6], strtmp[7], strtmp[8], strtmp[9]);
rjw0cdacbc2022-06-22 10:51:07 +08001609
rjw20006d12022-04-21 16:29:04 +08001610 return 0;
1611}
1612
1613int modify_apn_char(char *agc, char *id, char *mcc, char *mnc, char *apn, char *apntype, char *user, char *password, char *normalprotocol, char *roamingprotocol, char *carrier)
1614{
1615 char strtmp[10][32];
1616 if (id == NULL)
1617 {
1618 sprintf(strtmp[0], "id=;");
1619 }
1620 else
1621 {
1622 sprintf(strtmp[0], "id=%s;", id);
1623 }
1624 if (mcc == NULL)
1625 {
1626 sprintf(strtmp[1], "mcc=;");
1627 }
1628 else
1629 {
1630 sprintf(strtmp[1], "mcc=%s;", mcc);
1631 }
1632 if (mnc == NULL)
1633 {
1634 sprintf(strtmp[2], "mnc=;");
1635 }
1636 else
1637 {
1638 sprintf(strtmp[2], "mnc=%s;", mnc);
1639 }
1640 if (apn == NULL)
1641 {
1642 sprintf(strtmp[3], "apn=;");
1643 }
1644 else
1645 {
1646 sprintf(strtmp[3], "apn=%s;", apn);
1647 }
1648 if (apntype == NULL)
1649 {
1650 sprintf(strtmp[4], "apntype=;");
1651 }
1652 else
1653 {
1654 sprintf(strtmp[4], "apntype=%s;", apntype);
1655 }
1656 if (user == NULL)
1657 {
1658 sprintf(strtmp[5], "user=;");
1659 }
1660 else
1661 {
1662 sprintf(strtmp[5], "user=%s;", user);
1663 }
1664 if (password == NULL)
1665 {
1666 sprintf(strtmp[6], "password=;");
1667 }
1668 else
1669 {
1670 sprintf(strtmp[6], "password=%s;", password);
1671 }
1672 if (normalprotocol == NULL)
1673 {
1674 sprintf(strtmp[7], "normalprotocol=;");
1675 }
1676 else
1677 {
1678 sprintf(strtmp[7], "normalprotocol=%s;", normalprotocol);
1679 }
1680 if (roamingprotocol == NULL)
1681 {
1682 sprintf(strtmp[8], "roamingprotocol=;");
1683 }
1684 else
1685 {
1686 sprintf(strtmp[8], "roamingprotocol=%s;", roamingprotocol);
1687 }
1688 if (carrier == NULL)
1689 {
1690 sprintf(strtmp[9], "carrier=;");
1691 }
1692 else
1693 {
1694 sprintf(strtmp[9], "carrier=%s;", carrier);
1695 }
1696 sprintf(agc, "%s%s%s%s%s%s%s%s%s%s", strtmp[0], strtmp[1], strtmp[2], strtmp[3], strtmp[4], strtmp[5], strtmp[6], strtmp[7], strtmp[8], strtmp[9]);
1697 return 0;
1698}
1699
rjwaf4b1612022-06-13 17:26:01 +08001700
1701int query_apn_char(char *agc, char *id, char *mcc, char *mnc, char *apn, char *apntype, char *user, char *password, char *normalprotocol, char *roamingprotocol, char *carrier)
1702{
1703 char strtmp[10][32];
1704 if (id == NULL)
1705 {
1706 sprintf(strtmp[0], "");
1707 }
1708 else
1709 {
1710 sprintf(strtmp[0], "id=%s;", id);
1711 }
1712 if (mcc == NULL)
1713 {
1714 sprintf(strtmp[1], "");
1715 }
1716 else
1717 {
1718 sprintf(strtmp[1], "mcc=%s;", mcc);
1719 }
1720 if (mnc == NULL)
1721 {
1722 sprintf(strtmp[2], "");
1723 }
1724 else
1725 {
1726 sprintf(strtmp[2], "mnc=%s;", mnc);
1727 }
1728 if (apn == NULL)
1729 {
1730 sprintf(strtmp[3], "");
1731 }
1732 else
1733 {
1734 sprintf(strtmp[3], "apn=%s;", apn);
1735 }
1736 if (apntype == NULL)
1737 {
1738 sprintf(strtmp[4], "");
1739 }
1740 else
1741 {
1742 sprintf(strtmp[4], "apntype=%s;", apntype);
1743 }
1744 if (user == NULL)
1745 {
1746 sprintf(strtmp[5], "");
1747 }
1748 else
1749 {
1750 sprintf(strtmp[5], "user=%s;", user);
1751 }
1752 if (password == NULL)
1753 {
1754 sprintf(strtmp[6], "");
1755 }
1756 else
1757 {
1758 sprintf(strtmp[6], "password=%s;", password);
1759 }
1760 if (normalprotocol == NULL)
1761 {
1762 sprintf(strtmp[7], "");
1763 }
1764 else
1765 {
1766 sprintf(strtmp[7], "normalprotocol=%s;", normalprotocol);
1767 }
1768 if (roamingprotocol == NULL)
1769 {
1770 sprintf(strtmp[8], "");
1771 }
1772 else
1773 {
1774 sprintf(strtmp[8], "roamingprotocol=%s;", roamingprotocol);
1775 }
1776 if (carrier == NULL)
1777 {
1778 sprintf(strtmp[9], "");
1779 }
1780 else
1781 {
1782 sprintf(strtmp[9], "carrier=%s;", carrier);
1783 }
1784 sprintf(agc, "%s%s%s%s%s%s%s%s%s%s", strtmp[0], strtmp[1], strtmp[2], strtmp[3], strtmp[4], strtmp[5], strtmp[6], strtmp[7], strtmp[8], strtmp[9]);
1785 return 0;
1786}
1787
rjw20006d12022-04-21 16:29:04 +08001788static char *lynqStrdupReadString(Parcel &p)
1789{
1790 size_t stringlen;
1791 const char16_t *s16;
1792
1793 s16 = p.readString16Inplace(&stringlen);
1794 return strndup16to8(s16, stringlen);
1795}
Hong_Liu7163bbe2023-06-04 03:03:44 -07001796int get_imsi()
1797{
Hong_Liu25edfe72023-06-16 01:13:42 -07001798 Parcel *p =NULL;
Hong_Liu7163bbe2023-06-04 03:03:44 -07001799 lynq_client_t client;
1800 int resp_type = -1;
1801 int token;
1802 int request = -1;
1803 int slot_id = -1;
1804 int error = -1;
1805 int version =0;
1806 int num = 0;
1807 char *temp_char = NULL;
1808 char mccmnc[32] = {0};
1809 char mccmnckey[64] = {0};
Hong_Liu25edfe72023-06-16 01:13:42 -07001810 client.uToken = get_utoken();
Hong_Liu7163bbe2023-06-04 03:03:44 -07001811 client.request = 11;//RIL_REQUEST_GET_IMSI 11
1812 client.paramLen = 0;
1813 bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
1814 LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
1815 pthread_mutex_lock(&g_lynq_data_sendto_mutex);
1816 if(send_request(lynq_client_sockfd,&client)==-1)
1817 {
1818 LYERRLOG("send request fail");
1819 perror("[LYNQ_DATA] send request fail:");
Hong_Liu25edfe72023-06-16 01:13:42 -07001820 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
Hong_Liu7163bbe2023-06-04 03:03:44 -07001821 return -1;
1822 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001823 //get_response(lynq_client_sockfd,p);
1824 error = wait_response(lynq_client_sockfd,p,client.uToken);
1825 if(error!=0)
Hong_Liu7163bbe2023-06-04 03:03:44 -07001826 {
Hong_Liu25edfe72023-06-16 01:13:42 -07001827 LYERRLOG("wait_response fail,ret:%d",error);
1828 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
Hong_Liu7163bbe2023-06-04 03:03:44 -07001829 return error;
1830 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001831 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
1832 if(JumpHeader(p,&resp_type,&client.uToken,&request,&slot_id,&error)!=0)
Hong_Liu7163bbe2023-06-04 03:03:44 -07001833 {
Hong_Liu25edfe72023-06-16 01:13:42 -07001834 LYERRLOG("JumpHeader fail");
Hong_Liu7163bbe2023-06-04 03:03:44 -07001835 return -1;
1836 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001837 LYINFLOG("resp_type=%d,uToken=%d,request=%d,slot_id=%d,error_code=%d",resp_type,client.uToken,request,slot_id,error);
1838 if(error == 0)
1839 {
1840 char * test = strdupReadString_p(p);
1841 memcpy(mccmnc, test,5);
1842 mccmnc[5]='\0';
1843 free(test);
1844 sprintf(mccmnckey,"uci set radio_property.property.vendor_ril_data_gsm_mcc_mnc0=%s",mccmnc);
1845 system(mccmnckey);
1846 system("uci commit");
1847 }
1848 free_parcel(p);
1849 return error;
Hong_Liu7163bbe2023-06-04 03:03:44 -07001850}
rjw20006d12022-04-21 16:29:04 +08001851int lynq_modify_apn_db(const int cmd, char *id, char *mcc, char *mnc, char *apn, char *apntype, char *user, char *password, char *normalprotocol, char *roamingprotocol, char *carrier, char *out)
1852{
1853 if (NULL == id && NULL == mcc && NULL == mnc && NULL == apn && NULL == apntype && NULL == user && NULL == password && NULL == normalprotocol && NULL == roamingprotocol && NULL == carrier)
1854 {
1855 LYERRLOG("There are no valid parameters");
1856 return -1;
1857 }
1858 lynq_client_t client;
1859 char argc[512];
Hong_Liu7163bbe2023-06-04 03:03:44 -07001860 int res = -1;
rjw20006d12022-04-21 16:29:04 +08001861 if (cmd == 0) // insert apn db
1862 {
rjw61fcae32022-08-18 14:03:39 +08001863 res = insert_apn_char(argc, id, mcc, mnc, apn, apntype, user, password, normalprotocol, roamingprotocol, carrier);
Hong_Liu25edfe72023-06-16 01:13:42 -07001864 client.uToken = get_utoken();
rjw20006d12022-04-21 16:29:04 +08001865 client.request = 2000 + 193; // RIL_REQUEST_MODIFY_APN
1866 client.paramLen = 2;
1867 bzero(client.param, LYNQ_REQUEST_PARAM_BUF);
1868 sprintf(client.param, "%d %s", cmd, argc);
1869 }
rjw61fcae32022-08-18 14:03:39 +08001870 else if (cmd == 1) //delete apn db
rjw20006d12022-04-21 16:29:04 +08001871 {
1872 if (NULL == id)
1873 {
1874 LYERRLOG("id is NULL!!!please input id: ");
1875 }
1876 sprintf(argc, "id=%s", id);
Hong_Liu25edfe72023-06-16 01:13:42 -07001877 client.uToken = get_utoken();
rjw20006d12022-04-21 16:29:04 +08001878 client.request = 2000 + 193; // RIL_REQUEST_MODIFY_APN
1879 client.paramLen = 2;
1880 bzero(client.param, LYNQ_REQUEST_PARAM_BUF);
1881 sprintf(client.param, "%d %s", cmd, argc);
1882 }
rjw61fcae32022-08-18 14:03:39 +08001883 else if (cmd == 2) //query apn db
rjw20006d12022-04-21 16:29:04 +08001884 {
rjwaf4b1612022-06-13 17:26:01 +08001885 query_apn_char(argc, id, mcc, mnc, apn, apntype, user, password, normalprotocol, roamingprotocol, carrier);
Hong_Liu25edfe72023-06-16 01:13:42 -07001886 client.uToken = get_utoken();
rjw20006d12022-04-21 16:29:04 +08001887 client.request = 2000 + 193; // RIL_REQUEST_MODIFY_APN
1888 client.paramLen = 2;
1889 bzero(client.param, LYNQ_REQUEST_PARAM_BUF);
1890 sprintf(client.param, "%d %s", cmd, argc);
1891 }
rjw61fcae32022-08-18 14:03:39 +08001892 else if (cmd == 3) //modify apn db
rjw20006d12022-04-21 16:29:04 +08001893 {
1894 modify_apn_char(argc, id, mcc, mnc, apn, apntype, user, password, normalprotocol, roamingprotocol, carrier);
Hong_Liu25edfe72023-06-16 01:13:42 -07001895 client.uToken = get_utoken();
rjw20006d12022-04-21 16:29:04 +08001896 client.request = 2000 + 193; // RIL_REQUEST_MODIFY_APN
1897 client.paramLen = 2;
1898 bzero(client.param, LYNQ_REQUEST_PARAM_BUF);
1899 sprintf(client.param, "%d %s", cmd, argc);
1900 }
1901 else
1902 {
1903 LYERRLOG("incoming command is invalid");
1904 return -1;
1905 }
1906 LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
rjwed00d042022-05-25 09:18:16 +08001907 pthread_mutex_lock(&g_lynq_data_sendto_mutex);
rjw20006d12022-04-21 16:29:04 +08001908 if(send_request(lynq_client_sockfd,&client)==-1)
1909 {
1910 LYERRLOG("send request fail");
Hong_Liu25edfe72023-06-16 01:13:42 -07001911 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
rjw20006d12022-04-21 16:29:04 +08001912 return -1;
1913 }
rjwed00d042022-05-25 09:18:16 +08001914 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
rjw20006d12022-04-21 16:29:04 +08001915 waitApnResult();
rjw3bcbbf12022-04-22 16:47:18 +08001916 strcpy(out, g_lynq_apn_result);
rjw20006d12022-04-21 16:29:04 +08001917 LYINFLOG(">>>>>output info:%s",out);
1918 return 0;
1919}
1920
1921int lynq_reset_apn(char *result)
1922{
rjw20006d12022-04-21 16:29:04 +08001923 lynq_client_t client;
rjw3bcbbf12022-04-22 16:47:18 +08001924 if (NULL == result)
1925 {
1926 LYERRLOG("incoming paramters error");
1927 }
Hong_Liu25edfe72023-06-16 01:13:42 -07001928 client.uToken = get_utoken();
rjw20006d12022-04-21 16:29:04 +08001929 client.request = 2000 + 194;
1930 client.paramLen = 0;
1931 bzero(client.param, LYNQ_REQUEST_PARAM_BUF);
1932 LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s", client.uToken, client.request, client.paramLen, client.param);
rjwed00d042022-05-25 09:18:16 +08001933 pthread_mutex_lock(&g_lynq_data_sendto_mutex);
rjw20006d12022-04-21 16:29:04 +08001934 if (send_request(lynq_client_sockfd, &client) == -1)
1935 {
1936 LYERRLOG("send request fail");
Hong_Liu25edfe72023-06-16 01:13:42 -07001937 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
rjw20006d12022-04-21 16:29:04 +08001938 return -1;
1939 }
rjwed00d042022-05-25 09:18:16 +08001940 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
rjw20006d12022-04-21 16:29:04 +08001941 waitApnResult();
1942 strcpy(result, g_lynq_apn_result);
1943 LYINFLOG(">>>>>result:%s",result);
1944 return 0;
1945}
1946
rjw3bcbbf12022-04-22 16:47:18 +08001947/*Typethree add for T800 platform 2022/04/21 end*/
Hong_Liu7d9ac8d2023-07-24 00:40:31 -07001948static int exec_cmd(const char *str_cmd, char * str_cmd_ret, size_t max_len) {
1949 FILE *fp;
1950 //printf("to exec cmd:%s\n", str_cmd);
1951 if((fp=popen(str_cmd,"r"))==NULL)
1952 {
1953 perror("popen error!");
1954 return -1;
1955 }
1956 if((fread(str_cmd_ret,max_len,1,fp))<0)
1957 {
1958 perror("fread fail!");
1959 fclose(fp);
1960 return -1;
1961 }
1962 fclose(fp);
1963 return 0;
1964}
1965int check_apn_status()
1966{
1967 LYINFLOG("check_apn_status enter");
1968 int ret = -1;
1969 char cmd_ret[8] ={0};//get mccmnc
1970 const char *cmd = "uci get radio_property.property.vendor_ril_data_gsm_mcc_mnc0";
1971 const char *empty_str = ":empty";
1972 ret = exec_cmd(cmd,cmd_ret,8);
1973 if(ret==0)
1974 {
1975 if(strlen(cmd_ret)==0)
1976 {
1977 LYERRLOG("not have mccmnc config in uci ram");
1978 return 1;
1979 }
1980 if(strncmp(cmd_ret,empty_str,strlen(empty_str))==0)
1981 {
1982 LYERRLOG("mccmnc is empty");
1983 return 2;
1984 }
1985 LYINFLOG("mccmnc is %s",cmd_ret);
1986 return 0;
1987 }
1988 else
1989 {
1990 LYERRLOG("exec cmd fail");
1991 return -1;
1992 }
1993 return 0;
1994}
lha62e0882023-10-31 05:17:11 -07001995int get_timeout_value()
1996{
1997 LYINFLOG("get_timeout_value enter");
1998 int ret = -1;
1999 char timeout_value[8] ={0};//get get_timeout_value
2000 ret = lynq_get_value("lynq_uci","data_call","timeout",timeout_value);
2001 if(ret == 0)
2002 {
2003 LYINFLOG("data_call.timeout is %s",timeout_value);
2004 return atoi(timeout_value);
2005 }
2006 else
2007 {
2008 LYERRLOG("get_timeout_value");
2009 return -1;
2010 }
2011}
2012
Hong_Liu7d9ac8d2023-07-24 00:40:31 -07002013int radio_switch(int status)
2014{
2015 Parcel *p =NULL;
2016 lynq_client_t client;
2017 int resp_type = -1;
2018 int token;
2019 int request = -1;
2020 int slot_id = -1;
2021 int error = -1;
2022 int version =0;
2023 int num = 0;
2024 char *temp_char = NULL;
2025 char mccmnc[32] = {0};
2026 char mccmnckey[64] = {0};
2027 client.uToken = get_utoken();
2028 client.request = 59;//RIL_REQUEST_OEM_HOOK_RAW 59
2029 client.paramLen = 1;
2030 bzero(client.param,LYNQ_REQUEST_PARAM_BUF);
2031 sprintf(client.param,"AT+CFUN=%d",status);
2032 LYINFLOG("uToken=%d,request=%d,paralen=%d,param=%s",client.uToken,client.request,client.paramLen,client.param);
2033 pthread_mutex_lock(&g_lynq_data_sendto_mutex);
2034 if(send_request(lynq_client_sockfd,&client)==-1)
2035 {
2036 LYERRLOG("send request fail");
2037 perror("[LYNQ_DATA] send request fail:");
2038 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
2039 return -1;
2040 }
2041 //get_response(lynq_client_sockfd,p);
2042 error = wait_response(lynq_client_sockfd,p,client.uToken);
2043 if(error!=0)
2044 {
2045 LYERRLOG("wait_response fail,ret:%d",error);
2046 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
2047 return error;
2048 }
2049 pthread_mutex_unlock(&g_lynq_data_sendto_mutex);
2050 if(JumpHeader(p,&resp_type,&client.uToken,&request,&slot_id,&error)!=0)
2051 {
2052 LYERRLOG("JumpHeader fail");
2053 return -1;
2054 }
2055 LYINFLOG("resp_type=%d,uToken=%d,request=%d,slot_id=%d,error_code=%d",resp_type,client.uToken,request,slot_id,error);
2056 free_parcel(p);
2057 return error;
2058}