blob: 05b30327ddbf57d76027e1631ebc59956c5bc028 [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
36/*set*/
37int lynq_set_voice_audio_mode(const LYNQ_Audio_Mode audio_mode)
38{
q.huang1c03f752023-12-14 14:11:58 +080039 if(g_module_init_flag != MODULE_RUNNING)
q.huang52921662022-10-20 15:25:45 +080040 {
q.huang1c03f752023-12-14 14:11:58 +080041 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
42 return LYNQ_E_CONFLICT;
q.huang52921662022-10-20 15:25:45 +080043 }
q.huang1c03f752023-12-14 14:11:58 +080044 if(audio_mode > AUDIO_MODE_RTP || audio_mode < AUDIO_MODE_CODEC)
q.huang52921662022-10-20 15:25:45 +080045 {
q.huang1c03f752023-12-14 14:11:58 +080046 return LYNQ_E_PARAMETER_ANONALY;
q.huang52921662022-10-20 15:25:45 +080047 }
q.huang1c03f752023-12-14 14:11:58 +080048
49 Parcel* p=NULL;
50 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_SET_VOICE_AUDIO_MODE,1,"%d",audio_mode);
51 if(ret==RESULT_OK)
52 {
53 delete p;
54 }
55 return ret;
q.huang52921662022-10-20 15:25:45 +080056}
q.huang1c03f752023-12-14 14:11:58 +080057
q.huang52921662022-10-20 15:25:45 +080058int lynq_set_remote_rtp_ip(const char* ip, const int ip_length)
59{
q.huang1c03f752023-12-14 14:11:58 +080060 if(g_module_init_flag != MODULE_RUNNING)
61 {
62 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
63 return LYNQ_E_CONFLICT;
64 }
q.huang52921662022-10-20 15:25:45 +080065 if (NULL == ip)
66 {
67 LYERRLOG("ip is NULL!!!");
68 return LYNQ_E_PARAMETER_ANONALY;
69 }
70 if ((ip_length < strlen(ip)+1) || (ip_length > MAX_IP_LENGTH))
71 {
72 LYERRLOG("incoming ip length error %d", ip_length);
73 return LYNQ_E_PARAMETER_ANONALY;
74 }
75
q.huang1c03f752023-12-14 14:11:58 +080076 Parcel* p=NULL;
77 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_SET_REMOTE_RTP_IP,1,"%s",ip);
78 if(ret==RESULT_OK)
79 {
80 delete p;
81 }
82 return ret;
q.huang52921662022-10-20 15:25:45 +080083}
84int lynq_set_vlan_info(const char* vlan_info, const int vlan_info_length)
85{
q.huang1c03f752023-12-14 14:11:58 +080086 if(g_module_init_flag != MODULE_RUNNING)
87 {
88 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
89 return LYNQ_E_CONFLICT;
90 }
91
q.huang52921662022-10-20 15:25:45 +080092 if (NULL == vlan_info)
93 {
94 LYERRLOG("vlan_info is NULL!!!");
95 return LYNQ_E_PARAMETER_ANONALY;
96 }
97
98 if ((vlan_info_length < strlen(vlan_info)+1) || (vlan_info_length > MAX_VLAN_INFO_LENGTH))
99 {
100 LYERRLOG("incoming vlan_info error, vlan info length %d", vlan_info_length);
101 return LYNQ_E_PARAMETER_ANONALY;
102 }
103
q.huang1c03f752023-12-14 14:11:58 +0800104 Parcel* p=NULL;
105 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_SET_VLAN_INFO,1,"%s",vlan_info);
106 if(ret==RESULT_OK)
107 {
108 delete p;
109 }
110 return ret;
q.huang52921662022-10-20 15:25:45 +0800111}
112int lynq_set_rtp_port(const LYNQ_Rtp_Mode rtp_mode, const int port)
113{
q.huang1c03f752023-12-14 14:11:58 +0800114 if(g_module_init_flag != MODULE_RUNNING)
115 {
116 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
117 return LYNQ_E_CONFLICT;
118 }
119
q.huang52921662022-10-20 15:25:45 +0800120 if (port < 0)
121 {
122 LYERRLOG("invalid port number %d", port);
123 return LYNQ_E_PARAMETER_ANONALY;
124 }
q.huang1c03f752023-12-14 14:11:58 +0800125
126 Parcel* p=NULL;
127 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_SET_RTP_PORT,2,"%d %d",rtp_mode,port);
128 if(ret==RESULT_OK)
q.huang52921662022-10-20 15:25:45 +0800129 {
q.huang1c03f752023-12-14 14:11:58 +0800130 delete p;
q.huang52921662022-10-20 15:25:45 +0800131 }
q.huang1c03f752023-12-14 14:11:58 +0800132 return ret;
q.huang52921662022-10-20 15:25:45 +0800133}
134int lynq_set_rtp_param(const int clock_rate,const int channels,const int latency) //only for client mode
135{
q.huang1c03f752023-12-14 14:11:58 +0800136 if(g_module_init_flag != MODULE_RUNNING)
137 {
138 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
139 return LYNQ_E_CONFLICT;
140 }
141
142 Parcel* p=NULL;
143 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_SET_RTP_PARAM,3,"%d %d %d",clock_rate,channels,latency);
144 if(ret==RESULT_OK)
145 {
146 delete p;
147 }
148 return ret;
q.huang52921662022-10-20 15:25:45 +0800149}
q.huang1c03f752023-12-14 14:11:58 +0800150
q.huangeacb8122023-04-04 16:50:53 +0800151int lynq_set_call_rtp_ssrc(const LYNQ_Rtp_Ssrc_Mode ssrc_mode,const unsigned int ssrc)
152{
q.huang1c03f752023-12-14 14:11:58 +0800153 if(g_module_init_flag != MODULE_RUNNING)
154 {
155 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
156 return LYNQ_E_CONFLICT;
157 }
158
q.huanga453a312023-04-14 18:09:57 +0800159 if(ssrc_mode < Rtp_Ssrc_random || ssrc_mode > Rtp_Ssrc_specific)
q.huangeacb8122023-04-04 16:50:53 +0800160 {
161 return LYNQ_E_PARAMETER_ANONALY;
162 }
q.huang1c03f752023-12-14 14:11:58 +0800163
164 Parcel* p=NULL;
165 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_SET_CALL_RTP_SSRC,2,"%d %u",ssrc_mode,ssrc);
166 if(ret==RESULT_OK)
167 {
168 delete p;
169 }
170 return ret;
q.huangeacb8122023-04-04 16:50:53 +0800171}
q.huang52921662022-10-20 15:25:45 +0800172/*get*/
q.huang1c03f752023-12-14 14:11:58 +0800173int lynq_get_voice_audio_mode(LYNQ_Audio_Mode* voice_audio_mode)
q.huang52921662022-10-20 15:25:45 +0800174{
q.huang1c03f752023-12-14 14:11:58 +0800175 if(g_module_init_flag != MODULE_RUNNING)
q.huang52921662022-10-20 15:25:45 +0800176 {
q.huang1c03f752023-12-14 14:11:58 +0800177 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
178 return LYNQ_E_CONFLICT;
q.huang52921662022-10-20 15:25:45 +0800179 }
q.huang1c03f752023-12-14 14:11:58 +0800180
181 if(voice_audio_mode==NULL)
q.huang52921662022-10-20 15:25:45 +0800182 {
q.huang1c03f752023-12-14 14:11:58 +0800183 LYERRLOG("parameter is NULL");
184 return LYNQ_E_PARAMETER_ANONALY;
185 }
186
187 int local_mode;
188
189 int ret=lynq_get_common_request(LYNQ_REQUEST_GET_VOICE_AUDIO_MODE,&local_mode);
190
191 *voice_audio_mode = (LYNQ_Audio_Mode) local_mode;
192 return ret;
q.huang52921662022-10-20 15:25:45 +0800193}
194int lynq_get_remote_rtp_ip(char* ip, const int ip_length)
195{
q.huang1c03f752023-12-14 14:11:58 +0800196 if(g_module_init_flag != MODULE_RUNNING)
197 {
198 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
199 return LYNQ_E_CONFLICT;
200 }
201
q.huang52921662022-10-20 15:25:45 +0800202 if(ip==NULL)
203 {
204 LYERRLOG("ip is NULL");
205 return LYNQ_E_PARAMETER_ANONALY;
206 }
207
q.huang1c03f752023-12-14 14:11:58 +0800208 if(ip_length > MAX_IP_LENGTH)
q.huang52921662022-10-20 15:25:45 +0800209 {
q.huang1c03f752023-12-14 14:11:58 +0800210 LYERRLOG("ip length %d is greater than max ip length %d",ip_length,MAX_IP_LENGTH);
q.huang52921662022-10-20 15:25:45 +0800211 return LYNQ_E_PARAMETER_ANONALY;
q.huang1c03f752023-12-14 14:11:58 +0800212 }
213
214
215 Parcel* p=NULL;
216 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_GET_REMOTE_RTP_IP,0,"");
217
218 if(ret!=RESULT_OK)
219 {
220 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
221 return ret;
222 }
223
224 int num ;
225 char *resp;
226
227 p->readInt32(&num);
228 if(num != 1)
229 {
230 LYERRLOG("no paramters or num %d too great",num);
231 delete p;
232 return LYNQ_E_INNER_ERROR;
233 }else{
234 resp = lynqStrdupReadString(p);
235 strcpy(ip,resp);
236 free(resp);
q.huang52921662022-10-20 15:25:45 +0800237 }
q.huang1c03f752023-12-14 14:11:58 +0800238
239 LYINFLOG("%s suc",__func__);
240 delete p;
241 return RESULT_OK;
q.huang52921662022-10-20 15:25:45 +0800242}
243int lynq_get_vlan_info(char* vlan_info, const int vlan_info_length)
244{
q.huang1c03f752023-12-14 14:11:58 +0800245 if(g_module_init_flag != MODULE_RUNNING)
246 {
247 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
248 return LYNQ_E_CONFLICT;
249 }
250
q.huang52921662022-10-20 15:25:45 +0800251 if(vlan_info==NULL)
252 {
253 LYERRLOG("vlan info is NULL");
254 return LYNQ_E_PARAMETER_ANONALY;
255 }
256
q.huang1c03f752023-12-14 14:11:58 +0800257 Parcel* p=NULL;
258 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_GET_VLAN_INFO,0,"");
259
260 if(ret!=RESULT_OK)
q.huang52921662022-10-20 15:25:45 +0800261 {
q.huang1c03f752023-12-14 14:11:58 +0800262 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
263 return ret;
264 }
265
266 int num ;
267 char *resp;
268
269 p->readInt32(&num);
270 if(num != 1)
271 {
272 LYERRLOG("no paramters or num %d too great",num);
273 delete p;
274 return LYNQ_E_INNER_ERROR;
275 }else{
276 resp = lynqStrdupReadString(p);
277 strcpy(vlan_info,resp);
278 free(resp);
q.huang52921662022-10-20 15:25:45 +0800279 }
q.huang1c03f752023-12-14 14:11:58 +0800280
281 LYINFLOG("%s suc",__func__);
282 delete p;
283 return RESULT_OK;
q.huang52921662022-10-20 15:25:45 +0800284}
q.huang1c03f752023-12-14 14:11:58 +0800285
q.huang52921662022-10-20 15:25:45 +0800286int lynq_get_rtp_port(const LYNQ_Rtp_Mode rtp_mode, int* port)
287{
q.huang1c03f752023-12-14 14:11:58 +0800288 if(g_module_init_flag != MODULE_RUNNING)
289 {
290 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
291 return LYNQ_E_CONFLICT;
292 }
293
q.huang52921662022-10-20 15:25:45 +0800294 if(port==NULL)
295 {
296 return LYNQ_E_PARAMETER_ANONALY;
297 }
q.huang1c03f752023-12-14 14:11:58 +0800298
299 Parcel* p=NULL;
300 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_GET_RTP_PORT,1,"%d",rtp_mode);
301 if(ret==RESULT_OK)
q.huang52921662022-10-20 15:25:45 +0800302 {
q.huang1c03f752023-12-14 14:11:58 +0800303 p->readInt32(port);
304 delete p;
q.huang52921662022-10-20 15:25:45 +0800305 }
q.huang1c03f752023-12-14 14:11:58 +0800306 return ret;
q.huang52921662022-10-20 15:25:45 +0800307}
308int lynq_get_rtp_param(int* clock_rate, int* channels, int* latency)//only for client mode
309{
q.huang1c03f752023-12-14 14:11:58 +0800310 if(g_module_init_flag != MODULE_RUNNING)
311 {
312 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
313 return LYNQ_E_CONFLICT;
314 }
315
q.huang52921662022-10-20 15:25:45 +0800316 if(clock_rate == NULL || channels ==NULL || latency ==NULL)
317 {
318 LYERRLOG("input parameter is NULL");
319 return LYNQ_E_PARAMETER_ANONALY;
320 }
321
q.huang1c03f752023-12-14 14:11:58 +0800322 Parcel* p=NULL;
323 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_GET_RTP_PARAM,0,"");
q.huang52921662022-10-20 15:25:45 +0800324
q.huang1c03f752023-12-14 14:11:58 +0800325 if(ret!=RESULT_OK)
326 {
327 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
328 return ret;
329 }
330
331 p->readInt32(clock_rate);
332 p->readInt32(channels);
333 p->readInt32(latency);
334
335 LYINFLOG("%s suc",__func__);
336 delete p;
337 return RESULT_OK;
q.huang52921662022-10-20 15:25:45 +0800338}
q.huang1c03f752023-12-14 14:11:58 +0800339
q.huanga453a312023-04-14 18:09:57 +0800340int lynq_get_call_rtp_ssrc(int* ssrc_mode, unsigned int* ssrc)
q.huangeacb8122023-04-04 16:50:53 +0800341{
q.huang1c03f752023-12-14 14:11:58 +0800342 if(g_module_init_flag != MODULE_RUNNING)
343 {
344 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
345 return LYNQ_E_CONFLICT;
346 }
347
q.huangeacb8122023-04-04 16:50:53 +0800348 if(ssrc_mode == NULL || ssrc ==NULL)
349 {
350 LYERRLOG("input parameter is NULL");
351 return LYNQ_E_PARAMETER_ANONALY;
352 }
q.huang1c03f752023-12-14 14:11:58 +0800353
354 Parcel* p=NULL;
355 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_GET_CALL_RTP_SSRC,0,"");
356
357 if(ret!=RESULT_OK)
358 {
359 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
360 return ret;
361 }
362
363 p->readInt32(ssrc_mode);
364 p->readUint32(ssrc);
365
366 LYINFLOG("%s suc",__func__);
367 delete p;
368 return RESULT_OK;
q.huangeacb8122023-04-04 16:50:53 +0800369}