summaryrefslogtreecommitdiff
path: root/redfish-core/include
diff options
context:
space:
mode:
authorEd Tanous <edtanous@google.com>2022-06-29 20:05:19 +0300
committerEd Tanous <edtanous@google.com>2022-12-15 23:03:47 +0300
commit079360ae6e04d3f2245e00d70f83d15c5cad3630 (patch)
treefcc89ce4e23a8fc63f18ad7ccf5cd044457861f0 /redfish-core/include
parent0fb5b5051bebfe1330627a02d8f7c83195f71ed3 (diff)
downloadbmcweb-079360ae6e04d3f2245e00d70f83d15c5cad3630.tar.xz
Prepare for boost::url upgrade
The new boost URL now interops properly with std::string_view, which is great, and cleans up a bunch of mediocre code to convert one to another. It has also been pulled into boost-proper, so we no longer need a boost-url dependency that's separate. Unfortunately, boost url makes these improvements by changing boost::string_view for boost::urls::const_string, which causes us to have some compile errors on the missing type. The bulk of these changes fall into a couple categories, and have to be executed in one commit. string() is replaced with buffer() on the url and url_view types boost::string_view is replaced by std::string_view for many times, in many cases removing a temporary that we had in the code previously. Tested: Code compiles with boost 1.81.0 beta. Redfish service validator passes. Pretty good unit test coverage for URL-specific use cases. Signed-off-by: Ed Tanous <edtanous@google.com> Change-Id: I8d3dc89b53d1cc390887fe53605d4867f75f76fd
Diffstat (limited to 'redfish-core/include')
-rw-r--r--redfish-core/include/event_service_manager.hpp2
-rw-r--r--redfish-core/include/redfish_aggregator.hpp9
-rw-r--r--redfish-core/include/utils/collection.hpp2
-rw-r--r--redfish-core/include/utils/query_param.hpp45
4 files changed, 26 insertions, 32 deletions
diff --git a/redfish-core/include/event_service_manager.hpp b/redfish-core/include/event_service_manager.hpp
index 7f3b43a8da..6f1e91b2d9 100644
--- a/redfish-core/include/event_service_manager.hpp
+++ b/redfish-core/include/event_service_manager.hpp
@@ -519,7 +519,7 @@ class Subscription : public persistent_data::UserSubscription
{
if (std::find(metricReportDefinitions.begin(),
metricReportDefinitions.end(),
- mrdUri.string()) == metricReportDefinitions.end())
+ mrdUri.buffer()) == metricReportDefinitions.end())
{
return;
}
diff --git a/redfish-core/include/redfish_aggregator.hpp b/redfish-core/include/redfish_aggregator.hpp
index 99da8ee1e0..8170b6436b 100644
--- a/redfish-core/include/redfish_aggregator.hpp
+++ b/redfish-core/include/redfish_aggregator.hpp
@@ -312,7 +312,7 @@ class RedfishAggregator
BMCWEB_LOG_ERROR << "Port value out of range";
return;
}
- url.set_port(static_cast<uint16_t>(*propVal));
+ url.set_port(std::to_string(static_cast<uint16_t>(*propVal)));
}
else if (prop.first == "AuthType")
@@ -435,8 +435,7 @@ class RedfishAggregator
}
// We didn't recognize the prefix and need to return a 404
- boost::urls::string_value name = req.urlView.segments().back();
- std::string_view nameStr(name.data(), name.size());
+ std::string_view nameStr = req.urlView.segments().back();
messages::resourceNotFound(asyncResp->res, "", nameStr);
}
@@ -461,9 +460,7 @@ class RedfishAggregator
// don't need to write an error code
if (isCollection == AggregationType::Resource)
{
- boost::urls::string_value name =
- sharedReq->urlView.segments().back();
- std::string_view nameStr(name.data(), name.size());
+ std::string_view nameStr = sharedReq->urlView.segments().back();
messages::resourceNotFound(asyncResp->res, "", nameStr);
}
return;
diff --git a/redfish-core/include/utils/collection.hpp b/redfish-core/include/utils/collection.hpp
index 97f622d8f4..f11730279d 100644
--- a/redfish-core/include/utils/collection.hpp
+++ b/redfish-core/include/utils/collection.hpp
@@ -29,7 +29,7 @@ inline void
const char* subtree = "/xyz/openbmc_project/inventory")
{
BMCWEB_LOG_DEBUG << "Get collection members for: "
- << collectionPath.string();
+ << collectionPath.buffer();
crow::connections::systemBus->async_method_call(
[collectionPath, aResp{std::move(aResp)}](
const boost::system::error_code ec,
diff --git a/redfish-core/include/utils/query_param.hpp b/redfish-core/include/utils/query_param.hpp
index fec5384b7e..bfe1001029 100644
--- a/redfish-core/include/utils/query_param.hpp
+++ b/redfish-core/include/utils/query_param.hpp
@@ -16,7 +16,6 @@
#include <boost/beast/http/status.hpp>
#include <boost/beast/http/verb.hpp>
#include <boost/url/params_view.hpp>
-#include <boost/url/string.hpp>
#include <nlohmann/json.hpp>
#include <algorithm>
@@ -374,80 +373,78 @@ inline bool getSelectParam(std::string_view value, Query& query)
return true;
}
-inline std::optional<Query>
- parseParameters(const boost::urls::params_view& urlParams,
- crow::Response& res)
+inline std::optional<Query> parseParameters(boost::urls::params_view urlParams,
+ crow::Response& res)
{
Query ret;
for (const boost::urls::params_view::value_type& it : urlParams)
{
- std::string_view key(it.key.data(), it.key.size());
- std::string_view value(it.value.data(), it.value.size());
- if (key == "only")
+ if (it.key == "only")
{
if (!it.value.empty())
{
- messages::queryParameterValueFormatError(res, value, key);
+ messages::queryParameterValueFormatError(res, it.value, it.key);
return std::nullopt;
}
ret.isOnly = true;
}
- else if (key == "$expand" && bmcwebInsecureEnableQueryParams)
+ else if (it.key == "$expand" && bmcwebInsecureEnableQueryParams)
{
- if (!getExpandType(value, ret))
+ if (!getExpandType(it.value, ret))
{
- messages::queryParameterValueFormatError(res, value, key);
+ messages::queryParameterValueFormatError(res, it.value, it.key);
return std::nullopt;
}
}
- else if (key == "$top")
+ else if (it.key == "$top")
{
- QueryError topRet = getTopParam(value, ret);
+ QueryError topRet = getTopParam(it.value, ret);
if (topRet == QueryError::ValueFormat)
{
- messages::queryParameterValueFormatError(res, value, key);
+ messages::queryParameterValueFormatError(res, it.value, it.key);
return std::nullopt;
}
if (topRet == QueryError::OutOfRange)
{
messages::queryParameterOutOfRange(
- res, value, "$top", "0-" + std::to_string(Query::maxTop));
+ res, it.value, "$top",
+ "0-" + std::to_string(Query::maxTop));
return std::nullopt;
}
}
- else if (key == "$skip")
+ else if (it.key == "$skip")
{
- QueryError topRet = getSkipParam(value, ret);
+ QueryError topRet = getSkipParam(it.value, ret);
if (topRet == QueryError::ValueFormat)
{
- messages::queryParameterValueFormatError(res, value, key);
+ messages::queryParameterValueFormatError(res, it.value, it.key);
return std::nullopt;
}
if (topRet == QueryError::OutOfRange)
{
messages::queryParameterOutOfRange(
- res, value, key,
+ res, it.value, it.key,
"0-" + std::to_string(std::numeric_limits<size_t>::max()));
return std::nullopt;
}
}
- else if (key == "$select")
+ else if (it.key == "$select")
{
- if (!getSelectParam(value, ret))
+ if (!getSelectParam(it.value, ret))
{
- messages::queryParameterValueFormatError(res, value, key);
+ messages::queryParameterValueFormatError(res, it.value, it.key);
return std::nullopt;
}
}
else
{
// Intentionally ignore other errors Redfish spec, 7.3.1
- if (key.starts_with("$"))
+ if (it.key.starts_with("$"))
{
// Services shall return... The HTTP 501 Not Implemented
// status code for any unsupported query parameters that
// start with $ .
- messages::queryParameterValueFormatError(res, value, key);
+ messages::queryParameterValueFormatError(res, it.value, it.key);
res.result(boost::beast::http::status::not_implemented);
return std::nullopt;
}