1*d1d411f9SSui Chen #include "registries.hpp" 2*d1d411f9SSui Chen 3*d1d411f9SSui Chen #include "registries/base_message_registry.hpp" 4*d1d411f9SSui Chen #include "registries/openbmc_message_registry.hpp" 5*d1d411f9SSui Chen #include "str_utility.hpp" 6*d1d411f9SSui Chen 7*d1d411f9SSui Chen #include <string> 8*d1d411f9SSui Chen #include <vector> 9*d1d411f9SSui Chen 10*d1d411f9SSui Chen namespace redfish::registries 11*d1d411f9SSui Chen { 12*d1d411f9SSui Chen 13*d1d411f9SSui Chen const Message* getMessageFromRegistry(const std::string& messageKey, 14*d1d411f9SSui Chen std::span<const MessageEntry> registry) 15*d1d411f9SSui Chen { 16*d1d411f9SSui Chen std::span<const MessageEntry>::iterator messageIt = 17*d1d411f9SSui Chen std::find_if(registry.begin(), registry.end(), 18*d1d411f9SSui Chen [&messageKey](const MessageEntry& messageEntry) { 19*d1d411f9SSui Chen return std::strcmp(messageEntry.first, messageKey.c_str()) == 0; 20*d1d411f9SSui Chen }); 21*d1d411f9SSui Chen if (messageIt != registry.end()) 22*d1d411f9SSui Chen { 23*d1d411f9SSui Chen return &messageIt->second; 24*d1d411f9SSui Chen } 25*d1d411f9SSui Chen 26*d1d411f9SSui Chen return nullptr; 27*d1d411f9SSui Chen } 28*d1d411f9SSui Chen 29*d1d411f9SSui Chen const Message* getMessage(std::string_view messageID) 30*d1d411f9SSui Chen { 31*d1d411f9SSui Chen // Redfish MessageIds are in the form 32*d1d411f9SSui Chen // RegistryName.MajorVersion.MinorVersion.MessageKey, so parse it to find 33*d1d411f9SSui Chen // the right Message 34*d1d411f9SSui Chen std::vector<std::string> fields; 35*d1d411f9SSui Chen fields.reserve(4); 36*d1d411f9SSui Chen bmcweb::split(fields, messageID, '.'); 37*d1d411f9SSui Chen const std::string& registryName = fields[0]; 38*d1d411f9SSui Chen const std::string& messageKey = fields[3]; 39*d1d411f9SSui Chen 40*d1d411f9SSui Chen // Find the right registry and check it for the MessageKey 41*d1d411f9SSui Chen if (std::string(base::header.registryPrefix) == registryName) 42*d1d411f9SSui Chen { 43*d1d411f9SSui Chen return getMessageFromRegistry( 44*d1d411f9SSui Chen messageKey, std::span<const MessageEntry>(base::registry)); 45*d1d411f9SSui Chen } 46*d1d411f9SSui Chen if (std::string(openbmc::header.registryPrefix) == registryName) 47*d1d411f9SSui Chen { 48*d1d411f9SSui Chen return getMessageFromRegistry( 49*d1d411f9SSui Chen messageKey, std::span<const MessageEntry>(openbmc::registry)); 50*d1d411f9SSui Chen } 51*d1d411f9SSui Chen return nullptr; 52*d1d411f9SSui Chen } 53*d1d411f9SSui Chen 54*d1d411f9SSui Chen } // namespace redfish::registries 55