10704ebd2Sopenharmony_ci/* 20704ebd2Sopenharmony_ci * Copyright (c) 2024 Huawei Device Co., Ltd. 30704ebd2Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 40704ebd2Sopenharmony_ci * you may not use this file except in compliance with the License. 50704ebd2Sopenharmony_ci * You may obtain a copy of the License at 60704ebd2Sopenharmony_ci * 70704ebd2Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 80704ebd2Sopenharmony_ci * 90704ebd2Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 100704ebd2Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 110704ebd2Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 120704ebd2Sopenharmony_ci * See the License for the specific language governing permissions and 130704ebd2Sopenharmony_ci * limitations under the License. 140704ebd2Sopenharmony_ci */ 150704ebd2Sopenharmony_ci 160704ebd2Sopenharmony_ci#include "socket_common.h" 170704ebd2Sopenharmony_ci 180704ebd2Sopenharmony_cistatic int32_t g_currentSocket4Data = -1; 190704ebd2Sopenharmony_cistatic int32_t g_waitFlag = WAIT_DEF_VALUE; 200704ebd2Sopenharmony_cistatic int32_t g_waitFlag4Shutdown = WAIT_DEF_VALUE; 210704ebd2Sopenharmony_cistatic int32_t g_waitFlag4Byte = WAIT_DEF_VALUE; 220704ebd2Sopenharmony_cistatic int32_t g_waitFlag4Message = WAIT_DEF_VALUE; 230704ebd2Sopenharmony_cistatic int32_t g_waitFlagStream = WAIT_DEF_VALUE; 240704ebd2Sopenharmony_cistatic int32_t g_waitFlag4File = WAIT_DEF_VALUE; 250704ebd2Sopenharmony_cistatic int32_t g_nodeOnlineCount = 0; 260704ebd2Sopenharmony_cistatic int32_t g_nodeOfflineCount = 0; 270704ebd2Sopenharmony_cistatic ISocketListener* g_socketlistenerdata = NULL; 280704ebd2Sopenharmony_cistatic char g_networkId[NETWORK_ID_BUF_LEN] = { 0 }; 290704ebd2Sopenharmony_cistatic INodeStateCb g_defNodeStateCallback; 300704ebd2Sopenharmony_cistatic char g_fillContentChar = 'd'; 310704ebd2Sopenharmony_cistatic unsigned int g_expectDataSize = 0; 320704ebd2Sopenharmony_cistatic char* g_expectDataContent = NULL; 330704ebd2Sopenharmony_ci 340704ebd2Sopenharmony_ci/*reset count*/ 350704ebd2Sopenharmony_civoid ResetwaitCount4Online(void) 360704ebd2Sopenharmony_ci{ 370704ebd2Sopenharmony_ci g_nodeOnlineCount = 0; 380704ebd2Sopenharmony_ci} 390704ebd2Sopenharmony_ci 400704ebd2Sopenharmony_ci/*common method*/ 410704ebd2Sopenharmony_civoid ResetwaitCount4Offline(void) 420704ebd2Sopenharmony_ci{ 430704ebd2Sopenharmony_ci g_nodeOfflineCount = 0; 440704ebd2Sopenharmony_ci} 450704ebd2Sopenharmony_ci 460704ebd2Sopenharmony_civoid Sleepn(int n) 470704ebd2Sopenharmony_ci{ 480704ebd2Sopenharmony_ci for(int i = 0; i < n; i++) { 490704ebd2Sopenharmony_ci sleep(1); 500704ebd2Sopenharmony_ci LOG("sleeped %d", i); 510704ebd2Sopenharmony_ci } 520704ebd2Sopenharmony_ci} 530704ebd2Sopenharmony_ci 540704ebd2Sopenharmony_cichar* GetSoftbusPid(void) 550704ebd2Sopenharmony_ci{ 560704ebd2Sopenharmony_ci FILE* file = NULL; 570704ebd2Sopenharmony_ci int buffSize = 20; 580704ebd2Sopenharmony_ci char* buffer = (char*)malloc(buffSize); 590704ebd2Sopenharmony_ci if (buffer == NULL) { 600704ebd2Sopenharmony_ci LOG("malloc fail"); 610704ebd2Sopenharmony_ci return NULL; 620704ebd2Sopenharmony_ci } 630704ebd2Sopenharmony_ci 640704ebd2Sopenharmony_ci file = popen(CMD_PIDOF_SOFTBUS, "r"); 650704ebd2Sopenharmony_ci if (file == NULL) { 660704ebd2Sopenharmony_ci LOG("call popen fail"); 670704ebd2Sopenharmony_ci free(buffer); 680704ebd2Sopenharmony_ci return NULL; 690704ebd2Sopenharmony_ci } 700704ebd2Sopenharmony_ci (void)fgets(buffer, buffSize, file); 710704ebd2Sopenharmony_ci LOG("##################Softbus PID:%s", buffer); 720704ebd2Sopenharmony_ci pclose(file); 730704ebd2Sopenharmony_ci 740704ebd2Sopenharmony_ci return buffer; 750704ebd2Sopenharmony_ci} 760704ebd2Sopenharmony_ci 770704ebd2Sopenharmony_cistatic void OnDefNodeOnline(NodeBasicInfo* info) 780704ebd2Sopenharmony_ci{ 790704ebd2Sopenharmony_ci if (info == NULL) { 800704ebd2Sopenharmony_ci LOG("[cb]Online: info is null"); 810704ebd2Sopenharmony_ci return; 820704ebd2Sopenharmony_ci } 830704ebd2Sopenharmony_ci (void)strncpy_s(g_networkId, NETWORK_ID_BUF_LEN, info->networkId, NETWORK_ID_BUF_LEN); 840704ebd2Sopenharmony_ci LOG("[cb]Online id:%s, name:%s, type id:%u", info->networkId, info->deviceName, info->deviceTypeId); 850704ebd2Sopenharmony_ci g_nodeOnlineCount++; 860704ebd2Sopenharmony_ci} 870704ebd2Sopenharmony_ci 880704ebd2Sopenharmony_cistatic void OnDefNodeOffline(NodeBasicInfo* info) 890704ebd2Sopenharmony_ci{ 900704ebd2Sopenharmony_ci if (info == NULL) { 910704ebd2Sopenharmony_ci LOG("[cb]Offline: info is null"); 920704ebd2Sopenharmony_ci return; 930704ebd2Sopenharmony_ci } 940704ebd2Sopenharmony_ci LOG("[cb]Offline id:%s, name:%s, type id:%u", info->networkId, info->deviceName, info->deviceTypeId); 950704ebd2Sopenharmony_ci g_nodeOfflineCount++; 960704ebd2Sopenharmony_ci} 970704ebd2Sopenharmony_ci 980704ebd2Sopenharmony_cistatic void OnDefNodeBasicInfoChanged(NodeBasicInfoType type, NodeBasicInfo* info) 990704ebd2Sopenharmony_ci{ 1000704ebd2Sopenharmony_ci if (info == NULL) { 1010704ebd2Sopenharmony_ci LOG("[cb]InfoChanged: info is null, type[%d]", type); 1020704ebd2Sopenharmony_ci return; 1030704ebd2Sopenharmony_ci } 1040704ebd2Sopenharmony_ci LOG("[cb]InfoChanged id: %s,name: %s", info->networkId, info->deviceName); 1050704ebd2Sopenharmony_ci} 1060704ebd2Sopenharmony_ci 1070704ebd2Sopenharmony_cistatic void onDefNodeStatusChanged(NodeStatusType type, NodeStatus *status) 1080704ebd2Sopenharmony_ci{ 1090704ebd2Sopenharmony_ci if (status == NULL) { 1100704ebd2Sopenharmony_ci LOG("[cb]StatusChanged: info is null, type[%d]", type); 1110704ebd2Sopenharmony_ci return; 1120704ebd2Sopenharmony_ci } 1130704ebd2Sopenharmony_ci LOG("[cb]StatusChanged id: %s,status: %d", status->basicInfo.networkId, status->authStatus); 1140704ebd2Sopenharmony_ci} 1150704ebd2Sopenharmony_ci 1160704ebd2Sopenharmony_ciint RegisterDeviceStateDefCallback(void) 1170704ebd2Sopenharmony_ci{ 1180704ebd2Sopenharmony_ci return RegNodeDeviceStateCb(DEF_PKG_NAME, &g_defNodeStateCallback); 1190704ebd2Sopenharmony_ci} 1200704ebd2Sopenharmony_ci 1210704ebd2Sopenharmony_ciint UnRegisterDeviceStateDefCallback(void) 1220704ebd2Sopenharmony_ci{ 1230704ebd2Sopenharmony_ci return UnregNodeDeviceStateCb(&g_defNodeStateCallback); 1240704ebd2Sopenharmony_ci} 1250704ebd2Sopenharmony_ci 1260704ebd2Sopenharmony_ciint WaitNodeCount(int timeout, WaitNodeStateType state, int expectCount) 1270704ebd2Sopenharmony_ci{ 1280704ebd2Sopenharmony_ci LOG("Wait4Node,timeout:%d, type:%d, exp count:%d", timeout, state, expectCount); 1290704ebd2Sopenharmony_ci int hitFlag = -1; 1300704ebd2Sopenharmony_ci while (timeout > 0) { 1310704ebd2Sopenharmony_ci sleep(ONE_SECOND); 1320704ebd2Sopenharmony_ci switch (state) { 1330704ebd2Sopenharmony_ci case STATE_ONLINE: 1340704ebd2Sopenharmony_ci if (g_nodeOnlineCount == expectCount) { 1350704ebd2Sopenharmony_ci LOG("Wait4Node[online] succ,timeout:%d", timeout); 1360704ebd2Sopenharmony_ci hitFlag = 1; 1370704ebd2Sopenharmony_ci } 1380704ebd2Sopenharmony_ci break; 1390704ebd2Sopenharmony_ci case STATE_OFFLINE: 1400704ebd2Sopenharmony_ci if (g_nodeOfflineCount == expectCount) { 1410704ebd2Sopenharmony_ci LOG("Wait4Node[offline] succ,timeout:%d", timeout); 1420704ebd2Sopenharmony_ci hitFlag = 1; 1430704ebd2Sopenharmony_ci } 1440704ebd2Sopenharmony_ci break; 1450704ebd2Sopenharmony_ci default: 1460704ebd2Sopenharmony_ci LOG("Wait4Node state error"); 1470704ebd2Sopenharmony_ci hitFlag = 1; 1480704ebd2Sopenharmony_ci break; 1490704ebd2Sopenharmony_ci } 1500704ebd2Sopenharmony_ci if (hitFlag != -1) { 1510704ebd2Sopenharmony_ci break; 1520704ebd2Sopenharmony_ci } 1530704ebd2Sopenharmony_ci timeout--; 1540704ebd2Sopenharmony_ci } 1550704ebd2Sopenharmony_ci switch (state) { 1560704ebd2Sopenharmony_ci case STATE_ONLINE: 1570704ebd2Sopenharmony_ci if (g_nodeOnlineCount != expectCount) { 1580704ebd2Sopenharmony_ci LOG("Wait4Node[online] fail[exp:%d, real:%d]", expectCount, g_nodeOnlineCount); 1590704ebd2Sopenharmony_ci return SOFTBUS_ERR; 1600704ebd2Sopenharmony_ci } 1610704ebd2Sopenharmony_ci break; 1620704ebd2Sopenharmony_ci case STATE_OFFLINE: 1630704ebd2Sopenharmony_ci if (g_nodeOfflineCount != expectCount) { 1640704ebd2Sopenharmony_ci LOG("Wait4Node[offline] fail[exp:%d, real:%d]", expectCount, g_nodeOfflineCount); 1650704ebd2Sopenharmony_ci return SOFTBUS_ERR; 1660704ebd2Sopenharmony_ci } 1670704ebd2Sopenharmony_ci break; 1680704ebd2Sopenharmony_ci default: 1690704ebd2Sopenharmony_ci return SOFTBUS_ERR; 1700704ebd2Sopenharmony_ci } 1710704ebd2Sopenharmony_ci return SOFTBUS_OK; 1720704ebd2Sopenharmony_ci} 1730704ebd2Sopenharmony_ci 1740704ebd2Sopenharmony_ci//socket callback 1750704ebd2Sopenharmony_cistatic void OnBindData(int32_t socket, PeerSocketInfo info) 1760704ebd2Sopenharmony_ci{ 1770704ebd2Sopenharmony_ci int successcount = 0; 1780704ebd2Sopenharmony_ci LOG("[cb][Ctrl]OnBind success {socket:%d, name:%s, deviceId:%s, pkgName:%s, dataType:%d}", socket, 1790704ebd2Sopenharmony_ci info.name, info.networkId, info.pkgName, info.dataType); 1800704ebd2Sopenharmony_ci if (strcmp(info.networkId, g_networkId) != 0) 1810704ebd2Sopenharmony_ci { 1820704ebd2Sopenharmony_ci LOG("PeerSocket Info peer deviceId and check remote networkId are diff"); 1830704ebd2Sopenharmony_ci successcount++; 1840704ebd2Sopenharmony_ci } 1850704ebd2Sopenharmony_ci if (strcmp(info.name, SOCKET_NAME_BYTE) != 0) 1860704ebd2Sopenharmony_ci { 1870704ebd2Sopenharmony_ci LOG("PeerSocket Info peer name and local name are diff"); 1880704ebd2Sopenharmony_ci successcount++; 1890704ebd2Sopenharmony_ci } 1900704ebd2Sopenharmony_ci if (strcmp(info.pkgName, DEF_PKG_NAME) != 0) 1910704ebd2Sopenharmony_ci { 1920704ebd2Sopenharmony_ci LOG("PeerSocket Info peer pkgName and local pkgName are diff"); 1930704ebd2Sopenharmony_ci successcount++; 1940704ebd2Sopenharmony_ci } 1950704ebd2Sopenharmony_ci if(successcount == 3) 1960704ebd2Sopenharmony_ci { 1970704ebd2Sopenharmony_ci g_waitFlag = WAIT_SUCCESS_VALUE; 1980704ebd2Sopenharmony_ci }else{ 1990704ebd2Sopenharmony_ci g_waitFlag = WAIT_FAIL_VALUE; 2000704ebd2Sopenharmony_ci } 2010704ebd2Sopenharmony_ci} 2020704ebd2Sopenharmony_ci 2030704ebd2Sopenharmony_cistatic void OnShutdownData(int32_t socket, ShutdownReason reason) 2040704ebd2Sopenharmony_ci{ 2050704ebd2Sopenharmony_ci LOG("[cb][Ctrl]OnShutdownData success {socket:%d, reason:%u}", socket, reason); 2060704ebd2Sopenharmony_ci if (reason == SHUTDOWN_REASON_PEER || reason == SHUTDOWN_REASON_LOCAL) 2070704ebd2Sopenharmony_ci { 2080704ebd2Sopenharmony_ci g_waitFlag4Shutdown = WAIT_SUCCESS_VALUE; 2090704ebd2Sopenharmony_ci }else{ 2100704ebd2Sopenharmony_ci g_waitFlag4Shutdown = WAIT_FAIL_VALUE; 2110704ebd2Sopenharmony_ci } 2120704ebd2Sopenharmony_ci} 2130704ebd2Sopenharmony_ci 2140704ebd2Sopenharmony_cistatic int CheckReceiveSocketData(int socket, const void *data, unsigned int dataLen) 2150704ebd2Sopenharmony_ci{ 2160704ebd2Sopenharmony_ci if (socket == g_currentSocket4Data && dataLen == g_expectDataSize) 2170704ebd2Sopenharmony_ci { 2180704ebd2Sopenharmony_ci LOG("[check]socket/size ok socket:%d, size:%d", socket, dataLen); 2190704ebd2Sopenharmony_ci }else 2200704ebd2Sopenharmony_ci { 2210704ebd2Sopenharmony_ci LOG("[check]socket/size failed socket :%d, expectsocket:%d, size:%d, expectsize:%d", 2220704ebd2Sopenharmony_ci socket, g_currentSocket4Data, dataLen, g_expectDataSize); 2230704ebd2Sopenharmony_ci return SOFTBUS_ERR; 2240704ebd2Sopenharmony_ci } 2250704ebd2Sopenharmony_ci if (g_expectDataContent == NULL) 2260704ebd2Sopenharmony_ci { 2270704ebd2Sopenharmony_ci LOG("[check]socket Datacunt is null !!!"); 2280704ebd2Sopenharmony_ci return SOFTBUS_ERR; 2290704ebd2Sopenharmony_ci }else 2300704ebd2Sopenharmony_ci { 2310704ebd2Sopenharmony_ci int cmpRst = strncmp(g_expectDataContent, (char*)data, dataLen); 2320704ebd2Sopenharmony_ci if (cmpRst == 0) { 2330704ebd2Sopenharmony_ci LOG("[check] cmp content ok"); 2340704ebd2Sopenharmony_ci return SOFTBUS_OK; 2350704ebd2Sopenharmony_ci } else { 2360704ebd2Sopenharmony_ci LOG("[check] cmp content fail[exp:%s,real:%s]", g_expectDataContent, (char*)data); 2370704ebd2Sopenharmony_ci return SOFTBUS_ERR; 2380704ebd2Sopenharmony_ci } 2390704ebd2Sopenharmony_ci } 2400704ebd2Sopenharmony_ci} 2410704ebd2Sopenharmony_ci 2420704ebd2Sopenharmony_cistatic void OnByteData(int32_t socket, const void *data, uint32_t dataLen) 2430704ebd2Sopenharmony_ci{ 2440704ebd2Sopenharmony_ci LOG("[cb] OnByteData socket:%d", socket); 2450704ebd2Sopenharmony_ci int ret = CheckReceiveSocketData(socket, data, dataLen); 2460704ebd2Sopenharmony_ci if (ret == SOFTBUS_OK) 2470704ebd2Sopenharmony_ci { 2480704ebd2Sopenharmony_ci g_waitFlag4Byte = WAIT_SUCCESS_VALUE; 2490704ebd2Sopenharmony_ci LOG("[cb] OnByteData data recv success"); 2500704ebd2Sopenharmony_ci }else 2510704ebd2Sopenharmony_ci { 2520704ebd2Sopenharmony_ci g_waitFlag4Byte = WAIT_FAIL_VALUE; 2530704ebd2Sopenharmony_ci LOG("[cb] OnByteData data recv failed"); 2540704ebd2Sopenharmony_ci } 2550704ebd2Sopenharmony_ci} 2560704ebd2Sopenharmony_ci 2570704ebd2Sopenharmony_cistatic void OnMessageData(int32_t socket, const void *data, uint32_t dataLen) 2580704ebd2Sopenharmony_ci{ 2590704ebd2Sopenharmony_ci LOG("[cb] OnMessageData socket:%d", socket); 2600704ebd2Sopenharmony_ci int ret = CheckReceiveSocketData(socket, data, dataLen); 2610704ebd2Sopenharmony_ci if (ret == SOFTBUS_OK) 2620704ebd2Sopenharmony_ci { 2630704ebd2Sopenharmony_ci g_waitFlag4Message = WAIT_SUCCESS_VALUE; 2640704ebd2Sopenharmony_ci LOG("[cb] OnMessageData data recv success"); 2650704ebd2Sopenharmony_ci }else 2660704ebd2Sopenharmony_ci { 2670704ebd2Sopenharmony_ci g_waitFlag4Message = WAIT_FAIL_VALUE; 2680704ebd2Sopenharmony_ci LOG("[cb] OnMessageData data recv failed"); 2690704ebd2Sopenharmony_ci } 2700704ebd2Sopenharmony_ci} 2710704ebd2Sopenharmony_ci 2720704ebd2Sopenharmony_cistatic void OnStreamData(int32_t socket, const StreamData *data, const StreamData *ext, const StreamFrameInfo *param) 2730704ebd2Sopenharmony_ci{ 2740704ebd2Sopenharmony_ci if (socket < 0) { 2750704ebd2Sopenharmony_ci LOG("[cb][data]OnStream invalid socket id[%d]", socket); 2760704ebd2Sopenharmony_ci return; 2770704ebd2Sopenharmony_ci } 2780704ebd2Sopenharmony_ci if (data == NULL) { 2790704ebd2Sopenharmony_ci LOG("[cb][data]OnStream socket id[%d], data is NULL", socket); 2800704ebd2Sopenharmony_ci return; 2810704ebd2Sopenharmony_ci } 2820704ebd2Sopenharmony_ci if (ext == NULL) { 2830704ebd2Sopenharmony_ci LOG("[cb][data]OnStream socket id[%d], ext is NULL", socket); 2840704ebd2Sopenharmony_ci return; 2850704ebd2Sopenharmony_ci } 2860704ebd2Sopenharmony_ci if (param == NULL) { 2870704ebd2Sopenharmony_ci LOG("[cb][data]OnStream socket id[%d], param is NULL", socket); 2880704ebd2Sopenharmony_ci return; 2890704ebd2Sopenharmony_ci } 2900704ebd2Sopenharmony_ci LOG("[cb][data]OnStream Success socket:%d,", socket); 2910704ebd2Sopenharmony_ci LOG("[cb][data]OnStream Success buf:%s,", (data->buf != NULL ? data->buf : "null")); 2920704ebd2Sopenharmony_ci LOG("[cb][data]OnStream Success buflen:%d", data->bufLen); 2930704ebd2Sopenharmony_ci LOG("[cb][data]OnStream Success buf:%s,", (ext->buf != NULL ? ext->buf : "null")); 2940704ebd2Sopenharmony_ci g_waitFlagStream = WAIT_SUCCESS_VALUE; 2950704ebd2Sopenharmony_ci} 2960704ebd2Sopenharmony_ci 2970704ebd2Sopenharmony_cistatic const char *ClientUpdataRecvFilePath() { 2980704ebd2Sopenharmony_ci return "/data/"; 2990704ebd2Sopenharmony_ci} 3000704ebd2Sopenharmony_ci 3010704ebd2Sopenharmony_cistatic void OnFileData(int32_t socket, FileEvent *event) 3020704ebd2Sopenharmony_ci{ 3030704ebd2Sopenharmony_ci if (socket < 0) { 3040704ebd2Sopenharmony_ci LOG("[cb][data]OnFile invalid socket id[%d]", socket); 3050704ebd2Sopenharmony_ci return; 3060704ebd2Sopenharmony_ci } 3070704ebd2Sopenharmony_ci if (event == NULL) { 3080704ebd2Sopenharmony_ci LOG("[cb][data]OnFile socket id[%d], event is nullptr", socket); 3090704ebd2Sopenharmony_ci return; 3100704ebd2Sopenharmony_ci } 3110704ebd2Sopenharmony_ci if (event->type == FILE_EVENT_RECV_UPDATE_PATH) { 3120704ebd2Sopenharmony_ci LOG("[cb][data]OnFile event type:%d,", event->type); 3130704ebd2Sopenharmony_ci event->UpdateRecvPath = ClientUpdataRecvFilePath; 3140704ebd2Sopenharmony_ci return; 3150704ebd2Sopenharmony_ci } 3160704ebd2Sopenharmony_ci LOG("[cb][data]OnFile, event type:%d, fileCnt:%u", event->type, event->fileCnt); 3170704ebd2Sopenharmony_ci for (uint32_t i = 0; i < event->fileCnt; i++) { 3180704ebd2Sopenharmony_ci LOG("[cb][data] %s", (event->files[i] == NULL ? "null" : event->files[i])); 3190704ebd2Sopenharmony_ci } 3200704ebd2Sopenharmony_ci if (event->type == FILE_EVENT_SEND_FINISH) { 3210704ebd2Sopenharmony_ci LOG("[cb][data]OnFile recv finished"); 3220704ebd2Sopenharmony_ci g_waitFlag4File = WAIT_SUCCESS_VALUE; 3230704ebd2Sopenharmony_ci return; 3240704ebd2Sopenharmony_ci } 3250704ebd2Sopenharmony_ci if (event->type == FILE_EVENT_SEND_PROCESS) { 3260704ebd2Sopenharmony_ci LOG("[cb][data]OnFile recv process"); 3270704ebd2Sopenharmony_ci return; 3280704ebd2Sopenharmony_ci } 3290704ebd2Sopenharmony_ci if (event->type == FILE_EVENT_SEND_ERROR) { 3300704ebd2Sopenharmony_ci LOG("[cb][data]OnFile recv error!!"); 3310704ebd2Sopenharmony_ci g_waitFlag4File = WAIT_FAIL_VALUE; 3320704ebd2Sopenharmony_ci return; 3330704ebd2Sopenharmony_ci } 3340704ebd2Sopenharmony_ci} 3350704ebd2Sopenharmony_ci 3360704ebd2Sopenharmony_cistatic void OnQosData(int32_t socket, QoSEvent eventId, const QosTV *qos, uint32_t qosCunt) 3370704ebd2Sopenharmony_ci{ 3380704ebd2Sopenharmony_ci LOG("[cb][data] OnQos {socket:%d, event:%d}", socket, eventId); 3390704ebd2Sopenharmony_ci} 3400704ebd2Sopenharmony_ci 3410704ebd2Sopenharmony_ciint Wait4Socket(int timeout, WaitSocketType type) 3420704ebd2Sopenharmony_ci{ 3430704ebd2Sopenharmony_ci int hitFlag = -1; 3440704ebd2Sopenharmony_ci int t = timeout; 3450704ebd2Sopenharmony_ci while (t > 0) { 3460704ebd2Sopenharmony_ci sleep(1); 3470704ebd2Sopenharmony_ci switch (type) { 3480704ebd2Sopenharmony_ci case SOCKET_BYTES: 3490704ebd2Sopenharmony_ci if (g_waitFlag4Byte != WAIT_DEF_VALUE) { 3500704ebd2Sopenharmony_ci LOG("Wait4socket[Byte] succ, flag:%d", g_waitFlag4Byte); 3510704ebd2Sopenharmony_ci hitFlag = 1; 3520704ebd2Sopenharmony_ci } 3530704ebd2Sopenharmony_ci break; 3540704ebd2Sopenharmony_ci case SOCKET_MSG: 3550704ebd2Sopenharmony_ci if (g_waitFlag4Message != WAIT_DEF_VALUE) { 3560704ebd2Sopenharmony_ci LOG("Wait4socket[Message] succ,flag:%d", g_waitFlag4Message); 3570704ebd2Sopenharmony_ci hitFlag = 1; 3580704ebd2Sopenharmony_ci } 3590704ebd2Sopenharmony_ci break; 3600704ebd2Sopenharmony_ci case SOCKET_FILE: 3610704ebd2Sopenharmony_ci if (g_waitFlag4File != WAIT_DEF_VALUE) { 3620704ebd2Sopenharmony_ci LOG("Wait4socket[File] succ,flag:%d", g_waitFlag4File); 3630704ebd2Sopenharmony_ci hitFlag = 1; 3640704ebd2Sopenharmony_ci } 3650704ebd2Sopenharmony_ci break; 3660704ebd2Sopenharmony_ci case SOCKET_STREAM: 3670704ebd2Sopenharmony_ci if (g_waitFlagStream != WAIT_DEF_VALUE) { 3680704ebd2Sopenharmony_ci LOG("Wait4socket[Stream] succ,flag:%d", g_waitFlagStream); 3690704ebd2Sopenharmony_ci hitFlag = 1; 3700704ebd2Sopenharmony_ci } 3710704ebd2Sopenharmony_ci break; 3720704ebd2Sopenharmony_ci case SOCKET_SHUTDOWN: 3730704ebd2Sopenharmony_ci if (g_waitFlag4Shutdown != WAIT_DEF_VALUE) { 3740704ebd2Sopenharmony_ci LOG("Wait4socket[SHUTDOWN] succ,flag:%d", g_waitFlag4Shutdown); 3750704ebd2Sopenharmony_ci hitFlag = 1; 3760704ebd2Sopenharmony_ci } 3770704ebd2Sopenharmony_ci break; 3780704ebd2Sopenharmony_ci default: 3790704ebd2Sopenharmony_ci LOG("Wait4socket type error"); 3800704ebd2Sopenharmony_ci hitFlag = 1; 3810704ebd2Sopenharmony_ci break; 3820704ebd2Sopenharmony_ci } 3830704ebd2Sopenharmony_ci if (hitFlag != -1) { 3840704ebd2Sopenharmony_ci break; 3850704ebd2Sopenharmony_ci } 3860704ebd2Sopenharmony_ci t--; 3870704ebd2Sopenharmony_ci } 3880704ebd2Sopenharmony_ci switch (type) { 3890704ebd2Sopenharmony_ci case SOCKET_BYTES: 3900704ebd2Sopenharmony_ci if (g_waitFlag4Byte != WAIT_SUCCESS_VALUE) { 3910704ebd2Sopenharmony_ci LOG("Wait4socket[Byte] fail[exp:%d, real:%d]", WAIT_SUCCESS_VALUE, g_waitFlag4Byte); 3920704ebd2Sopenharmony_ci return SOFTBUS_ERR; 3930704ebd2Sopenharmony_ci } 3940704ebd2Sopenharmony_ci break; 3950704ebd2Sopenharmony_ci case SOCKET_MSG: 3960704ebd2Sopenharmony_ci if (g_waitFlag4Message != WAIT_SUCCESS_VALUE) { 3970704ebd2Sopenharmony_ci LOG("Wait4socket[Message] fail[exp:%d, real:%d]", WAIT_SUCCESS_VALUE, g_waitFlag4Message); 3980704ebd2Sopenharmony_ci return SOFTBUS_ERR; 3990704ebd2Sopenharmony_ci } 4000704ebd2Sopenharmony_ci break; 4010704ebd2Sopenharmony_ci case SOCKET_FILE: 4020704ebd2Sopenharmony_ci if (g_waitFlag4File != WAIT_SUCCESS_VALUE) { 4030704ebd2Sopenharmony_ci LOG("Wait4socket[File] fail[exp:%d, real:%d]", WAIT_SUCCESS_VALUE, g_waitFlag4File); 4040704ebd2Sopenharmony_ci return SOFTBUS_ERR; 4050704ebd2Sopenharmony_ci } 4060704ebd2Sopenharmony_ci break; 4070704ebd2Sopenharmony_ci case SOCKET_STREAM: 4080704ebd2Sopenharmony_ci if (g_waitFlagStream != WAIT_SUCCESS_VALUE) { 4090704ebd2Sopenharmony_ci LOG("Wait4socket[Stream] fail[exp:%d, real:%d]", WAIT_SUCCESS_VALUE, g_waitFlagStream); 4100704ebd2Sopenharmony_ci return SOFTBUS_ERR; 4110704ebd2Sopenharmony_ci } 4120704ebd2Sopenharmony_ci break; 4130704ebd2Sopenharmony_ci case SOCKET_SHUTDOWN: 4140704ebd2Sopenharmony_ci if (g_waitFlag4Shutdown != WAIT_SUCCESS_VALUE) { 4150704ebd2Sopenharmony_ci LOG("Wait4socket[SHUTDOWN] fail[exp:%d, real:%d]", WAIT_SUCCESS_VALUE, g_waitFlag4Shutdown); 4160704ebd2Sopenharmony_ci return SOFTBUS_ERR; 4170704ebd2Sopenharmony_ci } 4180704ebd2Sopenharmony_ci break; 4190704ebd2Sopenharmony_ci default: 4200704ebd2Sopenharmony_ci return SOFTBUS_ERR; 4210704ebd2Sopenharmony_ci } 4220704ebd2Sopenharmony_ci return SOFTBUS_OK; 4230704ebd2Sopenharmony_ci} 4240704ebd2Sopenharmony_ci 4250704ebd2Sopenharmony_ciint SendSocket4Data(DataType type, int size) 4260704ebd2Sopenharmony_ci{ 4270704ebd2Sopenharmony_ci int ret; 4280704ebd2Sopenharmony_ci LOG("###SendSocket4Data g_currentSocket4Data = %d ", g_currentSocket4Data ); 4290704ebd2Sopenharmony_ci if (size > 0) { 4300704ebd2Sopenharmony_ci g_expectDataContent = (char*)calloc(1, size); 4310704ebd2Sopenharmony_ci if (g_expectDataContent == NULL) { 4320704ebd2Sopenharmony_ci LOG("[send data]calloc fail"); 4330704ebd2Sopenharmony_ci return SOFTBUS_ERR; 4340704ebd2Sopenharmony_ci } 4350704ebd2Sopenharmony_ci (void)memset_s(g_expectDataContent, size, g_fillContentChar, size); 4360704ebd2Sopenharmony_ci } else { 4370704ebd2Sopenharmony_ci LOG("[send data]invalid param[size>=1]"); 4380704ebd2Sopenharmony_ci return SOFTBUS_ERR; 4390704ebd2Sopenharmony_ci } 4400704ebd2Sopenharmony_ci 4410704ebd2Sopenharmony_ci g_expectDataSize = size; 4420704ebd2Sopenharmony_ci 4430704ebd2Sopenharmony_ci if (type == DATA_TYPE_MSG) { 4440704ebd2Sopenharmony_ci ret = SendMessage(g_currentSocket4Data, g_expectDataContent, size); 4450704ebd2Sopenharmony_ci if (ret != SOFTBUS_OK) { 4460704ebd2Sopenharmony_ci LOG("[send data]call SendX fail, ret:%d", ret); 4470704ebd2Sopenharmony_ci free(g_expectDataContent); 4480704ebd2Sopenharmony_ci return SOFTBUS_ERR; 4490704ebd2Sopenharmony_ci } 4500704ebd2Sopenharmony_ci } else if (type == DATA_TYPE_BYTE) { 4510704ebd2Sopenharmony_ci ResetWaitFlag4Byte(); 4520704ebd2Sopenharmony_ci ret = SendBytes(g_currentSocket4Data, g_expectDataContent, size); 4530704ebd2Sopenharmony_ci int timeout; 4540704ebd2Sopenharmony_ci if (size < SIZE_1K * SIZE_1K) { 4550704ebd2Sopenharmony_ci timeout = 30; 4560704ebd2Sopenharmony_ci }else if (size >= SIZE_1K * SIZE_1K && size < 2 * SIZE_1K * SIZE_1K) 4570704ebd2Sopenharmony_ci { 4580704ebd2Sopenharmony_ci timeout = 60; 4590704ebd2Sopenharmony_ci }else 4600704ebd2Sopenharmony_ci { 4610704ebd2Sopenharmony_ci timeout = 80; 4620704ebd2Sopenharmony_ci } 4630704ebd2Sopenharmony_ci ret = Wait4Socket(timeout, SOCKET_BYTES); 4640704ebd2Sopenharmony_ci return ret; 4650704ebd2Sopenharmony_ci } else { 4660704ebd2Sopenharmony_ci LOG("[send data]invalid param[DataType]"); 4670704ebd2Sopenharmony_ci free(g_expectDataContent); 4680704ebd2Sopenharmony_ci return SOFTBUS_ERR; 4690704ebd2Sopenharmony_ci } 4700704ebd2Sopenharmony_ci 4710704ebd2Sopenharmony_ci LOG("[send data]call SendX success"); 4720704ebd2Sopenharmony_ci free(g_expectDataContent); 4730704ebd2Sopenharmony_ci g_expectDataContent = NULL; 4740704ebd2Sopenharmony_ci return ret; 4750704ebd2Sopenharmony_ci} 4760704ebd2Sopenharmony_ci 4770704ebd2Sopenharmony_ci// set/get function 4780704ebd2Sopenharmony_civoid ResetWaitFlag(void) 4790704ebd2Sopenharmony_ci{ 4800704ebd2Sopenharmony_ci g_waitFlag = WAIT_DEF_VALUE; 4810704ebd2Sopenharmony_ci} 4820704ebd2Sopenharmony_ci 4830704ebd2Sopenharmony_civoid ResetWaitFlag4Shutdown(void) 4840704ebd2Sopenharmony_ci{ 4850704ebd2Sopenharmony_ci g_waitFlag4Shutdown = WAIT_DEF_VALUE; 4860704ebd2Sopenharmony_ci} 4870704ebd2Sopenharmony_ci 4880704ebd2Sopenharmony_civoid ResetWaitFlag4Byte(void) 4890704ebd2Sopenharmony_ci{ 4900704ebd2Sopenharmony_ci g_waitFlag4Byte = WAIT_DEF_VALUE; 4910704ebd2Sopenharmony_ci} 4920704ebd2Sopenharmony_ci 4930704ebd2Sopenharmony_civoid ResetWaitFlag4Message(void) 4940704ebd2Sopenharmony_ci{ 4950704ebd2Sopenharmony_ci g_waitFlag4Message = WAIT_DEF_VALUE; 4960704ebd2Sopenharmony_ci} 4970704ebd2Sopenharmony_ci 4980704ebd2Sopenharmony_civoid ResetWaitFlag4Stream(void) 4990704ebd2Sopenharmony_ci{ 5000704ebd2Sopenharmony_ci g_waitFlagStream = WAIT_DEF_VALUE; 5010704ebd2Sopenharmony_ci} 5020704ebd2Sopenharmony_ci 5030704ebd2Sopenharmony_civoid ResetWaitFlag4File(void) 5040704ebd2Sopenharmony_ci{ 5050704ebd2Sopenharmony_ci g_waitFlag4File = WAIT_DEF_VALUE; 5060704ebd2Sopenharmony_ci} 5070704ebd2Sopenharmony_ci 5080704ebd2Sopenharmony_cichar* GetNetworkId(void) 5090704ebd2Sopenharmony_ci{ 5100704ebd2Sopenharmony_ci return g_networkId; 5110704ebd2Sopenharmony_ci} 5120704ebd2Sopenharmony_ci 5130704ebd2Sopenharmony_ci// To one device only 5140704ebd2Sopenharmony_ciint CheckRemoteDeviceIsNull(int isSetNetId) 5150704ebd2Sopenharmony_ci{ 5160704ebd2Sopenharmony_ci int nodeNum = 0; 5170704ebd2Sopenharmony_ci NodeBasicInfo* nodeInfo = NULL; 5180704ebd2Sopenharmony_ci int ret = GetAllNodeDeviceInfo(DEF_PKG_NAME, &nodeInfo, &nodeNum); 5190704ebd2Sopenharmony_ci LOG("[check]get node number is:%d, ret:%d", nodeNum, ret); 5200704ebd2Sopenharmony_ci if (nodeInfo != NULL && nodeNum > 0) { 5210704ebd2Sopenharmony_ci LOG("[check]get netid is:%s", nodeInfo->networkId); 5220704ebd2Sopenharmony_ci if (isSetNetId == BOOL_TRUE) { 5230704ebd2Sopenharmony_ci (void)strncpy_s(g_networkId, NETWORK_ID_BUF_LEN, nodeInfo->networkId, NETWORK_ID_BUF_LEN); 5240704ebd2Sopenharmony_ci } 5250704ebd2Sopenharmony_ci FreeNodeInfo(nodeInfo); 5260704ebd2Sopenharmony_ci return SOFTBUS_OK; 5270704ebd2Sopenharmony_ci } else { 5280704ebd2Sopenharmony_ci LOG("[check]get nodeInfo is null"); 5290704ebd2Sopenharmony_ci return SOFTBUS_ERR; 5300704ebd2Sopenharmony_ci } 5310704ebd2Sopenharmony_ci} 5320704ebd2Sopenharmony_ci 5330704ebd2Sopenharmony_ciISocketListener* GetSocketListnerData(void) 5340704ebd2Sopenharmony_ci{ 5350704ebd2Sopenharmony_ci return g_socketlistenerdata; 5360704ebd2Sopenharmony_ci} 5370704ebd2Sopenharmony_ci 5380704ebd2Sopenharmony_civoid SetCurrentSocket4Data(int socket) 5390704ebd2Sopenharmony_ci{ 5400704ebd2Sopenharmony_ci g_currentSocket4Data = socket; 5410704ebd2Sopenharmony_ci} 5420704ebd2Sopenharmony_ci 5430704ebd2Sopenharmony_ciint GetCurrentSocket4Data(void) 5440704ebd2Sopenharmony_ci{ 5450704ebd2Sopenharmony_ci return g_currentSocket4Data; 5460704ebd2Sopenharmony_ci} 5470704ebd2Sopenharmony_ci 5480704ebd2Sopenharmony_civoid TestSetUp(void) 5490704ebd2Sopenharmony_ci{ 5500704ebd2Sopenharmony_ci g_defNodeStateCallback.events = EVENT_NODE_STATE_MASK; 5510704ebd2Sopenharmony_ci g_defNodeStateCallback.onNodeOnline = OnDefNodeOnline; 5520704ebd2Sopenharmony_ci g_defNodeStateCallback.onNodeOffline = OnDefNodeOffline; 5530704ebd2Sopenharmony_ci g_defNodeStateCallback.onNodeBasicInfoChanged = OnDefNodeBasicInfoChanged; 5540704ebd2Sopenharmony_ci g_defNodeStateCallback.onNodeStatusChanged = onDefNodeStatusChanged; 5550704ebd2Sopenharmony_ci if (g_socketlistenerdata == NULL) { 5560704ebd2Sopenharmony_ci g_socketlistenerdata = (ISocketListener*)calloc(1, sizeof(ISocketListener)); 5570704ebd2Sopenharmony_ci g_socketlistenerdata->OnBind = OnBindData; 5580704ebd2Sopenharmony_ci g_socketlistenerdata->OnShutdown = OnShutdownData; 5590704ebd2Sopenharmony_ci g_socketlistenerdata->OnBytes = OnByteData; 5600704ebd2Sopenharmony_ci g_socketlistenerdata->OnMessage = OnMessageData; 5610704ebd2Sopenharmony_ci g_socketlistenerdata->OnStream = OnStreamData; 5620704ebd2Sopenharmony_ci g_socketlistenerdata->OnFile = OnFileData; 5630704ebd2Sopenharmony_ci g_socketlistenerdata->OnQos = OnQosData; 5640704ebd2Sopenharmony_ci }; 5650704ebd2Sopenharmony_ci} 5660704ebd2Sopenharmony_ci 5670704ebd2Sopenharmony_civoid TestTearDown(void) 5680704ebd2Sopenharmony_ci{ 5690704ebd2Sopenharmony_ci 5700704ebd2Sopenharmony_ci if (g_socketlistenerdata != NULL) { 5710704ebd2Sopenharmony_ci free(g_socketlistenerdata); 5720704ebd2Sopenharmony_ci g_socketlistenerdata = NULL; 5730704ebd2Sopenharmony_ci } 5740704ebd2Sopenharmony_ci} 5750704ebd2Sopenharmony_ci 5760704ebd2Sopenharmony_civoid AddPermission(void) 5770704ebd2Sopenharmony_ci{ 5780704ebd2Sopenharmony_ci uint64_t tokenId; 5790704ebd2Sopenharmony_ci const char *perms[2]; 5800704ebd2Sopenharmony_ci perms[0] = OHOS_PERMISSION_DISTRIBUTED_SOFTBUS_CENTER; 5810704ebd2Sopenharmony_ci perms[1] = OHOS_PERMISSION_DISTRIBUTED_DATASYNC; 5820704ebd2Sopenharmony_ci NativeTokenInfoParams infoTnstance = { 5830704ebd2Sopenharmony_ci .dcapsNum = 0, 5840704ebd2Sopenharmony_ci .permsNum = 2, 5850704ebd2Sopenharmony_ci .aclsNum = 0, 5860704ebd2Sopenharmony_ci .dcaps = NULL, 5870704ebd2Sopenharmony_ci .perms = perms, 5880704ebd2Sopenharmony_ci .acls = NULL, 5890704ebd2Sopenharmony_ci .processName = "dsoftbus_test_service", 5900704ebd2Sopenharmony_ci .aplStr = "system_core", 5910704ebd2Sopenharmony_ci }; 5920704ebd2Sopenharmony_ci tokenId = GetAccessTokenId(&infoTnstance); 5930704ebd2Sopenharmony_ci SetSelfTokenID(tokenId); 5940704ebd2Sopenharmony_ci}