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 17*cfbc8dc8SJayanth Othayoth #include "config.h" 18*cfbc8dc8SJayanth Othayoth 190aa0d114SJayanth Othayoth #include "argument.hpp" 20*cfbc8dc8SJayanth Othayoth #include "certs_manager.hpp" 210aa0d114SJayanth Othayoth 220aa0d114SJayanth Othayoth #include <iostream> 23*cfbc8dc8SJayanth 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 34*cfbc8dc8SJayanth Othayoth inline void capitalize(std::string& s) 35*cfbc8dc8SJayanth Othayoth { 36*cfbc8dc8SJayanth Othayoth s[0] = std::toupper(s[0]); 37*cfbc8dc8SJayanth Othayoth } 38*cfbc8dc8SJayanth 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"]); 46*cfbc8dc8SJayanth Othayoth if ((type == phosphor::certs::util::ArgumentParser::empty_string) || 47*cfbc8dc8SJayanth Othayoth !((type == phosphor::certs::SERVER) || 48*cfbc8dc8SJayanth Othayoth (type == phosphor::certs::CLIENT))) 490aa0d114SJayanth Othayoth { 50*cfbc8dc8SJayanth Othayoth ExitWithError("type not specified or invalid.", argv); 510aa0d114SJayanth Othayoth } 520aa0d114SJayanth Othayoth 530aa0d114SJayanth Othayoth auto endpoint = std::move((options)["endpoint"]); 540aa0d114SJayanth Othayoth if (endpoint == phosphor::certs::util::ArgumentParser::empty_string) 550aa0d114SJayanth Othayoth { 560aa0d114SJayanth Othayoth ExitWithError("endpoint not specified.", argv); 570aa0d114SJayanth Othayoth } 580aa0d114SJayanth Othayoth 590aa0d114SJayanth Othayoth auto path = std::move((options)["path"]); 600aa0d114SJayanth Othayoth if (path == phosphor::certs::util::ArgumentParser::empty_string) 610aa0d114SJayanth Othayoth { 620aa0d114SJayanth Othayoth ExitWithError("path not specified.", argv); 630aa0d114SJayanth Othayoth } 640aa0d114SJayanth Othayoth 65*cfbc8dc8SJayanth Othayoth // unit is an optional parameter 660aa0d114SJayanth Othayoth auto unit = std::move((options)["unit"]); 670aa0d114SJayanth Othayoth 68*cfbc8dc8SJayanth Othayoth auto bus = sdbusplus::bus::new_default(); 69*cfbc8dc8SJayanth Othayoth 70*cfbc8dc8SJayanth Othayoth auto objPath = std::string(OBJPATH) + '/' + type + '/' + endpoint; 71*cfbc8dc8SJayanth Othayoth 72*cfbc8dc8SJayanth Othayoth phosphor::certs::Manager manager(bus, objPath.c_str(), type, 73*cfbc8dc8SJayanth Othayoth std::move(unit), std::move(path)); 74*cfbc8dc8SJayanth Othayoth 75*cfbc8dc8SJayanth Othayoth // Adjusting Interface name as per std convention 76*cfbc8dc8SJayanth Othayoth capitalize(type); 77*cfbc8dc8SJayanth Othayoth capitalize(endpoint); 78*cfbc8dc8SJayanth Othayoth auto busName = std::string(BUSNAME) + '.' + type + '.' + endpoint; 79*cfbc8dc8SJayanth Othayoth bus.request_name(busName.c_str()); 80*cfbc8dc8SJayanth Othayoth 81*cfbc8dc8SJayanth Othayoth while (true) 82*cfbc8dc8SJayanth Othayoth { 83*cfbc8dc8SJayanth Othayoth // process dbus calls / signals discarding unhandled 84*cfbc8dc8SJayanth Othayoth bus.process_discard(); 85*cfbc8dc8SJayanth Othayoth bus.wait(); 86*cfbc8dc8SJayanth Othayoth } 870aa0d114SJayanth Othayoth return 0; 880aa0d114SJayanth Othayoth } 89