void RibManager::sendErrorResponse(uint32_t code, const std::string& error, const shared_ptr<const Interest>& request) { NFD_LOG_ERROR("NFD returned an error: " << error << " (code: " << code << ")"); if (!static_cast<bool>(request)) { return; } ControlResponse response; if (code == 404) { response.setCode(code); response.setText(error); } else { response.setCode(533); std::ostringstream os; os << "Failure to update NFD " << "(NFD Error: " << code << " " << error << ")"; response.setText(os.str()); } if (static_cast<bool>(request)) { sendResponse(request->getName(), response); } }
LimitedIo::StopReason LimitedIo::run(int nOpsLimit, const time::nanoseconds& timeLimit) { BOOST_ASSERT(!m_isRunning); if (nOpsLimit <= 0) { return EXCEED_OPS; } m_isRunning = true; m_reason = NO_WORK; m_nOpsRemaining = nOpsLimit; if (timeLimit >= time::nanoseconds::zero()) { m_timeout = scheduler::schedule(timeLimit, bind(&LimitedIo::afterTimeout, this)); } try { getGlobalIoService().run(); } catch (std::exception& ex) { m_reason = EXCEPTION; NFD_LOG_ERROR("g_io.run() exception: " << ex.what()); m_lastException = ex; } getGlobalIoService().reset(); scheduler::cancel(m_timeout); m_isRunning = false; return m_reason; }
void FaceManager::createFace(const Interest& request, ControlParameters& parameters) { const Name& requestName = request.getName(); ndn::nfd::FaceCreateCommand command; if (!validateParameters(command, parameters)) { sendResponse(requestName, 400, "Malformed command"); NFD_LOG_TRACE("invalid control parameters URI"); return; } FaceUri uri; if (!uri.parse(parameters.getUri())) { sendResponse(requestName, 400, "Malformed command"); NFD_LOG_TRACE("failed to parse URI"); return; } if (!uri.isCanonical()) { sendResponse(requestName, 400, "Non-canonical URI"); NFD_LOG_TRACE("received non-canonical URI"); return; } FactoryMap::iterator factory = m_factories.find(uri.getScheme()); if (factory == m_factories.end()) { sendResponse(requestName, 501, "Unsupported protocol"); return; } try { factory->second->createFace(uri, bind(&FaceManager::onCreated, this, requestName, parameters, _1), bind(&FaceManager::onConnectFailed, this, requestName, _1)); } catch (const std::runtime_error& error) { std::string errorMessage = "NFD error: "; errorMessage += error.what(); NFD_LOG_ERROR(errorMessage); sendResponse(requestName, 500, errorMessage); } catch (const std::logic_error& error) { std::string errorMessage = "NFD error: "; errorMessage += error.what(); NFD_LOG_ERROR(errorMessage); sendResponse(requestName, 500, errorMessage); } }