196279301Sopenharmony_ci/* 296279301Sopenharmony_ci * Copyright (c) 2022-2023 Huawei Device Co., Ltd. 396279301Sopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 496279301Sopenharmony_ci * you may not use this file except in compliance with the License. 596279301Sopenharmony_ci * You may obtain a copy of the License at 696279301Sopenharmony_ci * 796279301Sopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 896279301Sopenharmony_ci * 996279301Sopenharmony_ci * Unless required by applicable law or agreed to in writing, software 1096279301Sopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 1196279301Sopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 1296279301Sopenharmony_ci * See the License for the specific language governing permissions and 1396279301Sopenharmony_ci * limitations under the License. 1496279301Sopenharmony_ci */ 1596279301Sopenharmony_ci 1696279301Sopenharmony_ci#include "shell_command.h" 1796279301Sopenharmony_ci 1896279301Sopenharmony_ci#include <getopt.h> 1996279301Sopenharmony_ci#include "ans_log_wrapper.h" 2096279301Sopenharmony_ci 2196279301Sopenharmony_cinamespace OHOS { 2296279301Sopenharmony_cinamespace Notification { 2396279301Sopenharmony_ciShellCommand::ShellCommand(int argc, char *argv[], std::string name) 2496279301Sopenharmony_ci{ 2596279301Sopenharmony_ci opterr = 0; 2696279301Sopenharmony_ci argc_ = argc; 2796279301Sopenharmony_ci argv_ = argv; 2896279301Sopenharmony_ci name_ = name; 2996279301Sopenharmony_ci if (argc < MIN_ARGUMENT_NUMBER || argc > MAX_ARGUMENT_NUMBER) { 3096279301Sopenharmony_ci cmd_ = "help"; 3196279301Sopenharmony_ci return; 3296279301Sopenharmony_ci } 3396279301Sopenharmony_ci cmd_ = argv[1]; 3496279301Sopenharmony_ci for (int i = 2; i < argc; i++) { 3596279301Sopenharmony_ci argList_.push_back(argv[i]); 3696279301Sopenharmony_ci } 3796279301Sopenharmony_ci} 3896279301Sopenharmony_ci 3996279301Sopenharmony_ciShellCommand::~ShellCommand() 4096279301Sopenharmony_ci{} 4196279301Sopenharmony_ci 4296279301Sopenharmony_ciErrCode ShellCommand::OnCommand() 4396279301Sopenharmony_ci{ 4496279301Sopenharmony_ci int32_t result = OHOS::ERR_OK; 4596279301Sopenharmony_ci auto respond = commandMap_[cmd_]; 4696279301Sopenharmony_ci if (respond == nullptr) { 4796279301Sopenharmony_ci resultReceiver_.append(GetCommandErrorMsg()); 4896279301Sopenharmony_ci respond = commandMap_["help"]; 4996279301Sopenharmony_ci } 5096279301Sopenharmony_ci if (Init() == OHOS::ERR_OK) { 5196279301Sopenharmony_ci ANS_LOGD("Init is ERR_OK."); 5296279301Sopenharmony_ci respond(); 5396279301Sopenharmony_ci } else { 5496279301Sopenharmony_ci result = OHOS::ERR_INVALID_VALUE; 5596279301Sopenharmony_ci } 5696279301Sopenharmony_ci return result; 5796279301Sopenharmony_ci} 5896279301Sopenharmony_ci 5996279301Sopenharmony_cistd::string ShellCommand::ExecCommand() 6096279301Sopenharmony_ci{ 6196279301Sopenharmony_ci int32_t result = CreateCommandMap(); 6296279301Sopenharmony_ci if (result != OHOS::ERR_OK) { 6396279301Sopenharmony_ci ANS_LOGE("failed to create command map.\n"); 6496279301Sopenharmony_ci } 6596279301Sopenharmony_ci result = OnCommand(); 6696279301Sopenharmony_ci if (result != OHOS::ERR_OK) { 6796279301Sopenharmony_ci ANS_LOGE("failed to execute your command.\n"); 6896279301Sopenharmony_ci resultReceiver_ = "error: failed to execute your command.\n"; 6996279301Sopenharmony_ci } 7096279301Sopenharmony_ci return resultReceiver_; 7196279301Sopenharmony_ci} 7296279301Sopenharmony_ci 7396279301Sopenharmony_cistd::string ShellCommand::GetCommandErrorMsg() const 7496279301Sopenharmony_ci{ 7596279301Sopenharmony_ci ANS_LOGD("enter"); 7696279301Sopenharmony_ci std::string commandErrorMsg = 7796279301Sopenharmony_ci name_ + ": '" + cmd_ + "' is not a valid " + name_ + " command. See '" + name_ + " help'.\n"; 7896279301Sopenharmony_ci return commandErrorMsg; 7996279301Sopenharmony_ci} 8096279301Sopenharmony_ci 8196279301Sopenharmony_cistd::string ShellCommand::GetUnknownOptionMsg(std::string &unknownOption) const 8296279301Sopenharmony_ci{ 8396279301Sopenharmony_ci std::string result = ""; 8496279301Sopenharmony_ci if (optind < 0 || optind > argc_) { 8596279301Sopenharmony_ci return result; 8696279301Sopenharmony_ci } 8796279301Sopenharmony_ci result.append("error: unknown option"); 8896279301Sopenharmony_ci result.append(".\n"); 8996279301Sopenharmony_ci return result; 9096279301Sopenharmony_ci} 9196279301Sopenharmony_ci 9296279301Sopenharmony_cistd::string ShellCommand::GetMessageFromCode(const int32_t code) const 9396279301Sopenharmony_ci{ 9496279301Sopenharmony_ci ANS_LOGI("[%{public}s(%{public}s)] enter", __FILE__, __FUNCTION__); 9596279301Sopenharmony_ci ANS_LOGI("code = %{public}d", code); 9696279301Sopenharmony_ci std::string result = ""; 9796279301Sopenharmony_ci if (messageMap_.find(code) != messageMap_.end()) { 9896279301Sopenharmony_ci std::string message = messageMap_.at(code); 9996279301Sopenharmony_ci if (message.size() != 0) { 10096279301Sopenharmony_ci result.append(message + "\n"); 10196279301Sopenharmony_ci } 10296279301Sopenharmony_ci } 10396279301Sopenharmony_ci ANS_LOGI("result = %{public}s", result.c_str()); 10496279301Sopenharmony_ci return result; 10596279301Sopenharmony_ci} 10696279301Sopenharmony_ci} // namespace Notification 10796279301Sopenharmony_ci} // namespace OHOS