29 #include <ndn-cxx/util/logger.hpp>
43 FaceQueryFilter filter;
44 filter.setRemoteUri(faceUri.toString());
45 return this->
execute(filter, allowMulti);
51 FaceQueryFilter filter;
52 filter.setFaceId(faceId);
59 const uint64_t* faceId = std::any_cast<uint64_t>(&faceIdOrUri);
60 if (faceId !=
nullptr) {
64 return this->
execute(std::any_cast<FaceUri>(faceIdOrUri), allowMulti);
75 if (m_filter.hasRemoteUri()) {
76 auto remoteUri = canonize(
"remote FaceUri", FaceUri(m_filter.getRemoteUri()));
80 m_filter.setRemoteUri(remoteUri->toString());
83 if (m_filter.hasLocalUri()) {
84 auto localUri = canonize(
"local FaceUri", FaceUri(m_filter.getLocalUri()));
88 m_filter.setLocalUri(localUri->toString());
93 if (m_results.size() == 0) {
95 m_errorReason =
"Face not found";
97 else if (m_results.size() > 1 && !allowMulti) {
99 m_errorReason =
"Multiple faces match the query";
105 std::optional<FaceUri>
106 FindFace::canonize(
const std::string& fieldName,
const FaceUri& uri)
109 if (!FaceUri::canCanonize(uri.getScheme())) {
110 NDN_LOG_DEBUG(
"Using " << fieldName <<
"=" << uri <<
" without canonization");
129 auto datasetCb = [
this] (
const auto& result) {
133 auto failureCb = [
this] (uint32_t code,
const auto& reason) {
135 m_errorReason =
"Error " + to_string(code) +
" when querying face: " + reason;
138 if (m_filter.empty()) {
139 m_ctx.
controller.fetch<ndn::nfd::FaceDataset>(
143 m_ctx.
controller.fetch<ndn::nfd::FaceQueryDataset>(
146 m_ctx.
face.processEvents();
152 std::set<uint64_t> faceIds;
153 for (
const FaceStatus& faceStatus : m_results) {
154 faceIds.insert(faceStatus.getFaceId());
162 BOOST_ASSERT(m_results.size() == 1);
163 return m_results.front();
170 for (
const auto& item : m_results) {
174 os << item.getFaceId() <<
" (local=" << item.getLocalUri() <<
')';
180 std::pair<std::optional<FaceUri>, std::string>
183 std::optional<FaceUri> result;
186 [&result] (
const auto& canonicalUri) { result = canonicalUri; },
187 [&error] (
const auto& errorReason) { error = errorReason; },
189 ctx.
face.processEvents();
191 return {result, error};
194 std::pair<FindFace::Code, std::string>
196 const std::string& error,
197 const std::string& field)
199 std::string msg =
"Error during canonization of ";
200 if (!field.empty()) {
203 msg +=
"'" + uri.toString() +
"': " + error;
Context for command execution.
ndn::nfd::CommandOptions makeCommandOptions() const
time::nanoseconds getTimeout() const
Print different string on first and subsequent usage.