diff options
Diffstat (limited to 'redfish-core/lib/message_registries.hpp')
-rw-r--r-- | redfish-core/lib/message_registries.hpp | 347 |
1 files changed, 171 insertions, 176 deletions
diff --git a/redfish-core/lib/message_registries.hpp b/redfish-core/lib/message_registries.hpp index e3bd5bf0b2..f770488c30 100644 --- a/redfish-core/lib/message_registries.hpp +++ b/redfish-core/lib/message_registries.hpp @@ -27,6 +27,26 @@ namespace redfish { +inline void handleMessageRegistryFileCollectionGet( + const crow::Request&, const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) +{ + // Collections don't include the static data added by SubRoute + // because it has a duplicate entry for members + + asyncResp->res.jsonValue = { + {"@odata.type", "#MessageRegistryFileCollection." + "MessageRegistryFileCollection"}, + {"@odata.id", "/redfish/v1/Registries"}, + {"Name", "MessageRegistryFile Collection"}, + {"Description", "Collection of MessageRegistryFiles"}, + {"Members@odata.count", 4}, + {"Members", + {{{"@odata.id", "/redfish/v1/Registries/Base"}}, + {{"@odata.id", "/redfish/v1/Registries/TaskEvent"}}, + {{"@odata.id", "/redfish/v1/Registries/ResourceEvent"}}, + {{"@odata.id", "/redfish/v1/Registries/OpenBMC"}}}}}; +} + inline void requestRoutesMessageRegistryFileCollection(App& app) { /** @@ -35,24 +55,63 @@ inline void requestRoutesMessageRegistryFileCollection(App& app) BMCWEB_ROUTE(app, "/redfish/v1/Registries/") .privileges(redfish::privileges::getMessageRegistryFileCollection) .methods(boost::beast::http::verb::get)( - [](const crow::Request&, - const std::shared_ptr<bmcweb::AsyncResp>& asyncResp) { - // Collections don't include the static data added by SubRoute - // because it has a duplicate entry for members - - asyncResp->res.jsonValue = { - {"@odata.type", "#MessageRegistryFileCollection." - "MessageRegistryFileCollection"}, - {"@odata.id", "/redfish/v1/Registries"}, - {"Name", "MessageRegistryFile Collection"}, - {"Description", "Collection of MessageRegistryFiles"}, - {"Members@odata.count", 4}, - {"Members", - {{{"@odata.id", "/redfish/v1/Registries/Base"}}, - {{"@odata.id", "/redfish/v1/Registries/TaskEvent"}}, - {{"@odata.id", "/redfish/v1/Registries/ResourceEvent"}}, - {{"@odata.id", "/redfish/v1/Registries/OpenBMC"}}}}}; - }); + handleMessageRegistryFileCollectionGet); +} + +inline void handleMessageRoutesMessageRegistryFileGet( + const crow::Request&, const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, + const std::string& registry) +{ + 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 if (registry == "ResourceEvent") + { + header = &message_registries::resource_event::header; + url = message_registries::resource_event::url; + } + else + { + messages::resourceNotFound( + asyncResp->res, "#MessageRegistryFile.v1_1_0.MessageRegistryFile", + registry); + return; + } + + asyncResp->res.jsonValue = { + {"@odata.id", "/redfish/v1/Registries/" + registry}, + {"@odata.type", "#MessageRegistryFile.v1_1_0.MessageRegistryFile"}, + {"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"}, + {"Uri", "/redfish/v1/Registries/" + registry + "/" + registry}}}}, + {"Location@odata.count", 1}}; + + if (url != nullptr) + { + asyncResp->res.jsonValue["Location"][0]["PublicationUri"] = url; + } } inline void requestRoutesMessageRegistryFile(App& app) @@ -60,172 +119,108 @@ inline void requestRoutesMessageRegistryFile(App& app) BMCWEB_ROUTE(app, "/redfish/v1/Registries/<str>/") .privileges(redfish::privileges::getMessageRegistryFile) .methods(boost::beast::http::verb::get)( - [](const crow::Request&, - const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, - const std::string& registry) { - 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 if (registry == "ResourceEvent") - { - header = &message_registries::resource_event::header; - url = message_registries::resource_event::url; - } - else - { - messages::resourceNotFound( - asyncResp->res, - "#MessageRegistryFile.v1_1_0.MessageRegistryFile", - registry); - return; - } + handleMessageRoutesMessageRegistryFileGet); +} + +inline void handleMessageRegistryGet( + const crow::Request&, const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, + const std::string& registry, const std::string& registry1) - asyncResp->res.jsonValue = { - {"@odata.id", "/redfish/v1/Registries/" + registry}, - {"@odata.type", - "#MessageRegistryFile.v1_1_0.MessageRegistryFile"}, - {"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"}, - {"Uri", "/redfish/v1/Registries/" + registry + "/" + - registry}}}}, - {"Location@odata.count", 1}}; - - if (url != nullptr) +{ + const message_registries::Header* header; + std::vector<const message_registries::MessageEntry*> registryEntries; + if (registry == "Base") + { + header = &message_registries::base::header; + for (const message_registries::MessageEntry& entry : + message_registries::base::registry) + { + registryEntries.emplace_back(&entry); + } + } + 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 if (registry == "ResourceEvent") + { + header = &message_registries::resource_event::header; + for (const message_registries::MessageEntry& entry : + message_registries::resource_event::registry) + { + registryEntries.emplace_back(&entry); + } + } + else + { + messages::resourceNotFound( + asyncResp->res, "#MessageRegistryFile.v1_1_0.MessageRegistryFile", + registry); + return; + } + + if (registry != registry1) + { + messages::resourceNotFound(asyncResp->res, header->type, registry1); + return; + } + + asyncResp->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 = asyncResp->res.jsonValue["Messages"]; + + // Go through the Message Registry and populate each Message + 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}, + {"MessageSeverity", message->second.messageSeverity}, + {"NumberOfArgs", message->second.numberOfArgs}, + {"Resolution", message->second.resolution}}; + if (message->second.numberOfArgs > 0) + { + nlohmann::json& messageParamArray = obj["ParamTypes"]; + messageParamArray = nlohmann::json::array(); + for (const char* str : message->second.paramTypes) + { + if (str == nullptr) { - asyncResp->res.jsonValue["Location"][0]["PublicationUri"] = - url; + break; } - }); + messageParamArray.push_back(str); + } + } + } } inline void requestRoutesMessageRegistry(App& app) { BMCWEB_ROUTE(app, "/redfish/v1/Registries/<str>/<str>/") .privileges(redfish::privileges::getMessageRegistryFile) - .methods(boost::beast::http::verb::get)( - [](const crow::Request&, - const std::shared_ptr<bmcweb::AsyncResp>& asyncResp, - const std::string& registry, const std::string& registry1) - - { - const message_registries::Header* header; - std::vector<const message_registries::MessageEntry*> - registryEntries; - if (registry == "Base") - { - header = &message_registries::base::header; - for (const message_registries::MessageEntry& entry : - message_registries::base::registry) - { - registryEntries.emplace_back(&entry); - } - } - 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 if (registry == "ResourceEvent") - { - header = &message_registries::resource_event::header; - for (const message_registries::MessageEntry& entry : - message_registries::resource_event::registry) - { - registryEntries.emplace_back(&entry); - } - } - else - { - messages::resourceNotFound( - asyncResp->res, - "#MessageRegistryFile.v1_1_0.MessageRegistryFile", - registry); - return; - } - - if (registry != registry1) - { - messages::resourceNotFound(asyncResp->res, header->type, - registry1); - return; - } - - asyncResp->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 = - asyncResp->res.jsonValue["Messages"]; - - // Go through the Message Registry and populate each Message - 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}, - {"MessageSeverity", message->second.messageSeverity}, - {"NumberOfArgs", message->second.numberOfArgs}, - {"Resolution", message->second.resolution}}; - if (message->second.numberOfArgs > 0) - { - nlohmann::json& messageParamArray = obj["ParamTypes"]; - messageParamArray = nlohmann::json::array(); - for (const char* str : message->second.paramTypes) - { - if (str == nullptr) - { - break; - } - messageParamArray.push_back(str); - } - } - } - }); + .methods(boost::beast::http::verb::get)(handleMessageRegistryGet); } - } // namespace redfish |