blob: 092a85c3aae57098230e888fa4b900930adbad68 [file] [log] [blame]
q.huang52921662022-10-20 15:25:45 +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 "lynq_call.h"
18#include "lynq_module_common.h"
19#include "lynq_call_common.h"
q.huang1c03f752023-12-14 14:11:58 +080020#include "lynq_module_socket.h"
q.huangeacb8122023-04-04 16:50:53 +080021
q.huang52921662022-10-20 15:25:45 +080022#define USER_LOG_TAG "LYNQ_CALL"
23
q.huang1c03f752023-12-14 14:11:58 +080024#define MAX_IP_LENGTH 128
25#define MAX_VLAN_INFO_LENGTH 128
q.huang52921662022-10-20 15:25:45 +080026
q.huang52921662022-10-20 15:25:45 +080027
q.huang1c03f752023-12-14 14:11:58 +080028static char * lynqStrdupReadString(Parcel* &p) {
29 size_t stringlen;
30 const char16_t *s16;
q.huang52921662022-10-20 15:25:45 +080031
q.huang1c03f752023-12-14 14:11:58 +080032 s16 = p->readString16Inplace(&stringlen);
33 return strndup16to8(s16, stringlen);
q.huang52921662022-10-20 15:25:45 +080034}
35
q.huangc66c73d2024-03-01 13:57:38 +080036int is_whitespace_only(const char *str) {
37 while (*str != '\0') {
38 if (!isspace((unsigned char)*str)) {
39 return 0;
40 }
41 str++;
42 }
43 return 1;
44}
45
46
q.huang52921662022-10-20 15:25:45 +080047/*set*/
48int lynq_set_voice_audio_mode(const LYNQ_Audio_Mode audio_mode)
49{
q.huang1c03f752023-12-14 14:11:58 +080050 if(g_module_init_flag != MODULE_RUNNING)
q.huang52921662022-10-20 15:25:45 +080051 {
q.huang1c03f752023-12-14 14:11:58 +080052 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
53 return LYNQ_E_CONFLICT;
q.huang52921662022-10-20 15:25:45 +080054 }
q.huang1c03f752023-12-14 14:11:58 +080055 if(audio_mode > AUDIO_MODE_RTP || audio_mode < AUDIO_MODE_CODEC)
q.huang52921662022-10-20 15:25:45 +080056 {
q.huang1c03f752023-12-14 14:11:58 +080057 return LYNQ_E_PARAMETER_ANONALY;
q.huang52921662022-10-20 15:25:45 +080058 }
q.huang1c03f752023-12-14 14:11:58 +080059
60 Parcel* p=NULL;
61 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_SET_VOICE_AUDIO_MODE,1,"%d",audio_mode);
62 if(ret==RESULT_OK)
63 {
64 delete p;
65 }
66 return ret;
q.huang52921662022-10-20 15:25:45 +080067}
q.huang1c03f752023-12-14 14:11:58 +080068
q.huang52921662022-10-20 15:25:45 +080069int lynq_set_remote_rtp_ip(const char* ip, const int ip_length)
70{
q.huang1c03f752023-12-14 14:11:58 +080071 if(g_module_init_flag != MODULE_RUNNING)
72 {
73 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
74 return LYNQ_E_CONFLICT;
75 }
q.huangc66c73d2024-03-01 13:57:38 +080076 if (NULL == ip || is_whitespace_only(ip))
q.huang52921662022-10-20 15:25:45 +080077 {
q.huangc66c73d2024-03-01 13:57:38 +080078 LYERRLOG("ip is NULL or white space string !!!");
q.huang52921662022-10-20 15:25:45 +080079 return LYNQ_E_PARAMETER_ANONALY;
80 }
81 if ((ip_length < strlen(ip)+1) || (ip_length > MAX_IP_LENGTH))
82 {
83 LYERRLOG("incoming ip length error %d", ip_length);
84 return LYNQ_E_PARAMETER_ANONALY;
85 }
86
q.huang1c03f752023-12-14 14:11:58 +080087 Parcel* p=NULL;
88 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_SET_REMOTE_RTP_IP,1,"%s",ip);
89 if(ret==RESULT_OK)
90 {
91 delete p;
92 }
93 return ret;
q.huang52921662022-10-20 15:25:45 +080094}
95int lynq_set_vlan_info(const char* vlan_info, const int vlan_info_length)
96{
q.huang1c03f752023-12-14 14:11:58 +080097 if(g_module_init_flag != MODULE_RUNNING)
98 {
99 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
100 return LYNQ_E_CONFLICT;
101 }
102
q.huang52921662022-10-20 15:25:45 +0800103 if (NULL == vlan_info)
104 {
105 LYERRLOG("vlan_info is NULL!!!");
106 return LYNQ_E_PARAMETER_ANONALY;
107 }
q.huang52921662022-10-20 15:25:45 +0800108
q.huang1c03f752023-12-14 14:11:58 +0800109 Parcel* p=NULL;
q.huangc66c73d2024-03-01 13:57:38 +0800110 int ret;
111
112 if(is_whitespace_only(vlan_info))
113 {
114 ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_SET_VLAN_INFO,0,"");
115 }
116 else
117 {
118 if ((vlan_info_length < strlen(vlan_info)+1) || (vlan_info_length > MAX_VLAN_INFO_LENGTH))
119 {
120 LYERRLOG("incoming vlan_info error, vlan info length %d", vlan_info_length);
121 return LYNQ_E_PARAMETER_ANONALY;
122 }
123 ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_SET_VLAN_INFO,1,"%s",vlan_info);
124 }
125
q.huang1c03f752023-12-14 14:11:58 +0800126 if(ret==RESULT_OK)
127 {
128 delete p;
129 }
130 return ret;
q.huang52921662022-10-20 15:25:45 +0800131}
132int lynq_set_rtp_port(const LYNQ_Rtp_Mode rtp_mode, const int port)
133{
q.huang1c03f752023-12-14 14:11:58 +0800134 if(g_module_init_flag != MODULE_RUNNING)
135 {
136 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
137 return LYNQ_E_CONFLICT;
138 }
139
q.huang52921662022-10-20 15:25:45 +0800140 if (port < 0)
141 {
142 LYERRLOG("invalid port number %d", port);
143 return LYNQ_E_PARAMETER_ANONALY;
144 }
q.huang1c03f752023-12-14 14:11:58 +0800145
146 Parcel* p=NULL;
147 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_SET_RTP_PORT,2,"%d %d",rtp_mode,port);
148 if(ret==RESULT_OK)
q.huang52921662022-10-20 15:25:45 +0800149 {
q.huang1c03f752023-12-14 14:11:58 +0800150 delete p;
q.huang52921662022-10-20 15:25:45 +0800151 }
q.huang1c03f752023-12-14 14:11:58 +0800152 return ret;
q.huang52921662022-10-20 15:25:45 +0800153}
154int lynq_set_rtp_param(const int clock_rate,const int channels,const int latency) //only for client mode
155{
q.huang1c03f752023-12-14 14:11:58 +0800156 if(g_module_init_flag != MODULE_RUNNING)
157 {
158 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
159 return LYNQ_E_CONFLICT;
160 }
161
162 Parcel* p=NULL;
163 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_SET_RTP_PARAM,3,"%d %d %d",clock_rate,channels,latency);
164 if(ret==RESULT_OK)
165 {
166 delete p;
167 }
168 return ret;
q.huang52921662022-10-20 15:25:45 +0800169}
q.huang1c03f752023-12-14 14:11:58 +0800170
q.huangeacb8122023-04-04 16:50:53 +0800171int lynq_set_call_rtp_ssrc(const LYNQ_Rtp_Ssrc_Mode ssrc_mode,const unsigned int ssrc)
172{
q.huang1c03f752023-12-14 14:11:58 +0800173 if(g_module_init_flag != MODULE_RUNNING)
174 {
175 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
176 return LYNQ_E_CONFLICT;
177 }
178
q.huanga453a312023-04-14 18:09:57 +0800179 if(ssrc_mode < Rtp_Ssrc_random || ssrc_mode > Rtp_Ssrc_specific)
q.huangeacb8122023-04-04 16:50:53 +0800180 {
181 return LYNQ_E_PARAMETER_ANONALY;
182 }
q.huang1c03f752023-12-14 14:11:58 +0800183
184 Parcel* p=NULL;
185 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_SET_CALL_RTP_SSRC,2,"%d %u",ssrc_mode,ssrc);
186 if(ret==RESULT_OK)
187 {
188 delete p;
189 }
190 return ret;
q.huangeacb8122023-04-04 16:50:53 +0800191}
q.huang52921662022-10-20 15:25:45 +0800192/*get*/
q.huang1c03f752023-12-14 14:11:58 +0800193int lynq_get_voice_audio_mode(LYNQ_Audio_Mode* voice_audio_mode)
q.huang52921662022-10-20 15:25:45 +0800194{
q.huang1c03f752023-12-14 14:11:58 +0800195 if(g_module_init_flag != MODULE_RUNNING)
q.huang52921662022-10-20 15:25:45 +0800196 {
q.huang1c03f752023-12-14 14:11:58 +0800197 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
198 return LYNQ_E_CONFLICT;
q.huang52921662022-10-20 15:25:45 +0800199 }
q.huang1c03f752023-12-14 14:11:58 +0800200
201 if(voice_audio_mode==NULL)
q.huang52921662022-10-20 15:25:45 +0800202 {
q.huang1c03f752023-12-14 14:11:58 +0800203 LYERRLOG("parameter is NULL");
204 return LYNQ_E_PARAMETER_ANONALY;
205 }
206
207 int local_mode;
208
209 int ret=lynq_get_common_request(LYNQ_REQUEST_GET_VOICE_AUDIO_MODE,&local_mode);
210
211 *voice_audio_mode = (LYNQ_Audio_Mode) local_mode;
212 return ret;
q.huang52921662022-10-20 15:25:45 +0800213}
214int lynq_get_remote_rtp_ip(char* ip, const int ip_length)
215{
q.huang1c03f752023-12-14 14:11:58 +0800216 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
q.huang52921662022-10-20 15:25:45 +0800222 if(ip==NULL)
223 {
224 LYERRLOG("ip is NULL");
225 return LYNQ_E_PARAMETER_ANONALY;
226 }
227
q.huang1c03f752023-12-14 14:11:58 +0800228 if(ip_length > MAX_IP_LENGTH)
q.huang52921662022-10-20 15:25:45 +0800229 {
q.huang1c03f752023-12-14 14:11:58 +0800230 LYERRLOG("ip length %d is greater than max ip length %d",ip_length,MAX_IP_LENGTH);
q.huang52921662022-10-20 15:25:45 +0800231 return LYNQ_E_PARAMETER_ANONALY;
q.huang1c03f752023-12-14 14:11:58 +0800232 }
233
234
235 Parcel* p=NULL;
236 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_GET_REMOTE_RTP_IP,0,"");
237
238 if(ret!=RESULT_OK)
239 {
240 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
241 return ret;
242 }
243
244 int num ;
245 char *resp;
246
247 p->readInt32(&num);
248 if(num != 1)
249 {
250 LYERRLOG("no paramters or num %d too great",num);
251 delete p;
252 return LYNQ_E_INNER_ERROR;
253 }else{
254 resp = lynqStrdupReadString(p);
255 strcpy(ip,resp);
256 free(resp);
q.huang52921662022-10-20 15:25:45 +0800257 }
q.huang1c03f752023-12-14 14:11:58 +0800258
259 LYINFLOG("%s suc",__func__);
260 delete p;
261 return RESULT_OK;
q.huang52921662022-10-20 15:25:45 +0800262}
263int lynq_get_vlan_info(char* vlan_info, const int vlan_info_length)
264{
q.huang1c03f752023-12-14 14:11:58 +0800265 if(g_module_init_flag != MODULE_RUNNING)
266 {
267 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
268 return LYNQ_E_CONFLICT;
269 }
270
q.huang52921662022-10-20 15:25:45 +0800271 if(vlan_info==NULL)
272 {
273 LYERRLOG("vlan info is NULL");
274 return LYNQ_E_PARAMETER_ANONALY;
275 }
276
q.huang1c03f752023-12-14 14:11:58 +0800277 Parcel* p=NULL;
278 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_GET_VLAN_INFO,0,"");
279
280 if(ret!=RESULT_OK)
q.huang52921662022-10-20 15:25:45 +0800281 {
q.huang1c03f752023-12-14 14:11:58 +0800282 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
283 return ret;
284 }
285
286 int num ;
287 char *resp;
288
289 p->readInt32(&num);
290 if(num != 1)
291 {
292 LYERRLOG("no paramters or num %d too great",num);
293 delete p;
294 return LYNQ_E_INNER_ERROR;
295 }else{
296 resp = lynqStrdupReadString(p);
297 strcpy(vlan_info,resp);
298 free(resp);
q.huang52921662022-10-20 15:25:45 +0800299 }
q.huang1c03f752023-12-14 14:11:58 +0800300
301 LYINFLOG("%s suc",__func__);
302 delete p;
303 return RESULT_OK;
q.huang52921662022-10-20 15:25:45 +0800304}
q.huang1c03f752023-12-14 14:11:58 +0800305
q.huang52921662022-10-20 15:25:45 +0800306int lynq_get_rtp_port(const LYNQ_Rtp_Mode rtp_mode, int* port)
307{
q.huang1c03f752023-12-14 14:11:58 +0800308 if(g_module_init_flag != MODULE_RUNNING)
309 {
310 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
311 return LYNQ_E_CONFLICT;
312 }
313
q.huang52921662022-10-20 15:25:45 +0800314 if(port==NULL)
315 {
316 return LYNQ_E_PARAMETER_ANONALY;
317 }
q.huang1c03f752023-12-14 14:11:58 +0800318
319 Parcel* p=NULL;
320 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_GET_RTP_PORT,1,"%d",rtp_mode);
321 if(ret==RESULT_OK)
q.huang52921662022-10-20 15:25:45 +0800322 {
q.huang1c03f752023-12-14 14:11:58 +0800323 p->readInt32(port);
324 delete p;
q.huang52921662022-10-20 15:25:45 +0800325 }
q.huang1c03f752023-12-14 14:11:58 +0800326 return ret;
q.huang52921662022-10-20 15:25:45 +0800327}
328int lynq_get_rtp_param(int* clock_rate, int* channels, int* latency)//only for client mode
329{
q.huang1c03f752023-12-14 14:11:58 +0800330 if(g_module_init_flag != MODULE_RUNNING)
331 {
332 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
333 return LYNQ_E_CONFLICT;
334 }
335
q.huang52921662022-10-20 15:25:45 +0800336 if(clock_rate == NULL || channels ==NULL || latency ==NULL)
337 {
338 LYERRLOG("input parameter is NULL");
339 return LYNQ_E_PARAMETER_ANONALY;
340 }
341
q.huang1c03f752023-12-14 14:11:58 +0800342 Parcel* p=NULL;
343 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_GET_RTP_PARAM,0,"");
q.huang52921662022-10-20 15:25:45 +0800344
q.huang1c03f752023-12-14 14:11:58 +0800345 if(ret!=RESULT_OK)
346 {
347 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
348 return ret;
349 }
350
351 p->readInt32(clock_rate);
352 p->readInt32(channels);
353 p->readInt32(latency);
354
355 LYINFLOG("%s suc",__func__);
356 delete p;
357 return RESULT_OK;
q.huang52921662022-10-20 15:25:45 +0800358}
q.huang1c03f752023-12-14 14:11:58 +0800359
q.huanga453a312023-04-14 18:09:57 +0800360int lynq_get_call_rtp_ssrc(int* ssrc_mode, unsigned int* ssrc)
q.huangeacb8122023-04-04 16:50:53 +0800361{
q.huang1c03f752023-12-14 14:11:58 +0800362 if(g_module_init_flag != MODULE_RUNNING)
363 {
364 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
365 return LYNQ_E_CONFLICT;
366 }
367
q.huangeacb8122023-04-04 16:50:53 +0800368 if(ssrc_mode == NULL || ssrc ==NULL)
369 {
370 LYERRLOG("input parameter is NULL");
371 return LYNQ_E_PARAMETER_ANONALY;
372 }
q.huang1c03f752023-12-14 14:11:58 +0800373
374 Parcel* p=NULL;
375 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_GET_CALL_RTP_SSRC,0,"");
376
377 if(ret!=RESULT_OK)
378 {
379 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
380 return ret;
381 }
382
383 p->readInt32(ssrc_mode);
384 p->readUint32(ssrc);
385
386 LYINFLOG("%s suc",__func__);
387 delete p;
388 return RESULT_OK;
q.huangeacb8122023-04-04 16:50:53 +0800389}