diff --git a/services/dtbschedmgr/include/continue/dsched_continue.h b/services/dtbschedmgr/include/continue/dsched_continue.h index 2c64757e..99661114 100644 --- a/services/dtbschedmgr/include/continue/dsched_continue.h +++ b/services/dtbschedmgr/include/continue/dsched_continue.h @@ -142,7 +142,7 @@ private: int32_t PostStartTask(const OHOS::AAFwk::WantParams& wantParams); int32_t PostReplyTask(std::shared_ptr cmd); - int32_t PostCotinueAbilityTask(int32_t appVersion); + int32_t PostCotinueAbilityTask(uint32_t appVersion); int32_t PostContinueSendTask(const OHOS::AAFwk::Want& want, int32_t callerUid, int32_t status, uint32_t accessToken); int32_t PostContinueDataTask(std::shared_ptr cmd); @@ -150,7 +150,7 @@ private: int32_t PostContinueEndTask(int32_t result); int32_t ExecuteContinueReq(std::shared_ptr wantParams); - int32_t ExecuteContinueAbility(int32_t appVersion); + int32_t ExecuteContinueAbility(uint32_t appVersion); int32_t ExecuteContinueReply(); int32_t ExecuteContinueSend(std::shared_ptr data); int32_t ExecuteContinueData(std::shared_ptr cmd); @@ -159,7 +159,7 @@ private: int32_t ExecuteContinueError(int32_t result); int32_t OnContinueMission(const OHOS::AAFwk::WantParams& wantParams); - int32_t OnStartCmd(int32_t appVersion); + int32_t OnStartCmd(uint32_t appVersion); int32_t OnReplyCmd(std::shared_ptr cmd); int32_t OnStartContinuation(const OHOS::AAFwk::Want& want, int32_t callerUid, int32_t status, uint32_t accessToken); @@ -182,7 +182,7 @@ private: const AccountInfo& accountInfo); int32_t CheckStartPermission(std::shared_ptr cmd); int32_t PackEndCmd(std::shared_ptr cmd, int32_t result); - int32_t PackReplyCmd(std::shared_ptr cmd, int32_t replyCmd, int32_t appVersion, + int32_t PackReplyCmd(std::shared_ptr cmd, int32_t replyCmd, uint32_t appVersion, int32_t result, const std::string reason); int32_t SendCommand(std::shared_ptr cmd); diff --git a/services/dtbschedmgr/include/continue/dsched_continue_event.h b/services/dtbschedmgr/include/continue/dsched_continue_event.h index e81d2793..607a739f 100644 --- a/services/dtbschedmgr/include/continue/dsched_continue_event.h +++ b/services/dtbschedmgr/include/continue/dsched_continue_event.h @@ -78,7 +78,7 @@ public: public: int32_t direction_ = 0; - int32_t appVersion_ = 0; + uint32_t appVersion_ = 0; DistributedWantParams wantParams_; }; @@ -112,7 +112,7 @@ public: public: int32_t replyCmd_ = 0; - int32_t appVersion_ = 0; + uint32_t appVersion_ = 0; int32_t result_ = 0; std::string reason_; }; diff --git a/services/dtbschedmgr/include/continue/dsched_continue_manager.h b/services/dtbschedmgr/include/continue/dsched_continue_manager.h index e962ec2f..14bd5e88 100644 --- a/services/dtbschedmgr/include/continue/dsched_continue_manager.h +++ b/services/dtbschedmgr/include/continue/dsched_continue_manager.h @@ -32,7 +32,7 @@ namespace DistributedSchedule { namespace { constexpr int32_t MAX_CONCURRENT_SINK = 1; constexpr int32_t MAX_CONCURRENT_SOURCE = 1; -constexpr int32_t CONTINUE_TIMEOUT = 7000; +constexpr int32_t CONTINUE_TIMEOUT = 10000; } class DSchedContinueManager { DECLARE_SINGLE_INSTANCE_BASE(DSchedContinueManager); @@ -59,7 +59,7 @@ public: std::shared_ptr GetDSchedContinueByWant(const OHOS::AAFwk::Want& want, int32_t missionId); std::shared_ptr GetDSchedContinueByDevId(const std::u16string& devId, int32_t missionId); void NotifyTerminateContinuation(const int32_t missionId); - + private: void StartEvent(); void HandleContinueMission(const std::string& srcDeviceId, const std::string& dstDeviceId, int32_t missionId, diff --git a/services/dtbschedmgr/include/dfx/distributed_radar.h b/services/dtbschedmgr/include/dfx/distributed_radar.h index 2606ddc5..9ce82a5a 100644 --- a/services/dtbschedmgr/include/dfx/distributed_radar.h +++ b/services/dtbschedmgr/include/dfx/distributed_radar.h @@ -50,6 +50,8 @@ const std::string ERROR_CODE = "ERROR_CODE"; const std::string PEER_UDID = "PEER_UDID"; const std::string APP_CALLEE = "APP_CALLEE"; const std::string APP_CALLER = "APP_CALLER"; +const std::string LOCAL_APP_VERSION = "LOCAL_APP_VERSION"; +const std::string PEER_APP_VERSION = "PEER_APP_VERSION"; constexpr char APP_CONTINUE_DOMAIN[] = "APP_CONTINUE"; constexpr int32_t ANONYM_MIN_LENGTH = 10; constexpr int32_t SUBSTR_UDID_LENGTH = 5; @@ -168,7 +170,7 @@ public: bool RecvUnfocused(const std::string& func); bool UnfocusedGetBundleName(const std::string& func, int32_t errCode); bool NotifyDockUnfocused(const std::string& func, int32_t errCode); - bool ClickIconDmsContinue(const std::string& func, int32_t errCode, std::string peerUdid, + bool ClickIconDmsContinue(const std::string& func, int32_t errCode, std::string peerDeviceId, const std::string& srcBundleName, const std::string& dstBundleName); bool ClickIconDmsStartAbility(const std::string& func, int32_t errCode); bool ClickIconDmsRecvOver(const std::string& func, int32_t errCode); diff --git a/services/dtbschedmgr/src/continue/dsched_continue.cpp b/services/dtbschedmgr/src/continue/dsched_continue.cpp index b72ae217..56a76547 100644 --- a/services/dtbschedmgr/src/continue/dsched_continue.cpp +++ b/services/dtbschedmgr/src/continue/dsched_continue.cpp @@ -264,13 +264,13 @@ int32_t DSchedContinue::PostStartTask(const OHOS::AAFwk::WantParams& wantParams) return ERR_OK; } -int32_t DSchedContinue::OnStartCmd(int32_t appVersion) +int32_t DSchedContinue::OnStartCmd(uint32_t appVersion) { HILOGI("called"); return PostCotinueAbilityTask(appVersion); } -int32_t DSchedContinue::PostCotinueAbilityTask(int32_t appVersion) +int32_t DSchedContinue::PostCotinueAbilityTask(uint32_t appVersion) { DSchedContinueEventType eventType = DSHCED_CONTINUE_ABILITY_EVENT; HILOGI("PostCotinueAbilityTask %{public}d, continueInfo %{public}s", eventType, @@ -279,7 +279,7 @@ int32_t DSchedContinue::PostCotinueAbilityTask(int32_t appVersion) HILOGE("PostCotinueAbilityTask eventHandler is nullptr"); return INVALID_PARAMETERS_ERR; } - auto data = std::make_shared(appVersion); + auto data = std::make_shared(appVersion); auto msgEvent = AppExecFwk::InnerEvent::Get(eventType, data, 0); if (!eventHandler_->SendEvent(msgEvent, 0, AppExecFwk::EventQueue::Priority::IMMEDIATE)) { HILOGE("PostCotinueAbilityTask eventHandler send event type %{public}d fail", eventType); @@ -498,8 +498,7 @@ int32_t DSchedContinue::ExecuteContinueReq(std::shared_ptr& cm HILOGE("pack start cmd failed, the bundle is not installed on local device."); return ret; } - cmd->appVersion_ = static_cast(localBundleInfo.versionCode); + cmd->appVersion_ = localBundleInfo.versionCode; } cmd->wantParams_ = *wantParams; return ERR_OK; } -int32_t DSchedContinue::ExecuteContinueAbility(int32_t appVersion) +int32_t DSchedContinue::ExecuteContinueAbility(uint32_t appVersion) { - HILOGI("ExecuteContinueAbility start, appVersion: %{public}d", appVersion); + HILOGI("ExecuteContinueAbility start, appVersion: %{public}u", appVersion); DmsRadar::GetInstance().SaveDataDmsContinue("ContinueAbility", ERR_OK); int32_t result = GetMissionIdByBundleName(); @@ -1072,7 +1071,7 @@ int32_t DSchedContinue::ExecuteNotifyComplete(int32_t result) return ERR_OK; } -int32_t DSchedContinue::PackReplyCmd(std::shared_ptr cmd, int32_t replyCmd, int32_t appVersion, +int32_t DSchedContinue::PackReplyCmd(std::shared_ptr cmd, int32_t replyCmd, uint32_t appVersion, int32_t result, const std::string reason) { if (cmd == nullptr) { diff --git a/services/dtbschedmgr/src/continue/dsched_continue_event.cpp b/services/dtbschedmgr/src/continue/dsched_continue_event.cpp index a3a163c7..8ea31369 100644 --- a/services/dtbschedmgr/src/continue/dsched_continue_event.cpp +++ b/services/dtbschedmgr/src/continue/dsched_continue_event.cpp @@ -177,11 +177,12 @@ int32_t DSchedContinueStartCmd::Unmarshal(const std::string &jsonStr) direction_ = direction->valueint; cJSON *appVersion = cJSON_GetObjectItemCaseSensitive(rootValue, "AppVersion"); - if (appVersion == nullptr || !cJSON_IsNumber(appVersion)) { + if (appVersion == nullptr || !cJSON_IsNumber(appVersion) || appVersion->valueint < 0 || + appVersion->valueint > UINT32_MAX) { cJSON_Delete(rootValue); return INVALID_PARAMETERS_ERR; } - appVersion_ = appVersion->valueint; + appVersion_ = static_cast(appVersion->valueint); cJSON *wantParams = cJSON_GetObjectItemCaseSensitive(rootValue, "WantParams"); if (wantParams == nullptr || !cJSON_IsString(wantParams) || (wantParams->valuestring == nullptr)) { @@ -653,10 +654,10 @@ int32_t DSchedContinueReplyCmd::Unmarshal(const std::string &jsonStr) } const char *numKeys[] = { - "ReplyCmd", "AppVersion", "Result" + "ReplyCmd", "Result" }; int32_t *numValues[] = { - &replyCmd_, &appVersion_, &result_ + &replyCmd_, &result_ }; int32_t numLength = sizeof(numKeys) / sizeof(numKeys[0]); for (int32_t i = 0; i < numLength; i++) { @@ -668,6 +669,14 @@ int32_t DSchedContinueReplyCmd::Unmarshal(const std::string &jsonStr) *numValues[i] = item->valueint; } + cJSON *appVersion = cJSON_GetObjectItemCaseSensitive(rootValue, "AppVersion"); + if (appVersion == nullptr || !cJSON_IsNumber(appVersion) || appVersion->valueint < 0 || + appVersion->valueint > UINT32_MAX) { + cJSON_Delete(rootValue); + return INVALID_PARAMETERS_ERR; + } + appVersion_ = static_cast(appVersion->valueint); + cJSON *reason = cJSON_GetObjectItemCaseSensitive(rootValue, "Reason"); if (reason == nullptr || !cJSON_IsString(reason) || (reason->valuestring == nullptr)) { cJSON_Delete(rootValue); diff --git a/services/dtbschedmgr/src/continue/state/source_state/dsched_continue_source_start_state.cpp b/services/dtbschedmgr/src/continue/state/source_state/dsched_continue_source_start_state.cpp index a11af688..3e73bde4 100644 --- a/services/dtbschedmgr/src/continue/state/source_state/dsched_continue_source_start_state.cpp +++ b/services/dtbschedmgr/src/continue/state/source_state/dsched_continue_source_start_state.cpp @@ -86,7 +86,7 @@ int32_t DSchedContinueSourceStartState::DoContinueAbilityTask(std::shared_ptrGetSharedObject(); + auto syncContinueData = event->GetSharedObject(); int32_t ret = dContinue->ExecuteContinueAbility(*syncContinueData); if (ret != ERR_OK) { HILOGE("DSchedContinueSourceStartState ExecuteContinueAbility failed, ret: %{public}d", ret); diff --git a/services/dtbschedmgr/src/dfx/distributed_radar.cpp b/services/dtbschedmgr/src/dfx/distributed_radar.cpp index 850dc1da..e2aa1d19 100644 --- a/services/dtbschedmgr/src/dfx/distributed_radar.cpp +++ b/services/dtbschedmgr/src/dfx/distributed_radar.cpp @@ -15,6 +15,8 @@ #include "dfx/distributed_radar.h" +#include "bundle/bundle_manager_internal.h" +#include "dtbschedmgr_device_info_storage.h" #include "hisysevent.h" namespace OHOS { @@ -728,13 +730,17 @@ bool DmsRadar::NotifyDockUnfocused(const std::string& func, int32_t errCode) return true; } -bool DmsRadar::ClickIconDmsContinue(const std::string& func, int32_t errCode, std::string peerUdid, +bool DmsRadar::ClickIconDmsContinue(const std::string& func, int32_t errCode, std::string peerDeviceId, const std::string& srcBundleName, const std::string& dstBundleName) { - if (peerUdid.empty()) { - HILOGE("peerUdid is empty."); - return false; - } + std::string peerUdid = DtbschedmgrDeviceInfoStorage::GetInstance().GetUdidByNetworkId(peerDeviceId); + + DmsBundleInfo srcBundleInfo; + DmsBmStorage::GetInstance()->GetStorageDistributeInfo(peerDeviceId, srcBundleName, srcBundleInfo); + + AppExecFwk::BundleInfo dstBundleInfo; + BundleManagerInternal::GetLocalBundleInfoV9(dstBundleName, dstBundleInfo); + int32_t res = ERR_OK; StageRes stageRes = (errCode == ERR_OK) ? StageRes::STAGE_SUCC : StageRes::STAGE_FAIL; if (stageRes == StageRes::STAGE_SUCC) { @@ -749,7 +755,9 @@ bool DmsRadar::ClickIconDmsContinue(const std::string& func, int32_t errCode, st STAGE_RES, static_cast(StageRes::STAGE_SUCC), PEER_UDID, GetAnonyUdid(peerUdid), APP_CALLEE, srcBundleName, - APP_CALLER, dstBundleName); + APP_CALLER, dstBundleName, + LOCAL_APP_VERSION, srcBundleInfo.versionName, + PEER_APP_VERSION, dstBundleInfo.versionName); } else { res = HiSysEventWrite( APP_CONTINUE_DOMAIN, @@ -763,6 +771,8 @@ bool DmsRadar::ClickIconDmsContinue(const std::string& func, int32_t errCode, st PEER_UDID, GetAnonyUdid(peerUdid), APP_CALLEE, srcBundleName, APP_CALLER, dstBundleName, + LOCAL_APP_VERSION, srcBundleInfo.versionName, + PEER_APP_VERSION, dstBundleInfo.versionName, ERROR_CODE, errCode); } if (res != ERR_OK) { diff --git a/services/dtbschedmgr/test/unittest/continue/dsched_continue_test.cpp b/services/dtbschedmgr/test/unittest/continue/dsched_continue_test.cpp index 915bec51..0ca6beb0 100644 --- a/services/dtbschedmgr/test/unittest/continue/dsched_continue_test.cpp +++ b/services/dtbschedmgr/test/unittest/continue/dsched_continue_test.cpp @@ -103,7 +103,7 @@ HWTEST_F(DSchedContinueTest, DSchedContinueTest_002_1, TestSize.Level0) int32_t subType = CONTINUE_PULL; int32_t direction = CONTINUE_SINK; sptr callback = nullptr; - int32_t appVersion = 0; + uint32_t appVersion = 0; auto info = DSchedContinueInfo(deviceId, bundleName, deviceId, bundleName, ""); auto conti = std::make_shared(subType, direction, callback, info); @@ -407,7 +407,7 @@ HWTEST_F(DSchedContinueTest, DSchedContinueTest_0010_1, TestSize.Level0) auto conti = std::make_shared(subType, direction, callback, info); conti->Init(); - int32_t appVersion = 0; + uint32_t appVersion = 0; int32_t ret = conti->ExecuteContinueAbility(appVersion); EXPECT_NE(ret, ERR_OK); DTEST_LOG << "DSchedContinueTest DSchedContinueTest_0010_1 end ret:" << ret << std::endl; @@ -644,7 +644,7 @@ HWTEST_F(DSchedContinueTest, DSchedContinueTest_0019_1, TestSize.Level0) auto cmd = std::make_shared(); int32_t replyCmd = 0; - int32_t appVersion = 0; + uint32_t appVersion = 0; int32_t result = 0; int32_t ret = conti->PackReplyCmd(cmd, replyCmd, appVersion, result, ""); diff --git a/services/dtbschedmgr/test/unittest/dfx/distributed_radar_test.cpp b/services/dtbschedmgr/test/unittest/dfx/distributed_radar_test.cpp index 6eafbc91..73cc8b15 100644 --- a/services/dtbschedmgr/test/unittest/dfx/distributed_radar_test.cpp +++ b/services/dtbschedmgr/test/unittest/dfx/distributed_radar_test.cpp @@ -667,7 +667,7 @@ HWTEST_F(DistributedRadarTest, NormalFocusedGetAccessTokenIdRes_001, TestSize.Le DTEST_LOG << "DistributedRadarTest NormalFocusedGetAccessTokenIdRes_001 begin" << std::endl; bool ret = DmsRadar::GetInstance().NormalFocusedGetAccessTokenIdRes(FUNC, ERR_NO); EXPECT_EQ(ret, true); - + ret = DmsRadar::GetInstance().NormalFocusedGetAccessTokenIdRes(FUNC, ERR_OK); EXPECT_EQ(ret, true); DTEST_LOG << "DistributedRadarTest NormalFocusedGetAccessTokenIdRes_001 end" << std::endl;