From 35392cbf6b746428aedacaa0b403a5bdf58e6aac Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E9=9B=B7?= Date: Fri, 11 Jul 2025 11:38:54 +0800 Subject: [PATCH 1/8] add share broadcast MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张雷 --- .../include/device_manager_service_impl.h | 2 +- .../include/device_manager_service_impl_lite.h | 2 +- .../src/device_manager_service_impl.cpp | 3 ++- .../src/device_manager_service_impl_lite.cpp | 3 ++- .../service/include/idevice_manager_service_impl.h | 2 +- services/service/src/device_manager_service.cpp | 7 ++++++- .../UTTest_device_manager_service_impl_first.cpp | 12 ++++++++---- test/unittest/UTTest_device_manager_service_two.cpp | 2 +- .../mock/device_manager_service_impl_mock.cpp | 4 ++-- .../unittest/mock/device_manager_service_impl_mock.h | 4 ++-- 10 files changed, 26 insertions(+), 15 deletions(-) diff --git a/services/implementation/include/device_manager_service_impl.h b/services/implementation/include/device_manager_service_impl.h index 4164ad304..20d8741a9 100644 --- a/services/implementation/include/device_manager_service_impl.h +++ b/services/implementation/include/device_manager_service_impl.h @@ -178,7 +178,7 @@ public: void DeleteAlwaysAllowTimeOut(); void CheckDeleteCredential(const std::string &remoteUdid, int32_t remoteUserId); void HandleCredentialDeleted(const char *credId, const char *credInfo, const std::string &localUdid, - std::string &remoteUdid); + std::string &remoteUdid, bool &isSendBroadCast); void HandleShareUnbindBroadCast(const std::string &credId, const int32_t &userId, const std::string &localUdid); int32_t CheckDeviceInfoPermission(const std::string &localUdid, const std::string &peerDeviceId); int32_t DeleteAcl(const std::string &sessionName, const std::string &localUdid, const std::string &remoteUdid, diff --git a/services/implementation/include/device_manager_service_impl_lite.h b/services/implementation/include/device_manager_service_impl_lite.h index 54ccc4b6b..8ec4d49a2 100644 --- a/services/implementation/include/device_manager_service_impl_lite.h +++ b/services/implementation/include/device_manager_service_impl_lite.h @@ -164,7 +164,7 @@ public: void DeleteAlwaysAllowTimeOut(); void CheckDeleteCredential(const std::string &remoteUdid, int32_t remoteUserId); void HandleCredentialDeleted(const char *credId, const char *credInfo, const std::string &localUdid, - std::string &remoteUdid); + std::string &remoteUdid, bool &isSendBroadCast); void HandleShareUnbindBroadCast(const std::string &credId, const int32_t &userId, const std::string &localUdid); int32_t CheckDeviceInfoPermission(const std::string &localUdid, const std::string &peerDeviceId); void HandleServiceUnBindEvent(int32_t userId, const std::string &remoteUdid, diff --git a/services/implementation/src/device_manager_service_impl.cpp b/services/implementation/src/device_manager_service_impl.cpp index 36dccf96a..614ef0ae6 100644 --- a/services/implementation/src/device_manager_service_impl.cpp +++ b/services/implementation/src/device_manager_service_impl.cpp @@ -2654,7 +2654,7 @@ void DeviceManagerServiceImpl::CheckDeleteCredential(const std::string &remoteUd } void DeviceManagerServiceImpl::HandleCredentialDeleted(const char *credId, const char *credInfo, - const std::string &localUdid, std::string &remoteUdid) + const std::string &localUdid, std::string &remoteUdid, bool &isSendBroadCast) { std::vector profiles = DeviceProfileConnector::GetInstance().GetAccessControlProfile(); @@ -2689,6 +2689,7 @@ void DeviceManagerServiceImpl::HandleCredentialDeleted(const char *credId, const item.GetAccessee().GetAccesseeUserId() == localUserId && item.GetAccesser().GetAccesserUserId() == userId && item.GetAccesser().GetAccesserDeviceId() == remoteUdid)) { + isSendBroadCast = true; DeviceProfileConnector::GetInstance().DeleteAccessControlById(item.GetAccessControlId()); } } diff --git a/services/implementation/src/device_manager_service_impl_lite.cpp b/services/implementation/src/device_manager_service_impl_lite.cpp index 83aa48f44..445f2b070 100644 --- a/services/implementation/src/device_manager_service_impl_lite.cpp +++ b/services/implementation/src/device_manager_service_impl_lite.cpp @@ -331,12 +331,13 @@ int32_t DeviceManagerServiceImpl::ImportAuthCode(const std::string &pkgName, con } void DeviceManagerServiceImpl::HandleCredentialDeleted(const char *credId, const char *credInfo, - const std::string &localUdid, std::string &remoteUdid) + const std::string &localUdid, std::string &remoteUdid, bool &isSendBroadCast) { (void)credId; (void)credInfo; (void)localUdid; (void)remoteUdid; + (void)isSendBroadCast; return; } diff --git a/services/service/include/idevice_manager_service_impl.h b/services/service/include/idevice_manager_service_impl.h index 48a3acbba..949542bed 100644 --- a/services/service/include/idevice_manager_service_impl.h +++ b/services/service/include/idevice_manager_service_impl.h @@ -268,7 +268,7 @@ public: virtual void DeleteAlwaysAllowTimeOut() = 0; virtual void CheckDeleteCredential(const std::string &remoteUdid, int32_t remoteUserId) = 0; virtual void HandleCredentialDeleted(const char *credId, const char *credInfo, const std::string &localUdid, - std::string &remoteUdid) = 0; + std::string &remoteUdid, bool &isSendBroadCast) = 0; virtual void HandleShareUnbindBroadCast(const std::string &credId, const int32_t &userId, const std::string &localUdid) = 0; virtual int32_t CheckDeviceInfoPermission(const std::string &localUdid, const std::string &peerDeviceId) = 0; diff --git a/services/service/src/device_manager_service.cpp b/services/service/src/device_manager_service.cpp index edcb3401c..2cd845b22 100644 --- a/services/service/src/device_manager_service.cpp +++ b/services/service/src/device_manager_service.cpp @@ -3123,11 +3123,16 @@ void DeviceManagerService::HandleCredentialDeleted(const char *credId, const cha return; } std::string remoteUdid = ""; - dmServiceImpl_->HandleCredentialDeleted(credId, credInfo, localUdid, remoteUdid); + bool isSendBroadCast = false; + dmServiceImpl_->HandleCredentialDeleted(credId, credInfo, localUdid, remoteUdid, isSendBroadCast); if (remoteUdid.empty()) { LOGE("HandleCredentialDeleted failed, remoteUdid is empty."); return; } + if (!isSendBroadCast) { + LOGI("HandleCredentialDeleted not need to send broadcast."); + return; + } std::vector peerUdids; peerUdids.emplace_back(remoteUdid); SendShareTypeUnBindBroadCast(credId, MultipleUserConnector::GetCurrentAccountUserID(), peerUdids); diff --git a/test/unittest/UTTest_device_manager_service_impl_first.cpp b/test/unittest/UTTest_device_manager_service_impl_first.cpp index dab94b6c1..2aa3b8ee9 100644 --- a/test/unittest/UTTest_device_manager_service_impl_first.cpp +++ b/test/unittest/UTTest_device_manager_service_impl_first.cpp @@ -212,6 +212,7 @@ HWTEST_F(DeviceManagerServiceImplFirstTest, HandleCredentialDeleted_001, testing const char *credInfo = "invalid_json"; std::string localUdid = "localUdid"; std::string remoteUdid; + bool isSendBroadCast = false; std::vector profiles; @@ -220,7 +221,7 @@ HWTEST_F(DeviceManagerServiceImplFirstTest, HandleCredentialDeleted_001, testing EXPECT_CALL(*deviceProfileConnectorMock_, DeleteAccessControlById(_)) .Times(0); - deviceManagerServiceImpl_->HandleCredentialDeleted(credId, credInfo, localUdid, remoteUdid); + deviceManagerServiceImpl_->HandleCredentialDeleted(credId, credInfo, localUdid, remoteUdid, isSendBroadCast); } HWTEST_F(DeviceManagerServiceImplFirstTest, HandleCredentialDeleted_002, testing::ext::TestSize.Level1) @@ -229,6 +230,7 @@ HWTEST_F(DeviceManagerServiceImplFirstTest, HandleCredentialDeleted_002, testing const char *credInfo = R"({"deviceId": "remoteUdid", "userId": 1})"; std::string localUdid = "localUdid"; std::string remoteUdid; + bool isSendBroadCast = false; std::vector profiles; AccessControlProfile profile; @@ -239,7 +241,7 @@ HWTEST_F(DeviceManagerServiceImplFirstTest, HandleCredentialDeleted_002, testing .WillOnce(Return(profiles)); EXPECT_CALL(*deviceProfileConnectorMock_, DeleteAccessControlById(_)).Times(0); - deviceManagerServiceImpl_->HandleCredentialDeleted(credId, credInfo, localUdid, remoteUdid); + deviceManagerServiceImpl_->HandleCredentialDeleted(credId, credInfo, localUdid, remoteUdid, isSendBroadCast); } HWTEST_F(DeviceManagerServiceImplFirstTest, HandleCredentialDeleted_003, testing::ext::TestSize.Level1) @@ -248,6 +250,7 @@ HWTEST_F(DeviceManagerServiceImplFirstTest, HandleCredentialDeleted_003, testing const char *credInfo = R"({"deviceId": "remoteUdid", "userId": 1})"; std::string localUdid = "localUdid"; std::string remoteUdid; + bool isSendBroadCast = false; std::vector profiles; AccessControlProfile profile; @@ -265,7 +268,7 @@ HWTEST_F(DeviceManagerServiceImplFirstTest, HandleCredentialDeleted_003, testing EXPECT_CALL(*deviceProfileConnectorMock_, DeleteAccessControlById(_)) .Times(1); - deviceManagerServiceImpl_->HandleCredentialDeleted(credId, credInfo, localUdid, remoteUdid); + deviceManagerServiceImpl_->HandleCredentialDeleted(credId, credInfo, localUdid, remoteUdid, isSendBroadCast); } HWTEST_F(DeviceManagerServiceImplFirstTest, HandleCredentialDeleted_004, testing::ext::TestSize.Level1) @@ -274,6 +277,7 @@ HWTEST_F(DeviceManagerServiceImplFirstTest, HandleCredentialDeleted_004, testing const char *credInfo = R"({"deviceId": "remoteUdid", "userId": 1})"; std::string localUdid = "localUdid"; std::string remoteUdid; + bool isSendBroadCast = false; std::vector profiles; AccessControlProfile profile; @@ -291,7 +295,7 @@ HWTEST_F(DeviceManagerServiceImplFirstTest, HandleCredentialDeleted_004, testing EXPECT_CALL(*deviceProfileConnectorMock_, DeleteAccessControlById(_)) .Times(1); - deviceManagerServiceImpl_->HandleCredentialDeleted(credId, credInfo, localUdid, remoteUdid); + deviceManagerServiceImpl_->HandleCredentialDeleted(credId, credInfo, localUdid, remoteUdid, isSendBroadCast); } HWTEST_F(DeviceManagerServiceImplFirstTest, HandleShareUnbindBroadCast_001, testing::ext::TestSize.Level1) diff --git a/test/unittest/UTTest_device_manager_service_two.cpp b/test/unittest/UTTest_device_manager_service_two.cpp index 1ecdd86fa..8e6105395 100644 --- a/test/unittest/UTTest_device_manager_service_two.cpp +++ b/test/unittest/UTTest_device_manager_service_two.cpp @@ -1880,7 +1880,7 @@ HWTEST_F(DeviceManagerServiceTest, SendShareTypeUnBindBroadCast_001, testing::ex HWTEST_F(DeviceManagerServiceTest, HandleCredentialDeleted_002, testing::ext::TestSize.Level1) { - EXPECT_CALL(*deviceManagerServiceImplMock_, HandleCredentialDeleted(_, _, _, _)).Times(0); + EXPECT_CALL(*deviceManagerServiceImplMock_, HandleCredentialDeleted(_, _, _, _, _)).Times(0); DeviceManagerService::GetInstance().HandleCredentialDeleted(nullptr, "credInfo"); } diff --git a/test/unittest/mock/device_manager_service_impl_mock.cpp b/test/unittest/mock/device_manager_service_impl_mock.cpp index e939ec1b3..80ac6e8c6 100644 --- a/test/unittest/mock/device_manager_service_impl_mock.cpp +++ b/test/unittest/mock/device_manager_service_impl_mock.cpp @@ -73,10 +73,10 @@ bool DeviceManagerServiceImpl::CheckSharePeerSrc(const std::string &peerUdid, co } void DeviceManagerServiceImpl::HandleCredentialDeleted(const char *credId, - const char *credInfo, const std::string &localUdid, std::string &remoteUdid) + const char *credInfo, const std::string &localUdid, std::string &remoteUdid, bool &isSendBroadCast) { DmDeviceManagerServiceImpl::dmDeviceManagerServiceImpl->HandleCredentialDeleted(credId, - credInfo, localUdid, remoteUdid); + credInfo, localUdid, remoteUdid, isSendBroadCast); } void DeviceManagerServiceImpl::HandleShareUnbindBroadCast(const std::string &credId, const int32_t &userId, const std::string &localUdid) diff --git a/test/unittest/mock/device_manager_service_impl_mock.h b/test/unittest/mock/device_manager_service_impl_mock.h index a8d9e45a8..2886de7e3 100644 --- a/test/unittest/mock/device_manager_service_impl_mock.h +++ b/test/unittest/mock/device_manager_service_impl_mock.h @@ -39,7 +39,7 @@ public: int32_t bindLevel, const std::string &extra) = 0; virtual bool CheckSharePeerSrc(const std::string &peerUdid, const std::string &localUdid) = 0; virtual void HandleCredentialDeleted(const char *credId, const char *credInfo, const std::string &localUdid, - std::string &remoteUdid) = 0; + std::string &remoteUdid, bool &isSendBroadCast) = 0; virtual void HandleShareUnbindBroadCast(const std::string &credId, const int32_t &userId, const std::string &localUdid) = 0; virtual int32_t CheckDeviceInfoPermission(const std::string &localUdid, const std::string &peerDeviceId) = 0; @@ -67,7 +67,7 @@ public: MOCK_METHOD(int32_t, UnBindDevice, (const std::string &, const std::string &, int32_t, const std::string &)); MOCK_METHOD(bool, CheckSharePeerSrc, (const std::string &peerUdid, const std::string &localUdid)); MOCK_METHOD(void, HandleCredentialDeleted, (const char *, const char *, const std::string &, - std::string &)); + std::string &, bool &)); MOCK_METHOD(void, HandleShareUnbindBroadCast, (const std::string &, const int32_t &, const std::string &)); MOCK_METHOD(int32_t, CheckDeviceInfoPermission, (const std::string &, const std::string &)); MOCK_METHOD(void, HandleAppUnBindEvent, (int32_t remoteUserId, const std::string &remoteUdid, int32_t tokenId)); -- Gitee From cfd0b4dd2a87707ee53fc022e9a4a52a0c386bf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E9=9B=B7?= Date: Fri, 11 Jul 2025 15:55:16 +0800 Subject: [PATCH 2/8] add ut MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张雷 --- ...Test_device_manager_service_impl_first.cpp | 27 ++++++++++++++++++ .../UTTest_device_manager_service_two.cpp | 28 +++++++++++++++++++ 2 files changed, 55 insertions(+) diff --git a/test/unittest/UTTest_device_manager_service_impl_first.cpp b/test/unittest/UTTest_device_manager_service_impl_first.cpp index 2aa3b8ee9..8d88da772 100644 --- a/test/unittest/UTTest_device_manager_service_impl_first.cpp +++ b/test/unittest/UTTest_device_manager_service_impl_first.cpp @@ -298,6 +298,33 @@ HWTEST_F(DeviceManagerServiceImplFirstTest, HandleCredentialDeleted_004, testing deviceManagerServiceImpl_->HandleCredentialDeleted(credId, credInfo, localUdid, remoteUdid, isSendBroadCast); } +HWTEST_F(DeviceManagerServiceImplFirstTest, HandleCredentialDeleted_005, testing::ext::TestSize.Level1) +{ + const char *credId = "testCredId"; + const char *credInfo = R"({"deviceId": "remoteUdid", "osAccountId": 1})"; + std::string localUdid = "localUdid"; + std::string remoteUdid = "remoteUdid"; + bool isSendBroadCast = false; + + EXPECT_CALL(*multipleUserConnectorMock_, GetCurrentAccountUserID()).WillOnce(Return(1)); + + std::vector profiles; + AccessControlProfile profile; + profile.SetBindType(DM_SHARE); + profile.GetAccesser().SetAccesserCredentialIdStr(credId); + profile.GetAccesser().SetAccesserDeviceId(localUdid); + profile.GetAccesser().SetAccesserUserId(1); + profile.GetAccessee().SetAccesseeUserId(1); + profile.GetAccessee().SetAccesseeDeviceId(remoteUdid); + profiles.push_back(profile); + + EXPECT_CALL(*deviceProfileConnectorMock_, GetAccessControlProfile()).WillOnce(Return(profiles)); + EXPECT_CALL(*deviceProfileConnectorMock_, DeleteAccessControlById(_)).Times(1); + + deviceManagerServiceImpl_->HandleCredentialDeleted(credId, credInfo, localUdid, remoteUdid, isSendBroadCast); + EXPECT_TRUE(isSendBroadCast); +} + HWTEST_F(DeviceManagerServiceImplFirstTest, HandleShareUnbindBroadCast_001, testing::ext::TestSize.Level1) { std::string credId = "12345"; diff --git a/test/unittest/UTTest_device_manager_service_two.cpp b/test/unittest/UTTest_device_manager_service_two.cpp index 8e6105395..230f7e18c 100644 --- a/test/unittest/UTTest_device_manager_service_two.cpp +++ b/test/unittest/UTTest_device_manager_service_two.cpp @@ -1893,6 +1893,34 @@ HWTEST_F(DeviceManagerServiceTest, HandleCredentialDeleted_004, testing::ext::Te DeviceManagerService::GetInstance().HandleCredentialDeleted("credId", "credInfo"); } +HWTEST_F(DeviceManagerServiceTest, HandleCredentialDeleted_005, testing::ext::TestSize.Level1) +{ + const char *credId = "testCredId"; + const char *credInfo = R"({"deviceId": "remoteUdid", "userId": 1})"; + std::string localUdid = "localUdid"; + std::string remoteUdid = "remoteUdid"; + bool isSendBroadCast = false; + + EXPECT_CALL(*deviceManagerServiceImplMock_, HandleCredentialDeleted(StrEq(credId), StrEq(credInfo), _, _, _)) + .WillOnce(DoAll(SetArgReferee<3>(remoteUdid), SetArgReferee<4>(isSendBroadCast))); + + DeviceManagerService::GetInstance().HandleCredentialDeleted(credId, credInfo); +} + +HWTEST_F(DeviceManagerServiceTest, HandleCredentialDeleted_006, testing::ext::TestSize.Level1) +{ + const char *credId = "testCredId"; + const char *credInfo = R"({"deviceId": "remoteUdid", "userId": 1})"; + std::string localUdid = "localUdid"; + std::string remoteUdid = "remoteUdid"; + bool isSendBroadCast = true; + + EXPECT_CALL(*deviceManagerServiceImplMock_, HandleCredentialDeleted(StrEq(credId), StrEq(credInfo), _, _, _)) + .WillOnce(DoAll(SetArgReferee<3>(remoteUdid), SetArgReferee<4>(isSendBroadCast))); + + DeviceManagerService::GetInstance().HandleCredentialDeleted(credId, credInfo); +} + HWTEST_F(DeviceManagerServiceTest, HandleShareUnbindBroadCast_001, testing::ext::TestSize.Level1) { std::string credId = "123456"; -- Gitee From fd0aa608f48b21098694835cf994210c6797d755 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E9=9B=B7?= Date: Mon, 14 Jul 2025 14:06:28 +0800 Subject: [PATCH 3/8] add logout mutex MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张雷 --- .../include/device_manager_service_impl.h | 1 + .../src/device_manager_service_impl.cpp | 23 ++++++++++++++----- 2 files changed, 18 insertions(+), 6 deletions(-) diff --git a/services/implementation/include/device_manager_service_impl.h b/services/implementation/include/device_manager_service_impl.h index 20d8741a9..3eef265b6 100644 --- a/services/implementation/include/device_manager_service_impl.h +++ b/services/implementation/include/device_manager_service_impl.h @@ -311,6 +311,7 @@ private: std::shared_ptr commonEventManager_; std::shared_ptr listener_; std::atomic isCredentialType_ = false; + std::mutex logoutMutex_; sptr dpInitedCallback_ = nullptr; // The session ID corresponding to the device ID, used only on the src side diff --git a/services/implementation/src/device_manager_service_impl.cpp b/services/implementation/src/device_manager_service_impl.cpp index 614ef0ae6..5b7ebd810 100644 --- a/services/implementation/src/device_manager_service_impl.cpp +++ b/services/implementation/src/device_manager_service_impl.cpp @@ -1873,8 +1873,11 @@ void DeviceManagerServiceImpl::HandleIdentAccountLogout(const DMAclQuadInfo &inf CHECK_NULL_VOID(hiChainConnector_); hiChainConnector_->DeleteAllGroup(info.localUserId); CHECK_NULL_VOID(hiChainAuthConnector_); - hiChainAuthConnector_->DeleteCredential(info.peerUdid, info.localUserId, info.peerUserId); - DeleteSkCredAndAcl(offlineParam.needDelAclInfos); + { + std::lock_guard lock(logoutMutex_); + hiChainAuthConnector_->DeleteCredential(info.peerUdid, info.localUserId, info.peerUserId); + DeleteSkCredAndAcl(offlineParam.needDelAclInfos); + } std::set pkgNameSet; GetBundleName(info, pkgNameSet); @@ -2073,8 +2076,12 @@ void DeviceManagerServiceImpl::HandleAccountLogoutEvent(int32_t remoteUserId, co CHECK_NULL_VOID(hiChainConnector_); hiChainConnector_->DeleteAllGroup(item.second); CHECK_NULL_VOID(hiChainAuthConnector_); - hiChainAuthConnector_->DeleteCredential(remoteUdid, item.second, remoteUserId); - DeleteSkCredAndAcl(offlineParam.needDelAclInfos); + { + std::lock_guard lock(logoutMutex_); + hiChainAuthConnector_->DeleteCredential(remoteUdid, item.second, remoteUserId); + DeleteSkCredAndAcl(offlineParam.needDelAclInfos); + } + std::set pkgNameSet; GetBundleName(info, pkgNameSet); if (notifyOffline) { @@ -2656,8 +2663,12 @@ void DeviceManagerServiceImpl::CheckDeleteCredential(const std::string &remoteUd void DeviceManagerServiceImpl::HandleCredentialDeleted(const char *credId, const char *credInfo, const std::string &localUdid, std::string &remoteUdid, bool &isSendBroadCast) { - std::vector profiles = - DeviceProfileConnector::GetInstance().GetAccessControlProfile(); + std::vector profiles; + { + std::lock_guard lock(logoutMutex_); + profiles = DeviceProfileConnector::GetInstance().GetAccessControlProfile(); + } + JsonObject jsonObject; jsonObject.Parse(std::string(credInfo)); if (jsonObject.IsDiscarded()) { -- Gitee From de3a8b8ccde6f77c1eb913c387549fb164d44e9a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E9=9B=B7?= Date: Tue, 15 Jul 2025 09:07:08 +0800 Subject: [PATCH 4/8] delete session key MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张雷 --- services/implementation/src/device_manager_service_impl.cpp | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/services/implementation/src/device_manager_service_impl.cpp b/services/implementation/src/device_manager_service_impl.cpp index 5b7ebd810..6f4c4ce84 100644 --- a/services/implementation/src/device_manager_service_impl.cpp +++ b/services/implementation/src/device_manager_service_impl.cpp @@ -2701,6 +2701,10 @@ void DeviceManagerServiceImpl::HandleCredentialDeleted(const char *credId, const item.GetAccesser().GetAccesserUserId() == userId && item.GetAccesser().GetAccesserDeviceId() == remoteUdid)) { isSendBroadCast = true; + int32_t skId = item.GetAccesser().GetAccesserSessionKeyId(); + DeviceProfileConnector::GetInstance().DeleteSessionKey(userId, skId); + skId = item.GetAccessee().GetAccesseeSessionKeyId(); + DeviceProfileConnector::GetInstance().DeleteSessionKey(userId, skId); DeviceProfileConnector::GetInstance().DeleteAccessControlById(item.GetAccessControlId()); } } -- Gitee From 75b4f4b525814630f7cf2b777a01f356b227856d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E9=9B=B7?= Date: Tue, 15 Jul 2025 11:13:45 +0800 Subject: [PATCH 5/8] delete session key MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张雷 --- .../include/device_manager_service_impl.h | 1 + .../src/device_manager_service_impl.cpp | 16 ++++++++++++---- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/services/implementation/include/device_manager_service_impl.h b/services/implementation/include/device_manager_service_impl.h index 3eef265b6..86948ed86 100644 --- a/services/implementation/include/device_manager_service_impl.h +++ b/services/implementation/include/device_manager_service_impl.h @@ -298,6 +298,7 @@ private: void OnAuthResultAndOnBindResult(const ProcessInfo &processInfo, const PeerTargetId &targetId, const std::string &deviceId, int32_t reason); void GetBundleName(const DMAclQuadInfo &info, std::set &pkgNameSet); + void DeleteSessionKey(const std::string &userId); private: std::shared_ptr authMgr_; // Old protocol only diff --git a/services/implementation/src/device_manager_service_impl.cpp b/services/implementation/src/device_manager_service_impl.cpp index 6f4c4ce84..0d926be18 100644 --- a/services/implementation/src/device_manager_service_impl.cpp +++ b/services/implementation/src/device_manager_service_impl.cpp @@ -2701,10 +2701,7 @@ void DeviceManagerServiceImpl::HandleCredentialDeleted(const char *credId, const item.GetAccesser().GetAccesserUserId() == userId && item.GetAccesser().GetAccesserDeviceId() == remoteUdid)) { isSendBroadCast = true; - int32_t skId = item.GetAccesser().GetAccesserSessionKeyId(); - DeviceProfileConnector::GetInstance().DeleteSessionKey(userId, skId); - skId = item.GetAccessee().GetAccesseeSessionKeyId(); - DeviceProfileConnector::GetInstance().DeleteSessionKey(userId, skId); + DeleteSessionKey(userId); DeviceProfileConnector::GetInstance().DeleteAccessControlById(item.GetAccessControlId()); } } @@ -2722,6 +2719,7 @@ void DeviceManagerServiceImpl::HandleShareUnbindBroadCast(const std::string &cre } std::string accesserCredId = ""; std::string accesseeCredId = ""; + int32_t skId = -1; for (int32_t i = 0; i < BROADCAST_CREDID_LENGTH; i++) { accesserCredId += item.GetAccesser().GetAccesserCredentialIdStr()[i]; accesseeCredId += item.GetAccessee().GetAccesseeCredentialIdStr()[i]; @@ -2729,11 +2727,13 @@ void DeviceManagerServiceImpl::HandleShareUnbindBroadCast(const std::string &cre if (accesserCredId == credId && item.GetAccessee().GetAccesseeDeviceId() == localUdid && item.GetAccessee().GetAccesseeUserId() == localUserId && item.GetAccesser().GetAccesserUserId() == userId) { + DeleteSessionKey(userId); DeviceProfileConnector::GetInstance().DeleteAccessControlById(item.GetAccessControlId()); } if (accesseeCredId == credId && item.GetAccesser().GetAccesserDeviceId() == localUdid && item.GetAccesser().GetAccesserUserId() == localUserId && item.GetAccessee().GetAccesseeUserId() == userId) { + DeleteSessionKey(userId); DeviceProfileConnector::GetInstance().DeleteAccessControlById(item.GetAccessControlId()); } } @@ -3050,6 +3050,14 @@ void DeviceManagerServiceImpl::DeleteHoDevice(const std::string &peerUdid, return; } +void DeviceManagerServiceImpl::DeleteSessionKey(const std::string &userId) +{ + int32_t skId = item.GetAccessee().GetAccesseeSessionKeyId(); + DeviceProfileConnector::GetInstance().DeleteSessionKey(userId, skId); + skId = item.GetAccessee().GetAccesseeSessionKeyId(); + DeviceProfileConnector::GetInstance().DeleteSessionKey(userId, skId); +} + extern "C" IDeviceManagerServiceImpl *CreateDMServiceObject(void) { return new DeviceManagerServiceImpl; -- Gitee From ce59eaa1673a9efd5e9c94a4f10249e318dd3dab Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E9=9B=B7?= Date: Tue, 15 Jul 2025 11:37:17 +0800 Subject: [PATCH 6/8] delete session key MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张雷 --- .../include/device_manager_service_impl.h | 2 +- .../src/device_manager_service_impl.cpp | 13 +++++++------ 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/services/implementation/include/device_manager_service_impl.h b/services/implementation/include/device_manager_service_impl.h index 86948ed86..2115a5c64 100644 --- a/services/implementation/include/device_manager_service_impl.h +++ b/services/implementation/include/device_manager_service_impl.h @@ -298,7 +298,7 @@ private: void OnAuthResultAndOnBindResult(const ProcessInfo &processInfo, const PeerTargetId &targetId, const std::string &deviceId, int32_t reason); void GetBundleName(const DMAclQuadInfo &info, std::set &pkgNameSet); - void DeleteSessionKey(const std::string &userId); + void DeleteSessionKey(int32_t userId, const DistributedDeviceProfile::AccessControlProfile &profile); private: std::shared_ptr authMgr_; // Old protocol only diff --git a/services/implementation/src/device_manager_service_impl.cpp b/services/implementation/src/device_manager_service_impl.cpp index 0d926be18..1b0b1adc7 100644 --- a/services/implementation/src/device_manager_service_impl.cpp +++ b/services/implementation/src/device_manager_service_impl.cpp @@ -2701,7 +2701,7 @@ void DeviceManagerServiceImpl::HandleCredentialDeleted(const char *credId, const item.GetAccesser().GetAccesserUserId() == userId && item.GetAccesser().GetAccesserDeviceId() == remoteUdid)) { isSendBroadCast = true; - DeleteSessionKey(userId); + DeleteSessionKey(userId, item); DeviceProfileConnector::GetInstance().DeleteAccessControlById(item.GetAccessControlId()); } } @@ -2727,13 +2727,13 @@ void DeviceManagerServiceImpl::HandleShareUnbindBroadCast(const std::string &cre if (accesserCredId == credId && item.GetAccessee().GetAccesseeDeviceId() == localUdid && item.GetAccessee().GetAccesseeUserId() == localUserId && item.GetAccesser().GetAccesserUserId() == userId) { - DeleteSessionKey(userId); + DeleteSessionKey(userId, item); DeviceProfileConnector::GetInstance().DeleteAccessControlById(item.GetAccessControlId()); } if (accesseeCredId == credId && item.GetAccesser().GetAccesserDeviceId() == localUdid && item.GetAccesser().GetAccesserUserId() == localUserId && item.GetAccessee().GetAccesseeUserId() == userId) { - DeleteSessionKey(userId); + DeleteSessionKey(userId, item); DeviceProfileConnector::GetInstance().DeleteAccessControlById(item.GetAccessControlId()); } } @@ -3050,11 +3050,12 @@ void DeviceManagerServiceImpl::DeleteHoDevice(const std::string &peerUdid, return; } -void DeviceManagerServiceImpl::DeleteSessionKey(const std::string &userId) +void DeviceManagerServiceImpl::DeleteSessionKey(int32_t userId, + const DistributedDeviceProfile::AccessControlProfile &profile) { - int32_t skId = item.GetAccessee().GetAccesseeSessionKeyId(); + int32_t skId = profile.GetAccessee().GetAccesseeSessionKeyId(); DeviceProfileConnector::GetInstance().DeleteSessionKey(userId, skId); - skId = item.GetAccessee().GetAccesseeSessionKeyId(); + skId = profile.GetAccessee().GetAccesseeSessionKeyId(); DeviceProfileConnector::GetInstance().DeleteSessionKey(userId, skId); } -- Gitee From 0f68eddc8bf22fba8d1628757c3ec97efc7e07f0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E9=9B=B7?= Date: Tue, 15 Jul 2025 11:43:47 +0800 Subject: [PATCH 7/8] delete session key MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张雷 --- services/implementation/src/device_manager_service_impl.cpp | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/services/implementation/src/device_manager_service_impl.cpp b/services/implementation/src/device_manager_service_impl.cpp index 1b0b1adc7..12fdcf727 100644 --- a/services/implementation/src/device_manager_service_impl.cpp +++ b/services/implementation/src/device_manager_service_impl.cpp @@ -2719,7 +2719,6 @@ void DeviceManagerServiceImpl::HandleShareUnbindBroadCast(const std::string &cre } std::string accesserCredId = ""; std::string accesseeCredId = ""; - int32_t skId = -1; for (int32_t i = 0; i < BROADCAST_CREDID_LENGTH; i++) { accesserCredId += item.GetAccesser().GetAccesserCredentialIdStr()[i]; accesseeCredId += item.GetAccessee().GetAccesseeCredentialIdStr()[i]; @@ -3053,7 +3052,7 @@ void DeviceManagerServiceImpl::DeleteHoDevice(const std::string &peerUdid, void DeviceManagerServiceImpl::DeleteSessionKey(int32_t userId, const DistributedDeviceProfile::AccessControlProfile &profile) { - int32_t skId = profile.GetAccessee().GetAccesseeSessionKeyId(); + int32_t skId = profile.GetAccesser().GetAccesserSessionKeyId(); DeviceProfileConnector::GetInstance().DeleteSessionKey(userId, skId); skId = profile.GetAccessee().GetAccesseeSessionKeyId(); DeviceProfileConnector::GetInstance().DeleteSessionKey(userId, skId); -- Gitee From ca5ddf71124651eda7b6c365c426108352a89400 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BC=A0=E9=9B=B7?= Date: Tue, 15 Jul 2025 11:49:47 +0800 Subject: [PATCH 8/8] delete session key MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: 张雷 --- .../implementation/src/device_manager_service_impl.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/services/implementation/src/device_manager_service_impl.cpp b/services/implementation/src/device_manager_service_impl.cpp index 12fdcf727..44e638893 100644 --- a/services/implementation/src/device_manager_service_impl.cpp +++ b/services/implementation/src/device_manager_service_impl.cpp @@ -2710,8 +2710,11 @@ void DeviceManagerServiceImpl::HandleCredentialDeleted(const char *credId, const void DeviceManagerServiceImpl::HandleShareUnbindBroadCast(const std::string &credId, const int32_t &userId, const std::string &localUdid) { - std::vector profiles = - DeviceProfileConnector::GetInstance().GetAccessControlProfile(); + std::vector profiles; + { + std::lock_guard lock(logoutMutex_); + profiles = DeviceProfileConnector::GetInstance().GetAccessControlProfile(); + } int32_t localUserId = MultipleUserConnector::GetCurrentAccountUserID(); for (const auto &item : profiles) { if (item.GetBindType() != DM_SHARE) { -- Gitee