From 5eea590da44f1b0fcf0a3a39a8987f467c01a5b9 Mon Sep 17 00:00:00 2001 From: gouwenbo Date: Thu, 18 Apr 2024 16:59:54 +0800 Subject: [PATCH] fix: check GetLaneManager func and sdk thread dead clear socket channel info Signed-off-by: gouwenbo --- core/frame/small/init/src/trans_server_stub.c | 4 ++ .../standard/init/src/softbus_server_stub.cpp | 4 ++ .../common/src/trans_channel_common.c | 16 ++++-- .../common/src/trans_lane_pending_ctl.c | 46 ++++++++++++----- .../manager/include/trans_lane_manager.h | 2 + .../manager/src/trans_lane_manager.c | 49 ++++++++++++++++--- .../src/client_trans_session_callback.c | 18 ++++--- .../src/client_trans_session_service.c | 18 ++----- .../trans_lane_manager_test.cpp | 5 ++ 9 files changed, 119 insertions(+), 43 deletions(-) diff --git a/core/frame/small/init/src/trans_server_stub.c b/core/frame/small/init/src/trans_server_stub.c index 0afeffe28..bef5363e1 100644 --- a/core/frame/small/init/src/trans_server_stub.c +++ b/core/frame/small/init/src/trans_server_stub.c @@ -277,6 +277,10 @@ int32_t ServerCloseChannel(IpcIo *req, IpcIo *reply) ReadInt32(req, &channelType); if (channelType == CHANNEL_TYPE_UNDEFINED) { sessionName = (const char*)ReadString(req, &size); + if (sessionName == NULL) { + TRANS_LOGE(TRANS_CTRL, "ServerCloseChannel sessionName is null"); + return SOFTBUS_IPC_ERR; + } } ret = TransCloseChannel(sessionName, channelId, channelType); diff --git a/core/frame/standard/init/src/softbus_server_stub.cpp b/core/frame/standard/init/src/softbus_server_stub.cpp index bae6e8b48..3e784e6ba 100644 --- a/core/frame/standard/init/src/softbus_server_stub.cpp +++ b/core/frame/standard/init/src/softbus_server_stub.cpp @@ -781,6 +781,10 @@ int32_t SoftBusServerStub::CloseChannelInner(MessageParcel &data, MessageParcel pid_t callingPid = OHOS::IPCSkeleton::GetCallingPid(); if (channelType == CHANNEL_TYPE_UNDEFINED) { sessionName = data.ReadCString(); + if (sessionName == nullptr) { + COMM_LOGE(COMM_SVC, "CloseChannelInner get param failed!"); + return SOFTBUS_IPC_ERR; + } int32_t ret = TransGetAndComparePidBySession(callingPid, sessionName, channelId); if (ret != SOFTBUS_OK) { COMM_LOGE(COMM_SVC, "Pid can not close channel, pid = %{public}d, sessionId = %{public}d, ret = %{public}d", diff --git a/core/transmission/trans_channel/common/src/trans_channel_common.c b/core/transmission/trans_channel/common/src/trans_channel_common.c index 22784227a..d5a85a6ec 100644 --- a/core/transmission/trans_channel/common/src/trans_channel_common.c +++ b/core/transmission/trans_channel/common/src/trans_channel_common.c @@ -342,12 +342,20 @@ static int32_t CancelWaitLaneState(const char *sessionName, int32_t sessionId) ret == SOFTBUS_OK, TRANS_CTRL, ret, "get socket channel lane info failed, ret=%{public}d", ret); TRANS_LOGI(TRANS_CTRL, "wait lane state, sessionId=%{public}d, laneHandle=%{public}u", sessionId, laneHandle); if (isQosLane && laneHandle != 0) { - GetLaneManager()->lnnCancelLane(laneHandle); + TRANS_CHECK_AND_RETURN_RET_LOGE( + GetLaneManager() != NULL, SOFTBUS_TRANS_GET_LANE_INFO_ERR, TRANS_CTRL, "GetLaneManager is null"); + TRANS_CHECK_AND_RETURN_RET_LOGE(GetLaneManager()->lnnCancelLane != NULL, SOFTBUS_TRANS_GET_LANE_INFO_ERR, + TRANS_CTRL, "lnnCancelLane is null"); + ret = GetLaneManager()->lnnCancelLane(laneHandle); + if (ret != SOFTBUS_OK) { + TRANS_LOGE( + TRANS_CTRL, "Cancel lane failed, free lane. laneHandle=%{public}u, ret=%{public}d", laneHandle, ret); + TransFreeLane(laneHandle, isQosLane); + } } if (!isAsync && laneHandle != 0) { TransCancelLaneItemCondByLaneHandle(laneHandle, false, false, SOFTBUS_TRANS_STOP_BIND_BY_CANCEL); } - TransFreeLane(laneHandle, isQosLane); (void)TransDeleteSocketChannelInfoBySession(sessionName, sessionId); return SOFTBUS_OK; } @@ -398,7 +406,7 @@ int32_t TransCommonCloseChannel(const char *sessionName, int32_t channelId, int3 return ret; } -void TransBuildTransOpenChannelStartEvent(TransEventExtra *extra, AppInfo *appInfo, NodeInfo *nodeInfo, int32_t peerRet) +void TransBuildTransOpenChannelStartEvent(TransEventExtra *extra, AppInfo *appInfo, NodeInfo *nodeInfo, int32_t peerRet) { if (extra == NULL || appInfo == NULL || nodeInfo == NULL) { TRANS_LOGE(TRANS_CTRL, "invalid param."); @@ -469,6 +477,8 @@ void TransFreeLane(uint32_t laneHandle, bool isQosLane) TRANS_LOGI(TRANS_CTRL, "Trans free lane laneHandle=%{public}u, isQosLane=%{public}d", laneHandle, isQosLane); if (laneHandle != 0) { if (isQosLane) { + TRANS_CHECK_AND_RETURN_LOGE(GetLaneManager() != NULL, TRANS_CTRL, "GetLaneManager is null"); + TRANS_CHECK_AND_RETURN_LOGE(GetLaneManager()->lnnFreeLane != NULL, TRANS_CTRL, "lnnFreeLane is null"); GetLaneManager()->lnnFreeLane(laneHandle); return; } diff --git a/core/transmission/trans_channel/common/src/trans_lane_pending_ctl.c b/core/transmission/trans_channel/common/src/trans_lane_pending_ctl.c index 0e5f19c8f..f87542bb1 100644 --- a/core/transmission/trans_channel/common/src/trans_lane_pending_ctl.c +++ b/core/transmission/trans_channel/common/src/trans_lane_pending_ctl.c @@ -957,6 +957,10 @@ static int32_t TransAddLaneAllocToPendingAndWaiting(uint32_t laneHandle, const L LaneAllocListener allocListener; allocListener.OnLaneAllocSuccess = TransOnLaneRequestSuccess; allocListener.OnLaneAllocFail = TransOnLaneRequestFail; + TRANS_CHECK_AND_RETURN_RET_LOGE( + GetLaneManager() != NULL, SOFTBUS_TRANS_GET_LANE_INFO_ERR, TRANS_SVC, "GetLaneManager is null"); + TRANS_CHECK_AND_RETURN_RET_LOGE(GetLaneManager()->lnnAllocLane != NULL, SOFTBUS_TRANS_GET_LANE_INFO_ERR, + TRANS_SVC, "lnnAllocLane is null"); ret = GetLaneManager()->lnnAllocLane(laneHandle, allocInfo, &allocListener); if (ret != SOFTBUS_OK) { TRANS_LOGE(TRANS_SVC, "trans request lane failed, ret=%{public}d", ret); @@ -975,6 +979,8 @@ static void CancelLaneOnWaitLaneState(uint32_t laneHandle, bool isQosLane) { TRANS_LOGI(TRANS_SVC, "Cancel lane, laneHandle=%{public}u, isQosLane=%{public}d", laneHandle, isQosLane); if (isQosLane && laneHandle != 0) { + TRANS_CHECK_AND_RETURN_LOGE(GetLaneManager() != NULL, TRANS_SVC, "GetLaneManager is null"); + TRANS_CHECK_AND_RETURN_LOGE(GetLaneManager()->lnnCancelLane != NULL, TRANS_SVC, "lnnCancelLane is null"); int32_t ret = GetLaneManager()->lnnCancelLane(laneHandle); if (ret != SOFTBUS_OK) { TRANS_LOGE( @@ -990,6 +996,10 @@ int32_t TransGetLaneInfoByOption(const LaneRequestOption *requestOption, LaneCon TRANS_LOGE(TRANS_SVC, "get lane info by option param error."); return SOFTBUS_INVALID_PARAM; } + TRANS_CHECK_AND_RETURN_RET_LOGE( + GetLaneManager() != NULL, SOFTBUS_TRANS_GET_LANE_INFO_ERR, TRANS_SVC, "GetLaneManager is null"); + TRANS_CHECK_AND_RETURN_RET_LOGE(GetLaneManager()->lnnGetLaneHandle != NULL, SOFTBUS_TRANS_GET_LANE_INFO_ERR, + TRANS_SVC, "lnnGetLaneHandle is null"); *laneHandle = GetLaneManager()->lnnGetLaneHandle(LANE_TYPE_TRANS); if (TransAddLaneReqToPendingAndWaiting(*laneHandle, requestOption) != SOFTBUS_OK) { TRANS_LOGE(TRANS_SVC, "trans add lane to pending list failed."); @@ -1052,10 +1062,8 @@ int32_t TransGetLaneInfo(const SessionParam *param, LaneConnInfo *connInfo, uint LaneRequestOption requestOption; (void)memset_s(&requestOption, sizeof(LaneRequestOption), 0, sizeof(LaneRequestOption)); int32_t ret = GetRequestOptionBySessionParam(param, &requestOption, isQosLane); - if (ret != SOFTBUS_OK) { - TRANS_LOGE(TRANS_SVC, "get request option failed. laneHandle=%{public}u, ret=%{public}d", *laneHandle, ret); - return ret; - } + TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, TRANS_SVC, + "get request option failed. laneHandle=%{public}u, ret=%{public}d", *laneHandle, ret); TransEventExtra extra; if (!(*isQosLane)) { ret = TransGetLaneInfoByOption(&requestOption, connInfo, laneHandle); @@ -1070,10 +1078,12 @@ int32_t TransGetLaneInfo(const SessionParam *param, LaneConnInfo *connInfo, uint LaneAllocInfo allocInfo; (void)memset_s(&allocInfo, sizeof(LaneAllocInfo), 0, sizeof(LaneAllocInfo)); ret = GetAllocInfoBySessionParam(param, &allocInfo, isQosLane); - if (ret != SOFTBUS_OK) { - TRANS_LOGE(TRANS_SVC, "get alloc Info failed. laneHandle=%{public}u, ret=%{public}d", *laneHandle, ret); - return ret; - } + TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, TRANS_SVC, + "get alloc Info failed. laneHandle=%{public}u, ret=%{public}d", *laneHandle, ret); + TRANS_CHECK_AND_RETURN_RET_LOGE( + GetLaneManager() != NULL, SOFTBUS_TRANS_GET_LANE_INFO_ERR, TRANS_SVC, "GetLaneManager is null"); + TRANS_CHECK_AND_RETURN_RET_LOGE(GetLaneManager()->lnnGetLaneHandle != NULL, + SOFTBUS_TRANS_GET_LANE_INFO_ERR, TRANS_SVC, "lnnGetLaneHandle is null"); *laneHandle = GetLaneManager()->lnnGetLaneHandle(LANE_TYPE_TRANS); TransUpdateSocketChannelLaneInfoBySession( param->sessionName, param->sessionId, *laneHandle, param->isQosLane, param->isAsync); @@ -1094,13 +1104,17 @@ int32_t TransAsyncGetLaneInfoByOption(const SessionParam *param, const LaneReque TRANS_LOGE(TRANS_SVC, "async get lane info param error."); return SOFTBUS_INVALID_PARAM; } + TRANS_CHECK_AND_RETURN_RET_LOGE( + GetLaneManager() != NULL, SOFTBUS_TRANS_GET_LANE_INFO_ERR, TRANS_SVC, "GetLaneManager is null"); + TRANS_CHECK_AND_RETURN_RET_LOGE(GetLaneManager()->lnnGetLaneHandle != NULL, SOFTBUS_TRANS_GET_LANE_INFO_ERR, + TRANS_SVC, "lnnGetLaneHandle is null"); *laneHandle = GetLaneManager()->lnnGetLaneHandle(LANE_TYPE_TRANS); TransUpdateSocketChannelLaneInfoBySession( param->sessionName, param->sessionId, *laneHandle, param->isQosLane, param->isAsync); int32_t ret = TransAddAsyncLaneReqFromPendingList(*laneHandle, param, firstTokenId); if (ret != SOFTBUS_OK) { - TRANS_LOGE(TRANS_SVC, "add laneHandle to pending failed. laneHandle=%{public}u, ret=%{public}d", - *laneHandle, ret); + TRANS_LOGE( + TRANS_SVC, "add laneHandle=%{public}u to async pending list failed, ret=%{public}d", *laneHandle, ret); return ret; } ILaneListener listener; @@ -1130,18 +1144,24 @@ int32_t TransAsyncGetLaneInfoByQos(const SessionParam *param, const LaneAllocInf TRANS_LOGE(TRANS_SVC, "async get lane info param error."); return SOFTBUS_INVALID_PARAM; } + TRANS_CHECK_AND_RETURN_RET_LOGE( + GetLaneManager() != NULL, SOFTBUS_TRANS_GET_LANE_INFO_ERR, TRANS_SVC, "GetLaneManager is null"); + TRANS_CHECK_AND_RETURN_RET_LOGE(GetLaneManager()->lnnGetLaneHandle != NULL, SOFTBUS_TRANS_GET_LANE_INFO_ERR, + TRANS_SVC, "lnnGetLaneHandle is null"); *laneHandle = GetLaneManager()->lnnGetLaneHandle(LANE_TYPE_TRANS); int32_t ret = TransAddAsyncLaneReqFromPendingList(*laneHandle, param, firstTokenId); if (ret != SOFTBUS_OK) { - TRANS_LOGE(TRANS_SVC, "add laneHandle to pending failed. laneHandle=%{public}u, ret=%{public}d", - *laneHandle, ret); + TRANS_LOGE( + TRANS_SVC, "add laneHandle=%{public}u to async pending list failed, ret=%{public}d", *laneHandle, ret); return ret; } TransUpdateSocketChannelLaneInfoBySession( - param->sessionName, param->sessionId, *laneHandle, param->isQosLane, param->isAsync); + param->sessionName, param->sessionId, *laneHandle, param->isQosLane, param->isAsync); LaneAllocListener allocListener; allocListener.OnLaneAllocSuccess = TransOnAsyncLaneSuccess; allocListener.OnLaneAllocFail = TransOnAsyncLaneFail; + TRANS_CHECK_AND_RETURN_RET_LOGE(GetLaneManager()->lnnAllocLane != NULL, SOFTBUS_TRANS_GET_LANE_INFO_ERR, + TRANS_SVC, "lnnAllocLane is null"); ret = GetLaneManager()->lnnAllocLane(*laneHandle, allocInfo, &allocListener); if (ret != SOFTBUS_OK) { TRANS_LOGE(TRANS_SVC, "trans request lane failed, ret=%{public}d", ret); diff --git a/core/transmission/trans_channel/manager/include/trans_lane_manager.h b/core/transmission/trans_channel/manager/include/trans_lane_manager.h index c7819f648..bb93a0691 100644 --- a/core/transmission/trans_channel/manager/include/trans_lane_manager.h +++ b/core/transmission/trans_channel/manager/include/trans_lane_manager.h @@ -65,6 +65,8 @@ int32_t TransDeleteSocketChannelInfoBySession(const char *sessionName, int32_t s int32_t TransDeleteSocketChannelInfoByChannel(int32_t channelId, int32_t channelType); +int32_t TransDeleteSocketChannelInfoByPid(int32_t pid); + int32_t TransSetSocketChannelStateBySession(const char *sessionName, int32_t sessionId, CoreSessionState state); int32_t TransSetSocketChannelStateByChannel(int32_t channelId, int32_t channelType, CoreSessionState state); diff --git a/core/transmission/trans_channel/manager/src/trans_lane_manager.c b/core/transmission/trans_channel/manager/src/trans_lane_manager.c index 410f37c4e..22a86b179 100644 --- a/core/transmission/trans_channel/manager/src/trans_lane_manager.c +++ b/core/transmission/trans_channel/manager/src/trans_lane_manager.c @@ -159,6 +159,8 @@ void TransLaneMgrDeinit(void) LIST_FOR_EACH_ENTRY_SAFE(laneItem, nextLaneItem, &g_channelLaneList->list, TransLaneInfo, node) { ListDelete(&(laneItem->node)); if (laneItem->isQosLane) { + TRANS_CHECK_AND_RETURN_LOGE(GetLaneManager() != NULL, TRANS_CTRL, "GetLaneManager is null"); + TRANS_CHECK_AND_RETURN_LOGE(GetLaneManager()->lnnFreeLane != NULL, TRANS_CTRL, "lnnFreeLane is null"); GetLaneManager()->lnnFreeLane(laneItem->laneHandle); } else { LnnFreeLane(laneItem->laneHandle); @@ -263,6 +265,10 @@ int32_t TransLaneMgrDelLane(int32_t channelId, int32_t channelType) laneItem->channelId, laneItem->channelType); g_channelLaneList->cnt--; if (laneItem->isQosLane) { + TRANS_CHECK_AND_RETURN_RET_LOGE(GetLaneManager() != NULL, SOFTBUS_TRANS_GET_LANE_INFO_ERR, + TRANS_CTRL, "GetLaneManager is null"); + TRANS_CHECK_AND_RETURN_RET_LOGE(GetLaneManager()->lnnFreeLane != NULL, + SOFTBUS_TRANS_GET_LANE_INFO_ERR, TRANS_CTRL, "lnnFreeLane is null"); GetLaneManager()->lnnFreeLane(laneItem->laneHandle); } else { LnnFreeLane(laneItem->laneHandle); @@ -280,6 +286,7 @@ int32_t TransLaneMgrDelLane(int32_t channelId, int32_t channelType) void TransLaneMgrDeathCallback(const char *pkgName, int32_t pid) { + (void)TransDeleteSocketChannelInfoByPid(pid); if (pkgName == NULL || g_channelLaneList == NULL) { TRANS_LOGE(TRANS_INIT, "trans lane manager hasn't init."); return; @@ -298,6 +305,8 @@ void TransLaneMgrDeathCallback(const char *pkgName, int32_t pid) TRANS_LOGI(TRANS_SVC, "death del lane. pkgName=%{public}s, channelId=%{public}d, channelType=%{public}d", pkgName, laneItem->channelId, laneItem->channelType); if (laneItem->isQosLane) { + TRANS_CHECK_AND_RETURN_LOGE(GetLaneManager() != NULL, TRANS_CTRL, "GetLaneManager is null"); + TRANS_CHECK_AND_RETURN_LOGE(GetLaneManager()->lnnFreeLane != NULL, TRANS_CTRL, "lnnFreeLane is null"); GetLaneManager()->lnnFreeLane(laneItem->laneHandle); } else { LnnFreeLane(laneItem->laneHandle); @@ -462,7 +471,7 @@ int32_t TransUpdateSocketChannelInfoBySession( int32_t TransUpdateSocketChannelLaneInfoBySession( const char *sessionName, int32_t sessionId, uint32_t laneHandle, bool isQosLane, bool isAsync) -{ +{ if (sessionName == NULL) { TRANS_LOGE(TRANS_SVC, "Invaild param, sessionName is null"); return SOFTBUS_TRANS_INVALID_SESSION_NAME; @@ -515,14 +524,14 @@ int32_t TransDeleteSocketChannelInfoBySession(const char *sessionName, int32_t s LIST_FOR_EACH_ENTRY_SAFE(socketItem, next, &(g_socketChannelList->list), SocketWithChannelInfo, node) { if (strcmp(socketItem->sessionName, sessionName) == 0 && socketItem->sessionId == sessionId) { ListDelete(&(socketItem->node)); + g_socketChannelList->cnt--; + SoftBusFree(socketItem); + (void)SoftBusMutexUnlock(&(g_socketChannelList->lock)); char *tmpName = NULL; Anonymize(sessionName, &tmpName); TRANS_LOGI(TRANS_CTRL, "delete socket channel info, sessionName=%{public}s, sessionId=%{public}d", - tmpName, socketItem->sessionId); + tmpName, sessionId); AnonymizeFree(tmpName); - g_socketChannelList->cnt--; - SoftBusFree(socketItem); - (void)SoftBusMutexUnlock(&(g_socketChannelList->lock)); return SOFTBUS_OK; } } @@ -546,11 +555,11 @@ int32_t TransDeleteSocketChannelInfoByChannel(int32_t channelId, int32_t channel LIST_FOR_EACH_ENTRY_SAFE(socketItem, next, &(g_socketChannelList->list), SocketWithChannelInfo, node) { if (socketItem->channelId == channelId && socketItem->channelType == channelType) { ListDelete(&(socketItem->node)); - TRANS_LOGI(TRANS_CTRL, "delete socket channel info, channelId=%{public}d, channelType=%{public}d", - channelId, channelType); g_socketChannelList->cnt--; SoftBusFree(socketItem); (void)SoftBusMutexUnlock(&(g_socketChannelList->lock)); + TRANS_LOGI(TRANS_CTRL, "delete socket channel info, channelId=%{public}d, channelType=%{public}d", + channelId, channelType); return SOFTBUS_OK; } } @@ -560,6 +569,32 @@ int32_t TransDeleteSocketChannelInfoByChannel(int32_t channelId, int32_t channel return SOFTBUS_NOT_FIND; } +int32_t TransDeleteSocketChannelInfoByPid(int32_t pid) +{ + if (g_socketChannelList == NULL) { + TRANS_LOGE(TRANS_INIT, "socket info manager hasn't init."); + return SOFTBUS_NO_INIT; + } + if (SoftBusMutexLock(&(g_socketChannelList->lock)) != SOFTBUS_OK) { + TRANS_LOGE(TRANS_SVC, "lock failed"); + return SOFTBUS_LOCK_ERR; + } + SocketWithChannelInfo *socketItem = NULL; + SocketWithChannelInfo *next = NULL; + LIST_FOR_EACH_ENTRY_SAFE(socketItem, next, &(g_socketChannelList->list), SocketWithChannelInfo, node) { + if (socketItem->pid == pid) { + ListDelete(&(socketItem->node)); + g_socketChannelList->cnt--; + SoftBusFree(socketItem); + (void)SoftBusMutexUnlock(&(g_socketChannelList->lock)); + TRANS_LOGI(TRANS_CTRL, "delete socket channel info, pid=%{public}d", pid); + return SOFTBUS_OK; + } + } + (void)SoftBusMutexUnlock(&(g_socketChannelList->lock)); + return SOFTBUS_NOT_FIND; +} + int32_t TransSetSocketChannelStateBySession(const char *sessionName, int32_t sessionId, CoreSessionState state) { if (sessionName == NULL) { diff --git a/sdk/transmission/session/src/client_trans_session_callback.c b/sdk/transmission/session/src/client_trans_session_callback.c index e52abec33..b6ba05960 100644 --- a/sdk/transmission/session/src/client_trans_session_callback.c +++ b/sdk/transmission/session/src/client_trans_session_callback.c @@ -144,7 +144,7 @@ static int32_t TransOnBindFailed(int32_t sessionId, const ISocketListener *socke return SOFTBUS_OK; } -static int32_t handelOnBindSuccess(int32_t sessionId, SessionListenerAdapter sessionCallback, bool isServer) +static int32_t HandleOnBindSuccess(int32_t sessionId, SessionListenerAdapter sessionCallback, bool isServer) { // async bind call back client and server, sync bind only call back server. bool isAsync = true; @@ -165,12 +165,8 @@ static int32_t handelOnBindSuccess(int32_t sessionId, SessionListenerAdapter ses return ret; } -NO_SANITIZE("cfi") int32_t TransOnSessionOpened(const char *sessionName, const ChannelInfo *channel, SessionType flag) +static void AnonymizeLogTransOnSessionOpenedInfo(const char *sessionName, const ChannelInfo *channel, SessionType flag) { - if ((sessionName == NULL) || (channel == NULL)) { - TRANS_LOGW(TRANS_SDK, "Invalid param"); - return SOFTBUS_INVALID_PARAM; - } char *tmpName = NULL; Anonymize(sessionName, &tmpName); TRANS_LOGI(TRANS_SDK, @@ -178,7 +174,15 @@ NO_SANITIZE("cfi") int32_t TransOnSessionOpened(const char *sessionName, const C "isServer=%{public}d, type=%{public}d, crc=%{public}d", tmpName, channel->channelId, channel->channelType, flag, channel->isServer, channel->routeType, channel->crc); AnonymizeFree(tmpName); +} +NO_SANITIZE("cfi") int32_t TransOnSessionOpened(const char *sessionName, const ChannelInfo *channel, SessionType flag) +{ + if ((sessionName == NULL) || (channel == NULL)) { + TRANS_LOGW(TRANS_SDK, "Invalid param"); + return SOFTBUS_INVALID_PARAM; + } + AnonymizeLogTransOnSessionOpenedInfo(sessionName, channel, flag); SessionListenerAdapter sessionCallback; (void)memset_s(&sessionCallback, sizeof(SessionListenerAdapter), 0, sizeof(SessionListenerAdapter)); int32_t ret = ClientGetSessionCallbackAdapterByName(sessionName, &sessionCallback); @@ -211,7 +215,7 @@ NO_SANITIZE("cfi") int32_t TransOnSessionOpened(const char *sessionName, const C } SetSessionStateBySessionId(sessionId, SESSION_STATE_CALLBACK_FINISHED); if (sessionCallback.isSocketListener) { - return handelOnBindSuccess(sessionId, sessionCallback, channel->isServer); + return HandleOnBindSuccess(sessionId, sessionCallback, channel->isServer); } TRANS_LOGI(TRANS_SDK, "trigger session open callback"); if ((sessionCallback.session.OnSessionOpened == NULL) || diff --git a/sdk/transmission/session/src/client_trans_session_service.c b/sdk/transmission/session/src/client_trans_session_service.c index 962291463..4c6cc5ec0 100644 --- a/sdk/transmission/session/src/client_trans_session_service.c +++ b/sdk/transmission/session/src/client_trans_session_service.c @@ -1088,23 +1088,15 @@ int32_t ClientBind(int32_t socket, const QosTV qos[], uint32_t qosCount, const I } if (!isAsync) { ret = ClientSetChannelBySessionId(socket, &transInfo); - if (ret != SOFTBUS_OK) { - TRANS_LOGE(TRANS_SDK, "set channel by socket=%{public}d failed, ret=%{public}d", socket, ret); - return SOFTBUS_TRANS_SESSION_SET_CHANNEL_FAILED; - } + TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, SOFTBUS_TRANS_SESSION_SET_CHANNEL_FAILED, TRANS_SDK, + "set channel by socket=%{public}d failed, ret=%{public}d", socket, ret); SetSessionStateBySessionId(socket, SESSION_STATE_OPENED); ret = CheckSessionIsOpened(socket); - if (ret != SOFTBUS_OK) { - TRANS_LOGE(TRANS_SDK, "CheckSessionIsOpened err, ret=%{public}d", ret); - (void)ClientDeleteSession(socket); - return SOFTBUS_TRANS_SESSION_NO_ENABLE; - } + TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, SOFTBUS_TRANS_SESSION_NO_ENABLE, TRANS_SDK, + "CheckSessionIsOpened err, ret=%{public}d", ret); } ret = ClientSetSocketState(socket, maxIdleTimeout, SESSION_ROLE_CLIENT); - if (ret != SOFTBUS_OK) { - TRANS_LOGE(TRANS_SDK, "set session role failed, ret=%{public}d", ret); - return ret; - } + TRANS_CHECK_AND_RETURN_RET_LOGE(ret == SOFTBUS_OK, ret, TRANS_SDK, "set session role failed, ret=%{public}d", ret); if (!isAsync) { TRANS_LOGI(TRANS_SDK, "Bind ok: socket=%{public}d, channelId=%{public}d, channelType=%{public}d", socket, transInfo.channelId, transInfo.channelType); diff --git a/tests/core/transmission/trans_channel/manager/trans_lane_manager_test/trans_lane_manager_test.cpp b/tests/core/transmission/trans_channel/manager/trans_lane_manager_test/trans_lane_manager_test.cpp index e25ca843b..8f94d04f8 100644 --- a/tests/core/transmission/trans_channel/manager/trans_lane_manager_test/trans_lane_manager_test.cpp +++ b/tests/core/transmission/trans_channel/manager/trans_lane_manager_test/trans_lane_manager_test.cpp @@ -310,10 +310,15 @@ HWTEST_F(TransLaneManagerTest, TransSocketChannelInfoTest001, TestSize.Level1) ret = TransGetSocketChannelStateByChannel(channelId, channelType, &state); EXPECT_EQ(SOFTBUS_OK, ret); EXPECT_EQ(state, CORE_SESSION_STATE_CANCELLING); + int32_t pid = -1; + ret = TransGetPidFromSocketChannelInfoBySession(sessionName, sessionId, &pid); + EXPECT_EQ(pid, 0); ret = TransDeleteSocketChannelInfoByChannel(channelId, channelType); EXPECT_EQ(SOFTBUS_OK, ret); ret = TransDeleteSocketChannelInfoBySession(sessionName, sessionId); EXPECT_EQ(SOFTBUS_NOT_FIND, ret); + ret = TransDeleteSocketChannelInfoByPid(pid); + EXPECT_EQ(SOFTBUS_NOT_FIND, ret); TransSocketLaneMgrDeinit(); ret = TransAddSocketChannelInfo( sessionName, sessionId, INVALID_CHANNEL_ID, CHANNEL_TYPE_BUTT, CORE_SESSION_STATE_INIT); -- Gitee