• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021 Huawei Device Co., Ltd.
3  * Licensed under the Apache License, Version 2.0 (the "License");
4  * you may not use this file except in compliance with the License.
5  * You may obtain a copy of the License at
6  *
7  *     http://www.apache.org/licenses/LICENSE-2.0
8  *
9  * Unless required by applicable law or agreed to in writing, software
10  * distributed under the License is distributed on an "AS IS" BASIS,
11  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12  * See the License for the specific language governing permissions and
13  * limitations under the License.
14  */
15 
16 #include "net_trans_common.h"
17 
18 static int ONE_SECOND = 1;
19 
20 static int32_t g_currentSessionId4Data = -1;
21 static int32_t g_currentSessionId4Ctl = -1;
22 static int32_t g_currentSessionId4Proxy = -1;
23 
24 static int32_t g_waitFlag = WAIT_DEF_VALUE;
25 static int32_t g_waitFlag4Data = WAIT_DEF_VALUE;
26 static int32_t g_waitFlag4Ctl = WAIT_DEF_VALUE;
27 static int32_t g_waitFlag4Proxy = WAIT_DEF_VALUE;
28 static int32_t g_waitFlag4Stream = WAIT_DEF_VALUE;
29 static int32_t g_passiveOpenRetFlag = SOFTBUS_OK;
30 static int32_t g_nodeOnlineCount = 0;
31 static int32_t g_nodeOfflineCount = 0;
32 
33 static int32_t g_msgCount4Data = 0;
34 static int32_t g_byteCount4Data = 0;
35 static int32_t g_sessionCloseCount4Data = 0;
36 static int32_t g_sessionCloseCount4Ctrl = 0;
37 static int32_t g_sessionOpenCount4Data = 0;
38 static int32_t g_sessionOpenCount4Ctrl = 0;
39 static int32_t g_sessionOpenCount4Proxy = 0;
40 
41 static SessionAttribute* g_sessionAttr4Data = NULL;
42 static SessionAttribute* g_sessionAttr4Ctl = NULL;
43 static SessionAttribute* g_sessionAttr4Pass = NULL;
44 static SessionAttribute* g_sessionAttr4Perf = NULL;
45 static SessionAttribute* g_sessionAttr4Proxy = NULL;
46 static SessionAttribute* g_p2pattribute = NULL;
47 static SessionAttribute* g_p2pattributeProxy = NULL;
48 static ISessionListener* g_sessionlistener4Data = NULL;
49 static ISessionListener* g_sessionlistener4Ctl = NULL;
50 static ISessionListener* g_sessionlistener4Pass = NULL;
51 static ISessionListener* g_sessionlistener4Perf = NULL;
52 static ISessionListener* g_sessionlistener4Proxy = NULL;
53 static ISessionListener* g_sessionlistener4Stream = NULL;
54 
55 static IFileSendListener* g_fileSendListener = NULL;
56 static IFileReceiveListener* g_fileRecvListener = NULL;
57 
58 static char g_networkId[NETWORK_ID_BUF_LEN] = { 0 };
59 static INodeStateCb g_defNodeStateCallback;
60 static ConnectionAddr g_ethAddr = {
61     .type = CONNECTION_ADDR_WLAN,
62 };
63 
64 static int* g_sId4Task2;
65 static int* g_sId4Task3;
66 static char g_fillContentChar = 'd';
67 static unsigned int g_expectDataSize = 0;
68 static char* g_expectDataContent = NULL;
69 static char* g_expectMessageContent = NULL;
70 
71 static pthread_barrier_t* g_barrier = NULL;
72 
73 static int32_t g_recvMsgStat4Control[MAX_SESSION_NUM] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
74 static int32_t g_recvByteStat4Control[MAX_SESSION_NUM] = { 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0 };
75 
76 static uint64_t g_discoverTimeEnd;
77 static uint64_t g_openSessionTimeEnd;
78 static uint64_t g_transTimeEnd;
79 
80 /* discovery */
81 static IDiscoveryCallback g_defDiscCallback;
82 
sleepn(int n)83 void sleepn(int n)
84 {
85     for(int i = 0; i < n; i++) {
86         sleep(1);
87     }
88 }
Wait(int timeout)89 int Wait(int timeout)
90 {
91     LOG("start wait,timeout:%d", timeout);
92     int count = 0;
93     int t = timeout;
94     while (t > 0) {
95         sleep(1);
96         if (g_waitFlag != WAIT_DEF_VALUE) {
97             LOG("Wait success[flag:%d] [time:%d]", g_waitFlag, count);
98             break;
99         }
100         t--;
101         count++;
102     }
103     if (g_waitFlag != WAIT_SUCCESS_VALUE) {
104         LOG("Wait fail[exp:%d, real:%d][used time:%d]", WAIT_SUCCESS_VALUE, g_waitFlag, count);
105         return SOFTBUS_ERR;
106     }
107     return SOFTBUS_OK;
108 }
109 
Wait4Session(int timeout,WaitSessionType type)110 int Wait4Session(int timeout, WaitSessionType type)
111 {
112     int hitFlag = -1;
113     int t = timeout;
114     while (t > 0) {
115         sleep(1);
116         switch (type) {
117             case SESSION_4CTL:
118                 if (g_waitFlag4Ctl != WAIT_DEF_VALUE) {
119                     LOG("Wait4Session[ctrl] succ, flag:%d", g_waitFlag4Ctl);
120                     hitFlag = 1;
121                 }
122                 break;
123             case SESSION_4DATA:
124                 if (g_waitFlag4Data != WAIT_DEF_VALUE) {
125                     LOG("Wait4Session[data] succ,flag:%d", g_waitFlag4Data);
126                     hitFlag = 1;
127                 }
128                 break;
129             case SESSION_4PROXY:
130                 if (g_waitFlag4Proxy != WAIT_DEF_VALUE) {
131                     LOG("Wait4Session[proxy] succ,flag:%d", g_waitFlag4Proxy);
132                     hitFlag = 1;
133                 }
134                 break;
135             case SESSION_4STREAM:
136                 if (g_waitFlag4Stream != WAIT_DEF_VALUE) {
137                     LOG("Wait4Session[proxy] succ,flag:%d", g_waitFlag4Stream);
138                     hitFlag = 1;
139                 }
140                 break;
141             default:
142                 LOG("Wait4Session type error");
143                 hitFlag = 1;
144                 break;
145         }
146         if (hitFlag != -1) {
147             break;
148         }
149         t--;
150     }
151     switch (type) {
152         case SESSION_4CTL:
153             if (g_waitFlag4Ctl != WAIT_SUCCESS_VALUE) {
154                 LOG("Wait4Session[ctrl] fail[exp:%d, real:%d]", WAIT_SUCCESS_VALUE, g_waitFlag4Ctl);
155                 return SOFTBUS_ERR;
156             }
157             break;
158         case SESSION_4DATA:
159             if (g_waitFlag4Data != WAIT_SUCCESS_VALUE) {
160                 LOG("Wait4Session[data] fail[exp:%d, real:%d]", WAIT_SUCCESS_VALUE, g_waitFlag4Data);
161                 return SOFTBUS_ERR;
162             }
163             break;
164         case SESSION_4PROXY:
165             if (g_waitFlag4Proxy != WAIT_SUCCESS_VALUE) {
166                 LOG("Wait4Session[proxy] fail[exp:%d, real:%d]", WAIT_SUCCESS_VALUE, g_waitFlag4Proxy);
167                 return SOFTBUS_ERR;
168             }
169             break;
170          case SESSION_4STREAM:
171             if (g_waitFlag4Stream != WAIT_SUCCESS_VALUE) {
172                 LOG("Wait4Session[proxy] fail[exp:%d, real:%d]", WAIT_SUCCESS_VALUE, g_waitFlag4Stream);
173                 return SOFTBUS_ERR;
174             }
175             break;
176         default:
177             return SOFTBUS_ERR;
178     }
179     return SOFTBUS_OK;
180 }
181 
GetCurrentTimeOfMs(void)182 uint64_t GetCurrentTimeOfMs(void)
183 {
184     int unit = 1000;
185     struct timeval tv;
186     gettimeofday(&tv, NULL);
187     return (tv.tv_sec * unit + tv.tv_usec / unit);
188 }
189 
GetSoftbusPid(void)190 char* GetSoftbusPid(void)
191 {
192     FILE* file = NULL;
193     int buffSize = 20;
194     char* buffer = (char*)malloc(buffSize);
195     if (buffer == NULL) {
196         LOG("malloc fail");
197         return NULL;
198     }
199 
200     file = popen(CMD_PIDOF_SOFTBUS, "r");
201     if (file == NULL) {
202         LOG("call popen fail");
203         free(buffer);
204         return NULL;
205     }
206     (void)fgets(buffer, buffSize, file);
207     LOG("##################Softbus PID:%s", buffer);
208     pclose(file);
209 
210     return buffer;
211 }
212 
OnReceiveFileStarted(int sessionId,const char * files,int fileCnt)213 static int OnReceiveFileStarted(int sessionId, const char* files, int fileCnt)
214 {
215     LOG("[recv file]start,sid:%d, fileCnt:%d", sessionId, fileCnt);
216     return 0;
217 }
218 
OnReceiveFileProcess(int sessionId,const char * firstFile,uint64_t bytesUpload,uint64_t bytesTotal)219 static int OnReceiveFileProcess(int sessionId, const char* firstFile, uint64_t bytesUpload, uint64_t bytesTotal)
220 {
221     return 0;
222 }
223 
OnReceiveFileFinished(int sessionId,const char * files,int fileCnt)224 static void OnReceiveFileFinished(int sessionId, const char* files, int fileCnt)
225 {
226     LOG("[recv file]finish,sid:%d, fileCnt:%d", sessionId, fileCnt);
227 }
228 
OnRecvFileTransError(int sessionId)229 static void OnRecvFileTransError(int sessionId)
230 {
231     LOG("[recv file]trans error,sid:%d", sessionId);
232 }
233 
OnSendFileProcess(int sessionId,uint64_t bytesUpload,uint64_t bytesTotal)234 static int OnSendFileProcess(int sessionId, uint64_t bytesUpload, uint64_t bytesTotal)
235 {
236     return 0;
237 }
238 
OnSendFileFinished(int sessionId,const char * firstFile)239 static int OnSendFileFinished(int sessionId, const char* firstFile)
240 {
241     g_waitFlag = WAIT_SUCCESS_VALUE;
242     LOG("[send file]finish,sid:%d, firstFile:%s\n", sessionId, firstFile);
243     return 0;
244 }
245 
OnSendFileTransError(int sessionId)246 static void OnSendFileTransError(int sessionId)
247 {
248     g_waitFlag = WAIT_FAIL_VALUE;
249     LOG("[send file]trans error,sid = %d\n", sessionId);
250 }
251 
OnDefDeviceFound(const DeviceInfo * device)252 static void OnDefDeviceFound(const DeviceInfo* device)
253 {
254     g_discoverTimeEnd = GetCurrentTimeOfMs();
255 
256     if (device == NULL) {
257         LOG("[cb]device found,but is null");
258         g_waitFlag = WAIT_FAIL_VALUE;
259         return;
260     }
261 
262     uint16_t port = device->addr[0].info.ip.port;
263     char ipTmp[IP_STR_MAX_LEN];
264     if (strncpy_s(ipTmp, IP_STR_MAX_LEN, device->addr[0].info.ip.ip, strlen(device->addr[0].info.ip.ip)) != 0) {
265         LOG("[cb]device found, strncpy_s ipTmp fail");
266         return;
267     }
268     LOG("[cb]device found, type:%d", device->addr[0].type);
269     LOG("[cb]device found, addr:%s, prot:%d", ipTmp, port);
270 
271     g_ethAddr.info.ip.port = port;
272     if (strncpy_s(g_ethAddr.info.ip.ip, IP_STR_MAX_LEN, ipTmp, strlen(ipTmp)) != 0) {
273         LOG("[cb]device found, strncpy_s ip fail");
274         g_waitFlag = WAIT_FAIL_VALUE;
275         return;
276     }
277 
278     g_waitFlag = WAIT_SUCCESS_VALUE;
279 }
280 
OnDefDiscoverFail(int subscribeId,DiscoveryFailReason failReason)281 static void OnDefDiscoverFail(int subscribeId, DiscoveryFailReason failReason)
282 {
283     LOG("[cb]discover fail, sub id:%d, reason:%d", subscribeId, failReason);
284 }
285 
OnDefDiscoverSuccess(int subscribeId)286 static void OnDefDiscoverSuccess(int subscribeId)
287 {
288     LOG("[cb]discover success, sub id:%d", subscribeId);
289 }
290 
OnDefNodeOnline(NodeBasicInfo * info)291 static void OnDefNodeOnline(NodeBasicInfo* info)
292 {
293     if (info == NULL) {
294         LOG("[cb]Online: info is null");
295         return;
296     }
297     (void)strncpy_s(g_networkId, NETWORK_ID_BUF_LEN, info->networkId, NETWORK_ID_BUF_LEN);
298     LOG("[cb]Online id:%s, name:%s, type id:%u", info->networkId, info->deviceName, info->deviceTypeId);
299     g_nodeOnlineCount++;
300 }
301 
OnDefNodeOffline(NodeBasicInfo * info)302 static void OnDefNodeOffline(NodeBasicInfo* info)
303 {
304     if (info == NULL) {
305         LOG("[cb]Offline: info is null");
306         return;
307     }
308     LOG("[cb]Offline id:%s, name:%s, type id:%u", info->networkId, info->deviceName, info->deviceTypeId);
309     g_nodeOfflineCount++;
310 }
311 
OnDefNodeBasicInfoChanged(NodeBasicInfoType type,NodeBasicInfo * info)312 static void OnDefNodeBasicInfoChanged(NodeBasicInfoType type, NodeBasicInfo* info)
313 {
314     if (info == NULL) {
315         LOG("[cb]InfoChanged: info is null, type[%d]", type);
316         return;
317     }
318     LOG("[cb]InfoChanged id: %s,name: %s", info->networkId, info->deviceName);
319 }
320 
onDefNodeStatusChanged(NodeStatusType type,NodeStatus * status)321 static void onDefNodeStatusChanged(NodeStatusType type, NodeStatus *status)
322 {
323     if (status == NULL) {
324         LOG("[cb]StatusChanged: info is null, type[%d]", type);
325         return;
326     }
327     LOG("[cb]StatusChanged id: %s,status: %d", status->basicInfo.networkId, status->authStatus);
328 }
329 
DataSessionOpened(int sessionId,int result)330 static int DataSessionOpened(int sessionId, int result)
331 {
332     // wait 1s, ensure set current session id
333     sleep(1);
334     g_sessionOpenCount4Data++;
335     if (result == SOFTBUS_OK) {
336         if (sessionId == g_currentSessionId4Data) {
337             LOG("[cb][data]open session check success sid[%d]", sessionId);
338             g_waitFlag4Data = WAIT_SUCCESS_VALUE;
339         } else {
340             LOG("[cb][data]open session callback sid[%d] not match open "
341                 "sid[%d]",
342                 sessionId, g_currentSessionId4Data);
343             g_waitFlag4Data = WAIT_FAIL_VALUE;
344         }
345     } else {
346         g_waitFlag4Data = WAIT_FAIL_VALUE;
347     }
348     return SOFTBUS_OK;
349 }
350 
DataSessionClosed(int sessionId)351 static void DataSessionClosed(int sessionId)
352 {
353     g_sessionCloseCount4Data++;
354     if (sessionId == g_currentSessionId4Data) {
355         LOG("[cb][data]closed session,check sid[%d] success", sessionId);
356         g_currentSessionId4Data = -1;
357         g_waitFlag4Data = WAIT_SUCCESS_VALUE;
358     } else {
359         LOG("[cb][data]closed session, callback sid[%d] not match open sid[%d]", sessionId, g_currentSessionId4Data);
360         g_waitFlag4Data = WAIT_FAIL_VALUE;
361     }
362 }
363 
CheckReceiveData(int sessionId,const void * data,unsigned int dataLen)364 static void CheckReceiveData(int sessionId, const void* data, unsigned int dataLen)
365 {
366     // check session id
367     if (sessionId == g_currentSessionId4Data && dataLen == g_expectDataSize) {
368         LOG("[check]sid/size ok[sid:%d,size:%u]", sessionId, dataLen);
369     } else {
370         LOG("[check]sid/size fail[sid exp:%d,real:%d][size exp:%u,real:%u]", g_currentSessionId4Data, sessionId,
371             g_expectDataSize, dataLen);
372         g_waitFlag = WAIT_FAIL_VALUE;
373         return;
374     }
375 
376     // check data content
377     int cmpRst = strncmp(g_expectDataContent, (char*)data, dataLen);
378     if (cmpRst == 0) {
379         LOG("[check] cmp content ok");
380         g_waitFlag = WAIT_SUCCESS_VALUE;
381     } else {
382         LOG("[check] cmp content fail[exp:%s,real:%s]", g_expectDataContent, (char*)data);
383         g_waitFlag = WAIT_FAIL_VALUE;
384     }
385 }
386 
DataBytesReceived(int sessionId,const void * data,unsigned int dataLen)387 static void DataBytesReceived(int sessionId, const void* data, unsigned int dataLen)
388 {
389     LOG("[cb][data]ByteRec start");
390     CheckReceiveData(sessionId, data, dataLen);
391     g_byteCount4Data++;
392     LOG("[cb][data]ByteRec end");
393 }
394 
DataMessageReceived(int sessionId,const void * data,unsigned int dataLen)395 static void DataMessageReceived(int sessionId, const void* data, unsigned int dataLen)
396 {
397     LOG("[cb][data]MessageRec start");
398     CheckReceiveData(sessionId, data, dataLen);
399     g_msgCount4Data++;
400     LOG("[cb][data]MessageRec end");
401 }
402 
ControlSessionOpened(int sessionId,int result)403 static int ControlSessionOpened(int sessionId, int result)
404 {
405     // wait 1s, ensure set current session id
406     sleep(1);
407     g_sessionOpenCount4Ctrl++;
408     if (result == SOFTBUS_OK) {
409         if (sessionId == g_currentSessionId4Ctl) {
410             LOG("[cb][ctrl]open session check success sid[%d]", sessionId);
411             g_waitFlag4Ctl = WAIT_SUCCESS_VALUE;
412         } else {
413             LOG("[cb][ctrl]open session callback sid[%d] not match open "
414                 "sid[%d]",
415                 sessionId, g_currentSessionId4Ctl);
416             g_waitFlag4Ctl = WAIT_FAIL_VALUE;
417         }
418     } else {
419         g_waitFlag4Ctl = WAIT_FAIL_VALUE;
420     }
421     return SOFTBUS_OK;
422 }
423 
ControlSessionClosed(int sessionId)424 static void ControlSessionClosed(int sessionId)
425 {
426     g_sessionCloseCount4Ctrl++;
427     if (sessionId == g_currentSessionId4Ctl) {
428         LOG("[cb][ctrl]closed session check sid[%d] success", sessionId);
429         g_currentSessionId4Ctl = -1;
430         g_waitFlag4Ctl = WAIT_SUCCESS_VALUE;
431     } else {
432         LOG("[cb][ctrl]closed session callback sid[%d] not match open sid[%d]", sessionId, g_currentSessionId4Ctl);
433         g_waitFlag4Ctl = WAIT_FAIL_VALUE;
434     }
435 }
436 
ControlBytesReceived(int sessionId,const void * data,unsigned int dataLen)437 static void ControlBytesReceived(int sessionId, const void* data, unsigned int dataLen)
438 {
439     LOG("[cb][ctrl]ByteRec sid:%d, data len:%u", sessionId, dataLen);
440     if (sessionId < 0 || sessionId > MAX_SESSION_NUM) {
441         LOG("[cb][ctrl]ByteRec invalid session sid[%d]", sessionId);
442         return;
443     }
444     if (data == NULL) {
445         LOG("[cb][ctrl]ByteRec invalid data=null sid[%d]", sessionId);
446         return;
447     }
448     int sid = sessionId % MAX_SESSION_NUM;
449     g_recvByteStat4Control[sid]++;
450 }
451 
ControlMessageReceived(int sessionId,const void * data,unsigned int dataLen)452 static void ControlMessageReceived(int sessionId, const void* data, unsigned int dataLen)
453 {
454     LOG("[cb][ctrl]MessageRec sid:%d, data len:%u", sessionId, dataLen);
455     if (sessionId < 0 || sessionId > MAX_SESSION_NUM) {
456         LOG("[cb][ctrl]MessageRec invalid session sid[%d]", sessionId);
457         return;
458     }
459     if (data == NULL) {
460         LOG("[cb][ctrl]MessageRec invalid data=null sid[%d]", sessionId);
461         return;
462     }
463     int sid = sessionId % MAX_SESSION_NUM;
464     g_recvMsgStat4Control[sid]++;
465 }
466 
PassiveSessionOpened(int sessionId,int result)467 static int PassiveSessionOpened(int sessionId, int result)
468 {
469     LOG("[cb][pass]open session passive sid[%d],rst[%d]", sessionId, result);
470     if (result == SOFTBUS_OK) {
471         g_waitFlag = WAIT_SUCCESS_VALUE;
472     } else {
473         g_waitFlag = WAIT_FAIL_VALUE;
474     }
475     if (g_passiveOpenRetFlag == SOFTBUS_ERR) {
476         LOG("[cb][pass]return fail");
477         g_passiveOpenRetFlag = SOFTBUS_OK;
478         return SOFTBUS_ERR;
479     } else {
480         return SOFTBUS_OK;
481     }
482 }
483 
PassiveSessionClosed(int sessionId)484 static void PassiveSessionClosed(int sessionId)
485 {
486     LOG("[cb][pass]close session passive sid[%d]", sessionId);
487     g_waitFlag = WAIT_SUCCESS_VALUE;
488 }
489 
PassiveBytesReceived(int sessionId,const void * data,unsigned int dataLen)490 static void PassiveBytesReceived(int sessionId, const void* data, unsigned int dataLen)
491 {
492     LOG("[cb][pass]ByteRec sid:%d, data len:%u", sessionId, dataLen);
493     if (data == NULL) {
494         LOG("[cb][pass]ByteRec invalid data=null sid[%d]", sessionId);
495         g_waitFlag = WAIT_FAIL_VALUE;
496         return;
497     }
498     int ret = SendBytes(sessionId, data, dataLen);
499     LOG("[cb][pass]ByteRec send back ret[%d]", ret);
500     if (ret == SOFTBUS_OK) {
501         g_waitFlag = WAIT_SUCCESS_VALUE;
502     } else {
503         g_waitFlag = WAIT_FAIL_VALUE;
504     }
505 }
506 
PassiveMessageReceived(int sessionId,const void * data,unsigned int dataLen)507 static void PassiveMessageReceived(int sessionId, const void* data, unsigned int dataLen)
508 {
509     LOG("[cb][pass]MessageRec sid:%d, data len:%u", sessionId, dataLen);
510     if (data == NULL) {
511         LOG("[cb][pass]MessageRec invalid data=null sid[%d]", sessionId);
512         g_waitFlag = WAIT_FAIL_VALUE;
513         return;
514     }
515     int ret = SendMessage(sessionId, data, dataLen);
516     LOG("[cb][pass]MessageRec send back ret[%d]", ret);
517     if (ret == SOFTBUS_OK) {
518         g_waitFlag = WAIT_SUCCESS_VALUE;
519     } else {
520         g_waitFlag = WAIT_FAIL_VALUE;
521     }
522 }
523 
PerfSessionOpened(int sessionId,int result)524 static int PerfSessionOpened(int sessionId, int result)
525 {
526     g_openSessionTimeEnd = GetCurrentTimeOfMs();
527 
528     if (result == SOFTBUS_OK) {
529         g_waitFlag = WAIT_SUCCESS_VALUE;
530     } else {
531         LOG("[cb][perf]open session result fail, ret:%d", result);
532         g_waitFlag = WAIT_FAIL_VALUE;
533     }
534     return SOFTBUS_OK;
535 }
536 
PerfSessionClosed(int sessionId)537 static void PerfSessionClosed(int sessionId)
538 {
539     LOG("[cb][perf]closed session,sid[%d]", sessionId);
540 }
541 
PerfBytesReceived(int sessionId,const void * data,unsigned int dataLen)542 static void PerfBytesReceived(int sessionId, const void* data, unsigned int dataLen)
543 {
544     g_transTimeEnd = GetCurrentTimeOfMs();
545 
546     LOG("[cb][perf]Byte recv");
547     g_waitFlag = WAIT_SUCCESS_VALUE;
548 }
549 
PerfMessageReceived(int sessionId,const void * data,unsigned int dataLen)550 static void PerfMessageReceived(int sessionId, const void* data, unsigned int dataLen)
551 {
552     LOG("[cb][perf]Message recv");
553 }
554 
ProxySessionOpened(int sessionId,int result)555 static int ProxySessionOpened(int sessionId, int result)
556 {
557     LOG("[cb][proxy]open session proxy sid[%d],rst[%d]", sessionId, result);
558     if (result == SOFTBUS_OK) {
559         g_waitFlag4Proxy = WAIT_SUCCESS_VALUE;
560     } else {
561         g_waitFlag4Proxy = WAIT_FAIL_VALUE;
562     }
563     return SOFTBUS_OK;
564 }
565 
ProxySessionClosed(int sessionId)566 static void ProxySessionClosed(int sessionId)
567 {
568     LOG("[cb][proxy]close session proxy sid[%d]", sessionId);
569     g_waitFlag4Proxy = WAIT_SUCCESS_VALUE;
570 }
571 
ProxyBytesReceived(int sessionId,const void * data,unsigned int dataLen)572 static void ProxyBytesReceived(int sessionId, const void* data, unsigned int dataLen)
573 {
574     LOG("[cb][proxy]ByteRec sid:%d, data len:%u", sessionId, dataLen);
575     if (data == NULL) {
576         LOG("[cb][proxy]ByteRec invalid data=null sid:[%d]", sessionId);
577         g_waitFlag4Proxy = WAIT_FAIL_VALUE;
578     } else {
579         g_waitFlag4Proxy = WAIT_SUCCESS_VALUE;
580     }
581 }
582 
ProxyMessageReceived(int sessionId,const void * data,unsigned int dataLen)583 static void ProxyMessageReceived(int sessionId, const void* data, unsigned int dataLen)
584 {
585     LOG("[cb][proxy]MessageRec sid:%d, data len:%u", sessionId, dataLen);
586     if (data == NULL) {
587         LOG("[cb][proxy]MessageRec invalid data=null sid[%d]", sessionId);
588         g_waitFlag4Proxy = WAIT_FAIL_VALUE;
589     } else {
590         g_waitFlag4Proxy = WAIT_SUCCESS_VALUE;
591     }
592 }
593 
StreamSessionOpened(int sessionId,int result)594 static int StreamSessionOpened(int sessionId, int result)
595 {
596     LOG("[cb][stream]open session sessionId[%d],rst[%d]", sessionId, result);
597     if (result == SOFTBUS_OK) {
598         g_waitFlag4Stream = WAIT_SUCCESS_VALUE;
599     } else {
600         g_waitFlag4Stream = WAIT_FAIL_VALUE;
601     }
602     return SOFTBUS_OK;
603 }
604 
StreamSessionClosed(int sessionId)605 static void StreamSessionClosed(int sessionId)
606 {
607     LOG("[cb][stream]close session sessionId[%d]", sessionId);
608 }
609 
610 
StreamReceived(int sessionId,const StreamData * data,const StreamData * ext,const StreamFrameInfo * frame)611 static void StreamReceived(int sessionId, const StreamData *data, const StreamData *ext, const StreamFrameInfo *frame)
612 {
613     if (data != NULL) {
614         LOG("[cb][stream]ByteRec sessionId:%d, data= %.*s.\n", sessionId, data->bufLen, data->buf);
615         g_waitFlag4Stream = WAIT_SUCCESS_VALUE;
616     }
617 }
618 
ResetWaitFlag(void)619 void ResetWaitFlag(void)
620 {
621     g_waitFlag = WAIT_DEF_VALUE;
622 }
623 
ResetWaitFlag4Data(void)624 void ResetWaitFlag4Data(void)
625 {
626     g_waitFlag4Data = WAIT_DEF_VALUE;
627 }
628 
ResetWaitFlag4Ctl(void)629 void ResetWaitFlag4Ctl(void)
630 {
631     g_waitFlag4Ctl = WAIT_DEF_VALUE;
632 }
633 
ResetWaitFlag4Proxy(void)634 void ResetWaitFlag4Proxy(void)
635 {
636     g_waitFlag4Proxy = WAIT_DEF_VALUE;
637 }
638 
ResetwaitCount4Online(void)639 void ResetwaitCount4Online(void)
640 {
641     g_nodeOnlineCount = 0;
642 }
643 
ResetwaitCount4Offline(void)644 void ResetwaitCount4Offline(void)
645 {
646     g_nodeOfflineCount = 0;
647 }
648 
RegisterDeviceStateDefCallback(void)649 int RegisterDeviceStateDefCallback(void)
650 {
651     return RegNodeDeviceStateCb(DEF_PKG_NAME, &g_defNodeStateCallback);
652 }
653 
UnRegisterDeviceStateDefCallback(void)654 int UnRegisterDeviceStateDefCallback(void)
655 {
656     return UnregNodeDeviceStateCb(&g_defNodeStateCallback);
657 }
658 
CreateSsAndOpenSession4Data(void)659 int CreateSsAndOpenSession4Data(void)
660 {
661     int ret;
662     int timeout = 10;
663     ret = CreateSessionServer(DEF_PKG_NAME, SESSION_NAME_DATA, g_sessionlistener4Data);
664     if (ret != SOFTBUS_OK) {
665         LOG("call CreateSessionServer[data] fail, ret:%d", ret);
666         return ret;
667     }
668 
669     ResetWaitFlag4Data();
670     int sessionId;
671     sessionId = OpenSession(SESSION_NAME_DATA, SESSION_NAME_DATA, g_networkId, DEF_GROUP_ID, g_sessionAttr4Data);
672     if (sessionId < SESSION_ID_MIN) {
673         LOG("call OpenSession[data] fail, ret sid:%d,netId:%s", sessionId, g_networkId);
674         ret = RemoveSessionServer(DEF_PKG_NAME, SESSION_NAME_DATA);
675         if (ret != SOFTBUS_OK) {
676             LOG("RemoveSessionServer[data] fail, ret:%d", ret);
677         }
678         return SOFTBUS_ERR;
679     }
680     SetCurrentSessionId4Data(sessionId);
681     LOG("call OpenSession[data] success,sid:%d", sessionId);
682 
683     ret = Wait4Session(timeout, SESSION_4DATA);
684     if (ret != SOFTBUS_OK) {
685         LOG("OpenSession[data] fail");
686         ret = RemoveSessionServer(DEF_PKG_NAME, SESSION_NAME_DATA);
687         if (ret != SOFTBUS_OK) {
688             LOG("RemoveSessionServer[data] fail, ret:%d", ret);
689         }
690         return SOFTBUS_ERR;
691     }
692     return ret;
693 }
694 
CreateSsAndOpenSession4Ctl(void)695 int CreateSsAndOpenSession4Ctl(void)
696 {
697     int ret;
698     int timeout = 10;
699     ret = CreateSessionServer(DEF_PKG_NAME, SESSION_NAME_CTL, g_sessionlistener4Ctl);
700     if (ret != SOFTBUS_OK) {
701         LOG("call CreateSessionServer[ctl] fail, ret:%d", ret);
702         return ret;
703     }
704 
705     int sessionId;
706     ResetWaitFlag4Ctl();
707     sessionId = OpenSession(SESSION_NAME_CTL, SESSION_NAME_CTL, g_networkId, DEF_GROUP_ID, g_sessionAttr4Ctl);
708     if (sessionId < SESSION_ID_MIN) {
709         LOG("call OpenSession[ctl] fail, ret sid:%d", sessionId);
710         ret = RemoveSessionServer(DEF_PKG_NAME, SESSION_NAME_CTL);
711         if (ret != SOFTBUS_OK) {
712             LOG("RemoveSessionServer[ctl] fail, ret:%d", ret);
713         }
714         return SOFTBUS_ERR;
715     }
716     SetCurrentSessionId4Ctl(sessionId);
717     LOG("call OpenSession[ctl] success,sid:%d", sessionId);
718 
719     ret = Wait4Session(timeout, SESSION_4CTL);
720     if (ret != SOFTBUS_OK) {
721         LOG("OpenSession[ctl] fail");
722         ret = RemoveSessionServer(DEF_PKG_NAME, SESSION_NAME_CTL);
723         if (ret != SOFTBUS_OK) {
724             LOG("RemoveSessionServer[ctl] fail, ret:%d", ret);
725         }
726         return SOFTBUS_ERR;
727     }
728     return ret;
729 }
730 
CreateSsAndOpenSession4Proxy(void)731 int CreateSsAndOpenSession4Proxy(void)
732 {
733     int ret;
734     int timeout = 10;
735     ret = CreateSessionServer(DEF_PKG_NAME, SESSION_NAME_PROXY, g_sessionlistener4Proxy);
736     if (ret != SOFTBUS_OK) {
737         LOG("call CreateSessionServer[Proxy] fail, ret:%d", ret);
738         return ret;
739     }
740 
741     int sessionId;
742     ResetWaitFlag();
743     sessionId = OpenSession(SESSION_NAME_PROXY, SESSION_NAME_PROXY, g_networkId, DEF_GROUP_ID, g_sessionAttr4Proxy);
744     if (sessionId < SESSION_ID_MIN) {
745         LOG("call OpenSession[Proxy] fail, ret sid:%d", sessionId);
746         return SOFTBUS_ERR;
747     }
748     SetCurrentSessionId4Proxy(sessionId);
749     LOG("call OpenSession[Proxy] success,sid:%d", sessionId);
750 
751     ret = Wait4Session(timeout, SESSION_4PROXY);
752     if (ret != SOFTBUS_OK) {
753         LOG("OpenSession[Proxy] fail");
754         return SOFTBUS_ERR;
755     }
756     return ret;
757 }
758 
SendData4Data(DataType type,int size)759 int SendData4Data(DataType type, int size)
760 {
761     int ret;
762     if (size > 0) {
763         g_expectDataContent = (char*)calloc(1, size);
764         if (g_expectDataContent == NULL) {
765             LOG("[send data]calloc fail");
766             return SOFTBUS_ERR;
767         }
768         (void)memset_s(g_expectDataContent, size, g_fillContentChar, size);
769     } else {
770         LOG("[send data]invalid param[size>=1]");
771         return SOFTBUS_ERR;
772     }
773 
774     g_expectDataSize = size;
775     ResetWaitFlag();
776     if (type == DATA_TYPE_MSG) {
777         ret = SendMessage(g_currentSessionId4Data, g_expectDataContent, size);
778     } else if (type == DATA_TYPE_BYTE) {
779         ret = SendBytes(g_currentSessionId4Data, g_expectDataContent, size);
780     } else {
781         LOG("[send data]invalid param[DataType]");
782         free(g_expectDataContent);
783         return SOFTBUS_ERR;
784     }
785     if (ret != SOFTBUS_OK) {
786         LOG("[send data]call SendX fail, ret:%d", ret);
787         free(g_expectDataContent);
788         return SOFTBUS_ERR;
789     }
790     LOG("[send data]call SendX success");
791     int sleeptime = 15;
792     int timeout = 5;
793     if (size > SIZE_1K * SIZE_1K) {
794         timeout = sleeptime;
795     }
796     ret = Wait(timeout);
797     free(g_expectDataContent);
798     g_expectDataContent = NULL;
799     return ret;
800 }
801 
SendData4Message(DataType type,int size)802 int SendData4Message(DataType type, int size)
803 {
804     int ret;
805     if (size > 0) {
806         g_expectMessageContent = (char*)calloc(1, size);
807         if (g_expectMessageContent == NULL) {
808             LOG("[send data]calloc fail");
809             return SOFTBUS_ERR;
810         }
811         (void)memset_s(g_expectMessageContent, size, g_fillContentChar, size);
812     } else {
813         LOG("[send data]invalid param[size>=1]");
814         return SOFTBUS_ERR;
815     }
816 
817     g_expectDataSize = size;
818     ResetWaitFlag();
819     if (type == DATA_TYPE_MSG) {
820         ret = SendMessage(g_currentSessionId4Proxy, g_expectMessageContent, size);
821     } else if (type == DATA_TYPE_BYTE) {
822         ret = SendBytes(g_currentSessionId4Proxy, g_expectMessageContent, size);
823     } else {
824         LOG("[send data]invalid param[DataType]");
825         free(g_expectMessageContent);
826         return SOFTBUS_ERR;
827     }
828     if (ret != SOFTBUS_OK) {
829         LOG("[send data]call SendX fail, ret:%d", ret);
830         free(g_expectMessageContent);
831         return SOFTBUS_ERR;
832     }
833     free(g_expectMessageContent);
834     g_expectMessageContent = NULL;
835     return ret;
836 }
837 
CloseSessionAndRemoveSs4Data(void)838 int CloseSessionAndRemoveSs4Data(void)
839 {
840     int ret4Close;
841     int timeout = 2;
842     // 主动close不回调
843     ResetWaitFlag4Data();
844     CloseSession(g_currentSessionId4Data);
845     ret4Close = Wait4Session(timeout, SESSION_4DATA);
846     if (ret4Close == SOFTBUS_OK) {
847         LOG("CloseSession[data] recv callback");
848     }
849 
850     int ret4Ss;
851     ret4Ss = RemoveSessionServer(DEF_PKG_NAME, SESSION_NAME_DATA);
852     if (ret4Ss != SOFTBUS_OK) {
853         LOG("RemoveSessionServer[data] fail, ret:%d", ret4Ss);
854     }
855 
856     if (ret4Ss != SOFTBUS_OK || ret4Close == SOFTBUS_OK) {
857         return SOFTBUS_ERR;
858     } else {
859         return SOFTBUS_OK;
860     }
861 }
862 
CloseSessionAndRemoveSs4Ctl(void)863 int CloseSessionAndRemoveSs4Ctl(void)
864 {
865     int ret4Close;
866     int timeout = 2;
867     ResetWaitFlag4Ctl();
868     CloseSession(g_currentSessionId4Ctl);
869     ret4Close = Wait4Session(timeout, SESSION_4CTL);
870     if (ret4Close == SOFTBUS_OK) {
871         LOG("CloseSession[ctrl] recv callback");
872     }
873 
874     int ret4Ss;
875     ret4Ss = RemoveSessionServer(DEF_PKG_NAME, SESSION_NAME_CTL);
876     if (ret4Ss != SOFTBUS_OK) {
877         LOG("RemoveSessionServer[ctl] fail, ret:%d", ret4Ss);
878     }
879 
880     if (ret4Ss != SOFTBUS_OK || ret4Close == SOFTBUS_OK) {
881         return SOFTBUS_ERR;
882     } else {
883         return SOFTBUS_OK;
884     }
885 }
886 
CloseSessionAndRemoveSs4Proxy(void)887 int CloseSessionAndRemoveSs4Proxy(void)
888 {
889     int ret4Close;
890     int timeout = 2;
891     ResetWaitFlag();
892     CloseSession(g_currentSessionId4Proxy);
893     ret4Close = Wait(timeout);
894     if (ret4Close == SOFTBUS_OK) {
895         LOG("CloseSession[Proxy] recv callback");
896     }
897 
898     int ret4Ss;
899     ret4Ss = RemoveSessionServer(DEF_PKG_NAME, SESSION_NAME_PROXY);
900     if (ret4Ss != SOFTBUS_OK) {
901         LOG("RemoveSessionServer[Proxy] fail, ret:%d", ret4Ss);
902     }
903 
904     if (ret4Ss != SOFTBUS_OK || ret4Close == SOFTBUS_OK) {
905         return SOFTBUS_ERR;
906     } else {
907         return SOFTBUS_OK;
908     }
909 }
910 
OpenSession4DataByP2p(void)911 int OpenSession4DataByP2p(void)
912 {
913     int ret;
914     int timeout = 10;
915     ResetWaitFlag4Data();
916     int sId = OpenSession(SESSION_NAME_DATA, SESSION_NAME_DATA, g_networkId, DEF_GROUP_ID, g_p2pattribute);
917     if (sId < SESSION_ID_MIN) {
918         LOG("openSession[data] fail,id:%d, netId:%s", sId, g_networkId);
919         return  SOFTBUS_ERR;
920     }
921     SetCurrentSessionId4Data(sId);
922     ret = Wait4Session(timeout, SESSION_4DATA);
923     if (ret != SOFTBUS_OK) {
924         LOG("Wait4Session[data] fail");
925         return SOFTBUS_ERR;
926     }
927 
928     return ret;
929 }
930 
OpenSession4ProxyByP2p(void)931 int OpenSession4ProxyByP2p(void)
932 {
933     int ret;
934     int timeout = 10;
935     ResetWaitFlag4Proxy();
936     int sId = OpenSession(SESSION_NAME_PROXY, SESSION_NAME_PROXY, g_networkId, DEF_GROUP_ID, g_p2pattributeProxy);
937     if (sId < SESSION_ID_MIN) {
938         LOG("openSession[data] fail,id:%d, netId:%s", sId, g_networkId);
939         return SOFTBUS_ERR;
940     }
941     SetCurrentSessionId4Proxy(sId);
942     ret = Wait4Session(timeout, SESSION_4PROXY);
943     if (ret != SOFTBUS_OK) {
944         LOG("Wait4Session[data] fail");
945         return SOFTBUS_ERR;
946     }
947 
948     return ret;
949 }
950 
OpenSessionBatch4Data(char groupId[][GROUP_ID_LEN],int * sessionId,int count)951 int OpenSessionBatch4Data(char groupId[][GROUP_ID_LEN], int* sessionId, int count)
952 {
953     int ret;
954     int timeout = 10;
955     int rstFlag = SOFTBUS_OK;
956     for (int i = 0; i < count; i++) {
957         ResetWaitFlag4Data();
958         int sId = OpenSession(SESSION_NAME_DATA, SESSION_NAME_DATA, g_networkId, groupId[i], g_sessionAttr4Data);
959         if (sId < SESSION_ID_MIN) {
960             LOG("call OpenSession[data] fail,sid:%d,i:%d", sId, i);
961             rstFlag = SOFTBUS_ERR;
962             continue;
963         }
964         SetCurrentSessionId4Data(sId);
965         *(sessionId + i) = sId;
966         ret = Wait4Session(timeout, SESSION_4DATA);
967         if (ret != SOFTBUS_OK) {
968             LOG("Wait4Session[data] fail,i:%d", i);
969             rstFlag = SOFTBUS_ERR;
970         }
971     }
972     return rstFlag;
973 }
974 
OpenSessionBatch4Ctl(char groupId[][GROUP_ID_LEN],int * sessionId,int count)975 int OpenSessionBatch4Ctl(char groupId[][GROUP_ID_LEN], int* sessionId, int count)
976 {
977     int ret;
978     int timeout = 10;
979     int rstFlag = SOFTBUS_OK;
980     for (int i = 0; i < count; i++) {
981         ResetWaitFlag4Ctl();
982         int sId = OpenSession(SESSION_NAME_CTL, SESSION_NAME_CTL, g_networkId, groupId[i], g_sessionAttr4Ctl);
983         if (sId < SESSION_ID_MIN) {
984             LOG("call OpenSession[ctrl] fail,sid:%d,i:%d", sId, i);
985             rstFlag = SOFTBUS_ERR;
986             continue;
987         }
988         SetCurrentSessionId4Ctl(sId);
989         *(sessionId + i) = sId;
990         ret = Wait4Session(timeout, SESSION_4CTL);
991         if (ret != SOFTBUS_OK) {
992             LOG("Wait4Session[ctrl] fail,i:%d", i);
993             rstFlag = SOFTBUS_ERR;
994         }
995     }
996     return rstFlag;
997 }
998 
CloseSessionBatch4Data(int * sessionId,int count)999 int CloseSessionBatch4Data(int* sessionId, int count)
1000 {
1001     for (int i = 0; i < count; i++) {
1002         int sid = *(sessionId + i);
1003         LOG("close session[data] sid:%d", sid);
1004 
1005         SetCurrentSessionId4Data(sid);
1006         CloseSession(sid);
1007     }
1008     return SOFTBUS_OK;
1009 }
1010 
CloseSessionBatch4Ctl(int * sessionId,int count)1011 int CloseSessionBatch4Ctl(int* sessionId, int count)
1012 {
1013     for (int i = 0; i < count; i++) {
1014         int sid = *(sessionId + i);
1015         LOG("close session[ctrl] sid:%d", sid);
1016 
1017         SetCurrentSessionId4Ctl(sid);
1018         CloseSession(sid);
1019     }
1020     return SOFTBUS_OK;
1021 }
1022 
WaitNodeCount(int timeout,WaitNodeStateType state,int expectCount)1023 int WaitNodeCount(int timeout, WaitNodeStateType state, int expectCount)
1024 {
1025     LOG("Wait4Node,timeout:%d, type:%d, exp count:%d", timeout, state, expectCount);
1026     int hitFlag = -1;
1027     while (timeout > 0) {
1028         sleep(ONE_SECOND);
1029         switch (state) {
1030             case STATE_ONLINE:
1031                 if (g_nodeOnlineCount == expectCount) {
1032                     LOG("Wait4Node[online] succ,timeout:%d", timeout);
1033                     hitFlag = 1;
1034                 }
1035                 break;
1036             case STATE_OFFLINE:
1037                 if (g_nodeOfflineCount == expectCount) {
1038                     LOG("Wait4Node[offline] succ,timeout:%d", timeout);
1039                     hitFlag = 1;
1040                 }
1041                 break;
1042             default:
1043                 LOG("Wait4Node state error");
1044                 hitFlag = 1;
1045                 break;
1046         }
1047         if (hitFlag != -1) {
1048             break;
1049         }
1050         timeout--;
1051     }
1052     switch (state) {
1053         case STATE_ONLINE:
1054             if (g_nodeOnlineCount != expectCount) {
1055                 LOG("Wait4Node[online] fail[exp:%d, real:%d]", expectCount, g_nodeOnlineCount);
1056                 return SOFTBUS_ERR;
1057             }
1058             break;
1059         case STATE_OFFLINE:
1060             if (g_nodeOfflineCount != expectCount) {
1061                 LOG("Wait4Node[offline] fail[exp:%d, real:%d]", expectCount, g_nodeOfflineCount);
1062                 return SOFTBUS_ERR;
1063             }
1064             break;
1065         default:
1066             return SOFTBUS_ERR;
1067     }
1068     return SOFTBUS_OK;
1069 }
1070 
1071 // set/get function
ResetClosedSessionCount4Data(void)1072 void ResetClosedSessionCount4Data(void)
1073 {
1074     g_sessionCloseCount4Data = 0;
1075 }
1076 
ResetClosedSessionCount4Ctrl(void)1077 void ResetClosedSessionCount4Ctrl(void)
1078 {
1079     g_sessionCloseCount4Ctrl = 0;
1080 }
1081 
GetClosedSessionCount4Data(void)1082 int GetClosedSessionCount4Data(void)
1083 {
1084     return g_sessionCloseCount4Data;
1085 }
1086 
GetClosedSessionCount4Ctrl(void)1087 int GetClosedSessionCount4Ctrl(void)
1088 {
1089     return g_sessionCloseCount4Ctrl;
1090 }
1091 
GetNetworkId(void)1092 char* GetNetworkId(void)
1093 {
1094     return g_networkId;
1095 }
1096 
1097 // To one device only
CheckRemoteDeviceIsNull(int isSetNetId)1098 int CheckRemoteDeviceIsNull(int isSetNetId)
1099 {
1100     int nodeNum = 0;
1101     NodeBasicInfo* nodeInfo = NULL;
1102     int ret = GetAllNodeDeviceInfo(DEF_PKG_NAME, &nodeInfo, &nodeNum);
1103     LOG("[check]get node number is:%d, ret:%d", nodeNum, ret);
1104     if (nodeInfo != NULL && nodeNum > 0) {
1105         LOG("[check]get netid is:%s", nodeInfo->networkId);
1106         if (isSetNetId == BOOL_TRUE) {
1107             (void)strncpy_s(g_networkId, NETWORK_ID_BUF_LEN, nodeInfo->networkId, NETWORK_ID_BUF_LEN);
1108         }
1109         FreeNodeInfo(nodeInfo);
1110         return SOFTBUS_OK;
1111     } else {
1112         LOG("[check]get nodeInfo is null");
1113         return SOFTBUS_ERR;
1114     }
1115 }
1116 
GetSessionListenser4Data(void)1117 ISessionListener* GetSessionListenser4Data(void)
1118 {
1119     return g_sessionlistener4Data;
1120 }
1121 
GetSessionListenser4Ctl(void)1122 ISessionListener* GetSessionListenser4Ctl(void)
1123 {
1124     return g_sessionlistener4Ctl;
1125 }
1126 
GetSessionListenser4Proxy(void)1127 ISessionListener* GetSessionListenser4Proxy(void)
1128 {
1129     return g_sessionlistener4Proxy;
1130 }
1131 
GetSessionListenser4Stream(void)1132 ISessionListener* GetSessionListenser4Stream(void)
1133 {
1134     return g_sessionlistener4Stream;
1135 }
1136 
GetSendFileListener(void)1137 IFileSendListener* GetSendFileListener(void)
1138 {
1139     return g_fileSendListener;
1140 }
1141 
GetRecvFileListener(void)1142 IFileReceiveListener* GetRecvFileListener(void)
1143 {
1144     return g_fileRecvListener;
1145 }
1146 
GetSessionAttr4Data(void)1147 SessionAttribute* GetSessionAttr4Data(void)
1148 {
1149     return g_sessionAttr4Data;
1150 }
1151 
GetSessionAttr4DataP2p(void)1152 SessionAttribute* GetSessionAttr4DataP2p(void)
1153 {
1154     return g_p2pattribute;
1155 }
1156 
GetSessionAttr4ProxyP2p(void)1157 SessionAttribute* GetSessionAttr4ProxyP2p(void)
1158 {
1159     return g_p2pattributeProxy;
1160 }
GetSessionAttr4Ctl(void)1161 SessionAttribute* GetSessionAttr4Ctl(void)
1162 {
1163     return g_sessionAttr4Ctl;
1164 }
1165 
GetSessionAttr4Proxy(void)1166 SessionAttribute* GetSessionAttr4Proxy(void)
1167 {
1168     return g_sessionAttr4Proxy;
1169 }
1170 
SetCurrentSessionId4Data(int sessionId)1171 void SetCurrentSessionId4Data(int sessionId)
1172 {
1173     g_currentSessionId4Data = sessionId;
1174 }
1175 
SetCurrentSessionId4Ctl(int sessionId)1176 void SetCurrentSessionId4Ctl(int sessionId)
1177 {
1178     g_currentSessionId4Ctl = sessionId;
1179 }
1180 
SetCurrentSessionId4Proxy(int sessionId)1181 void SetCurrentSessionId4Proxy(int sessionId)
1182 {
1183     g_currentSessionId4Proxy = sessionId;
1184 }
1185 
GetCurrentSessionId4Data(void)1186 int GetCurrentSessionId4Data(void)
1187 {
1188     return g_currentSessionId4Data;
1189 }
1190 
GetCurrentSessionId4Ctl(void)1191 int GetCurrentSessionId4Ctl(void)
1192 {
1193     return g_currentSessionId4Ctl;
1194 }
1195 
GetCurrentSessionId4Proxy(void)1196 int GetCurrentSessionId4Proxy(void)
1197 {
1198     return g_currentSessionId4Proxy;
1199 }
1200 
GetOpenSessionCount4Proxy(void)1201 int GetOpenSessionCount4Proxy(void)
1202 {
1203     return g_sessionOpenCount4Proxy;
1204 }
1205 
TestSetUp(void)1206 void TestSetUp(void)
1207 {
1208     g_defNodeStateCallback.events = EVENT_NODE_STATE_MASK;
1209     g_defNodeStateCallback.onNodeOnline = OnDefNodeOnline;
1210     g_defNodeStateCallback.onNodeOffline = OnDefNodeOffline;
1211     g_defNodeStateCallback.onNodeBasicInfoChanged = OnDefNodeBasicInfoChanged;
1212     g_defNodeStateCallback.onNodeStatusChanged = onDefNodeStatusChanged;
1213 
1214     g_defDiscCallback.OnDeviceFound = OnDefDeviceFound;
1215     g_defDiscCallback.OnDiscoverFailed = OnDefDiscoverFail;
1216     g_defDiscCallback.OnDiscoverySuccess = OnDefDiscoverSuccess;
1217 
1218     if (g_sessionlistener4Data == NULL) {
1219         g_sessionlistener4Data = (ISessionListener*)calloc(1, sizeof(ISessionListener));
1220         g_sessionlistener4Data->OnSessionOpened = DataSessionOpened;
1221         g_sessionlistener4Data->OnSessionClosed = DataSessionClosed;
1222         g_sessionlistener4Data->OnMessageReceived = DataMessageReceived;
1223         g_sessionlistener4Data->OnBytesReceived = DataBytesReceived;
1224     }
1225 
1226     if (g_sessionlistener4Ctl == NULL) {
1227         g_sessionlistener4Ctl = (ISessionListener*)calloc(1, sizeof(ISessionListener));
1228         g_sessionlistener4Ctl->OnSessionOpened = ControlSessionOpened;
1229         g_sessionlistener4Ctl->OnSessionClosed = ControlSessionClosed;
1230         g_sessionlistener4Ctl->OnMessageReceived = ControlMessageReceived;
1231         g_sessionlistener4Ctl->OnBytesReceived = ControlBytesReceived;
1232     }
1233 
1234     if (g_sessionlistener4Pass == NULL) {
1235         g_sessionlistener4Pass = (ISessionListener*)calloc(1, sizeof(ISessionListener));
1236         g_sessionlistener4Pass->OnSessionOpened = PassiveSessionOpened;
1237         g_sessionlistener4Pass->OnSessionClosed = PassiveSessionClosed;
1238         g_sessionlistener4Pass->OnMessageReceived = PassiveMessageReceived;
1239         g_sessionlistener4Pass->OnBytesReceived = PassiveBytesReceived;
1240     }
1241 
1242     if (g_sessionlistener4Perf == NULL) {
1243         g_sessionlistener4Perf = (ISessionListener*)calloc(1, sizeof(ISessionListener));
1244         g_sessionlistener4Perf->OnSessionOpened = PerfSessionOpened;
1245         g_sessionlistener4Perf->OnSessionClosed = PerfSessionClosed;
1246         g_sessionlistener4Perf->OnMessageReceived = PerfMessageReceived;
1247         g_sessionlistener4Perf->OnBytesReceived = PerfBytesReceived;
1248     }
1249 
1250     if (g_sessionlistener4Proxy == NULL) {
1251         g_sessionlistener4Proxy = (ISessionListener*)calloc(1, sizeof(ISessionListener));
1252         g_sessionlistener4Proxy->OnSessionOpened = ProxySessionOpened;
1253         g_sessionlistener4Proxy->OnSessionClosed = ProxySessionClosed;
1254         g_sessionlistener4Proxy->OnMessageReceived = ProxyMessageReceived;
1255         g_sessionlistener4Proxy->OnBytesReceived = ProxyBytesReceived;
1256     }
1257 
1258     if (g_sessionlistener4Stream == NULL) {
1259         g_sessionlistener4Stream = (ISessionListener*)calloc(1, sizeof(ISessionListener));
1260         g_sessionlistener4Stream->OnSessionOpened = StreamSessionOpened;
1261         g_sessionlistener4Stream->OnSessionClosed = StreamSessionClosed;
1262         g_sessionlistener4Stream->OnStreamReceived = StreamReceived;
1263     }
1264 
1265     if (g_fileSendListener == NULL) {
1266         g_fileSendListener = (IFileSendListener*)calloc(1, sizeof(IFileSendListener));
1267         g_fileSendListener->OnSendFileProcess = OnSendFileProcess;
1268         g_fileSendListener->OnSendFileFinished = OnSendFileFinished;
1269         g_fileSendListener->OnFileTransError = OnSendFileTransError;
1270     };
1271     if (g_fileRecvListener == NULL) {
1272         g_fileRecvListener = (IFileReceiveListener*)calloc(1, sizeof(IFileReceiveListener));
1273         g_fileRecvListener->OnReceiveFileStarted = OnReceiveFileStarted;
1274         g_fileRecvListener->OnReceiveFileProcess = OnReceiveFileProcess;
1275         g_fileRecvListener->OnReceiveFileFinished = OnReceiveFileFinished;
1276         g_fileRecvListener->OnFileTransError = OnRecvFileTransError;
1277     }
1278 
1279     if (g_sessionAttr4Data == NULL) {
1280         g_sessionAttr4Data = (SessionAttribute*)calloc(1, sizeof(SessionAttribute));
1281         g_sessionAttr4Data->dataType = TYPE_BYTES;
1282     }
1283     if (g_sessionAttr4Ctl == NULL) {
1284         g_sessionAttr4Ctl = (SessionAttribute*)calloc(1, sizeof(SessionAttribute));
1285         g_sessionAttr4Ctl->dataType = TYPE_BYTES;
1286     }
1287     if (g_sessionAttr4Pass == NULL) {
1288         g_sessionAttr4Pass = (SessionAttribute*)calloc(1, sizeof(SessionAttribute));
1289         g_sessionAttr4Pass->dataType = TYPE_BYTES;
1290     }
1291     if (g_sessionAttr4Perf == NULL) {
1292         g_sessionAttr4Perf = (SessionAttribute*)calloc(1, sizeof(SessionAttribute));
1293         g_sessionAttr4Perf->dataType = TYPE_BYTES;
1294     }
1295     if (g_sessionAttr4Proxy == NULL) {
1296         g_sessionAttr4Proxy = (SessionAttribute*)calloc(1, sizeof(SessionAttribute));
1297         g_sessionAttr4Proxy->dataType = TYPE_MESSAGE;
1298     }
1299     if (g_p2pattribute == NULL) {
1300         g_p2pattribute = (SessionAttribute*)calloc(1, sizeof(SessionAttribute));
1301         g_p2pattribute->dataType = TYPE_BYTES;
1302         g_p2pattribute->linkTypeNum = 1;
1303         g_p2pattribute->linkType[0] = LINK_TYPE_WIFI_P2P;
1304     }
1305     if (g_p2pattributeProxy == NULL) {
1306         g_p2pattributeProxy = (SessionAttribute*)calloc(1, sizeof(SessionAttribute));
1307         g_p2pattributeProxy->dataType = TYPE_MESSAGE;
1308         g_p2pattributeProxy->linkTypeNum = 1;
1309         g_p2pattributeProxy->linkType[0] = LINK_TYPE_WIFI_P2P;
1310     }
1311 
1312     if (g_barrier == NULL) {
1313         g_barrier = (pthread_barrier_t*)calloc(1, sizeof(pthread_barrier_t));
1314     }
1315 
1316     if (g_sId4Task2 == NULL) {
1317         g_sId4Task2 = (int*)malloc(sizeof(int) * DEF_SEND_DATA_SID_COUNT);
1318     }
1319     if (g_sId4Task3 == NULL) {
1320         g_sId4Task3 = (int*)malloc(sizeof(int) * DEF_SEND_DATA_SID_COUNT);
1321     }
1322 }
1323 
TestTearDown(void)1324 void TestTearDown(void)
1325 {
1326     if (g_sessionlistener4Data != NULL) {
1327         free(g_sessionlistener4Data);
1328         g_sessionlistener4Data = NULL;
1329     }
1330     if (g_sessionlistener4Ctl != NULL) {
1331         free(g_sessionlistener4Ctl);
1332         g_sessionlistener4Ctl = NULL;
1333     }
1334     if (g_sessionlistener4Pass != NULL) {
1335         free(g_sessionlistener4Pass);
1336         g_sessionlistener4Pass = NULL;
1337     }
1338     if (g_sessionlistener4Perf != NULL) {
1339         free(g_sessionlistener4Perf);
1340         g_sessionlistener4Perf = NULL;
1341     }
1342     if (g_sessionlistener4Proxy != NULL) {
1343         free(g_sessionlistener4Proxy);
1344         g_sessionlistener4Proxy = NULL;
1345     }
1346     if (g_sessionlistener4Stream != NULL) {
1347         free(g_sessionlistener4Stream);
1348         g_sessionlistener4Stream = NULL;
1349     }
1350 
1351     if (g_fileRecvListener != NULL) {
1352         free(g_fileRecvListener);
1353         g_fileRecvListener = NULL;
1354     }
1355     if (g_fileSendListener != NULL) {
1356         free(g_fileSendListener);
1357         g_fileSendListener = NULL;
1358     }
1359 
1360     if (g_sessionAttr4Data != NULL) {
1361         free(g_sessionAttr4Data);
1362         g_sessionAttr4Data = NULL;
1363     }
1364     if (g_sessionAttr4Ctl != NULL) {
1365         free(g_sessionAttr4Ctl);
1366         g_sessionAttr4Ctl = NULL;
1367     }
1368     if (g_sessionAttr4Pass != NULL) {
1369         free(g_sessionAttr4Pass);
1370         g_sessionAttr4Pass = NULL;
1371     }
1372     if (g_sessionAttr4Perf != NULL) {
1373         free(g_sessionAttr4Perf);
1374         g_sessionAttr4Perf = NULL;
1375     }
1376     if (g_sessionAttr4Proxy != NULL) {
1377         free(g_sessionAttr4Proxy);
1378         g_sessionAttr4Proxy = NULL;
1379     }
1380     if (g_p2pattribute != NULL) {
1381         free(g_p2pattribute);
1382         g_p2pattribute = NULL;
1383     }
1384     if (g_p2pattributeProxy != NULL) {
1385         free(g_p2pattributeProxy);
1386         g_p2pattributeProxy = NULL;
1387     }
1388     if (g_barrier != NULL) {
1389         free(g_barrier);
1390         g_barrier = NULL;
1391     }
1392     if (g_sId4Task2 != NULL) {
1393         free(g_sId4Task2);
1394         g_sId4Task2 = NULL;
1395     }
1396     if (g_sId4Task3 != NULL) {
1397         free(g_sId4Task3);
1398         g_sId4Task3 = NULL;
1399     }
1400 }
1401 
AddPermission(void)1402 void AddPermission(void)
1403 {
1404     uint64_t tokenId;
1405     const char *perms[2];
1406     perms[0] = OHOS_PERMISSION_DISTRIBUTED_SOFTBUS_CENTER;
1407     perms[1] = OHOS_PERMISSION_DISTRIBUTED_DATASYNC;
1408     NativeTokenInfoParams infoTnstance = {
1409         .dcapsNum = 0,
1410         .permsNum = 2,
1411         .aclsNum = 0,
1412         .dcaps = NULL,
1413         .perms = perms,
1414         .acls = NULL,
1415         .processName = "dsoftbus_service",
1416         .aplStr = "system_core",
1417     };
1418     tokenId = GetAccessTokenId(&infoTnstance);
1419     SetSelfTokenID(tokenId);
1420 }