1/* 2 * Copyright (c) 2022-2023 Huawei Device Co., Ltd. 3 * Licensed under the Apache License, Version 2.0 (the "License"); 4 * you may not use this file except in compliance with the License. 5 * You may obtain a copy of the License at 6 * 7 * http://www.apache.org/licenses/LICENSE-2.0 8 * 9 * Unless required by applicable law or agreed to in writing, software 10 * distributed under the License is distributed on an "AS IS" BASIS, 11 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12 * See the License for the specific language governing permissions and 13 * limitations under the License. 14 */ 15 16#include "distributed_ability_manager_dumper.h" 17 18#include "accesstoken_kit.h" 19#include "base/continuationmgr_log.h" 20#include "distributed_ability_manager_service.h" 21#include "ipc_skeleton.h" 22 23namespace OHOS { 24namespace DistributedSchedule { 25namespace { 26const std::string TAG = "ContinuationManagerDumper"; 27const std::string HIDUMPER_PROCESS_NAME = "hidumper_service"; 28const std::string ARGS_HELP = "-h"; 29const std::string ARGS_APP_REGISTER_INFO = "-register"; 30constexpr size_t MIN_ARGS_SIZE = 1; 31} 32 33bool DistributedAbilityManagerDumper::Dump(const std::vector<std::string>& args, std::string& result) 34{ 35 result.clear(); 36 if (!CanDump()) { 37 result.append("Dump failed, not allowed"); 38 return false; 39 } 40 if (args.size() < MIN_ARGS_SIZE) { 41 return DumpDefault(result); 42 } 43 if (args.size() == MIN_ARGS_SIZE) { 44 // -h 45 if (args[0] == ARGS_HELP) { 46 ShowHelp(result); 47 return true; 48 } 49 // -register 50 if (args[0] == ARGS_APP_REGISTER_INFO) { 51 ShowAppRegisterInfo(result); 52 return true; 53 } 54 } 55 IllegalInput(result); 56 return false; 57} 58 59bool DistributedAbilityManagerDumper::CanDump() 60{ 61 uint32_t accessToken = IPCSkeleton::GetCallingTokenID(); 62 Security::AccessToken::NativeTokenInfo nativeTokenInfo; 63 int32_t result = Security::AccessToken::AccessTokenKit::GetNativeTokenInfo(accessToken, nativeTokenInfo); 64 if (result == ERR_OK && nativeTokenInfo.processName == HIDUMPER_PROCESS_NAME) { 65 return true; 66 } 67 return false; 68} 69 70bool DistributedAbilityManagerDumper::DumpDefault(std::string& result) 71{ 72 result.append("ContinuationManagerService Dump\n") 73 .append("\n"); 74 ShowAppRegisterInfo(result); 75 return true; 76} 77 78void DistributedAbilityManagerDumper::ShowAppRegisterInfo(std::string& result) 79{ 80 DistributedAbilityManagerService::GetInstance().DumpAppRegisterInfo(result); 81} 82 83void DistributedAbilityManagerDumper::ShowHelp(std::string& result) 84{ 85 result.append("ContinuationManagerService Dump options:\n") 86 .append(" [-h] [cmd]...\n") 87 .append("cmd maybe one of:\n") 88 .append(" -register: show all application register infos.\n"); 89} 90 91void DistributedAbilityManagerDumper::IllegalInput(std::string& result) 92{ 93 result.append("The arguments are illegal and you can enter '-h' for help.\n"); 94} 95} // namespace DistributedSchedule 96} // namespace OHOS