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