diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h b/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h index 00c439fa297005a87ff7599f3908870ec760c967..f4ef5ca11299dda6b07674fa658195acc0f650e7 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/include/dscreen.h @@ -112,6 +112,7 @@ private: void HandleDisconnect(); int32_t StartSenderEngine(); int32_t StopSenderEngine(); + std::shared_ptr ParseInputScreenParam(const std::string ¶m, const std::string &taskId); /* * Negotiate the codec format between local to remote device, diff --git a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp index 7515f38a72b5ffea9f11ee5c90455e781f3338cd..e54b7c7f846f9df0a895a788fc9d5431757f6074 100644 --- a/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp +++ b/services/screenservice/sourceservice/dscreenmgr/2.0/src/dscreen.cpp @@ -136,31 +136,11 @@ void DScreen::HandleEnable(const std::string ¶m, const std::string &taskId) return; } SetState(ENABLING); - - json attrJson = json::parse(param, nullptr, false); - if (!CheckJsonData(attrJson)) { - DHLOGE("HandleEnable, check json data failed."); - dscreenCallback_->OnRegResult(shared_from_this(), taskId, ERR_DH_SCREEN_SA_ENABLE_FAILED, - "enable param json is invalid."); - ReportRegisterFail(DSCREEN_REGISTER_FAIL, ERR_DH_SCREEN_SA_ENABLE_FAILED, GetAnonyString(devId_).c_str(), - GetAnonyString(dhId_).c_str(), "check json data failed."); - SetState(DISABLED); - return; - } + videoParam_ = ParseInputScreenParam(param, taskId); if (videoParam_ == nullptr) { - videoParam_ = std::make_shared(); - } - int32_t ret = NegotiateCodecType(attrJson[KEY_HISTREAMER_VIDEO_DECODER]); - if (ret != DH_SUCCESS) { - DHLOGE("HandleEnable, negotiate codec type failed."); - dscreenCallback_->OnRegResult(shared_from_this(), taskId, ERR_DH_SCREEN_SA_ENABLE_FAILED, - "negotiate codec type failed."); - ReportRegisterFail(DSCREEN_REGISTER_FAIL, ERR_DH_SCREEN_SA_ENABLE_FAILED, GetAnonyString(devId_).c_str(), - GetAnonyString(dhId_).c_str(), "negotiate codec type failed."); + DHLOGE("DScreen::HandleEnable, videoParam_ is nullptr"); return; } - videoParam_->SetScreenWidth(attrJson[KEY_SCREEN_WIDTH].get()); - videoParam_->SetScreenHeight(attrJson[KEY_SCREEN_HEIGHT].get()); uint64_t screenId = ScreenMgrAdapter::GetInstance().CreateVirtualScreen(devId_, dhId_, videoParam_); if (screenId == SCREEN_ID_INVALID) { DHLOGE("HandleEnable, create virtual screen failed."); @@ -178,6 +158,33 @@ void DScreen::HandleEnable(const std::string ¶m, const std::string &taskId) "dscreen enable success."); } +std::shared_ptr DScreen::ParseInputScreenParam(const std::string ¶m, const std::string &taskId) +{ + json attrJson = json::parse(param, nullptr, false); + if (!CheckJsonData(attrJson)) { + DHLOGE("HandleEnable, check json data failed."); + dscreenCallback_->OnRegResult(shared_from_this(), taskId, ERR_DH_SCREEN_SA_ENABLE_FAILED, + "enable param json is invalid."); + ReportRegisterFail(DSCREEN_REGISTER_FAIL, ERR_DH_SCREEN_SA_ENABLE_FAILED, GetAnonyString(devId_).c_str(), + GetAnonyString(dhId_).c_str(), "check json data failed."); + SetState(DISABLED); + return nullptr; + } + int32_t ret = NegotiateCodecType(attrJson[KEY_HISTREAMER_VIDEO_DECODER]); + if (ret != DH_SUCCESS) { + DHLOGE("HandleEnable, negotiate codec type failed."); + dscreenCallback_->OnRegResult(shared_from_this(), taskId, ERR_DH_SCREEN_SA_ENABLE_FAILED, + "negotiate codec type failed."); + ReportRegisterFail(DSCREEN_REGISTER_FAIL, ERR_DH_SCREEN_SA_ENABLE_FAILED, GetAnonyString(devId_).c_str(), + GetAnonyString(dhId_).c_str(), "negotiate codec type failed."); + return nullptr; + } + auto videoParam = std::make_shared(); + videoParam->SetScreenWidth(attrJson[KEY_SCREEN_WIDTH].get()); + videoParam->SetScreenHeight(attrJson[KEY_SCREEN_HEIGHT].get()); + return videoParam; +} + void DScreen::HandleDisable(const std::string &taskId) { DHLOGI("HandleDisable, devId: %s, dhId: %s", GetAnonyString(devId_).c_str(), GetAnonyString(dhId_).c_str()); diff --git a/services/screenservice/test/unittest/sourceservice/dscreenmgr/2.0/src/dscreen_test.cpp b/services/screenservice/test/unittest/sourceservice/dscreenmgr/2.0/src/dscreen_test.cpp index 5534a2cd0e51e00516a98f4ff30eb7953c9fd6de..7acbaafbca4a2f54761480eadd4ccf6066a8a8ce 100644 --- a/services/screenservice/test/unittest/sourceservice/dscreenmgr/2.0/src/dscreen_test.cpp +++ b/services/screenservice/test/unittest/sourceservice/dscreenmgr/2.0/src/dscreen_test.cpp @@ -121,6 +121,19 @@ HWTEST_F(DScreenTestV2, HandleEnable_001, TestSize.Level1) EXPECT_EQ(SCREEN_ID_INVALID, dScreen_->screenId_); } +/** + * @tc.name: ParseInputScreenParam_001 + * @tc.desc: Verify the ParseInputScreenParam function failed. + * @tc.type: FUNC + * @tc.require: Issue Number + */ +HWTEST_F(DScreenTestV2, ParseInputScreenParam_001, TestSize.Level1) +{ + std::string param = "param"; + std::string taskId = "taskId"; + EXPECT_EQ(nullptr, dScreen_->ParseInputScreenParam(param, taskId)); +} + /** * @tc.name: HandleDisable_001 * @tc.desc: Verify the HandleDisable function failed.