/** * Copyright © 2018 IBM Corporation * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ #include "config.h" #include "argument.hpp" #include "certs_manager.hpp" #include #include #include static void ExitWithError(const char* err, char** argv) { phosphor::certs::util::ArgumentParser::usage(argv); std::cerr << std::endl; std::cerr << "ERROR: " << err << std::endl; exit(EXIT_FAILURE); } inline void capitalize(std::string& s) { s[0] = std::toupper(s[0]); } int main(int argc, char** argv) { // Read arguments. auto options = phosphor::certs::util::ArgumentParser(argc, argv); // Parse arguments auto type = std::move((options)["type"]); if ((type == phosphor::certs::util::ArgumentParser::empty_string) || !((type == phosphor::certs::SERVER) || (type == phosphor::certs::CLIENT) || (type == phosphor::certs::AUTHORITY))) { ExitWithError("type not specified or invalid.", argv); } auto endpoint = std::move((options)["endpoint"]); if (endpoint == phosphor::certs::util::ArgumentParser::empty_string) { ExitWithError("endpoint not specified.", argv); } auto path = std::move((options)["path"]); if (path == phosphor::certs::util::ArgumentParser::empty_string) { ExitWithError("path not specified.", argv); } // unit is an optional parameter auto unit = std::move((options)["unit"]); auto bus = sdbusplus::bus::new_default(); auto objPath = std::string(OBJPATH) + '/' + type + '/' + endpoint; // Add sdbusplus ObjectManager sdbusplus::server::manager::manager objManager(bus, objPath.c_str()); phosphor::certs::Manager manager(bus, objPath.c_str(), type, std::move(unit), std::move(path)); // Adjusting Interface name as per std convention capitalize(type); capitalize(endpoint); auto busName = std::string(BUSNAME) + '.' + type + '.' + endpoint; bus.request_name(busName.c_str()); while (true) { // process dbus calls / signals discarding unhandled bus.process_discard(); bus.wait(); } return 0; }