bool FaceManager::extractLocalControlParameters(const Interest& request, ControlParameters& parameters, ControlCommand& command, shared_ptr<LocalFace>& outFace, LocalControlFeature& outFeature) { if (!validateParameters(command, parameters)) { sendResponse(request.getName(), 400, "Malformed command"); return false; } shared_ptr<Face> face = m_faceTable.get(request.getIncomingFaceId()); if (!static_cast<bool>(face)) { NFD_LOG_DEBUG("command result: faceid " << request.getIncomingFaceId() << " not found"); sendResponse(request.getName(), 410, "Face not found"); return false; } else if (!face->isLocal()) { NFD_LOG_DEBUG("command result: cannot enable local control on non-local faceid " << face->getId()); sendResponse(request.getName(), 412, "Face is non-local"); return false; } outFace = dynamic_pointer_cast<LocalFace>(face); outFeature = static_cast<LocalControlFeature>(parameters.getLocalControlFeature()); return true; }
void FaceLocalControlCommand::validateRequest(const ControlParameters& parameters) const { this->ControlCommand::validateRequest(parameters); switch (parameters.getLocalControlFeature()) { case LOCAL_CONTROL_FEATURE_INCOMING_FACE_ID: case LOCAL_CONTROL_FEATURE_NEXT_HOP_FACE_ID: break; default: BOOST_THROW_EXCEPTION(ArgumentError("LocalControlFeature is invalid")); } }
virtual void validateRequest(const ControlParameters& parameters) const { this->ControlCommand::validateRequest(parameters); switch (parameters.getLocalControlFeature()) { case LOCAL_CONTROL_FEATURE_INCOMING_FACE_ID: case LOCAL_CONTROL_FEATURE_NEXT_HOP_FACE_ID: break; default: throw ArgumentError("LocalControlFeature is invalid"); } }