FindFace::Code FindFace::execute(const FaceUri& faceUri, bool allowMulti) { FaceQueryFilter filter; filter.setRemoteUri(faceUri.toString()); return this->execute(filter, allowMulti); }
void FaceIdFetcher::startFaceCreate(const FaceUri& canonicalUri) { ndn::nfd::ControlParameters parameters; parameters.setUri(canonicalUri.toString()); m_controller.start<ndn::nfd::FaceCreateCommand>(parameters, [this] (const ndn::nfd::ControlParameters& result) { succeed(result.getFaceId()); }, bind(&FaceIdFetcher::onFaceCreateError, this, _1, "Face creation failed")); }
void FaceIdFetcher::onCanonizeSuccess(const FaceUri& canonicalUri) { ndn::Name queryName("/localhost/nfd/faces/query"); ndn::nfd::FaceQueryFilter queryFilter; queryFilter.setRemoteUri(canonicalUri.toString()); queryName.append(queryFilter.wireEncode()); ndn::Interest interestPacket(queryName); interestPacket.setMustBeFresh(true); interestPacket.setInterestLifetime(time::milliseconds(4000)); auto interest = std::make_shared<ndn::Interest>(interestPacket); ndn::util::SegmentFetcher::fetch( m_face, *interest, m_validator, bind(&FaceIdFetcher::onQuerySuccess, this, _1, canonicalUri), bind(&FaceIdFetcher::onQueryFailure, this, _1, canonicalUri)); }
void FaceManager::createFace(const ControlParameters& parameters, const ndn::mgmt::CommandContinuation& done) { FaceUri remoteUri; if (!remoteUri.parse(parameters.getUri())) { NFD_LOG_TRACE("failed to parse remote URI: " << parameters.getUri()); done(ControlResponse(400, "Malformed command")); return; } if (!remoteUri.isCanonical()) { NFD_LOG_TRACE("received non-canonical remote URI: " << remoteUri.toString()); done(ControlResponse(400, "Non-canonical remote URI")); return; } optional<FaceUri> localUri; if (parameters.hasLocalUri()) { localUri = FaceUri{}; if (!localUri->parse(parameters.getLocalUri())) { NFD_LOG_TRACE("failed to parse local URI: " << parameters.getLocalUri()); done(ControlResponse(400, "Malformed command")); return; } if (!localUri->isCanonical()) { NFD_LOG_TRACE("received non-canonical local URI: " << localUri->toString()); done(ControlResponse(400, "Non-canonical local URI")); return; } } face::ProtocolFactory* factory = m_faceSystem.getFactoryByScheme(remoteUri.getScheme()); if (factory == nullptr) { NFD_LOG_TRACE("received create request for unsupported protocol: " << remoteUri.getScheme()); done(ControlResponse(406, "Unsupported protocol")); return; } face::FaceParams faceParams; faceParams.persistency = parameters.getFacePersistency(); if (parameters.hasBaseCongestionMarkingInterval()) { faceParams.baseCongestionMarkingInterval = parameters.getBaseCongestionMarkingInterval(); } if (parameters.hasDefaultCongestionThreshold()) { faceParams.defaultCongestionThreshold = parameters.getDefaultCongestionThreshold(); } if (parameters.hasMtu()) { faceParams.mtu = parameters.getMtu(); } faceParams.wantLocalFields = parameters.hasFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED) && parameters.getFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED); faceParams.wantLpReliability = parameters.hasFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED) && parameters.getFlagBit(ndn::nfd::BIT_LP_RELIABILITY_ENABLED); if (parameters.hasFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED)) { faceParams.wantCongestionMarking = parameters.getFlagBit(ndn::nfd::BIT_CONGESTION_MARKING_ENABLED); } try { factory->createFace({remoteUri, localUri, faceParams}, [this, parameters, done] (const auto& face) { this->afterCreateFaceSuccess(face, parameters, done); }, [done] (uint32_t status, const std::string& reason) { NFD_LOG_DEBUG("Face creation failed: " << reason); done(ControlResponse(status, reason)); }); } catch (const std::runtime_error& error) { NFD_LOG_ERROR("Face creation failed: " << error.what()); done(ControlResponse(500, "Face creation failed due to internal error")); return; } catch (const std::logic_error& error) { NFD_LOG_ERROR("Face creation failed: " << error.what()); done(ControlResponse(500, "Face creation failed due to internal error")); return; } }