10aa0d114SJayanth Othayoth /** 20aa0d114SJayanth Othayoth * Copyright © 2018 IBM Corporation 30aa0d114SJayanth Othayoth * 40aa0d114SJayanth Othayoth * Licensed under the Apache License, Version 2.0 (the "License"); 50aa0d114SJayanth Othayoth * you may not use this file except in compliance with the License. 60aa0d114SJayanth Othayoth * You may obtain a copy of the License at 70aa0d114SJayanth Othayoth * 80aa0d114SJayanth Othayoth * http://www.apache.org/licenses/LICENSE-2.0 90aa0d114SJayanth Othayoth * 100aa0d114SJayanth Othayoth * Unless required by applicable law or agreed to in writing, software 110aa0d114SJayanth Othayoth * distributed under the License is distributed on an "AS IS" BASIS, 120aa0d114SJayanth Othayoth * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 130aa0d114SJayanth Othayoth * See the License for the specific language governing permissions and 140aa0d114SJayanth Othayoth * limitations under the License. 150aa0d114SJayanth Othayoth */ 160aa0d114SJayanth Othayoth 17cfbc8dc8SJayanth Othayoth #include "config.h" 18cfbc8dc8SJayanth Othayoth 190aa0d114SJayanth Othayoth #include "argument.hpp" 20cfbc8dc8SJayanth Othayoth #include "certs_manager.hpp" 210aa0d114SJayanth Othayoth 220aa0d114SJayanth Othayoth #include <iostream> 23cfbc8dc8SJayanth Othayoth #include <locale> 240aa0d114SJayanth Othayoth #include <string> 250aa0d114SJayanth Othayoth 260aa0d114SJayanth Othayoth static void ExitWithError(const char* err, char** argv) 270aa0d114SJayanth Othayoth { 280aa0d114SJayanth Othayoth phosphor::certs::util::ArgumentParser::usage(argv); 290aa0d114SJayanth Othayoth std::cerr << std::endl; 300aa0d114SJayanth Othayoth std::cerr << "ERROR: " << err << std::endl; 310aa0d114SJayanth Othayoth exit(EXIT_FAILURE); 320aa0d114SJayanth Othayoth } 330aa0d114SJayanth Othayoth 34cfbc8dc8SJayanth Othayoth inline void capitalize(std::string& s) 35cfbc8dc8SJayanth Othayoth { 36cfbc8dc8SJayanth Othayoth s[0] = std::toupper(s[0]); 37cfbc8dc8SJayanth Othayoth } 38cfbc8dc8SJayanth Othayoth 390aa0d114SJayanth Othayoth int main(int argc, char** argv) 400aa0d114SJayanth Othayoth { 410aa0d114SJayanth Othayoth // Read arguments. 420aa0d114SJayanth Othayoth auto options = phosphor::certs::util::ArgumentParser(argc, argv); 430aa0d114SJayanth Othayoth 440aa0d114SJayanth Othayoth // Parse arguments 450aa0d114SJayanth Othayoth auto type = std::move((options)["type"]); 46cfbc8dc8SJayanth Othayoth if ((type == phosphor::certs::util::ArgumentParser::empty_string) || 47cfbc8dc8SJayanth Othayoth !((type == phosphor::certs::SERVER) || 48b50789ceSJayanth Othayoth (type == phosphor::certs::CLIENT) || 49b50789ceSJayanth Othayoth (type == phosphor::certs::AUTHORITY))) 500aa0d114SJayanth Othayoth { 51cfbc8dc8SJayanth Othayoth ExitWithError("type not specified or invalid.", argv); 520aa0d114SJayanth Othayoth } 530aa0d114SJayanth Othayoth 540aa0d114SJayanth Othayoth auto endpoint = std::move((options)["endpoint"]); 550aa0d114SJayanth Othayoth if (endpoint == phosphor::certs::util::ArgumentParser::empty_string) 560aa0d114SJayanth Othayoth { 570aa0d114SJayanth Othayoth ExitWithError("endpoint not specified.", argv); 580aa0d114SJayanth Othayoth } 590aa0d114SJayanth Othayoth 600aa0d114SJayanth Othayoth auto path = std::move((options)["path"]); 610aa0d114SJayanth Othayoth if (path == phosphor::certs::util::ArgumentParser::empty_string) 620aa0d114SJayanth Othayoth { 630aa0d114SJayanth Othayoth ExitWithError("path not specified.", argv); 640aa0d114SJayanth Othayoth } 650aa0d114SJayanth Othayoth 66cfbc8dc8SJayanth Othayoth // unit is an optional parameter 670aa0d114SJayanth Othayoth auto unit = std::move((options)["unit"]); 680aa0d114SJayanth Othayoth 69cfbc8dc8SJayanth Othayoth auto bus = sdbusplus::bus::new_default(); 70cfbc8dc8SJayanth Othayoth 71cfbc8dc8SJayanth Othayoth auto objPath = std::string(OBJPATH) + '/' + type + '/' + endpoint; 72cfbc8dc8SJayanth Othayoth 73*6ceec40bSMarri Devender Rao // Add sdbusplus ObjectManager 74*6ceec40bSMarri Devender Rao sdbusplus::server::manager::manager objManager(bus, objPath.c_str()); 75*6ceec40bSMarri Devender Rao 76cfbc8dc8SJayanth Othayoth phosphor::certs::Manager manager(bus, objPath.c_str(), type, 77cfbc8dc8SJayanth Othayoth std::move(unit), std::move(path)); 78cfbc8dc8SJayanth Othayoth 79cfbc8dc8SJayanth Othayoth // Adjusting Interface name as per std convention 80cfbc8dc8SJayanth Othayoth capitalize(type); 81cfbc8dc8SJayanth Othayoth capitalize(endpoint); 82cfbc8dc8SJayanth Othayoth auto busName = std::string(BUSNAME) + '.' + type + '.' + endpoint; 83cfbc8dc8SJayanth Othayoth bus.request_name(busName.c_str()); 84cfbc8dc8SJayanth Othayoth 85cfbc8dc8SJayanth Othayoth while (true) 86cfbc8dc8SJayanth Othayoth { 87cfbc8dc8SJayanth Othayoth // process dbus calls / signals discarding unhandled 88cfbc8dc8SJayanth Othayoth bus.process_discard(); 89cfbc8dc8SJayanth Othayoth bus.wait(); 90cfbc8dc8SJayanth Othayoth } 910aa0d114SJayanth Othayoth return 0; 920aa0d114SJayanth Othayoth } 93