virtual void applyDefaultsToRequest(ControlParameters& parameters) const { if (!parameters.hasFaceId()) { parameters.setFaceId(0); } if (!parameters.hasOrigin()) { parameters.setOrigin(ROUTE_ORIGIN_APP); } if (!parameters.hasCost()) { parameters.setCost(0); } if (!parameters.hasFlags()) { parameters.setFlags(ROUTE_FLAG_CHILD_INHERIT); } if (!parameters.hasExpirationPeriod()) { if (parameters.getFaceId() == 0) { parameters.setExpirationPeriod(time::milliseconds::max()); } else { parameters.setExpirationPeriod(time::hours(1)); } } }
void RibManager::registerEntry(const shared_ptr<const Interest>& request, ControlParameters& parameters) { ndn::nfd::RibRegisterCommand command; if (!validateParameters(command, parameters)) { NFD_LOG_DEBUG("register result: FAIL reason: malformed"); if (static_cast<bool>(request)) { sendResponse(request->getName(), 400, "Malformed command"); } return; } bool isSelfRegistration = (!parameters.hasFaceId() || parameters.getFaceId() == 0); if (isSelfRegistration) { shared_ptr<lp::IncomingFaceIdTag> incomingFaceIdTag = request->getTag<lp::IncomingFaceIdTag>(); if (incomingFaceIdTag == nullptr) { sendResponse(request->getName(), 503, "requested self-registration, but IncomingFaceId is unavailable"); return; } parameters.setFaceId(*incomingFaceIdTag); } // Respond since command is valid and authorized sendSuccessResponse(request, parameters); Route route; route.faceId = parameters.getFaceId(); route.origin = parameters.getOrigin(); route.cost = parameters.getCost(); route.flags = parameters.getFlags(); if (parameters.hasExpirationPeriod() && parameters.getExpirationPeriod() != time::milliseconds::max()) { route.expires = time::steady_clock::now() + parameters.getExpirationPeriod(); // Schedule a new event, the old one will be cancelled during rib insertion. scheduler::EventId eventId = scheduler::schedule(parameters.getExpirationPeriod(), bind(&Rib::onRouteExpiration, &m_managedRib, parameters.getName(), route)); NFD_LOG_TRACE("Scheduled unregistration at: " << route.expires << " with EventId: " << eventId); // Set the NewEventId of this entry route.setExpirationEvent(eventId); } else { route.expires = time::steady_clock::TimePoint::max(); } NFD_LOG_INFO("Adding route " << parameters.getName() << " nexthop=" << route.faceId << " origin=" << route.origin << " cost=" << route.cost); RibUpdate update; update.setAction(RibUpdate::REGISTER) .setName(parameters.getName()) .setRoute(route); m_managedRib.beginApplyUpdate(update, bind(&RibManager::onRibUpdateSuccess, this, update), bind(&RibManager::onRibUpdateFailure, this, update, _1, _2)); m_registeredFaces.insert(route.faceId); }