12dc7c57fSopenharmony_ci/* 22dc7c57fSopenharmony_ci * Copyright (c) 2022 Huawei Device Co., Ltd. 32dc7c57fSopenharmony_ci * Licensed under the Apache License, Version 2.0 (the "License"); 42dc7c57fSopenharmony_ci * you may not use this file except in compliance with the License. 52dc7c57fSopenharmony_ci * You may obtain a copy of the License at 62dc7c57fSopenharmony_ci * 72dc7c57fSopenharmony_ci * http://www.apache.org/licenses/LICENSE-2.0 82dc7c57fSopenharmony_ci * 92dc7c57fSopenharmony_ci * Unless required by applicable law or agreed to in writing, software 102dc7c57fSopenharmony_ci * distributed under the License is distributed on an "AS IS" BASIS, 112dc7c57fSopenharmony_ci * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 122dc7c57fSopenharmony_ci * See the License for the specific language governing permissions and 132dc7c57fSopenharmony_ci * limitations under the License. 142dc7c57fSopenharmony_ci */ 152dc7c57fSopenharmony_ci 162dc7c57fSopenharmony_ci#include "shell_command.h" 172dc7c57fSopenharmony_ci 182dc7c57fSopenharmony_ci#include <getopt.h> 192dc7c57fSopenharmony_ci#include <utility> 202dc7c57fSopenharmony_ci 212dc7c57fSopenharmony_ci#include "event_log_wrapper.h" 222dc7c57fSopenharmony_ci 232dc7c57fSopenharmony_cinamespace OHOS { 242dc7c57fSopenharmony_cinamespace EventFwk { 252dc7c57fSopenharmony_ciShellCommand::ShellCommand(int argc, char *argv[], std::string name) 262dc7c57fSopenharmony_ci{ 272dc7c57fSopenharmony_ci opterr = 0; 282dc7c57fSopenharmony_ci argc_ = argc; 292dc7c57fSopenharmony_ci argv_ = argv; 302dc7c57fSopenharmony_ci name_ = name; 312dc7c57fSopenharmony_ci 322dc7c57fSopenharmony_ci if (argc < MIN_ARGUMENT_NUMBER) { 332dc7c57fSopenharmony_ci cmd_ = "help"; 342dc7c57fSopenharmony_ci return; 352dc7c57fSopenharmony_ci } 362dc7c57fSopenharmony_ci cmd_ = argv[1]; 372dc7c57fSopenharmony_ci for (int i = 2; i < argc; i++) { 382dc7c57fSopenharmony_ci argList_.emplace_back(argv[i]); 392dc7c57fSopenharmony_ci } 402dc7c57fSopenharmony_ci} 412dc7c57fSopenharmony_ci 422dc7c57fSopenharmony_ciShellCommand::~ShellCommand() = default; 432dc7c57fSopenharmony_ci 442dc7c57fSopenharmony_ciErrCode ShellCommand::OnCommand() 452dc7c57fSopenharmony_ci{ 462dc7c57fSopenharmony_ci int result = OHOS::ERR_OK; 472dc7c57fSopenharmony_ci auto respond = commandMap_[cmd_]; 482dc7c57fSopenharmony_ci if (respond == nullptr) { 492dc7c57fSopenharmony_ci resultReceiver_.append(GetCommandErrorMsg()); 502dc7c57fSopenharmony_ci respond = commandMap_["help"]; 512dc7c57fSopenharmony_ci } 522dc7c57fSopenharmony_ci respond(); 532dc7c57fSopenharmony_ci return result; 542dc7c57fSopenharmony_ci} 552dc7c57fSopenharmony_ci 562dc7c57fSopenharmony_cistd::string ShellCommand::ExecCommand() 572dc7c57fSopenharmony_ci{ 582dc7c57fSopenharmony_ci int result = CreateCommandMap(); 592dc7c57fSopenharmony_ci if (result != OHOS::ERR_OK) { 602dc7c57fSopenharmony_ci EVENT_LOGE("failed to create command map.\n"); 612dc7c57fSopenharmony_ci } 622dc7c57fSopenharmony_ci result = OnCommand(); 632dc7c57fSopenharmony_ci if (result != OHOS::ERR_OK) { 642dc7c57fSopenharmony_ci EVENT_LOGE("failed to execute your command.\n"); 652dc7c57fSopenharmony_ci resultReceiver_ = "error: failed to execute your command.\n"; 662dc7c57fSopenharmony_ci } 672dc7c57fSopenharmony_ci return resultReceiver_; 682dc7c57fSopenharmony_ci} 692dc7c57fSopenharmony_ci 702dc7c57fSopenharmony_cistd::string ShellCommand::GetCommandErrorMsg() const 712dc7c57fSopenharmony_ci{ 722dc7c57fSopenharmony_ci return name_ + ": '" + cmd_ + "' is not a valid " + name_ + " command. See '" + name_ + " help'.\n"; 732dc7c57fSopenharmony_ci} 742dc7c57fSopenharmony_ci} // namespace EventFwk 752dc7c57fSopenharmony_ci} // namespace OHOS