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