blob: ae3c536348c43472c9b516b1ca5a3077f904cbac [file] [log] [blame]
q.huang8878f362022-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.huangb07e29a2023-05-25 10:28:32 +080020#include "lynq_module_socket.h"
q.huang4df0b512023-04-04 16:50:53 +080021
q.huang8878f362022-10-20 15:25:45 +080022#define USER_LOG_TAG "LYNQ_CALL"
23
q.huangb07e29a2023-05-25 10:28:32 +080024#define MAX_IP_LENGTH 128
25#define MAX_VLAN_INFO_LENGTH 128
q.huang8878f362022-10-20 15:25:45 +080026
q.huang8878f362022-10-20 15:25:45 +080027
q.huangb07e29a2023-05-25 10:28:32 +080028static char * lynqStrdupReadString(Parcel* &p) {
29 size_t stringlen;
30 const char16_t *s16;
q.huang8878f362022-10-20 15:25:45 +080031
q.huangb07e29a2023-05-25 10:28:32 +080032 s16 = p->readString16Inplace(&stringlen);
33 return strndup16to8(s16, stringlen);
q.huang8878f362022-10-20 15:25:45 +080034}
35
36/*set*/
37int lynq_set_voice_audio_mode(const LYNQ_Audio_Mode audio_mode)
38{
q.huangb07e29a2023-05-25 10:28:32 +080039 if(g_module_init_flag != MODULE_RUNNING)
q.huang8878f362022-10-20 15:25:45 +080040 {
q.huangb07e29a2023-05-25 10:28:32 +080041 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
42 return LYNQ_E_CONFLICT;
q.huang8878f362022-10-20 15:25:45 +080043 }
q.huangb07e29a2023-05-25 10:28:32 +080044 if(audio_mode > AUDIO_MODE_RTP || audio_mode < AUDIO_MODE_CODEC)
q.huang8878f362022-10-20 15:25:45 +080045 {
q.huangb07e29a2023-05-25 10:28:32 +080046 return LYNQ_E_PARAMETER_ANONALY;
q.huang8878f362022-10-20 15:25:45 +080047 }
q.huangb07e29a2023-05-25 10:28:32 +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.huang8878f362022-10-20 15:25:45 +080056}
q.huangb07e29a2023-05-25 10:28:32 +080057
q.huang8878f362022-10-20 15:25:45 +080058int lynq_set_remote_rtp_ip(const char* ip, const int ip_length)
59{
q.huangb07e29a2023-05-25 10:28:32 +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.huang8878f362022-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.huangb07e29a2023-05-25 10:28:32 +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.huang8878f362022-10-20 15:25:45 +080083}
84int lynq_set_vlan_info(const char* vlan_info, const int vlan_info_length)
85{
q.huangb07e29a2023-05-25 10:28:32 +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.huang8878f362022-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.huangb07e29a2023-05-25 10:28:32 +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.huang8878f362022-10-20 15:25:45 +0800111}
112int lynq_set_rtp_port(const LYNQ_Rtp_Mode rtp_mode, const int port)
113{
q.huangb07e29a2023-05-25 10:28:32 +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.huang8878f362022-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.huangb07e29a2023-05-25 10:28:32 +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.huang8878f362022-10-20 15:25:45 +0800129 {
q.huangb07e29a2023-05-25 10:28:32 +0800130 delete p;
q.huang8878f362022-10-20 15:25:45 +0800131 }
q.huangb07e29a2023-05-25 10:28:32 +0800132 return ret;
q.huang8878f362022-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.huangb07e29a2023-05-25 10:28:32 +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.huang8878f362022-10-20 15:25:45 +0800149}
q.huangb07e29a2023-05-25 10:28:32 +0800150
q.huang4df0b512023-04-04 16:50:53 +0800151int lynq_set_call_rtp_ssrc(const LYNQ_Rtp_Ssrc_Mode ssrc_mode,const unsigned int ssrc)
152{
q.huangb07e29a2023-05-25 10:28:32 +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
159 if(ssrc_mode < Rtp_Ssrc_random || ssrc_mode > Rtp_Ssrc_specific)
q.huang4df0b512023-04-04 16:50:53 +0800160 {
161 return LYNQ_E_PARAMETER_ANONALY;
162 }
q.huangb07e29a2023-05-25 10:28:32 +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.huang4df0b512023-04-04 16:50:53 +0800171}
q.huang8878f362022-10-20 15:25:45 +0800172/*get*/
q.huangb07e29a2023-05-25 10:28:32 +0800173int lynq_get_voice_audio_mode(int* voice_audio_mode)
q.huang8878f362022-10-20 15:25:45 +0800174{
q.huangb07e29a2023-05-25 10:28:32 +0800175 if(g_module_init_flag != MODULE_RUNNING)
q.huang8878f362022-10-20 15:25:45 +0800176 {
q.huangb07e29a2023-05-25 10:28:32 +0800177 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
178 return LYNQ_E_CONFLICT;
q.huang8878f362022-10-20 15:25:45 +0800179 }
q.huangb07e29a2023-05-25 10:28:32 +0800180
181 return lynq_get_common_request(LYNQ_REQUEST_GET_VOICE_AUDIO_MODE,voice_audio_mode);
q.huang8878f362022-10-20 15:25:45 +0800182}
183int lynq_get_remote_rtp_ip(char* ip, const int ip_length)
184{
q.huangb07e29a2023-05-25 10:28:32 +0800185 if(g_module_init_flag != MODULE_RUNNING)
186 {
187 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
188 return LYNQ_E_CONFLICT;
189 }
190
q.huang8878f362022-10-20 15:25:45 +0800191 if(ip==NULL)
192 {
193 LYERRLOG("ip is NULL");
194 return LYNQ_E_PARAMETER_ANONALY;
195 }
196
q.huangb07e29a2023-05-25 10:28:32 +0800197 if(ip_length > MAX_IP_LENGTH)
q.huang8878f362022-10-20 15:25:45 +0800198 {
q.huangb07e29a2023-05-25 10:28:32 +0800199 LYERRLOG("ip length %d is greater than max ip length %d",ip_length,MAX_IP_LENGTH);
q.huang8878f362022-10-20 15:25:45 +0800200 return LYNQ_E_PARAMETER_ANONALY;
q.huangb07e29a2023-05-25 10:28:32 +0800201 }
202
203
204 Parcel* p=NULL;
205 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_GET_REMOTE_RTP_IP,0,"");
206
207 if(ret!=RESULT_OK)
208 {
209 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
210 return ret;
211 }
212
213 int num ;
214 char *resp;
215
216 p->readInt32(&num);
217 if(num != 1)
218 {
219 LYERRLOG("no paramters or num %d too great",num);
220 delete p;
221 return LYNQ_E_INNER_ERROR;
222 }else{
223 resp = lynqStrdupReadString(p);
224 strcpy(ip,resp);
225 free(resp);
q.huang8878f362022-10-20 15:25:45 +0800226 }
q.huangb07e29a2023-05-25 10:28:32 +0800227
228 LYINFLOG("%s suc",__func__);
229 delete p;
230 return RESULT_OK;
q.huang8878f362022-10-20 15:25:45 +0800231}
232int lynq_get_vlan_info(char* vlan_info, const int vlan_info_length)
233{
q.huangb07e29a2023-05-25 10:28:32 +0800234 if(g_module_init_flag != MODULE_RUNNING)
235 {
236 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
237 return LYNQ_E_CONFLICT;
238 }
239
q.huang8878f362022-10-20 15:25:45 +0800240 if(vlan_info==NULL)
241 {
242 LYERRLOG("vlan info is NULL");
243 return LYNQ_E_PARAMETER_ANONALY;
244 }
245
q.huangb07e29a2023-05-25 10:28:32 +0800246 Parcel* p=NULL;
247 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_GET_VLAN_INFO,0,"");
248
249 if(ret!=RESULT_OK)
q.huang8878f362022-10-20 15:25:45 +0800250 {
q.huangb07e29a2023-05-25 10:28:32 +0800251 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
252 return ret;
253 }
254
255 int num ;
256 char *resp;
257
258 p->readInt32(&num);
259 if(num != 1)
260 {
261 LYERRLOG("no paramters or num %d too great",num);
262 delete p;
263 return LYNQ_E_INNER_ERROR;
264 }else{
265 resp = lynqStrdupReadString(p);
266 strcpy(vlan_info,resp);
267 free(resp);
q.huang8878f362022-10-20 15:25:45 +0800268 }
q.huangb07e29a2023-05-25 10:28:32 +0800269
270 LYINFLOG("%s suc",__func__);
271 delete p;
272 return RESULT_OK;
q.huang8878f362022-10-20 15:25:45 +0800273}
q.huangb07e29a2023-05-25 10:28:32 +0800274
q.huang8878f362022-10-20 15:25:45 +0800275int lynq_get_rtp_port(const LYNQ_Rtp_Mode rtp_mode, int* port)
276{
q.huangb07e29a2023-05-25 10:28:32 +0800277 if(g_module_init_flag != MODULE_RUNNING)
278 {
279 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
280 return LYNQ_E_CONFLICT;
281 }
282
q.huang8878f362022-10-20 15:25:45 +0800283 if(port==NULL)
284 {
285 return LYNQ_E_PARAMETER_ANONALY;
286 }
q.huangb07e29a2023-05-25 10:28:32 +0800287
288 Parcel* p=NULL;
289 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_GET_RTP_PORT,1,"%d",rtp_mode);
290 if(ret==RESULT_OK)
q.huang8878f362022-10-20 15:25:45 +0800291 {
q.huangb07e29a2023-05-25 10:28:32 +0800292 p->readInt32(port);
293 delete p;
q.huang8878f362022-10-20 15:25:45 +0800294 }
q.huangb07e29a2023-05-25 10:28:32 +0800295 return ret;
q.huang8878f362022-10-20 15:25:45 +0800296}
297int lynq_get_rtp_param(int* clock_rate, int* channels, int* latency)//only for client mode
298{
q.huangb07e29a2023-05-25 10:28:32 +0800299 if(g_module_init_flag != MODULE_RUNNING)
300 {
301 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
302 return LYNQ_E_CONFLICT;
303 }
304
q.huang8878f362022-10-20 15:25:45 +0800305 if(clock_rate == NULL || channels ==NULL || latency ==NULL)
306 {
307 LYERRLOG("input parameter is NULL");
308 return LYNQ_E_PARAMETER_ANONALY;
309 }
310
q.huangb07e29a2023-05-25 10:28:32 +0800311 Parcel* p=NULL;
312 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_GET_RTP_PARAM,0,"");
q.huang8878f362022-10-20 15:25:45 +0800313
q.huangb07e29a2023-05-25 10:28:32 +0800314 if(ret!=RESULT_OK)
315 {
316 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
317 return ret;
318 }
319
320 p->readInt32(clock_rate);
321 p->readInt32(channels);
322 p->readInt32(latency);
323
324 LYINFLOG("%s suc",__func__);
325 delete p;
326 return RESULT_OK;
q.huang8878f362022-10-20 15:25:45 +0800327}
q.huangb07e29a2023-05-25 10:28:32 +0800328
329int lynq_get_call_rtp_ssrc(int* ssrc_mode, unsigned int* ssrc)
q.huang4df0b512023-04-04 16:50:53 +0800330{
q.huangb07e29a2023-05-25 10:28:32 +0800331 if(g_module_init_flag != MODULE_RUNNING)
332 {
333 LYERRLOG("%s module state %d error",__func__,g_module_init_flag);
334 return LYNQ_E_CONFLICT;
335 }
336
q.huang4df0b512023-04-04 16:50:53 +0800337 if(ssrc_mode == NULL || ssrc ==NULL)
338 {
339 LYERRLOG("input parameter is NULL");
340 return LYNQ_E_PARAMETER_ANONALY;
341 }
q.huangb07e29a2023-05-25 10:28:32 +0800342
343 Parcel* p=NULL;
344 int ret=lynq_send_common_request(p,g_wait_time,LYNQ_REQUEST_GET_CALL_RTP_SSRC,0,"");
345
346 if(ret!=RESULT_OK)
347 {
348 LYERRLOG("%s call lynq_send_common_request failure, ret is %d",__func__,ret);
349 return ret;
350 }
351
352 p->readInt32(ssrc_mode);
353 p->readUint32(ssrc);
354
355 LYINFLOG("%s suc",__func__);
356 delete p;
357 return RESULT_OK;
q.huang4df0b512023-04-04 16:50:53 +0800358}