update name assignment part
Change-Id: I9655448b2d2ed927e36e55ac49357afa0470e507
diff --git a/src/name-assignments/assignment-param.cpp b/src/name-assignments/assignment-param.cpp
index e32665e..56da436 100644
--- a/src/name-assignments/assignment-param.cpp
+++ b/src/name-assignments/assignment-param.cpp
@@ -7,56 +7,30 @@
namespace ndn {
namespace ndncert {
-_LOG_INIT(ndncert.assignment.param);
-
NDNCERT_REGISTER_FUNCFACTORY(AssignmentParam, "param");
-AssignmentParam::AssignmentParam()
- : NameAssignmentFuncFactory("param")
+AssignmentParam::AssignmentParam(const std::string& format)
+ : NameAssignmentFuncFactory("param", format)
+{}
+
+std::vector<PartialName>
+AssignmentParam::assignName(const std::vector<std::tuple<std::string, std::string>>& params)
{
-}
-
-NameAssignmentFunc
-AssignmentParam::getFunction(const std::string &factoryParam) {
- std::list<std::string> paramList;
- size_t index = 0, startIndex = 0;
- while ((index = factoryParam.find("/", startIndex)) != std::string::npos) {
- auto component = factoryParam.substr(startIndex, index - startIndex);
- if (!component.empty()) {
- paramList.push_back(component);
- }
- startIndex = index + 1;
+ std::vector<PartialName> resultList;
+ Name result;
+ for (const auto& item : m_nameFormat) {
+ auto it = std::find_if(params.begin(), params.end(),
+ [&](const std::tuple<std::string, std::string>& e) { return std::get<0>(e) == item; });
+ if (it != params.end()) {
+ result.append(std::get<1>(*it));
}
- if (startIndex != factoryParam.size()) {
- paramList.push_back(factoryParam.substr(startIndex));
+ else {
+ return resultList;
}
- return [paramList](const std::vector<std::tuple<std::string, std::string>> params){
- if (params.size() > paramList.size() * 8) { // might be attack
- BOOST_THROW_EXCEPTION(std::runtime_error("Too many extra parameters given"));
- }
- std::map<std::string, std::string> paramMap;
- for (const auto& param : params) {
- paramMap[std::get<0>(param)] = std::get<1>(param);
- if (std::get<1>(param).size() == 0) { // empty parameter!
- return std::vector<PartialName>();
- }
- }
-
- //construct name
- PartialName name;
- for (const auto& field : paramList) {
- auto it = paramMap.find(field);
- if (it == paramMap.end()) {
- return std::vector<PartialName>();
- } else {
- name.append(it->second);
- }
- }
- std::vector<PartialName> nameList;
- nameList.push_back(name);
- return nameList;
- };
+ }
+ resultList.push_back(std::move(result));
+ return resultList;
}
-}
-}
+} // namespace ndncert
+} // namespace ndn