• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (c) 2021-2024 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 "client_trans_session_service.h"
17 
18 #ifndef _GNU_SOURCE
19 #define _GNU_SOURCE
20 #endif
21 
22 #include "securec.h"
23 #include <unistd.h>
24 
25 #include "anonymizer.h"
26 #include "client_qos_manager.h"
27 #include "client_trans_channel_manager.h"
28 #include "client_trans_file_listener.h"
29 #include "client_trans_session_adapter.h"
30 #include "client_trans_session_manager.h"
31 #include "client_trans_socket_manager.h"
32 #include "dfs_session.h"
33 #include "inner_session.h"
34 #include "session_ipc_adapter.h"
35 #include "softbus_access_token_adapter.h"
36 #include "softbus_adapter_mem.h"
37 #include "softbus_client_frame_manager.h"
38 #include "softbus_def.h"
39 #include "softbus_error_code.h"
40 #include "softbus_feature_config.h"
41 #include "softbus_json_utils.h"
42 #include "softbus_trans_def.h"
43 #include "softbus_utils.h"
44 #include "trans_log.h"
45 #include "trans_server_proxy.h"
46 
47 typedef int (*SessionOptionRead)(int32_t channelId, int32_t type, void* value, uint32_t valueSize);
48 typedef int (*SessionOptionWrite)(int32_t channelId, int32_t type, void* value, uint32_t valueSize);
49 
50 typedef struct {
51     bool canRead;
52     SessionOptionRead readFunc;
53 } SessionOptionItem;
54 
55 typedef struct {
56     int32_t channelType;
57     int32_t businessType;
58     ConfigType configType;
59 } ConfigTypeMap;
60 
IsValidSessionId(int sessionId)61 static bool IsValidSessionId(int sessionId)
62 {
63     if (sessionId <= 0) {
64         TRANS_LOGE(TRANS_SDK, "invalid sessionId=%{public}d", sessionId);
65         return false;
66     }
67     return true;
68 }
69 
IsValidListener(const ISessionListener * listener)70 static bool IsValidListener(const ISessionListener *listener)
71 {
72     if ((listener != NULL) &&
73         (listener->OnSessionOpened != NULL) &&
74         (listener->OnSessionClosed != NULL)) {
75         return true;
76     }
77     TRANS_LOGE(TRANS_SDK, "invalid ISessionListener");
78     return false;
79 }
80 
OpenSessionWithExistSession(int32_t sessionId,bool isEnabled)81 static int32_t OpenSessionWithExistSession(int32_t sessionId, bool isEnabled)
82 {
83     if (!isEnabled) {
84         int32_t errCode = SOFTBUS_TRANS_SESSION_OPENING;
85         TRANS_LOGI(TRANS_SDK, "the channel is opening, errCode=%{public}d", errCode);
86         return sessionId;
87     }
88 
89     ISessionListener listener = { 0 };
90     int32_t ret = ClientGetSessionCallbackById(sessionId, &listener);
91     if (ret != SOFTBUS_OK) {
92         TRANS_LOGE(TRANS_SDK, "get session listener failed, ret=%{public}d", ret);
93         CloseSession(sessionId);
94         return SOFTBUS_TRANS_INVALID_SESSION_ID;
95     }
96 
97     ret = listener.OnSessionOpened(sessionId, SOFTBUS_OK);
98     if (ret != 0) {
99         TRANS_LOGE(TRANS_SDK, "session callback OnSessionOpened failed, ret=%{public}d", ret);
100         CloseSession(sessionId);
101         return SOFTBUS_TRANS_INVALID_SESSION_ID;
102     }
103     return sessionId;
104 }
105 
CreateSessionServer(const char * pkgName,const char * sessionName,const ISessionListener * listener)106 int CreateSessionServer(const char *pkgName, const char *sessionName, const ISessionListener *listener)
107 {
108     if (!IsValidString(pkgName, PKG_NAME_SIZE_MAX - 1) || !IsValidString(sessionName, SESSION_NAME_SIZE_MAX - 1) ||
109         !IsValidListener(listener)) {
110         TRANS_LOGW(TRANS_SDK, "invalid param");
111         return SOFTBUS_INVALID_PARAM;
112     }
113     char *tmpName = NULL;
114     Anonymize(sessionName, &tmpName);
115     TRANS_LOGI(TRANS_SDK, "pkgName=%{public}s, sessionName=%{public}s", pkgName, AnonymizeWrapper(tmpName));
116     AnonymizeFree(tmpName);
117     if (InitSoftBus(pkgName) != SOFTBUS_OK) {
118         TRANS_LOGE(TRANS_SDK, "init softbus err");
119         return SOFTBUS_TRANS_SESSION_ADDPKG_FAILED;
120     }
121 
122     if (CheckPackageName(pkgName) != SOFTBUS_OK) {
123         TRANS_LOGE(TRANS_SDK, "invalid pkg name");
124         return SOFTBUS_INVALID_PKGNAME;
125     }
126 
127     int ret = ClientAddSessionServer(SEC_TYPE_CIPHERTEXT, pkgName, sessionName, listener);
128     if (ret == SOFTBUS_SERVER_NAME_REPEATED) {
129         TRANS_LOGI(TRANS_SDK, "SessionServer is already created in client");
130     } else if (ret != SOFTBUS_OK) {
131         TRANS_LOGE(TRANS_SDK, "add session server err, ret=%{public}d.", ret);
132         return ret;
133     }
134 
135     ret = ServerIpcCreateSessionServer(pkgName, sessionName);
136     if (ret == SOFTBUS_SERVER_NAME_REPEATED) {
137         TRANS_LOGW(TRANS_SDK, "ok, SessionServer is already created in server");
138         return SOFTBUS_OK;
139     } else if (ret != SOFTBUS_OK) {
140         TRANS_LOGE(TRANS_SDK, "createSessionServer failed, ret=%{public}d", ret);
141         (void)ClientDeleteSessionServer(SEC_TYPE_CIPHERTEXT, sessionName);
142         return ret;
143     }
144     TRANS_LOGI(TRANS_SDK, "ok");
145     return ret;
146 }
147 
RemoveSessionServer(const char * pkgName,const char * sessionName)148 int RemoveSessionServer(const char *pkgName, const char *sessionName)
149 {
150     if (!IsValidString(pkgName, PKG_NAME_SIZE_MAX - 1) || !IsValidString(sessionName, SESSION_NAME_SIZE_MAX - 1)) {
151         TRANS_LOGW(TRANS_SDK, "invalid param");
152         return SOFTBUS_INVALID_PARAM;
153     }
154     char *tmpName = NULL;
155     Anonymize(sessionName, &tmpName);
156     TRANS_LOGI(TRANS_SDK, "pkgName=%{public}s, sessionName=%{public}s", pkgName, AnonymizeWrapper(tmpName));
157 
158     int32_t ret = ServerIpcRemoveSessionServer(pkgName, sessionName);
159     if (ret != SOFTBUS_OK) {
160         TRANS_LOGE(TRANS_SDK, "remove in server failed, ret=%{public}d.", ret);
161         AnonymizeFree(tmpName);
162         return ret;
163     }
164 
165     ret = ClientDeleteSessionServer(SEC_TYPE_CIPHERTEXT, sessionName);
166     if (ret != SOFTBUS_OK) {
167         TRANS_LOGE(TRANS_SDK, "delete session server failed, sessionName=%{public}s, ret=%{public}d.",
168             AnonymizeWrapper(tmpName), ret);
169         DeleteFileListener(sessionName);
170         AnonymizeFree(tmpName);
171         return ret;
172     }
173     DeleteFileListener(sessionName);
174     AnonymizeFree(tmpName);
175     TRANS_LOGI(TRANS_SDK, "ok");
176     return ret;
177 }
178 
CheckParamIsValid(const char * mySessionName,const char * peerSessionName,const char * peerNetworkId,const char * groupId,const SessionAttribute * attr)179 static int32_t CheckParamIsValid(const char *mySessionName, const char *peerSessionName,
180     const char *peerNetworkId, const char *groupId, const SessionAttribute *attr)
181 {
182     if (!IsValidString(mySessionName, SESSION_NAME_SIZE_MAX - 1)) {
183         char *tmpMyName = NULL;
184         Anonymize(mySessionName, &tmpMyName);
185         TRANS_LOGE(TRANS_SDK, "invalid mySessionName. tmpMyName=%{public}s", AnonymizeWrapper(tmpMyName));
186         AnonymizeFree(tmpMyName);
187         return SOFTBUS_TRANS_INVALID_SESSION_NAME;
188     }
189     if (!IsValidString(peerSessionName, SESSION_NAME_SIZE_MAX - 1)) {
190         char *tmpPeerName = NULL;
191         Anonymize(peerSessionName, &tmpPeerName);
192         TRANS_LOGE(TRANS_SDK, "invalid peerSessionName. tmpPeerName=%{public}s", AnonymizeWrapper(tmpPeerName));
193         AnonymizeFree(tmpPeerName);
194         return SOFTBUS_TRANS_INVALID_SESSION_NAME;
195     }
196     if (!IsValidString(peerNetworkId, DEVICE_ID_SIZE_MAX - 1)) {
197         char *tmpPeerNetworkId = NULL;
198         Anonymize(peerNetworkId, &tmpPeerNetworkId);
199         TRANS_LOGE(TRANS_SDK, "invalid peerNetworkId. tmpPeerNetworkId=%{public}s", AnonymizeWrapper(tmpPeerNetworkId));
200         AnonymizeFree(tmpPeerNetworkId);
201         return SOFTBUS_INVALID_PARAM;
202     }
203     if (attr == NULL) {
204         TRANS_LOGE(TRANS_SDK, "attr is NULL");
205         return SOFTBUS_INVALID_PARAM;
206     }
207     if (groupId == NULL) {
208         TRANS_LOGE(TRANS_SDK, "groupId is NULL");
209         return SOFTBUS_INVALID_PARAM;
210     }
211     if (strlen(groupId) >= GROUP_ID_SIZE_MAX) {
212         TRANS_LOGE(TRANS_SDK, "groupId length is invalid");
213         return SOFTBUS_INVALID_PARAM;
214     }
215 
216     return SOFTBUS_OK;
217 }
218 
PrintSessionName(const char * mySessionName,const char * peerSessionName)219 static void PrintSessionName(const char *mySessionName, const char *peerSessionName)
220 {
221     char *tmpMyName = NULL;
222     char *tmpPeerName = NULL;
223     Anonymize(mySessionName, &tmpMyName);
224     Anonymize(peerSessionName, &tmpPeerName);
225     TRANS_LOGI(TRANS_SDK, "OpenSession: mySessionName=%{public}s, peerSessionName=%{public}s",
226         AnonymizeWrapper(tmpMyName), AnonymizeWrapper(tmpPeerName));
227     AnonymizeFree(tmpMyName);
228     AnonymizeFree(tmpPeerName);
229 }
230 
BuildParamSessionAttribute(const SessionAttribute * attr)231 static SessionAttribute *BuildParamSessionAttribute(const SessionAttribute *attr)
232 {
233     SessionAttribute *tmpAttr = (SessionAttribute *)SoftBusCalloc(sizeof(SessionAttribute));
234     if (tmpAttr == NULL) {
235         TRANS_LOGE(TRANS_SDK, "SoftBusCalloc SessionAttribute failed");
236         return NULL;
237     }
238     if (memcpy_s(tmpAttr, sizeof(SessionAttribute), attr, sizeof(SessionAttribute)) != EOK) {
239         TRANS_LOGE(TRANS_SDK, "memcpy_s SessionAttribute failed");
240         SoftBusFree(tmpAttr);
241         return NULL;
242     }
243     tmpAttr->fastTransData = NULL;
244     tmpAttr->fastTransDataSize = 0;
245     return tmpAttr;
246 }
247 
InitSessionParam(const char * mySessionName,const char * peerSessionName,const char * peerNetworkId,const char * groupId,SessionParam * param)248 static void InitSessionParam(const char *mySessionName, const char *peerSessionName, const char *peerNetworkId,
249     const char *groupId, SessionParam *param)
250 {
251     param->sessionName = mySessionName;
252     param->peerSessionName = peerSessionName;
253     param->peerDeviceId = peerNetworkId;
254     param->groupId = groupId;
255     param->isQosLane = false;
256     param->qosCount = 0;
257     param->isAsync = false;
258     param->actionId = INVALID_ACTION_ID;
259 }
260 
OpenSession(const char * mySessionName,const char * peerSessionName,const char * peerNetworkId,const char * groupId,const SessionAttribute * attr)261 int OpenSession(const char *mySessionName, const char *peerSessionName, const char *peerNetworkId,
262     const char *groupId, const SessionAttribute *attr)
263 {
264     int32_t ret = CheckParamIsValid(mySessionName, peerSessionName, peerNetworkId, groupId, attr);
265     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, TRANS_SDK, "invalid session name.");
266 
267     PrintSessionName(mySessionName, peerSessionName);
268     SessionAttribute *tmpAttr = BuildParamSessionAttribute(attr);
269     TRANS_CHECK_AND_RETURN_RET_LOGE(tmpAttr != NULL, SOFTBUS_MEM_ERR, TRANS_SDK, "Build SessionAttribute failed.");
270     SessionParam param = { 0 };
271     InitSessionParam(mySessionName, peerSessionName, peerNetworkId, groupId, &param);
272     param.attr = tmpAttr;
273     (void)memset_s(param.qos, sizeof(param.qos), 0, sizeof(param.qos));
274 
275     int32_t sessionId = INVALID_SESSION_ID;
276     SessionEnableStatus isEnabled = ENABLE_STATUS_INIT;
277 
278     ret = ClientAddSession(&param, &sessionId, &isEnabled);
279     if (ret != SOFTBUS_OK) {
280         SoftBusFree(tmpAttr);
281         if (ret == SOFTBUS_TRANS_SESSION_REPEATED) {
282             TRANS_LOGI(TRANS_SDK, "session already opened");
283             return OpenSessionWithExistSession(sessionId, isEnabled);
284         }
285         TRANS_LOGE(TRANS_SDK, "add session err: ret=%{public}d", ret);
286         return ret;
287     }
288     param.isAsync = false;
289     param.sessionId = sessionId;
290     TransInfo transInfo = { 0 };
291     ret = ServerIpcOpenSession(&param, &transInfo);
292     if (ret != SOFTBUS_OK) {
293         TRANS_LOGE(TRANS_SDK, "open session ipc err: ret=%{public}d", ret);
294         SoftBusFree(tmpAttr);
295         (void)ClientDeleteSession(sessionId);
296         return ret;
297     }
298 
299     ret = ClientSetChannelBySessionId(sessionId, &transInfo);
300     if (ret != SOFTBUS_OK) {
301         TRANS_LOGE(TRANS_SDK, "set channel by sessionId failed, ret=%{public}d", ret);
302         SoftBusFree(tmpAttr);
303         (void)ClientDeleteSession(sessionId);
304         return SOFTBUS_TRANS_SESSION_SET_CHANNEL_FAILED;
305     }
306     TRANS_LOGI(TRANS_SDK, "ok: sessionId=%{public}d, channelId=%{public}d, channelType=%{public}d",
307         sessionId, transInfo.channelId, transInfo.channelType);
308     SoftBusFree(tmpAttr);
309     return sessionId;
310 }
311 
ConvertAddrStr(const char * addrStr,ConnectionAddr * addrInfo)312 static int32_t ConvertAddrStr(const char *addrStr, ConnectionAddr *addrInfo)
313 {
314     TRANS_CHECK_AND_RETURN_RET_LOGE(
315         (addrStr != NULL && addrInfo != NULL), SOFTBUS_INVALID_PARAM, TRANS_SDK, "invalid param");
316     cJSON *obj = cJSON_Parse(addrStr);
317     TRANS_CHECK_AND_RETURN_RET_LOGE(obj != NULL, SOFTBUS_PARSE_JSON_ERR, TRANS_SDK, "addrStr parse failed.");
318     int32_t port;
319     if (GetJsonObjectStringItem(obj, "ETH_IP", addrInfo->info.ip.ip, IP_STR_MAX_LEN) &&
320         GetJsonObjectNumberItem(obj, "ETH_PORT", &port)) {
321         addrInfo->info.ip.port = (uint16_t)port;
322         if (IsValidString(addrInfo->info.ip.ip, IP_STR_MAX_LEN) && addrInfo->info.ip.port > 0) {
323             cJSON_Delete(obj);
324             addrInfo->type = CONNECTION_ADDR_ETH;
325             return SOFTBUS_OK;
326         }
327     }
328     if (GetJsonObjectStringItem(obj, "WIFI_IP", addrInfo->info.ip.ip, IP_STR_MAX_LEN) &&
329         GetJsonObjectNumberItem(obj, "WIFI_PORT", &port)) {
330         addrInfo->info.ip.port = (uint16_t)port;
331         if (IsValidString(addrInfo->info.ip.ip, IP_STR_MAX_LEN) && addrInfo->info.ip.port > 0) {
332             cJSON_Delete(obj);
333             addrInfo->type = CONNECTION_ADDR_WLAN;
334             return SOFTBUS_OK;
335         }
336     }
337     if (GetJsonObjectStringItem(obj, "BR_MAC", addrInfo->info.br.brMac, BT_MAC_LEN)) {
338         cJSON_Delete(obj);
339         addrInfo->type = CONNECTION_ADDR_BR;
340         return SOFTBUS_OK;
341     }
342     if (GetJsonObjectStringItem(obj, "BLE_MAC", addrInfo->info.ble.bleMac, BT_MAC_LEN)) {
343         char udidHash[UDID_HASH_LEN] = {0};
344         if (GetJsonObjectStringItem(obj, "deviceId", udidHash, UDID_HASH_LEN)) {
345             char *tmpUdidHash = NULL;
346             Anonymize(udidHash, &tmpUdidHash);
347             int ret = ConvertHexStringToBytes(
348                 (unsigned char *)addrInfo->info.ble.udidHash, UDID_HASH_LEN, udidHash, strlen(udidHash));
349             TRANS_LOGI(TRANS_SDK, "string to bytes ret=%{public}d, udidHash=%{public}s",
350                 ret, AnonymizeWrapper(tmpUdidHash));
351             AnonymizeFree(tmpUdidHash);
352         }
353         cJSON_Delete(obj);
354         addrInfo->type = CONNECTION_ADDR_BLE;
355         return SOFTBUS_OK;
356     }
357     cJSON_Delete(obj);
358     TRANS_LOGE(TRANS_SDK, "addr convert fail");
359     return SOFTBUS_PARSE_JSON_ERR;
360 }
361 
IsValidAddrInfoArr(const ConnectionAddr * addrInfo,int num)362 static int IsValidAddrInfoArr(const ConnectionAddr *addrInfo, int num)
363 {
364     int32_t addrIndex = -1;
365     if (addrInfo == NULL || num <= 0) {
366         return addrIndex;
367     }
368     int32_t wifiIndex = -1;
369     int32_t brIndex = -1;
370     int32_t bleIndex = -1;
371     for (int32_t index = 0; index < num; index++) {
372         if ((addrInfo[index].type == CONNECTION_ADDR_ETH || addrInfo[index].type == CONNECTION_ADDR_WLAN) &&
373             wifiIndex < 0) {
374             wifiIndex = index;
375         }
376         if (addrInfo[index].type == CONNECTION_ADDR_BR && brIndex < 0) {
377             brIndex = index;
378         }
379         if (addrInfo[index].type == CONNECTION_ADDR_BLE && bleIndex < 0) {
380             bleIndex = index;
381         }
382     }
383     addrIndex = (wifiIndex >= 0) ? wifiIndex : addrIndex;
384     addrIndex = (addrIndex < 0) ? brIndex : addrIndex;
385     addrIndex = (addrIndex < 0) ? bleIndex : addrIndex;
386     return addrIndex;
387 }
388 
OpenAuthSession(const char * sessionName,const ConnectionAddr * addrInfo,int num,const char * mixAddr)389 int OpenAuthSession(const char *sessionName, const ConnectionAddr *addrInfo, int num, const char *mixAddr)
390 {
391     if (!IsValidString(sessionName, SESSION_NAME_SIZE_MAX - 1)) {
392         TRANS_LOGW(TRANS_SDK, "invalid param");
393         return SOFTBUS_INVALID_PARAM;
394     }
395     TransInfo transInfo;
396     int32_t addrIndex = IsValidAddrInfoArr(addrInfo, num);
397     ConnectionAddr *addr = NULL;
398     ConnectionAddr mix;
399     if (memset_s(&mix, sizeof(ConnectionAddr), 0x0, sizeof(ConnectionAddr)) != EOK) {
400         TRANS_LOGE(TRANS_SDK, "memset_s info fail");
401         return SOFTBUS_MEM_ERR;
402     }
403     if (addrIndex < 0) {
404         if (ConvertAddrStr(mixAddr, &mix) != SOFTBUS_OK) {
405             TRANS_LOGE(TRANS_SDK, "invalid addrInfo param");
406             return SOFTBUS_INVALID_PARAM;
407         }
408         addr = &mix;
409     } else {
410         addr = (ConnectionAddr *)&addrInfo[addrIndex];
411     }
412     char *tmpName = NULL;
413     Anonymize(sessionName, &tmpName);
414     TRANS_LOGI(TRANS_SDK, "sessionName=%{public}s", AnonymizeWrapper(tmpName));
415     AnonymizeFree(tmpName);
416     int32_t sessionId;
417     int32_t ret = ClientAddAuthSession(sessionName, &sessionId);
418     if (ret != SOFTBUS_OK) {
419         TRANS_LOGE(TRANS_SDK, "add non encrypt session err: ret=%{public}d", ret);
420         return ret;
421     }
422 
423     transInfo.channelId = ServerIpcOpenAuthSession(sessionName, addr);
424     if (addr->type == CONNECTION_ADDR_BR || addr->type == CONNECTION_ADDR_BLE) {
425         transInfo.channelType = CHANNEL_TYPE_PROXY;
426     } else {
427         transInfo.channelType = CHANNEL_TYPE_AUTH;
428     }
429     ret = ClientSetChannelBySessionId(sessionId, &transInfo);
430     if (ret != SOFTBUS_OK) {
431         TRANS_LOGE(TRANS_SDK, "set channel by sessionId failed, ret=%{public}d", ret);
432         (void)ClientDeleteSession(sessionId);
433         return SOFTBUS_TRANS_SESSION_SET_CHANNEL_FAILED;
434     }
435     TRANS_LOGI(TRANS_SDK, "ok: sessionId=%{public}d, channelId=%{public}d, channelType=%{public}d",
436         sessionId, transInfo.channelId, transInfo.channelType);
437     return sessionId;
438 }
439 
NotifyAuthSuccess(int sessionId)440 void NotifyAuthSuccess(int sessionId)
441 {
442     int32_t channelId = -1;
443     int32_t channelType = -1;
444     TRANS_LOGI(TRANS_SDK, "sessionId=%{public}d", sessionId);
445     int32_t ret = ClientGetChannelBySessionId(sessionId, &channelId, &channelType, NULL);
446     if (ret != SOFTBUS_OK) {
447         TRANS_LOGE(TRANS_SDK, "get channel err, sessionId=%{public}d, ret=%{public}d", sessionId, ret);
448         return;
449     }
450 
451     int32_t isServer = 0;
452     ret = ClientGetSessionIntegerDataById(sessionId, &isServer, KEY_IS_SERVER);
453     if (ret != SOFTBUS_OK) {
454         TRANS_LOGE(TRANS_SDK, "get isServer failed, ret=%{public}d", ret);
455         return;
456     }
457     if (isServer == 1) {
458         TRANS_LOGE(TRANS_SDK, "device is service side, no notification");
459         return;
460     }
461     TRANS_LOGI(TRANS_SDK,
462         "client side, notify auth success channelId=%{public}d, channelType=%{public}d", channelId, channelType);
463 
464     ret = ServerIpcNotifyAuthSuccess(channelId, channelType);
465     if (ret != SOFTBUS_OK) {
466         TRANS_LOGE(TRANS_SDK,
467             "ServerIpcNotifyAuthSuccess err channelId=%{public}d, ret=%{public}d", channelId, ret);
468         return;
469     }
470 }
471 
CheckSessionIsOpened(int32_t sessionId,bool isCancelCheck)472 static int32_t CheckSessionIsOpened(int32_t sessionId, bool isCancelCheck)
473 {
474 #define SESSION_STATUS_CHECK_MAX_NUM 100
475 #define SESSION_STATUS_CANCEL_CHECK_MAX_NUM 5
476 #define SESSION_CHECK_PERIOD 200000
477     int32_t checkMaxNum = isCancelCheck ? SESSION_STATUS_CANCEL_CHECK_MAX_NUM : SESSION_STATUS_CHECK_MAX_NUM;
478     int32_t i = 0;
479     SessionEnableStatus enableStatus = ENABLE_STATUS_INIT;
480     while (i < checkMaxNum) {
481         if (ClientGetChannelBySessionId(sessionId, NULL, NULL, &enableStatus) != SOFTBUS_OK) {
482             return SOFTBUS_TRANS_SESSION_GET_CHANNEL_FAILED;
483         }
484         if (enableStatus == ENABLE_STATUS_SUCCESS) {
485             TRANS_LOGD(TRANS_SDK, "session is enable");
486             return SOFTBUS_OK;
487         }
488 
489         if (enableStatus == ENABLE_STATUS_FAILED) {
490             TRANS_LOGE(TRANS_SDK, "socket is failed");
491             return SOFTBUS_TRANS_SESSION_NO_ENABLE;
492         }
493         usleep(SESSION_CHECK_PERIOD);
494         i++;
495     }
496 
497     TRANS_LOGE(TRANS_SDK, "session open timeout");
498     return SOFTBUS_TIMOUT;
499 }
500 
OpenSessionSync(const char * mySessionName,const char * peerSessionName,const char * peerNetworkId,const char * groupId,const SessionAttribute * attr)501 int OpenSessionSync(const char *mySessionName, const char *peerSessionName, const char *peerNetworkId,
502     const char *groupId, const SessionAttribute *attr)
503 {
504     int ret = CheckParamIsValid(mySessionName, peerSessionName, peerNetworkId, groupId, attr);
505     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, TRANS_SDK, "invalid session name.");
506     PrintSessionName(mySessionName, peerSessionName);
507 
508     SessionParam param = {
509         .sessionName = mySessionName,
510         .peerSessionName = peerSessionName,
511         .peerDeviceId = peerNetworkId,
512         .groupId = groupId,
513         .attr = attr,
514         .isQosLane = false,
515         .qosCount = 0,
516     };
517     (void)memset_s(param.qos, sizeof(param.qos), 0, sizeof(param.qos));
518 
519     int32_t sessionId = INVALID_SESSION_ID;
520     SessionEnableStatus isEnabled = ENABLE_STATUS_INIT;
521 
522     ret = ClientAddSession(&param, &sessionId, &isEnabled);
523     if (ret != SOFTBUS_OK) {
524         if (ret == SOFTBUS_TRANS_SESSION_REPEATED) {
525             TRANS_LOGI(TRANS_SDK, "session already opened");
526             CheckSessionIsOpened(sessionId, false);
527             return OpenSessionWithExistSession(sessionId, isEnabled);
528         }
529         TRANS_LOGE(TRANS_SDK, "add session err: ret=%{public}d", ret);
530         return ret;
531     }
532     param.isAsync = false;
533     param.sessionId = sessionId;
534     TransInfo transInfo = {0};
535     ret = ServerIpcOpenSession(&param, &transInfo);
536     if (ret != SOFTBUS_OK) {
537         TRANS_LOGE(TRANS_SDK, "open session ipc err: ret=%{public}d", ret);
538         (void)ClientDeleteSession(sessionId);
539         return ret;
540     }
541     ret = ClientSetChannelBySessionId(sessionId, &transInfo);
542     if (ret != SOFTBUS_OK) {
543         TRANS_LOGE(TRANS_SDK, "set channel by sessionId=%{public}d, ret=%{public}d", sessionId, ret);
544         (void)ClientDeleteSession(sessionId);
545         return SOFTBUS_TRANS_SESSION_SET_CHANNEL_FAILED;
546     }
547 
548     ret = CheckSessionIsOpened(sessionId, false);
549     if (ret != SOFTBUS_OK) {
550         TRANS_LOGE(TRANS_SDK, "CheckSessionIsOpened err: ret=%{public}d", ret);
551         (void)ClientDeleteSession(sessionId);
552         return SOFTBUS_TRANS_SESSION_NO_ENABLE;
553     }
554     TRANS_LOGI(TRANS_SDK, "ok: sessionId=%{public}d, channelId=%{public}d", sessionId, transInfo.channelId);
555     return sessionId;
556 }
557 
CloseSession(int sessionId)558 void CloseSession(int sessionId)
559 {
560     TRANS_LOGI(TRANS_SDK, "sessionId=%{public}d", sessionId);
561     int32_t channelId = INVALID_CHANNEL_ID;
562     int32_t type = CHANNEL_TYPE_BUTT;
563     int32_t ret;
564 
565     if (!IsValidSessionId(sessionId)) {
566         TRANS_LOGW(TRANS_SDK, "invalid param");
567         return;
568     }
569     ret = ClientGetChannelBySessionId(sessionId, &channelId, &type, NULL);
570     if (ret != SOFTBUS_OK) {
571         TRANS_LOGE(TRANS_SDK, "get channel by sessionId=%{public}d, ret=%{public}d", sessionId, ret);
572         return;
573     }
574     AddSessionStateClosing();
575     ret = ClientTransCloseChannel(channelId, type);
576     if (ret != SOFTBUS_OK) {
577         TRANS_LOGE(TRANS_SDK, "close channel err: ret=%{public}d, channelId=%{public}d, channelType=%{public}d",
578             ret, channelId, type);
579     }
580     ret = ClientDeleteSession(sessionId);
581     if (ret != SOFTBUS_OK) {
582         TRANS_LOGE(TRANS_SDK, "delete session err: ret=%{public}d", ret);
583         return;
584     }
585     TRANS_LOGD(TRANS_SDK, "ok");
586 }
587 
GetMySessionName(int sessionId,char * sessionName,unsigned int len)588 int GetMySessionName(int sessionId, char *sessionName, unsigned int len)
589 {
590     if (!IsValidSessionId(sessionId) || (sessionName == NULL) || (len > SESSION_NAME_SIZE_MAX)) {
591         TRANS_LOGE(TRANS_SDK, "invalid param");
592         return SOFTBUS_INVALID_PARAM;
593     }
594     TRANS_LOGI(TRANS_SDK, "get client sessionName by sessionId=%{public}d", sessionId);
595     return ClientGetSessionDataById(sessionId, sessionName, len, KEY_SESSION_NAME);
596 }
597 
GetPeerSessionName(int sessionId,char * sessionName,unsigned int len)598 int GetPeerSessionName(int sessionId, char *sessionName, unsigned int len)
599 {
600     if (!IsValidSessionId(sessionId) || (sessionName == NULL) || (len > SESSION_NAME_SIZE_MAX)) {
601         TRANS_LOGE(TRANS_SDK, "invalid param");
602         return SOFTBUS_INVALID_PARAM;
603     }
604     TRANS_LOGI(TRANS_SDK, "get server sessionName by sessionId=%{public}d", sessionId);
605     return ClientGetSessionDataById(sessionId, sessionName, len, KEY_PEER_SESSION_NAME);
606 }
607 
GetPeerDeviceId(int sessionId,char * networkId,unsigned int len)608 int GetPeerDeviceId(int sessionId, char *networkId, unsigned int len)
609 {
610     if (!IsValidSessionId(sessionId) || (networkId  == NULL) || (len > SESSION_NAME_SIZE_MAX)) {
611         TRANS_LOGE(TRANS_SDK, "invalid param");
612         return SOFTBUS_INVALID_PARAM;
613     }
614     TRANS_LOGI(TRANS_SDK, "get server deviceId by sessionId=%{public}d", sessionId);
615     return ClientGetSessionDataById(sessionId, networkId, len, KEY_PEER_DEVICE_ID);
616 }
617 
GetSessionSide(int sessionId)618 int GetSessionSide(int sessionId)
619 {
620     TRANS_LOGI(TRANS_SDK, "get session side by sessionId=%{public}d", sessionId);
621     return ClientGetSessionSide(sessionId);
622 }
623 
IsValidFileReceivePath(const char * rootDir)624 static bool IsValidFileReceivePath(const char *rootDir)
625 {
626     if (!IsValidString(rootDir, FILE_RECV_ROOT_DIR_SIZE_MAX)) {
627         TRANS_LOGE(TRANS_SDK, "recvPath invalid. recvPath=%{private}s", rootDir);
628         return false;
629     }
630     char *absPath = realpath(rootDir, NULL);
631     if (absPath == NULL) {
632         TRANS_LOGE(TRANS_SDK, "recvPath not exist, recvPath=%{private}s, errno=%{public}d.", rootDir, errno);
633         return false;
634     }
635     SoftBusFree(absPath);
636     return true;
637 }
638 
SetFileReceiveListener(const char * pkgName,const char * sessionName,const IFileReceiveListener * recvListener,const char * rootDir)639 int SetFileReceiveListener(const char *pkgName, const char *sessionName,
640     const IFileReceiveListener *recvListener, const char *rootDir)
641 {
642     if (!IsValidString(pkgName, PKG_NAME_SIZE_MAX - 1) || !IsValidString(sessionName, SESSION_NAME_SIZE_MAX - 1) ||
643         !IsValidFileReceivePath(rootDir) || (recvListener == NULL)) {
644         TRANS_LOGW(TRANS_SDK, "set file receive listener invalid param");
645         return SOFTBUS_INVALID_PARAM;
646     }
647     if (InitSoftBus(pkgName) != SOFTBUS_OK) {
648         TRANS_LOGE(TRANS_SDK, "set file receive listener init softbus client error");
649         return SOFTBUS_TRANS_SESSION_ADDPKG_FAILED;
650     }
651     char *tmpName = NULL;
652     Anonymize(sessionName, &tmpName);
653     TRANS_LOGI(TRANS_SDK, "sessionName=%{public}s", AnonymizeWrapper(tmpName));
654     AnonymizeFree(tmpName);
655     return TransSetFileReceiveListener(sessionName, recvListener, rootDir);
656 }
657 
SetFileSendListener(const char * pkgName,const char * sessionName,const IFileSendListener * sendListener)658 int SetFileSendListener(const char *pkgName, const char *sessionName, const IFileSendListener *sendListener)
659 {
660     if (!IsValidString(pkgName, PKG_NAME_SIZE_MAX - 1) || !IsValidString(sessionName, SESSION_NAME_SIZE_MAX - 1) ||
661         sendListener == NULL) {
662         TRANS_LOGW(TRANS_SDK, "set file send listener invalid param");
663         return SOFTBUS_INVALID_PARAM;
664     }
665     if (InitSoftBus(pkgName) != SOFTBUS_OK) {
666         TRANS_LOGE(TRANS_SDK, "set file send listener init softbus client error");
667         return SOFTBUS_TRANS_SESSION_ADDPKG_FAILED;
668     }
669     char *tmpName = NULL;
670     Anonymize(sessionName, &tmpName);
671     TRANS_LOGI(TRANS_SDK, "sessionName=%{public}s", AnonymizeWrapper(tmpName));
672     AnonymizeFree(tmpName);
673     return TransSetFileSendListener(sessionName, sendListener);
674 }
675 
676 static const char *g_busName = "DistributedFileService";
677 static const char *g_deviceStatusName = "ohos.msdp.device_status";
678 
IsValidDFSSession(int32_t sessionId,int32_t * channelId)679 static int32_t IsValidDFSSession(int32_t sessionId, int32_t *channelId)
680 {
681     char sessionName[SESSION_NAME_SIZE_MAX] = { 0 };
682     int32_t type;
683     int32_t ret = GetMySessionName(sessionId, sessionName, SESSION_NAME_SIZE_MAX);
684     if (ret != SOFTBUS_OK) {
685         TRANS_LOGE(TRANS_SDK, "get dfs session name failed");
686         return ret;
687     }
688     if (strncmp(sessionName, g_busName, strlen(g_busName)) != 0 &&
689         strncmp(sessionName, g_deviceStatusName, strlen(g_deviceStatusName)) != 0) {
690         TRANS_LOGE(TRANS_SDK, "invalid dfs session name");
691         return SOFTBUS_TRANS_FUNC_NOT_SUPPORT;
692     }
693 
694     ret = ClientGetChannelBySessionId(sessionId, channelId, &type, NULL);
695     if (ret != SOFTBUS_OK) {
696         TRANS_LOGE(TRANS_SDK, "get channel by sessionId=%{public}d failed, ret=%{public}d", sessionId, ret);
697         return SOFTBUS_TRANS_SESSION_GET_CHANNEL_FAILED;
698     }
699     if (type != CHANNEL_TYPE_TCP_DIRECT) {
700         TRANS_LOGE(TRANS_SDK, "invalid channel type");
701         return SOFTBUS_TRANS_FUNC_NOT_SUPPORT;
702     }
703     return SOFTBUS_OK;
704 }
705 
GetSessionKey(int32_t sessionId,char * key,unsigned int len)706 int32_t GetSessionKey(int32_t sessionId, char *key, unsigned int len)
707 {
708     int32_t channelId;
709     if (!IsValidSessionId(sessionId) || key == NULL || len < SESSION_KEY_LEN) {
710         TRANS_LOGW(TRANS_SDK, "invalid param");
711         return SOFTBUS_INVALID_PARAM;
712     }
713     if (IsValidDFSSession(sessionId, &channelId) != SOFTBUS_OK) {
714         TRANS_LOGE(TRANS_SDK, "invalid dfs session");
715         return SOFTBUS_TRANS_FUNC_NOT_SUPPORT;
716     }
717     return ClientGetSessionKey(channelId, key, len);
718 }
719 
GetSessionHandle(int32_t sessionId,int * handle)720 int32_t GetSessionHandle(int32_t sessionId, int *handle)
721 {
722     int32_t channelId;
723     if (!IsValidSessionId(sessionId) || handle == NULL) {
724         TRANS_LOGW(TRANS_SDK, "invalid param");
725         return SOFTBUS_INVALID_PARAM;
726     }
727     if (IsValidDFSSession(sessionId, &channelId) != SOFTBUS_OK) {
728         TRANS_LOGE(TRANS_SDK, "invalid dfs session");
729         return SOFTBUS_TRANS_FUNC_NOT_SUPPORT;
730     }
731     return ClientGetHandle(channelId, handle);
732 }
733 
DisableSessionListener(int32_t sessionId)734 int32_t DisableSessionListener(int32_t sessionId)
735 {
736     int32_t channelId;
737     if (!IsValidSessionId(sessionId)) {
738         TRANS_LOGW(TRANS_SDK, "invalid param");
739         return SOFTBUS_INVALID_PARAM;
740     }
741     if (IsValidDFSSession(sessionId, &channelId) != SOFTBUS_OK) {
742         TRANS_LOGE(TRANS_SDK, "invalid dfs session");
743         return SOFTBUS_TRANS_FUNC_NOT_SUPPORT;
744     }
745     return ClientDisableSessionListener(channelId);
746 }
747 
QosReport(int32_t sessionId,int32_t appType,int32_t quality)748 int32_t QosReport(int32_t sessionId, int32_t appType, int32_t quality)
749 {
750     if (quality != QOS_IMPROVE && quality != QOS_RECOVER) {
751         TRANS_LOGW(TRANS_SDK, "qos report invalid param");
752         return SOFTBUS_INVALID_PARAM;
753     }
754 
755     int32_t channelId = INVALID_CHANNEL_ID;
756     int32_t type = CHANNEL_TYPE_BUTT;
757     int32_t ret = ClientGetChannelBySessionId(sessionId, &channelId, &type, NULL);
758     if (ret != SOFTBUS_OK) {
759         TRANS_LOGE(TRANS_SDK, "get channel by sessionId=%{public}d failed, ret=%{public}d.", sessionId, ret);
760         return SOFTBUS_TRANS_SESSION_GET_CHANNEL_FAILED;
761     }
762     if (ClientGetSessionSide(sessionId) != IS_CLIENT) {
763         TRANS_LOGE(TRANS_SDK,
764             "qos report not exist or not client side. sessionId=%{public}d", sessionId);
765         return SOFTBUS_TRANS_INVALID_SESSION_ID;
766     }
767     ret = ClientQosReport(channelId, type, appType, quality);
768     if (ret != SOFTBUS_OK) {
769         TRANS_LOGE(TRANS_SDK, "qos report failed. sessionId=%{public}d, ret=%{public}d", sessionId, ret);
770     }
771     return ret;
772 }
773 
774 static const ConfigTypeMap g_configTypeMap[] = {
775     {CHANNEL_TYPE_AUTH, BUSINESS_TYPE_BYTE, SOFTBUS_INT_AUTH_MAX_BYTES_LENGTH},
776     {CHANNEL_TYPE_AUTH, BUSINESS_TYPE_MESSAGE, SOFTBUS_INT_AUTH_MAX_MESSAGE_LENGTH},
777     {CHANNEL_TYPE_PROXY, BUSINESS_TYPE_BYTE, SOFTBUS_INT_PROXY_MAX_BYTES_LENGTH},
778     {CHANNEL_TYPE_PROXY, BUSINESS_TYPE_MESSAGE, SOFTBUS_INT_PROXY_MAX_MESSAGE_LENGTH},
779     {CHANNEL_TYPE_TCP_DIRECT, BUSINESS_TYPE_BYTE, SOFTBUS_INT_MAX_BYTES_LENGTH},
780     {CHANNEL_TYPE_TCP_DIRECT, BUSINESS_TYPE_MESSAGE, SOFTBUS_INT_MAX_MESSAGE_LENGTH},
781 };
782 
GetDefaultConfigType(int32_t channelType,int32_t businessType)783 int32_t GetDefaultConfigType(int32_t channelType, int32_t businessType)
784 {
785     const uint32_t nums = sizeof(g_configTypeMap) / sizeof(ConfigTypeMap);
786     for (uint32_t i = 0; i < nums; i++) {
787         if ((g_configTypeMap[i].channelType == channelType) &&
788             (g_configTypeMap[i].businessType == businessType)) {
789                 return g_configTypeMap[i].configType;
790             }
791     }
792     return SOFTBUS_CONFIG_TYPE_MAX;
793 }
794 
ReadMaxSendBytesSize(int32_t channelId,int32_t type,void * value,uint32_t valueSize)795 int ReadMaxSendBytesSize(int32_t channelId, int32_t type, void* value, uint32_t valueSize)
796 {
797     if (valueSize != sizeof(uint32_t)) {
798         TRANS_LOGE(TRANS_SDK, "valueSize not match. valueSize=%{public}d", valueSize);
799         return SOFTBUS_INVALID_PARAM;
800     }
801 
802     uint32_t dataConfig = INVALID_DATA_CONFIG;
803     if (ClientGetDataConfigByChannelId(channelId, type, &dataConfig) != SOFTBUS_OK) {
804         TRANS_LOGE(TRANS_SDK, "get config failed.");
805         return SOFTBUS_GET_CONFIG_VAL_ERR;
806     }
807 
808     (*(uint32_t*)value) = dataConfig;
809     return SOFTBUS_OK;
810 }
811 
ReadMaxSendMessageSize(int32_t channelId,int32_t type,void * value,uint32_t valueSize)812 int ReadMaxSendMessageSize(int32_t channelId, int32_t type, void* value, uint32_t valueSize)
813 {
814     if (value == NULL) {
815         TRANS_LOGE(TRANS_SDK, "param invalid");
816         return SOFTBUS_INVALID_PARAM;
817     }
818     if (valueSize != sizeof(uint32_t)) {
819         TRANS_LOGE(TRANS_SDK, "valueSize not match. valueSize=%{public}d", valueSize);
820         return SOFTBUS_INVALID_PARAM;
821     }
822 
823     uint32_t dataConfig = INVALID_DATA_CONFIG;
824     if (ClientGetDataConfigByChannelId(channelId, type, &dataConfig) != SOFTBUS_OK) {
825         TRANS_LOGE(TRANS_SDK, "get config failed.");
826         return SOFTBUS_GET_CONFIG_VAL_ERR;
827     }
828 
829     (*(uint32_t*)value) = dataConfig;
830     return SOFTBUS_OK;
831 }
832 
ReadSessionLinkType(int32_t channelId,int32_t type,void * value,uint32_t valueSize)833 int ReadSessionLinkType(int32_t channelId, int32_t type, void* value, uint32_t valueSize)
834 {
835     if (value == NULL) {
836         TRANS_LOGE(TRANS_SDK, "param invalid");
837         return SOFTBUS_INVALID_PARAM;
838     }
839     if (valueSize != sizeof(uint32_t)) {
840         TRANS_LOGE(TRANS_SDK, "valueSize not match. valueSize=%{public}d", valueSize);
841         return SOFTBUS_INVALID_PARAM;
842     }
843 
844     int32_t routeType = INVALID_ROUTE_TYPE;
845     if (ClientGetRouteTypeByChannelId(channelId, type, &routeType) != SOFTBUS_OK) {
846         TRANS_LOGE(TRANS_SDK, "get link type failed.");
847         return SOFTBUS_GET_CONFIG_VAL_ERR;
848     }
849 
850     (*(int32_t*)value) = routeType;
851     return SOFTBUS_OK;
852 }
853 
854 static const SessionOptionItem g_SessionOptionArr[SESSION_OPTION_BUTT] = {
855     {true, ReadMaxSendBytesSize},
856     {true, ReadMaxSendMessageSize},
857     {true, ReadSessionLinkType},
858 };
859 
GetSessionOption(int sessionId,SessionOption option,void * optionValue,uint32_t valueSize)860 int GetSessionOption(int sessionId, SessionOption option, void* optionValue, uint32_t valueSize)
861 {
862     if ((option >= SESSION_OPTION_BUTT) || (optionValue == NULL) || (valueSize == 0)) {
863         TRANS_LOGW(TRANS_SDK, "invalid param");
864         return SOFTBUS_INVALID_PARAM;
865     }
866     if (!g_SessionOptionArr[option].canRead) {
867         TRANS_LOGE(TRANS_SDK, "option can not be get. option=%{public}d", option);
868         return SOFTBUS_INVALID_PARAM;
869     }
870 
871     int32_t channelId = INVALID_CHANNEL_ID;
872     int32_t type = CHANNEL_TYPE_BUTT;
873     int32_t ret = ClientGetChannelBySessionId(sessionId, &channelId, &type, NULL);
874     if (ret != SOFTBUS_OK) {
875         TRANS_LOGE(TRANS_SDK, "get channel by sessionId=%{public}d failed, ret=%{public}d.", sessionId, ret);
876         return SOFTBUS_TRANS_SESSION_GET_CHANNEL_FAILED;
877     }
878 
879     return g_SessionOptionArr[option].readFunc(channelId, type, optionValue, valueSize);
880 }
881 
RemoveAppIdFromSessionName(const char * sessionName,char * newSessionName,int32_t length)882 bool RemoveAppIdFromSessionName(const char *sessionName, char *newSessionName, int32_t length)
883 {
884     if ((sessionName == NULL) || (newSessionName == NULL)) {
885         TRANS_LOGE(TRANS_SDK, "invalid param");
886         return false;
887     }
888     const char tag = '-';
889     const char *posName = strchr(sessionName, tag);
890     if (posName == NULL) {
891         TRANS_LOGE(TRANS_SDK, "sdk not find bundlename");
892         return false;
893     }
894     const char *posId = strchr(posName + 1, tag);
895     if (posId == NULL) {
896         TRANS_LOGE(TRANS_SDK, "sdk not find appid");
897         return false;
898     }
899     size_t len = posId - sessionName;
900     if (strncpy_s(newSessionName, length, sessionName, len) != EOK) {
901         TRANS_LOGE(TRANS_SDK, "copy sessionName failed");
902         return false;
903     }
904     newSessionName[len] = '\0';
905     return true;
906 }
907 
CreateSocket(const char * pkgName,const char * sessionName)908 int CreateSocket(const char *pkgName, const char *sessionName)
909 {
910     if (!IsValidString(pkgName, PKG_NAME_SIZE_MAX - 1) || !IsValidString(sessionName, SESSION_NAME_SIZE_MAX - 1)) {
911         TRANS_LOGE(TRANS_SDK, "invalid pkgName or sessionName");
912         return SOFTBUS_INVALID_PARAM;
913     }
914     int32_t ret = InitSoftBus(pkgName);
915     TRANS_CHECK_AND_RETURN_RET_LOGE(
916         ret == SOFTBUS_OK, SOFTBUS_TRANS_SESSION_ADDPKG_FAILED, TRANS_SDK, "init softbus err");
917 
918     ret = CheckPackageName(pkgName);
919     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, SOFTBUS_INVALID_PKGNAME, TRANS_SDK, "invalid pkg name");
920     char newSessionName[SESSION_NAME_SIZE_MAX + 1] = {0};
921     if (strncpy_s(newSessionName, SESSION_NAME_SIZE_MAX + 1, sessionName, strlen(sessionName)) != EOK) {
922         TRANS_LOGE(TRANS_SDK, "copy session name failed");
923         return SOFTBUS_STRCPY_ERR;
924     }
925     uint64_t callingFullTokenId = 0;
926     ret = SoftBusGetCallingFullTokenId(&callingFullTokenId);
927     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, TRANS_SDK, "get callingFullTokenId failed");
928 
929     if (SoftBusCheckIsNormalApp(callingFullTokenId, sessionName)) {
930         if (!RemoveAppIdFromSessionName(sessionName, newSessionName, SESSION_NAME_SIZE_MAX + 1)) {
931             TRANS_LOGE(TRANS_SDK, "invalid bundlename or appId and delete appId failed");
932             return SOFTBUS_TRANS_NOT_FIND_APPID;
933         }
934     }
935     ret = ClientAddSocketServer(SEC_TYPE_CIPHERTEXT, pkgName, (const char*)newSessionName);
936     if (ret == SOFTBUS_SERVER_NAME_REPEATED) {
937         TRANS_LOGD(TRANS_SDK, "SocketServer is already created in client");
938     } else if (ret != SOFTBUS_OK) {
939         TRANS_LOGE(TRANS_SDK, "add socket server err, ret=%{public}d", ret);
940         return ret;
941     }
942     ret = ServerIpcCreateSessionServer(pkgName, sessionName);
943     if (ret == SOFTBUS_SERVER_NAME_REPEATED) {
944         TRANS_LOGD(TRANS_SDK, "ok, SocketServer is already created in server");
945         return SOFTBUS_OK;
946     } else if (ret != SOFTBUS_OK) {
947         SocketServerStateUpdate(newSessionName);
948         TRANS_LOGE(TRANS_SDK, "createSocketServer failed, ret=%{public}d", ret);
949         (void)TryDeleteEmptySessionServer(pkgName, newSessionName);
950         return ret;
951     }
952     TRANS_LOGD(TRANS_SDK, "ok");
953     return SOFTBUS_OK;
954 }
955 
CreateSessionAttributeBySocketInfoTrans(const SocketInfo * info,bool * isEncyptedRawStream)956 static SessionAttribute *CreateSessionAttributeBySocketInfoTrans(const SocketInfo *info, bool *isEncyptedRawStream)
957 {
958     SessionAttribute *tmpAttr = (SessionAttribute *)SoftBusCalloc(sizeof(SessionAttribute));
959     if (tmpAttr == NULL) {
960         TRANS_LOGE(TRANS_SDK, "SoftBusCalloc SessionAttribute failed");
961         return NULL;
962     }
963 
964     *isEncyptedRawStream = false;
965     tmpAttr->fastTransData = NULL;
966     tmpAttr->fastTransDataSize = 0;
967     switch (info->dataType) {
968         case DATA_TYPE_MESSAGE:
969             tmpAttr->dataType = TYPE_MESSAGE;
970             break;
971         case DATA_TYPE_BYTES:
972             tmpAttr->dataType = TYPE_BYTES;
973             break;
974         case DATA_TYPE_FILE:
975             tmpAttr->dataType = TYPE_FILE;
976             break;
977         case DATA_TYPE_RAW_STREAM:
978         case DATA_TYPE_RAW_STREAM_ENCRYPED:
979             tmpAttr->dataType = TYPE_STREAM;
980             tmpAttr->attr.streamAttr.streamType = RAW_STREAM;
981             *isEncyptedRawStream = (info->dataType == DATA_TYPE_RAW_STREAM_ENCRYPED);
982             break;
983         case DATA_TYPE_VIDEO_STREAM:
984             tmpAttr->dataType = TYPE_STREAM;
985             tmpAttr->attr.streamAttr.streamType = COMMON_VIDEO_STREAM;
986             break;
987         case DATA_TYPE_AUDIO_STREAM:
988             tmpAttr->dataType = TYPE_STREAM;
989             tmpAttr->attr.streamAttr.streamType = COMMON_AUDIO_STREAM;
990             break;
991         case DATA_TYPE_SLICE_STREAM:
992             tmpAttr->dataType = TYPE_STREAM;
993             tmpAttr->attr.streamAttr.streamType = VIDEO_SLICE_STREAM;
994             break;
995         default:
996             // The socket used for listening does not require setting the data type
997             break;
998     }
999     return tmpAttr;
1000 }
1001 
ClientAddSocket(const SocketInfo * info,int32_t * sessionId)1002 int32_t ClientAddSocket(const SocketInfo *info, int32_t *sessionId)
1003 {
1004     if (info == NULL || sessionId == NULL) {
1005         TRANS_LOGE(TRANS_SDK, "ClientAddSocket invalid param");
1006         return SOFTBUS_INVALID_PARAM;
1007     }
1008 
1009     bool isEncyptedRawStream = false;
1010     SessionAttribute *tmpAttr = CreateSessionAttributeBySocketInfoTrans(info, &isEncyptedRawStream);
1011     if (tmpAttr == NULL) {
1012         TRANS_LOGE(TRANS_SDK, "Create SessionAttribute failed");
1013         return SOFTBUS_MALLOC_ERR;
1014     }
1015 
1016     SessionParam param = {
1017         .sessionName = info->name != NULL ? info->name : "",
1018         .peerSessionName = info->peerName != NULL ? info->peerName : "",
1019         .peerDeviceId = info->peerNetworkId != NULL ? info->peerNetworkId : "",
1020         .groupId = "reserved",
1021         .actionId = INVALID_ACTION_ID,
1022         .attr = tmpAttr,
1023     };
1024 
1025     SessionEnableStatus isEnabled = ENABLE_STATUS_INIT;
1026     int32_t ret = ClientAddSocketSession(&param, isEncyptedRawStream, sessionId, &isEnabled);
1027     if (ret != SOFTBUS_OK) {
1028         SoftBusFree(tmpAttr);
1029         if (ret == SOFTBUS_TRANS_SESSION_REPEATED) {
1030             TRANS_LOGI(TRANS_SDK, "socket already create");
1031             return SOFTBUS_OK;
1032         }
1033         TRANS_LOGE(TRANS_SDK, "add socket err: ret=%{public}d", ret);
1034         return ret;
1035     }
1036     SoftBusFree(tmpAttr);
1037     return SOFTBUS_OK;
1038 }
1039 
IsValidSocketListener(const ISocketListener * listener,bool isListenSocket)1040 static bool IsValidSocketListener(const ISocketListener *listener, bool isListenSocket)
1041 {
1042     if (listener == NULL || listener->OnShutdown == NULL) {
1043         TRANS_LOGE(TRANS_SDK, "listener is null or OnShutdown is null");
1044         return false;
1045     }
1046 
1047     if (isListenSocket && listener->OnBind == NULL) {
1048         TRANS_LOGE(TRANS_SDK, "no OnBind callback function of listen socket");
1049         return false;
1050     }
1051 
1052     return true;
1053 }
1054 
IsValidAsyncBindSocketListener(const ISocketListener * listener,bool isAsync)1055 static bool IsValidAsyncBindSocketListener(const ISocketListener *listener, bool isAsync)
1056 {
1057     if (isAsync && (listener->OnBind == NULL)) {
1058         TRANS_LOGE(TRANS_SDK, "no OnBind callback function of async bind");
1059         return false;
1060     }
1061     if (isAsync && (listener->OnError == NULL)) {
1062         TRANS_LOGE(TRANS_SDK, "no onError callback function of async bind");
1063         return false;
1064     }
1065     return true;
1066 }
1067 
GetMaxIdleTimeout(const QosTV * qos,uint32_t qosCount,uint32_t * maxIdleTimeout)1068 static int32_t GetMaxIdleTimeout(const QosTV *qos, uint32_t qosCount, uint32_t *maxIdleTimeout)
1069 {
1070 #define TRANS_DEFAULT_MAX_IDLE_TIMEOUT 0
1071     int32_t tmpIdleTime = 0;
1072     int32_t ret = GetQosValue(qos, qosCount, QOS_TYPE_MAX_IDLE_TIMEOUT, &tmpIdleTime, TRANS_DEFAULT_MAX_IDLE_TIMEOUT);
1073     if (ret != SOFTBUS_OK) {
1074         TRANS_LOGE(TRANS_SDK, "get maximum idle time failed, ret=%{public}d", ret);
1075         return ret;
1076     }
1077 
1078     if (tmpIdleTime < 0) {
1079         TRANS_LOGE(TRANS_SDK, "invalid maximum idle time, maxIdleTimeout=%{public}d", tmpIdleTime);
1080         return SOFTBUS_INVALID_PARAM;
1081     }
1082 
1083     *maxIdleTimeout = (uint32_t)tmpIdleTime;
1084     return SOFTBUS_OK;
1085 }
1086 
CheckSessionCancelState(int32_t socket)1087 static int32_t CheckSessionCancelState(int32_t socket)
1088 {
1089     SocketLifecycleData lifecycle;
1090     (void)memset_s(&lifecycle, sizeof(SocketLifecycleData), 0, sizeof(SocketLifecycleData));
1091     int32_t ret = GetSocketLifecycleAndSessionNameBySessionId(socket, NULL, &lifecycle);
1092     if (ret != SOFTBUS_OK) {
1093         TRANS_LOGE(TRANS_SDK, "get socket state failed, socket=%{public}d failed, ret=%{public}d", socket, ret);
1094         return ret;
1095     }
1096     if (lifecycle.sessionState == SESSION_STATE_CANCELLING) {
1097         TRANS_LOGW(TRANS_SDK, "This socket already in cancelling state. socket=%{public}d", socket);
1098         int32_t channelId = INVALID_CHANNEL_ID;
1099         int32_t type = CHANNEL_TYPE_BUTT;
1100         ret = ClientGetChannelBySessionId(socket, &channelId, &type, NULL);
1101         if (ret != SOFTBUS_OK) {
1102             TRANS_LOGE(TRANS_SDK, "get channel by socket=%{public}d failed, ret=%{public}d", socket, ret);
1103         }
1104         ret = ClientTransCloseChannel(channelId, type);
1105         if (ret != SOFTBUS_OK) {
1106             TRANS_LOGE(TRANS_SDK, "close channel err: ret=%{public}d, channelId=%{public}d, channeType=%{public}d", ret,
1107                 channelId, type);
1108         }
1109         return lifecycle.bindErrCode;
1110     }
1111     return SOFTBUS_OK;
1112 }
1113 
ClientBind(int32_t socket,const QosTV qos[],uint32_t qosCount,const ISocketListener * listener,bool isAsync)1114 int32_t ClientBind(int32_t socket, const QosTV qos[], uint32_t qosCount, const ISocketListener *listener, bool isAsync)
1115 {
1116     if (!IsValidSessionId(socket) || !IsValidSocketListener(listener, false) ||
1117         !IsValidAsyncBindSocketListener(listener, isAsync) || !IsValidQosInfo(qos, qosCount)) {
1118         TRANS_LOGE(TRANS_SDK, "invalid param");
1119         return SOFTBUS_INVALID_PARAM;
1120     }
1121 
1122     // For rebind, clear the socket state.
1123     int32_t ret = ClientSetSocketState(socket, 0, SESSION_ROLE_INIT);
1124     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, TRANS_SDK, "init session role failed, ret=%{public}d", ret);
1125     ret = SetSessionStateBySessionId(socket, SESSION_STATE_INIT, 0);
1126     TRANS_CHECK_AND_RETURN_RET_LOGE(
1127         ret == SOFTBUS_OK, ret, TRANS_SDK, "init session state failed, ret=%{public}d", ret);
1128 
1129     ret = ClientSetListenerBySessionId(socket, listener, false);
1130     TRANS_CHECK_AND_RETURN_RET_LOGE(
1131         ret == SOFTBUS_OK, ret, TRANS_SDK, "set listener by socket=%{public}d failed, ret=%{public}d", socket, ret);
1132 
1133     uint32_t maxIdleTimeout = 0;
1134     ret = GetMaxIdleTimeout(qos, qosCount, &maxIdleTimeout);
1135     TRANS_CHECK_AND_RETURN_RET_LOGE(
1136         ret == SOFTBUS_OK, ret, TRANS_SDK, "get maximum idle time failed, ret=%{public}d", ret);
1137 
1138     ret = SetSessionIsAsyncById(socket, isAsync);
1139     TRANS_CHECK_AND_RETURN_RET_LOGE(
1140         ret == SOFTBUS_OK, ret, TRANS_SDK, "set session is async failed, ret=%{public}d", ret);
1141 
1142     TransInfo transInfo;
1143     ret = ClientIpcOpenSession(socket, qos, qosCount, &transInfo, isAsync);
1144     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, TRANS_SDK, "open session failed, ret=%{public}d", ret);
1145 
1146     if (!isAsync) {
1147         ret = CheckSessionCancelState(socket);
1148         TRANS_CHECK_AND_RETURN_RET_LOGE(
1149             ret == SOFTBUS_OK, ret, TRANS_SDK, "check session cancel state failed, ret=%{public}d", ret);
1150         ret = ClientWaitSyncBind(socket);
1151         TRANS_CHECK_AND_RETURN_RET_LOGE(
1152             ret == SOFTBUS_OK, ret, TRANS_SDK, "ClientWaitSyncBind err, ret=%{public}d", ret);
1153         (void)SetSessionStateBySessionId(socket, SESSION_STATE_CALLBACK_FINISHED, 0);
1154     }
1155     ret = ClientSetSocketState(socket, maxIdleTimeout, SESSION_ROLE_CLIENT);
1156     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, TRANS_SDK, "set session role failed, ret=%{public}d", ret);
1157 
1158     if (!isAsync) {
1159         (void)ClientGetChannelBySessionId(socket, &(transInfo.channelId), &(transInfo.channelType), NULL);
1160         TRANS_LOGI(TRANS_SDK, "Bind ok: socket=%{public}d, channelId=%{public}d, channelType=%{public}d", socket,
1161             transInfo.channelId, transInfo.channelType);
1162     } else {
1163         TRANS_LOGI(TRANS_SDK, "Bind async ok: socket=%{public}d", socket);
1164     }
1165     return SOFTBUS_OK;
1166 }
1167 
ClientListen(int32_t socket,const QosTV qos[],uint32_t qosCount,const ISocketListener * listener)1168 int32_t ClientListen(int32_t socket, const QosTV qos[], uint32_t qosCount, const ISocketListener *listener)
1169 {
1170     if (!IsValidSocketListener(listener, true) || !IsValidQosInfo(qos, qosCount)) {
1171         TRANS_LOGE(TRANS_SDK, "invalid param");
1172         return SOFTBUS_INVALID_PARAM;
1173     }
1174 
1175     int32_t ret = ClientSetListenerBySessionId(socket, listener, true);
1176     if (ret != SOFTBUS_OK) {
1177         TRANS_LOGE(TRANS_SDK, "set listener by socket=%{public}d failed. ret=%{public}d", socket, ret);
1178         return ret;
1179     }
1180 
1181     uint32_t maxIdleTimeout = 0;
1182     ret = GetMaxIdleTimeout(qos, qosCount, &maxIdleTimeout);
1183     if (ret != SOFTBUS_OK) {
1184         TRANS_LOGE(TRANS_SDK, "get maximum idle time failed, ret=%{public}d", ret);
1185         return ret;
1186     }
1187 
1188     ret = ClientSetSocketState(socket, maxIdleTimeout, SESSION_ROLE_SERVER);
1189     if (ret != SOFTBUS_OK) {
1190         TRANS_LOGE(TRANS_SDK, "set session role failed. ret=%{public}d", ret);
1191         return ret;
1192     }
1193 
1194     TRANS_LOGD(TRANS_SDK, "Listen ok: socket=%{public}d", socket);
1195     return SOFTBUS_OK;
1196 }
1197 
ClientShutdown(int32_t socket,int32_t cancelReason)1198 void ClientShutdown(int32_t socket, int32_t cancelReason)
1199 {
1200     if (!IsValidSessionId(socket)) {
1201         TRANS_LOGE(TRANS_SDK, "invalid param");
1202         return;
1203     }
1204 
1205     SocketLifecycleData lifecycle;
1206     (void)memset_s(&lifecycle, sizeof(SocketLifecycleData), 0, sizeof(SocketLifecycleData));
1207     char sessioName[SESSION_NAME_SIZE_MAX] = { 0 };
1208     int32_t ret = GetSocketLifecycleAndSessionNameBySessionId(socket, sessioName, &lifecycle);
1209     if (ret != SOFTBUS_OK) {
1210         TRANS_LOGE(TRANS_SDK, "get socket state failed, socket=%{public}d failed, ret=%{public}d", socket, ret);
1211         return;
1212     }
1213     if (lifecycle.sessionState == SESSION_STATE_CANCELLING &&
1214         lifecycle.bindErrCode == SOFTBUS_TRANS_STOP_BIND_BY_CANCEL) {
1215         TRANS_LOGW(TRANS_SDK, "This socket already in cancelling state. socket=%{public}d", socket);
1216         return;
1217     }
1218     SetSessionStateBySessionId(socket, SESSION_STATE_CANCELLING, cancelReason);
1219     if (lifecycle.sessionState == SESSION_STATE_INIT) {
1220         TRANS_LOGI(TRANS_SDK, "This socket state is init, socket=%{public}d", socket);
1221     } else if (lifecycle.sessionState == SESSION_STATE_OPENING) {
1222         TRANS_LOGI(TRANS_SDK, "This socket state is opening, socket=%{public}d", socket);
1223         int32_t ret = ServerIpcCloseChannel(sessioName, socket, CHANNEL_TYPE_UNDEFINED);
1224         if (ret != SOFTBUS_OK) {
1225             TRANS_LOGE(TRANS_SDK, "Call sa delete socket failed: ret=%{public}d", ret);
1226         }
1227         ret = ClientSignalSyncBind(socket, 0);
1228         if (ret != SOFTBUS_OK) {
1229             TRANS_LOGE(TRANS_SDK, "sync signal bind failed, ret=%{public}d, socket=%{public}d", ret, socket);
1230         }
1231     } else if (lifecycle.sessionState == SESSION_STATE_OPENED ||
1232         lifecycle.sessionState == SESSION_STATE_CALLBACK_FINISHED) {
1233         if (lifecycle.sessionState == SESSION_STATE_OPENED) {
1234             TRANS_LOGI(TRANS_SDK, "This socket state is opened, socket=%{public}d", socket);
1235             CheckSessionIsOpened(socket, true);
1236         }
1237         TRANS_LOGI(TRANS_SDK, "This socket state is callback finish, socket=%{public}d", socket);
1238         int32_t channelId = INVALID_CHANNEL_ID;
1239         int32_t type = CHANNEL_TYPE_BUTT;
1240         ret = ClientGetChannelBySessionId(socket, &channelId, &type, NULL);
1241         if (ret != SOFTBUS_OK) {
1242             TRANS_LOGE(TRANS_SDK, "get channel by socket=%{public}d failed, ret=%{public}d", socket, ret);
1243         } else {
1244             AddSessionStateClosing();
1245         }
1246         ret = ClientTransCloseChannel(channelId, type);
1247         if (ret != SOFTBUS_OK) {
1248             TRANS_LOGE(TRANS_SDK, "close channel err: ret=%{public}d, channelId=%{public}d, channeType=%{public}d", ret,
1249                 channelId, type);
1250         }
1251         if (lifecycle.sessionState == SESSION_STATE_OPENED) {
1252             (void)ClientSignalSyncBind(socket, cancelReason);
1253         }
1254     }
1255     if (cancelReason == SOFTBUS_TRANS_STOP_BIND_BY_TIMEOUT) {
1256         SetSessionInitInfoById(socket);
1257         TRANS_LOGI(TRANS_SDK, "Bind timeout Shutdown ok, no delete socket: socket=%{public}d", socket);
1258         return;
1259     }
1260     (void)ClientDeleteSocketSession(socket);
1261 
1262     TRANS_LOGI(TRANS_SDK, "Shutdown ok: socket=%{public}d", socket);
1263 }
1264 
GetSocketMtuSize(int32_t socket,uint32_t * mtuSize)1265 int32_t GetSocketMtuSize(int32_t socket, uint32_t *mtuSize)
1266 {
1267     if (!IsValidSessionId(socket) || mtuSize == NULL) {
1268         TRANS_LOGE(TRANS_SDK, "invalid param");
1269         return SOFTBUS_INVALID_PARAM;
1270     }
1271 
1272     int32_t channelId = INVALID_CHANNEL_ID;
1273     int32_t type = CHANNEL_TYPE_BUTT;
1274     SessionEnableStatus enableStatus = ENABLE_STATUS_INIT;
1275     int32_t ret = ClientGetChannelBySessionId(socket, &channelId, &type, &enableStatus);
1276     if (ret != SOFTBUS_OK) {
1277         TRANS_LOGE(TRANS_SDK, "get channel by socket=%{public}d failed, ret=%{public}d.", socket, ret);
1278         return ret;
1279     }
1280 
1281     if (enableStatus != ENABLE_STATUS_SUCCESS) {
1282         TRANS_LOGI(TRANS_SDK, "socket not enable");
1283         return SOFTBUS_TRANS_SESSION_NO_ENABLE;
1284     }
1285 
1286     uint32_t dataConfig = INVALID_DATA_CONFIG;
1287     if (ClientGetDataConfigByChannelId(channelId, type, &dataConfig) != SOFTBUS_OK) {
1288         TRANS_LOGE(TRANS_SDK, "get config by channelId=%{public}d failed", channelId);
1289         return SOFTBUS_GET_CONFIG_VAL_ERR;
1290     }
1291 
1292     *mtuSize = dataConfig;
1293     TRANS_LOGI(TRANS_SDK, "get mtuSize success, socket=%{public}d, mtu=%{public}" PRIu32, socket, *mtuSize);
1294     return SOFTBUS_OK;
1295 }
1296 
ClientDfsBind(int32_t socket,const ISocketListener * listener)1297 int32_t ClientDfsBind(int32_t socket, const ISocketListener *listener)
1298 {
1299     if (!IsValidSessionId(socket) || !IsValidSocketListener(listener, false)) {
1300         TRANS_LOGE(TRANS_SDK, "invalid param");
1301         return SOFTBUS_INVALID_PARAM;
1302     }
1303 
1304     int32_t ret = ClientSetListenerBySessionId(socket, listener, false);
1305     if (ret != SOFTBUS_OK) {
1306         TRANS_LOGE(TRANS_SDK, "set listener by socket=%{public}d failed, ret=%{public}d", socket, ret);
1307         return ret;
1308     }
1309 
1310     ret = SetSessionIsAsyncById(socket, false);
1311     TRANS_CHECK_AND_RETURN_RET_LOGE(
1312         ret == SOFTBUS_OK, ret, TRANS_SDK, "set session is async failed, ret=%{public}d", ret);
1313     TransInfo transInfo;
1314     ret = ClientDfsIpcOpenSession(socket, &transInfo);
1315     if (ret != SOFTBUS_OK) {
1316         TRANS_LOGE(TRANS_SDK, "open session failed, ret=%{public}d", ret);
1317         return ret;
1318     }
1319 
1320     ret = ClientSetChannelBySessionId(socket, &transInfo);
1321     TRANS_CHECK_AND_RETURN_RET_LOGE(
1322         ret == SOFTBUS_OK, ret, TRANS_SDK, "set channel by socket=%{public}d failed, ret=%{public}d", socket, ret);
1323     ret = SetSessionStateBySessionId(socket, SESSION_STATE_OPENED, 0);
1324     TRANS_CHECK_AND_RETURN_RET_LOGE(
1325         ret == SOFTBUS_OK, ret, TRANS_SDK, "set session state failed socket=%{public}d, ret=%{public}d", socket, ret);
1326     ret = ClientWaitSyncBind(socket);
1327     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, TRANS_SDK, "ClientWaitSyncBind err, ret=%{public}d", ret);
1328 
1329     ret = ClientSetSocketState(socket, 0, SESSION_ROLE_CLIENT);
1330     TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, TRANS_SDK, "set session role failed, ret=%{public}d", ret);
1331     TRANS_LOGI(TRANS_SDK, "DfsBind ok: socket=%{public}d, channelId=%{public}d, channelType=%{public}d", socket,
1332         transInfo.channelId, transInfo.channelType);
1333     return SOFTBUS_OK;
1334 }
1335