diff --git a/services/implementation/include/authentication_v2/dm_auth_state.h b/services/implementation/include/authentication_v2/dm_auth_state.h index 0eae068149885bf8a5c702e30f140cd64a1c5721..f1857b8f1698cd3aed6b0b43f33843aedba4f2d4 100644 --- a/services/implementation/include/authentication_v2/dm_auth_state.h +++ b/services/implementation/include/authentication_v2/dm_auth_state.h @@ -176,6 +176,7 @@ public: static void DeleteAclAndSk(std::shared_ptr context, const DistributedDeviceProfile::AccessControlProfile &profile); void GetPeerDeviceId(std::shared_ptr context, std::string &peerDeviceId); + void JoinLnn(std::shared_ptr context); protected: bool NeedReqUserConfirm(std::shared_ptr context); bool NeedAgreeAcl(std::shared_ptr context); diff --git a/services/implementation/include/dependency/softbus/softbus_connector.h b/services/implementation/include/dependency/softbus/softbus_connector.h index be6e0468b7c5ca4dd2ba25a8a2c4c6001c39856a..3f3a102941875631243bd20cab736b30a8198d01 100644 --- a/services/implementation/include/dependency/softbus/softbus_connector.h +++ b/services/implementation/include/dependency/softbus/softbus_connector.h @@ -86,12 +86,13 @@ public: * @tc.desc: join lnn by session id * @tc.type: FUNC */ - static void JoinLnnByHml(int32_t sessionId, int32_t sessionKeyId, int32_t remoteSessionKeyId); + static void JoinLnnByHml(int32_t sessionId, int32_t sessionKeyId, int32_t remoteSessionKeyId, + bool isForceJoin = false); static void JoinLnn(const std::string &deviceId, const std::string &remoteUdidHash); static void JoinLNNBySkId(int32_t sessionId, int32_t sessionKeyId, int32_t remoteSessionKeyId, - std::string udid, std::string udidHash); + std::string udid, std::string udidHash, bool isForceJoin = false); /** * @tc.name: SoftbusConnector::RegisterConnectorCallback diff --git a/services/implementation/src/authentication_v2/auth_stages/auth_acl.cpp b/services/implementation/src/authentication_v2/auth_stages/auth_acl.cpp index ca8c677f5962841b5bcc7daa8fb7b4134b57d52d..d6d13bfc97b5c14cbd15aa17988e683cba51a894 100644 --- a/services/implementation/src/authentication_v2/auth_stages/auth_acl.cpp +++ b/services/implementation/src/authentication_v2/auth_stages/auth_acl.cpp @@ -179,20 +179,7 @@ int32_t AuthSrcDataSyncState::Action(std::shared_ptr context) bool isNeedJoinLnn = context->softbusConnector->CheckIsNeedJoinLnn(peerDeviceId, context->accessee.addr); // Trigger networking if ((!context->accesser.isOnline || isNeedJoinLnn) && context->isNeedJoinLnn) { - if (context->connSessionType == CONN_SESSION_TYPE_HML) { - context->softbusConnector->JoinLnnByHml(context->sessionId, context->accesser.transmitSessionKeyId, - context->accessee.transmitSessionKeyId); - } else { - char udidHashTmp[DM_MAX_DEVICE_ID_LEN] = {0}; - if (Crypto::GetUdidHash(context->accessee.deviceId, reinterpret_cast(udidHashTmp)) != DM_OK) { - LOGE("AuthSrcDataSyncState joinLnn get udidhash by udid: %{public}s failed", - GetAnonyString(context->accessee.deviceId).c_str()); - return ERR_DM_FAILED; - } - std::string peerUdidHash = std::string(udidHashTmp); - context->softbusConnector->JoinLNNBySkId(context->sessionId, context->accesser.transmitSessionKeyId, - context->accessee.transmitSessionKeyId, context->accessee.addr, peerUdidHash); - } + JoinLnn(context); } context->reason = DM_OK; context->reply = DM_OK; @@ -260,20 +247,7 @@ int32_t AuthSrcFinishState::Action(std::shared_ptr context) bool isNeedJoinLnn = context->softbusConnector->CheckIsNeedJoinLnn(peerDeviceId, context->accessee.addr); // Trigger networking if (context->reason == DM_BIND_TRUST_TARGET && (!context->accesser.isOnline || isNeedJoinLnn)) { - if (context->connSessionType == CONN_SESSION_TYPE_HML) { - context->softbusConnector->JoinLnnByHml(context->sessionId, context->accesser.transmitSessionKeyId, - context->accessee.transmitSessionKeyId); - } else { - char udidHashTmp[DM_MAX_DEVICE_ID_LEN] = {0}; - if (Crypto::GetUdidHash(context->accessee.deviceId, reinterpret_cast(udidHashTmp)) != DM_OK) { - LOGE("AuthSrcDataSyncState joinLnn get udidhash by udid: %{public}s failed", - GetAnonyString(context->accessee.deviceId).c_str()); - return ERR_DM_FAILED; - } - std::string peerUdidHash = std::string(udidHashTmp); - context->softbusConnector->JoinLNNBySkId(context->sessionId, context->accesser.transmitSessionKeyId, - context->accessee.transmitSessionKeyId, context->accessee.addr, peerUdidHash); - } + JoinLnn(context); } LOGI("AuthSrcFinishState::Action ok"); std::shared_ptr tempContext = context; diff --git a/services/implementation/src/authentication_v2/dm_auth_state.cpp b/services/implementation/src/authentication_v2/dm_auth_state.cpp index c51087201146cd1aaff624fb66d3d11b293b5dcc..a8da668324b9563fbbd500f756a8933fbf9f05ef 100644 --- a/services/implementation/src/authentication_v2/dm_auth_state.cpp +++ b/services/implementation/src/authentication_v2/dm_auth_state.cpp @@ -971,5 +971,27 @@ void DmAuthState::RemoveTokenIdsFromCredential(std::shared_ptr co } context->hiChainAuthConnector->UpdateCredential(credId, access.userId, appList); } + +void DmAuthState::JoinLnn(std::shared_ptr context) +{ + CHECK_NULL_VOID(context); + CHECK_NULL_VOID(context->softbusConnector); + bool isForceJoin = false; + if (!context->accesser.isOnline) { + LOGI("The remote device is offline."); + isForceJoin = true; + } + if (context->connSessionType == CONN_SESSION_TYPE_HML) { + context->softbusConnector->JoinLnnByHml(context->sessionId, context->accesser.transmitSessionKeyId, + context->accessee.transmitSessionKeyId, isForceJoin); + } else { + char udidHashTmp[DM_MAX_DEVICE_ID_LEN] = {0}; + if (Crypto::GetUdidHash(context->accessee.deviceId, reinterpret_cast(udidHashTmp)) == DM_OK) { + std::string peerUdidHash = std::string(udidHashTmp); + context->softbusConnector->JoinLNNBySkId(context->sessionId, context->accesser.transmitSessionKeyId, + context->accessee.transmitSessionKeyId, context->accessee.addr, peerUdidHash, isForceJoin); + } + } +} } // namespace DistributedHardware } // namespace OHOS diff --git a/services/implementation/src/dependency/softbus/softbus_connector.cpp b/services/implementation/src/dependency/softbus/softbus_connector.cpp index 90606a916a10fd09fe3239f4c3b031ef976a5b52..ea2ddcb5cf19af81908d75871e33f114d3a6b43a 100644 --- a/services/implementation/src/dependency/softbus/softbus_connector.cpp +++ b/services/implementation/src/dependency/softbus/softbus_connector.cpp @@ -318,7 +318,7 @@ void SoftbusConnector::JoinLnn(const std::string &deviceId, const std::string &r } void SoftbusConnector::JoinLNNBySkId(int32_t sessionId, int32_t sessionKeyId, int32_t remoteSessionKeyId, - std::string udid, std::string udidHash) + std::string udid, std::string udidHash, bool isForceJoin) { LOGI("start, JoinLNNBySkId sessionId: %{public}d, udid: %{public}s.", sessionId, GetAnonyString(udid).c_str()); std::string connectAddr; @@ -346,13 +346,14 @@ void SoftbusConnector::JoinLNNBySkId(int32_t sessionId, int32_t sessionKeyId, in addrInfo->deviceKeyId.localDeviceKeyId = 0; // 总线修改后适配 addrInfo->deviceKeyId.remoteDeviceKeyId = 0; // 总线修改后适配 } - int32_t ret = ::JoinLNN(DM_PKG_NAME, addrInfo.get(), OnSoftbusJoinLNNResult, false); + int32_t ret = ::JoinLNN(DM_PKG_NAME, addrInfo.get(), OnSoftbusJoinLNNResult, isForceJoin); if (ret != DM_OK) { LOGE("[SOFTBUS]JoinLNNBySkId failed, ret: %{public}d.", ret); } } -void SoftbusConnector::JoinLnnByHml(int32_t sessionId, int32_t sessionKeyId, int32_t remoteSessionKeyId) +void SoftbusConnector::JoinLnnByHml(int32_t sessionId, int32_t sessionKeyId, int32_t remoteSessionKeyId, + bool isForceJoin) { LOGI("start, JoinLnnByHml sessionId: %{public}d.", sessionId); ConnectionAddr addrInfo; @@ -367,7 +368,7 @@ void SoftbusConnector::JoinLnnByHml(int32_t sessionId, int32_t sessionKeyId, int addrInfo.deviceKeyId.localDeviceKeyId = 0; addrInfo.deviceKeyId.remoteDeviceKeyId = 0; } - int32_t ret = ::JoinLNN(DM_PKG_NAME, &addrInfo, OnSoftbusJoinLNNResult, false); + int32_t ret = ::JoinLNN(DM_PKG_NAME, &addrInfo, OnSoftbusJoinLNNResult, isForceJoin); if (ret != DM_OK) { LOGE("[SOFTBUS]JoinLNN failed, ret: %{public}d.", ret); }