#pragma once #include "errors.hpp" #include #include #include #include namespace utils { namespace constants { constexpr std::string_view triggerDirStr = "/xyz/openbmc_project/Telemetry/Triggers/"; constexpr std::string_view reportDirStr = "/xyz/openbmc_project/Telemetry/Reports/"; constexpr std::string_view allowedCharactersInPath = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789_/"; constexpr size_t maxPrefixesInId = 1; constexpr size_t maxPrefixLength{TELEMETRY_MAX_PREFIX_LENGTH}; constexpr size_t maxIdNameLength{TELEMETRY_MAX_ID_NAME_LENGTH}; constexpr size_t maxDbusPathLength{TELEMETRY_MAX_DBUS_PATH_LENGTH}; constexpr size_t maxTriggeFullIdLength{maxDbusPathLength - triggerDirStr.length()}; constexpr size_t maxReportFullIdLength{maxDbusPathLength - reportDirStr.length()}; static_assert(maxPrefixesInId * (maxPrefixLength + 1) + maxIdNameLength <= maxTriggeFullIdLength, "Misconfigured prefix/id/name lengths."); static_assert(maxPrefixesInId * (maxPrefixLength + 1) + maxIdNameLength <= maxReportFullIdLength, "Misconfigured prefix/id/name lengths."); const sdbusplus::message::object_path triggerDirPath = sdbusplus::message::object_path(std::string(triggerDirStr)); const sdbusplus::message::object_path reportDirPath = sdbusplus::message::object_path(std::string(reportDirStr)); } // namespace constants inline bool isValidDbusPath(const std::string& path) { return (path.find_first_not_of(constants::allowedCharactersInPath) == std::string::npos) && !path.ends_with('/'); } inline void verifyIdCharacters(std::string_view id) { if (id.find_first_not_of(utils::constants::allowedCharactersInPath) != std::string::npos) { throw errors::InvalidArgument("Id", "Invalid character."); } } sdbusplus::message::object_path pathAppend(sdbusplus::message::object_path path, const std::string& appended); std::string reportPathToId(const sdbusplus::message::object_path& path); void verifyIdPrefixes(std::string_view id); } // namespace utils