summaryrefslogtreecommitdiff
path: root/redfish-core/lib
diff options
context:
space:
mode:
Diffstat (limited to 'redfish-core/lib')
-rw-r--r--redfish-core/lib/message_registries.hpp261
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> &params) override
{
+ if (params.size() != 1)
+ {
+ messages::internalError(res);
+ res.end();
+ return;
+ }
+
+ const std::string &registry = 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> &params) 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 &registry = params[0];
+ const std::string &registry1 = 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> &params) 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> &params) 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);
}
}
}