diff options
Diffstat (limited to 'redfish-core/lib')
-rw-r--r-- | redfish-core/lib/message_registries.hpp | 261 |
1 files changed, 131 insertions, 130 deletions
diff --git a/redfish-core/lib/message_registries.hpp b/redfish-core/lib/message_registries.hpp index 628c63a6ca..7c957e909b 100644 --- a/redfish-core/lib/message_registries.hpp +++ b/redfish-core/lib/message_registries.hpp @@ -19,6 +19,7 @@ #include "registries.hpp" #include "registries/base_message_registry.hpp" #include "registries/openbmc_message_registry.hpp" +#include "registries/task_event_message_registry.hpp" namespace redfish { @@ -55,21 +56,22 @@ class MessageRegistryFileCollection : public Node {"@odata.id", "/redfish/v1/Registries"}, {"Name", "MessageRegistryFile Collection"}, {"Description", "Collection of MessageRegistryFiles"}, - {"Members@odata.count", 2}, + {"Members@odata.count", 3}, {"Members", {{{"@odata.id", "/redfish/v1/Registries/Base"}}, + {{"@odata.id", "/redfish/v1/Registries/TaskEvent"}}, {{"@odata.id", "/redfish/v1/Registries/OpenBMC"}}}}}; res.end(); } }; -class BaseMessageRegistryFile : public Node +class MessageRegistryFile : public Node { public: template <typename CrowApp> - BaseMessageRegistryFile(CrowApp &app) : - Node(app, "/redfish/v1/Registries/Base/") + MessageRegistryFile(CrowApp &app) : + Node(app, "/redfish/v1/Registries/<str>/", std::string()) { entityPrivileges = { {boost::beast::http::verb::get, {{"Login"}}}, @@ -84,31 +86,74 @@ class BaseMessageRegistryFile : public Node void doGet(crow::Response &res, const crow::Request &req, const std::vector<std::string> ¶ms) override { + if (params.size() != 1) + { + messages::internalError(res); + res.end(); + return; + } + + const std::string ®istry = params[0]; + const message_registries::Header *header; + std::string dmtf = "DMTF "; + const char *url = nullptr; + + if (registry == "Base") + { + header = &message_registries::base::header; + url = message_registries::base::url; + } + else if (registry == "TaskEvent") + { + header = &message_registries::task_event::header; + url = message_registries::task_event::url; + } + else if (registry == "OpenBMC") + { + header = &message_registries::openbmc::header; + dmtf.clear(); + } + else + { + messages::resourceNotFound( + res, "#MessageRegistryFile.v1_1_0.MessageRegistryFile", + registry); + res.end(); + return; + } + res.jsonValue = { - {"@odata.id", "/redfish/v1/Registries/Base"}, + {"@odata.id", "/redfish/v1/Registries/" + registry}, {"@odata.type", "#MessageRegistryFile.v1_1_0.MessageRegistryFile"}, - {"Name", "Base Message Registry File"}, - {"Description", "DMTF Base Message Registry File Location"}, - {"Id", message_registries::base::header.registryPrefix}, - {"Registry", message_registries::base::header.id}, + {"Name", registry + " Message Registry File"}, + {"Description", + dmtf + registry + " Message Registry File Location"}, + {"Id", header->registryPrefix}, + {"Registry", header->id}, {"Languages", {"en"}}, {"Languages@odata.count", 1}, {"Location", {{{"Language", "en"}, - {"PublicationUri", - "https://redfish.dmtf.org/registries/Base.1.4.0.json"}, - {"Uri", "/redfish/v1/Registries/Base/Base"}}}}, + {"Uri", + "/redfish/v1/Registries/" + registry + "/" + registry}}}}, {"Location@odata.count", 1}}; + + if (url != nullptr) + { + res.jsonValue["Location"][0]["PublicationUri"] = url; + } + res.end(); } }; -class BaseMessageRegistry : public Node +class MessageRegistry : public Node { public: template <typename CrowApp> - BaseMessageRegistry(CrowApp &app) : - Node(app, "/redfish/v1/Registries/Base/Base/") + MessageRegistry(CrowApp &app) : + Node(app, "/redfish/v1/Registries/<str>/<str>/", std::string(), + std::string()) { entityPrivileges = { {boost::beast::http::verb::get, {{"Login"}}}, @@ -123,136 +168,92 @@ class BaseMessageRegistry : public Node void doGet(crow::Response &res, const crow::Request &req, const std::vector<std::string> ¶ms) override { - res.jsonValue = { - {"@Redfish.Copyright", message_registries::base::header.copyright}, - {"@odata.type", message_registries::base::header.type}, - {"Id", message_registries::base::header.id}, - {"Name", message_registries::base::header.name}, - {"Language", message_registries::base::header.language}, - {"Description", message_registries::base::header.description}, - {"RegistryPrefix", message_registries::base::header.registryPrefix}, - {"RegistryVersion", - message_registries::base::header.registryVersion}, - {"OwningEntity", message_registries::base::header.owningEntity}}; + if (params.size() != 2) + { + messages::internalError(res); + res.end(); + return; + } - nlohmann::json &messageObj = res.jsonValue["Messages"]; + const std::string ®istry = params[0]; + const std::string ®istry1 = params[1]; - // Go through the Message Registry and populate each Message - for (const message_registries::MessageEntry &message : - message_registries::base::registry) + const message_registries::Header *header; + std::vector<const message_registries::MessageEntry *> registryEntries; + if (registry == "Base") { - nlohmann::json &obj = messageObj[message.first]; - obj = {{"Description", message.second.description}, - {"Message", message.second.message}, - {"Severity", message.second.severity}, - {"NumberOfArgs", message.second.numberOfArgs}, - {"Resolution", message.second.resolution}}; - if (message.second.numberOfArgs > 0) + header = &message_registries::base::header; + for (const message_registries::MessageEntry &entry : + message_registries::base::registry) { - nlohmann::json &messageParamArray = obj["ParamTypes"]; - for (const char *str : message.second.paramTypes) - { - if (str == nullptr) - { - break; - } - messageParamArray.push_back(str); - } + registryEntries.emplace_back(&entry); } } - res.end(); - } -}; - -class OpenBMCMessageRegistryFile : public Node -{ - public: - template <typename CrowApp> - OpenBMCMessageRegistryFile(CrowApp &app) : - Node(app, "/redfish/v1/Registries/OpenBMC/") - { - entityPrivileges = { - {boost::beast::http::verb::get, {{"Login"}}}, - {boost::beast::http::verb::head, {{"Login"}}}, - {boost::beast::http::verb::patch, {{"ConfigureManager"}}}, - {boost::beast::http::verb::put, {{"ConfigureManager"}}}, - {boost::beast::http::verb::delete_, {{"ConfigureManager"}}}, - {boost::beast::http::verb::post, {{"ConfigureManager"}}}}; - } - - private: - void doGet(crow::Response &res, const crow::Request &req, - const std::vector<std::string> ¶ms) override - { - res.jsonValue = { - {"@odata.id", "/redfish/v1/Registries/OpenBMC"}, - {"@odata.type", "#MessageRegistryFile.v1_1_0.MessageRegistryFile"}, - {"Name", "Open BMC Message Registry File"}, - {"Description", "Open BMC Message Registry File Location"}, - {"Id", message_registries::openbmc::header.registryPrefix}, - {"Registry", message_registries::openbmc::header.id}, - {"Languages", {"en"}}, - {"Languages@odata.count", 1}, - {"Location", - {{{"Language", "en"}, - {"Uri", "/redfish/v1/Registries/OpenBMC/OpenBMC"}}}}, - {"Location@odata.count", 1}}; - - res.end(); - } -}; + else if (registry == "TaskEvent") + { + header = &message_registries::task_event::header; + for (const message_registries::MessageEntry &entry : + message_registries::task_event::registry) + { + registryEntries.emplace_back(&entry); + } + } + else if (registry == "OpenBMC") + { + header = &message_registries::openbmc::header; + for (const message_registries::MessageEntry &entry : + message_registries::openbmc::registry) + { + registryEntries.emplace_back(&entry); + } + } + else + { + messages::resourceNotFound( + res, "#MessageRegistryFile.v1_1_0.MessageRegistryFile", + registry); + res.end(); + return; + } -class OpenBMCMessageRegistry : public Node -{ - public: - template <typename CrowApp> - OpenBMCMessageRegistry(CrowApp &app) : - Node(app, "/redfish/v1/Registries/OpenBMC/OpenBMC/") - { - entityPrivileges = { - {boost::beast::http::verb::get, {{"Login"}}}, - {boost::beast::http::verb::head, {{"Login"}}}, - {boost::beast::http::verb::patch, {{"ConfigureManager"}}}, - {boost::beast::http::verb::put, {{"ConfigureManager"}}}, - {boost::beast::http::verb::delete_, {{"ConfigureManager"}}}, - {boost::beast::http::verb::post, {{"ConfigureManager"}}}}; - } + if (registry != registry1) + { + messages::resourceNotFound(res, header->type, registry1); + res.end(); + return; + } - private: - void doGet(crow::Response &res, const crow::Request &req, - const std::vector<std::string> ¶ms) override - { - res.jsonValue = { - {"@Redfish.Copyright", - message_registries::openbmc::header.copyright}, - {"@odata.type", message_registries::openbmc::header.type}, - {"Id", message_registries::openbmc::header.id}, - {"Name", message_registries::openbmc::header.name}, - {"Language", message_registries::openbmc::header.language}, - {"Description", message_registries::openbmc::header.description}, - {"RegistryPrefix", - message_registries::openbmc::header.registryPrefix}, - {"RegistryVersion", - message_registries::openbmc::header.registryVersion}, - {"OwningEntity", message_registries::openbmc::header.owningEntity}}; + res.jsonValue = {{"@Redfish.Copyright", header->copyright}, + {"@odata.type", header->type}, + {"Id", header->id}, + {"Name", header->name}, + {"Language", header->language}, + {"Description", header->description}, + {"RegistryPrefix", header->registryPrefix}, + {"RegistryVersion", header->registryVersion}, + {"OwningEntity", header->owningEntity}}; nlohmann::json &messageObj = res.jsonValue["Messages"]; + // Go through the Message Registry and populate each Message - for (const message_registries::MessageEntry &message : - message_registries::openbmc::registry) + for (const message_registries::MessageEntry *message : registryEntries) { - nlohmann::json &obj = messageObj[message.first]; - obj = {{"Description", message.second.description}, - {"Message", message.second.message}, - {"Severity", message.second.severity}, - {"NumberOfArgs", message.second.numberOfArgs}, - {"Resolution", message.second.resolution}}; - if (message.second.numberOfArgs > 0) + nlohmann::json &obj = messageObj[message->first]; + obj = {{"Description", message->second.description}, + {"Message", message->second.message}, + {"Severity", message->second.severity}, + {"NumberOfArgs", message->second.numberOfArgs}, + {"Resolution", message->second.resolution}}; + if (message->second.numberOfArgs > 0) { nlohmann::json &messageParamArray = obj["ParamTypes"]; - for (size_t i = 0; i < message.second.numberOfArgs; i++) + for (const char *str : message->second.paramTypes) { - messageParamArray.push_back(message.second.paramTypes[i]); + if (str == nullptr) + { + break; + } + messageParamArray.push_back(str); } } } |