void FaceCreateCommand::applyDefaultsToRequest(ControlParameters& parameters) const { if (!parameters.hasFacePersistency()) { parameters.setFacePersistency(FacePersistency::FACE_PERSISTENCY_PERSISTENT); } }
void FaceManager::updateFace(const Interest& interest, const ControlParameters& parameters, const ndn::mgmt::CommandContinuation& done) { FaceId faceId = parameters.getFaceId(); if (faceId == 0) { // Self-update auto incomingFaceIdTag = interest.getTag<lp::IncomingFaceIdTag>(); if (incomingFaceIdTag == nullptr) { NFD_LOG_TRACE("unable to determine face for self-update"); done(ControlResponse(404, "No FaceId specified and IncomingFaceId not available")); return; } faceId = *incomingFaceIdTag; } Face* face = m_faceTable.get(faceId); if (face == nullptr) { NFD_LOG_TRACE("invalid face specified"); done(ControlResponse(404, "Specified face does not exist")); return; } // Verify validity of requested changes ControlParameters response; bool areParamsValid = true; if (parameters.hasFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED) && parameters.getFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED) && face->getScope() != ndn::nfd::FACE_SCOPE_LOCAL) { NFD_LOG_TRACE("received request to enable local fields on non-local face"); areParamsValid = false; response.setFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED, parameters.getFlagBit(ndn::nfd::BIT_LOCAL_FIELDS_ENABLED)); } // check whether the requested FacePersistency change is valid if it's present if (parameters.hasFacePersistency()) { auto persistency = parameters.getFacePersistency(); if (!face->getTransport()->canChangePersistencyTo(persistency)) { NFD_LOG_TRACE("cannot change face persistency to " << persistency); areParamsValid = false; response.setFacePersistency(persistency); } } if (!areParamsValid) { done(ControlResponse(409, "Invalid properties specified").setBody(response.wireEncode())); return; } // All specified properties are valid, so make changes if (parameters.hasFacePersistency()) { face->setPersistency(parameters.getFacePersistency()); } updateLinkServiceOptions(*face, parameters); // Prepare and send ControlResponse response = makeUpdateFaceResponse(*face); done(ControlResponse(200, "OK").setBody(response.wireEncode())); }