blob: a176462b9b1d8c587cea538d20549f765270d9cb [file] [log] [blame]
rjw3d6a50e2023-02-20 13:35:42 +08001
2#include <stdio.h>
3#include <sys/types.h>
4#include <sys/socket.h>
5#include <arpa/inet.h>
6#include <fcntl.h>
7#include <string.h>
8#include <stdlib.h>
9#include <unistd.h>
10#include <binder/Parcel.h>
11#include <log/log.h>
12#include <cutils/jstring.h>
13#include <pthread.h>
14#include "liblog/lynq_deflog.h"
15#include <sys/time.h>
16#include <string.h>
17#include <vendor-ril/telephony/ril.h>
18#include <vendor-ril/telephony/mtk_ril_sp.h>
19#include <vendor-ril/telephony/mtk_ril_ivt.h>
20#include "lynq_sms.h"
21#include "lynq_module_common.h"
22#include "lynq_module_socket.h"
q.huange5595852023-05-30 19:39:42 +080023#include "service_lib_common.h"
rjw3d6a50e2023-02-20 13:35:42 +080024
25#define CALL_OFF (0)
26#define CALL_ON (1)
27#define USER_LOG_TAG "LYNQ_SMS"
28
29using ::android::Parcel;
30
rjw3d6a50e2023-02-20 13:35:42 +080031
32int sms_storage_index = 0;
33
34/**
35 * @brief mark call initialization state
36 * 0: deinit state
37 * 1: init state
38 */
39int g_module_init_flag = 0;
40
41//static lynq_call_list_e_t s_call_lists[LYNQ_CALL_MAX]={};
42//static bool s_call_list_loop = 0;
43//static pthread_t s_call_list_loop_tid = -1;
44static pthread_mutex_t s_notice_new_sms_mutex = PTHREAD_MUTEX_INITIALIZER;
45static pthread_cond_t s_notice_new_sms_cond = PTHREAD_COND_INITIALIZER;
46
47//static int s_module_isDial = 0;
48//static pthread_mutex_t call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
49//static pthread_cond_t call_state_change_cond = PTHREAD_COND_INITIALIZER;
50//static int s_CallId = 0;
51//static pthread_mutex_t s_call_state_change_mutex = PTHREAD_MUTEX_INITIALIZER;
52//static pthread_cond_t s_call_state_change_cond = PTHREAD_COND_INITIALIZER;
53
54
55static char *strdupReadString(Parcel* &p) {
56 size_t stringlen;
57 const char16_t *s16;
58 s16 = p->readString16Inplace(&stringlen);
59 return strndup16to8(s16, stringlen);
60}
61
62void lynqNoticeGetModuleNewSms()
63{
64 pthread_mutex_lock(&s_notice_new_sms_mutex);
65 pthread_cond_signal(&s_notice_new_sms_cond);
66 pthread_mutex_unlock(&s_notice_new_sms_mutex);
67
68}
69
70void lynqNoticeWaitModuleNewSms()
71{
72 pthread_mutex_lock(&s_notice_new_sms_mutex);
73 pthread_cond_wait(&s_notice_new_sms_cond, &s_notice_new_sms_mutex);
74 pthread_mutex_unlock(&s_notice_new_sms_mutex);
75}
76
77int lynq_sms_init(int uToken)
78{
79 if(g_module_init_flag != MODULE_CLOSED)
80 {
81 LYERRLOG("module state is %d",g_module_init_flag);
82 return LYNQ_E_CONFLICT;
83 }
84 if(uToken <0){
85 LYERRLOG("uToken is less than 0",uToken);
86 return LYNQ_E_PARAMETER_ANONALY;
87 }
88 g_module_init_flag = MODULE_SWITCHING;
89
rjw1f8a2ee42023-03-06 15:19:40 +080090 LYLOGSET(LOG_INFO);
rjw3d6a50e2023-02-20 13:35:42 +080091 LYLOGEINIT(USER_LOG_TAG);
92
93 g_module_Global_uToken = uToken;
94
95 int ret = lynq_start_all_urc_socket_thread();
96 if(ret != RESULT_OK)
97 {
98 LYERRLOG("init socket urc fail!!!");
99 g_module_init_flag = MODULE_CLOSED;
100 return LYNQ_E_INNER_ERROR;
101 }
102
103 ret = lynq_start_all_rc_socket_thread();
104 if(ret !=RESULT_OK)
105 {
106 LYERRLOG("init socket client fail!!!");
107 lynq_close_all_urc_socket_thread();
108 g_module_init_flag = MODULE_CLOSED;
109 return LYNQ_E_INNER_ERROR;
110 }
111 g_module_init_flag = MODULE_RUNNING;
112 return RESULT_OK;
113}
114
115/*
116Converts an array to a hexadecimal string
117*/
118void ArrayToStr(unsigned char *Buff, unsigned int BuffLen, char *OutputStr)
119{
120 int i = 0;
xf.li9915e7a2023-05-09 22:48:11 -0700121 char TempBuff[MSG_MAX_LEN * 2 +1] = {0};
122 char strBuff[MSG_MAX_LEN * 2 +1] = {0};
123
rjw3d6a50e2023-02-20 13:35:42 +0800124 for(i = 0; i<BuffLen;i++)
125 {
126 sprintf(TempBuff,"%02x",(unsigned char)Buff[i]);
127 strncat(strBuff,TempBuff,BuffLen*2);
128 }
129 strncpy(OutputStr, strBuff, BuffLen*2);
130 return;
131}
132
133int lynq_send_sms(char telephony_num[TELEPHONE_NUM_LEN], int charset, char *msg, int msglen)
134{
xf.li9915e7a2023-05-09 22:48:11 -0700135 LYINFLOG("charset is %d, msglen %d\n", charset, msglen);
l.yang48b3c462023-07-04 18:35:07 -0700136 if(msglen > MSG_MAX_LEN || msglen <= 0)
xf.li9915e7a2023-05-09 22:48:11 -0700137 {
138 LYERRLOG("msglen out of the range");
139 return LYNQ_E_SMS_MSGLEN_OUT_OF_RANGE;
140 }
rjw3d6a50e2023-02-20 13:35:42 +0800141 if(g_module_init_flag != MODULE_RUNNING)
142 {
143 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
144 return LYNQ_E_CONFLICT;
145 }
146 Parcel* p=NULL;
147 if(charset == 1)//means 8 bit
148 {
149 char msg_e_b[msglen*2+1] = {0};// +1 for end of string.*2:A char array contains two elements of a string for each value
150 ArrayToStr(msg, msglen, msg_e_b);
xf.li9915e7a2023-05-09 22:48:11 -0700151 LYINFLOG("tel, charset, msg_e_b: %s, %d, %s", telephony_num, charset, msg_e_b);
rjw3d6a50e2023-02-20 13:35:42 +0800152 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SEND_SMS,3,"%s %d %s",telephony_num, charset, msg_e_b);
153 if(ret!=RESULT_OK)
154 {
155 LYERRLOG("%s 8bit send error %d",__func__,__LINE__);
156 return ret;
157 }
158 delete p;
159 return RESULT_OK;
160 }
161 else//other bit
162 {
163 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SEND_SMS,3,"%s %d %s",telephony_num, charset, msg);
164 if(ret!=RESULT_OK)
165 {
166 LYERRLOG("%s 7bit send error %d",__func__,__LINE__);
167 return ret;
168 }
169 delete p;
170 return RESULT_OK;
171 }
172}
173
174int lynq_read_sms(int index,int *status,int *charset,char smsc[SMSC_MAX_LEN],int *smscLen,int *smslen,char message[MSG_MAX_LEN],char teleNum[TELEPHONE_NUM_LEN],int *numLen,int *current,int *total)
175{
176 if(g_module_init_flag != MODULE_RUNNING)
177 {
178 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
179 return LYNQ_E_CONFLICT;
180 }
181 Parcel* p=NULL;
182 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_READ_SMS_FROM_MEMORY,1,"%d",index);
183 if(ret!=0)
184 {
185 return ret;
186 }
187 LYDBGLOG("LYNQ_REQUEST_READ_SMS_FROM_MEMORY SUCCESS!");
188 p->readInt32(&index);
189 p->readInt32(status);
190 p->readInt32(charset);
191 /*lei add for gws 2022/5/12*/
192 p->readInt32(current);
193 p->readInt32(total);
194 /*lei add for gws 2022/5/12*/
195 char *phone_num = NULL;
196 phone_num = strdupReadString(p);
197 *numLen = strlen(phone_num);
198 strcpy(teleNum, phone_num);
199 char *smscenter = NULL;
200 smscenter = strdupReadString(p);
201 *smscLen = strlen(smscenter);
202 strcpy(smsc,smscenter);
203 char *msg = NULL;
204 msg = strdupReadString(p);
205 *smslen = strlen(msg);
206 strcpy(message,msg);
207 free(phone_num);
208 free(smscenter);
209 free(msg);
210 delete p;
211 return RESULT_OK;
212}
213
214int lynq_get_smsc_address(char service_num[SMSC_MAX_LEN])
215{
216 if(g_module_init_flag != MODULE_RUNNING)
217 {
218 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
219 return LYNQ_E_CONFLICT;
220 }
221 Parcel* p=NULL;
222 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_GET_SMSC_ADDRESS,0,"");
223 if(ret!=0)
224 {
225 return ret;
226 }
227 LYDBGLOG("lynq_get_smsc_address SUCCESS!");
228 char *temp = strdupReadString(p);
229 strcpy(service_num, temp);
230 free(temp);
231 delete p;
232 return RESULT_OK;
233}
234
235int lynq_wait_receive_new_sms(int *handle)
236{
237 if(g_module_init_flag != MODULE_RUNNING)
238 {
239 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
240 return LYNQ_E_CONFLICT;
241 }
242 if(handle==NULL)
243 {
244 LYERRLOG("handle is null!!!");
245 return LYNQ_E_NULL_ANONALY;
246 }
247 lynqNoticeWaitModuleNewSms();
248 *handle = sms_storage_index;
249 return RESULT_OK;
250}
251
252int lynq_set_smsc_address(const char* service_num)
253{
254 if(g_module_init_flag != MODULE_RUNNING)
255 {
256 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
257 return LYNQ_E_CONFLICT;
258 }
259 Parcel* p=NULL;
260 int ret=lynq_send_common_request(p,g_wait_time,RIL_REQUEST_SET_SMSC_ADDRESS,1,"%s", service_num);
261
262 if(ret!=RESULT_OK)
263 {
264 LYERRLOG("%s 8bit send error %d",__func__,__LINE__);
265 return ret;
266 }
267 LYDBGLOG("lynq_set_smsc_address SUCCESS!");
268 delete p;
269 return RESULT_OK;
270}
271
272int lynq_list_sms(char index_list[SMS_NUM_MAX])
273{
274 if(g_module_init_flag != MODULE_RUNNING)
275 {
276 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
277 return LYNQ_E_CONFLICT;
278 }
279 Parcel* p=NULL;
280 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_LIST_SMS_FROM_MEMORY,0,"");
281 if(ret!=0)
282 {
283 return ret;
284 }
285 LYDBGLOG("lynq_list_sms SUCCESS!");
286 char *temp = strdupReadString(p);
287 strcpy(index_list, temp);
288 free(temp);
289 delete p;
290 return RESULT_OK;
291}
292
293int lynq_delete_sms(int index)
294{
295 if(g_module_init_flag != MODULE_RUNNING)
296 {
297 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
298 return LYNQ_E_CONFLICT;
299 }
300 Parcel* p=NULL;
301 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_DELETE_SMS_FROM_MEMORY,1,"%d", index);
302
303 if(ret!=RESULT_OK)
304 {
305 LYERRLOG("%s 8bit send error %d",__func__,__LINE__);
306 return ret;
307 }
308 LYDBGLOG("lynq_delete_sms SUCCESS!");
309 delete p;
310 return RESULT_OK;
311}
312
313bool is_support_urc(int urc_id)
314{
315 switch(urc_id)
316 {
317 case RIL_UNSOL_RESPONSE_NEW_SMS:
318 return true;
319 default:
320 return false;
321 }
322}
323
324int lynq_sms_deinit(void)
325{
326 if (g_module_init_flag != MODULE_RUNNING)
327 {
328 LYERRLOG("module state is %d",g_module_init_flag);
329 return LYNQ_E_CONFLICT;
330 }
331 g_module_init_flag = MODULE_SWITCHING;
332 lynq_close_all_urc_socket_thread();
333 lynq_close_all_rc_socket_thread();
334 g_module_init_flag = MODULE_CLOSED;
335 return RESULT_OK;
336}
337
338void urc_msg_process(Parcel *p)
339{
340 int resp_type;
341 int urcid;
342 int slot_id;
343
344 int size=p->dataSize();
345 p->readInt32(&resp_type);
346 p->readInt32(&urcid);
347 p->readInt32(&slot_id);
q.huange5595852023-05-30 19:39:42 +0800348 LYINFLOG("%s urc id = %d, slot_id = %d, size is %d, msg is %s",__func__, urcid,slot_id,size,android::requestToString(urcid));
rjw3d6a50e2023-02-20 13:35:42 +0800349 switch (urcid)
350 {
351 case RIL_UNSOL_RESPONSE_NEW_SMS://new sms received
352 {
353 LYINFLOG("**************:resp_type=%d,urcid=%d,slot_id=%d",resp_type,urcid,slot_id);
354 char *msg = NULL;
355 int index = 0;
356 msg = strdupReadString(p);
357 p->readInt32(&index);
358 sms_storage_index = index;
359 lynqNoticeGetModuleNewSms();
360 free(msg);
361 break;
362 }
363 default:
364 break;
365 }
366}
367