30 namespace autoconfig {
36 :
Base(face, keyChain, nextStageOnFailure)
45 std::cerr <<
"Trying multicast discovery..." << std::endl;
47 this->collectMulticastFaces();
51 MulticastDiscovery::collectMulticastFaces()
53 ndn::nfd::FaceQueryFilter filter;
54 filter.setLinkType(ndn::nfd::LINK_TYPE_MULTI_ACCESS);
57 bind(&MulticastDiscovery::registerHubDiscoveryPrefix,
this, _1),
63 MulticastDiscovery::registerHubDiscoveryPrefix(
const std::vector<ndn::nfd::FaceStatus>& dataset)
65 std::vector<uint64_t> multicastFaces;
66 std::transform(dataset.begin(), dataset.end(), std::back_inserter(multicastFaces),
67 [] (
const ndn::nfd::FaceStatus& faceStatus) {
return faceStatus.getFaceId(); });
69 if (multicastFaces.empty()) {
73 ControlParameters parameters;
75 .setName(LOCALHOP_HUB_DISCOVERY_PREFIX)
77 .setExpirationPeriod(time::seconds(30));
79 m_nRequestedRegs = multicastFaces.size();
82 for (
const auto& face : multicastFaces) {
83 parameters.setFaceId(face);
86 bind(&MulticastDiscovery::onRegisterSuccess,
this),
87 bind(&MulticastDiscovery::onRegisterFailure,
this, _1));
93 MulticastDiscovery::onRegisterSuccess()
97 if (m_nRequestedRegs == m_nFinishedRegs) {
98 MulticastDiscovery::setStrategy();
103 MulticastDiscovery::onRegisterFailure(
const ControlResponse& response)
105 std::cerr <<
"ERROR: " << response.getText() <<
" (code: " << response.getCode() <<
")" << std::endl;
108 if (m_nRequestedRegs == m_nFinishedRegs) {
109 if (m_nRequestedRegs > 0) {
110 MulticastDiscovery::setStrategy();
114 " for all multicast faces, skipping multicast discovery stage");
120 MulticastDiscovery::setStrategy()
122 ControlParameters parameters;
124 .setName(LOCALHOP_HUB_DISCOVERY_PREFIX)
125 .setStrategy(
"/localhost/nfd/strategy/multicast");
129 bind(&MulticastDiscovery::requestHubData,
this),
130 bind(&MulticastDiscovery::onSetStrategyFailure,
this, _1));
134 MulticastDiscovery::onSetStrategyFailure(
const ControlResponse& response)
137 LOCALHOP_HUB_DISCOVERY_PREFIX.toUri() +
" namespace (" + response.getText() +
"). "
138 "Skipping multicast discovery stage");
142 MulticastDiscovery::requestHubData()
144 Interest interest(LOCALHOP_HUB_DISCOVERY_PREFIX);
145 interest.setInterestLifetime(time::milliseconds(4000));
146 interest.setMustBeFresh(
true);
148 m_face.expressInterest(interest,
149 bind(&MulticastDiscovery::onSuccess,
this, _2),
155 MulticastDiscovery::onSuccess(
const Data& data)
157 const Block& content = data.getContent();
161 Block::element_const_iterator blockValue = content.find(tlv::nfd::Uri);
162 if (blockValue == content.elements_end()) {
166 std::string hubUri(reinterpret_cast<const char*>(blockValue->value()), blockValue->value_size());
Copyright (c) 2014-2016, Regents of the University of California, Arizona Board of Regents...