BOOST_FIXTURE_TEST_CASE(RebuildConnection, RemoteRegistratorFixture) { connectToHub(); Name identity("/remote/register"); insertEntryWithIdentity(identity); EventId event; remoteRegistrator->m_regEntries.insert( nfd::rib::RemoteRegistrator::RegisteredEntry(identity, event)); disconnectToHub(); connectToHub(); BOOST_REQUIRE_EQUAL(face->sentInterests.size(), 2); Interest& request1 = face->sentInterests[0]; Interest& request2 = face->sentInterests[1]; ndn::nfd::ControlParameters extractedParameters1, extractedParameters2; Name::Component verb1, verb2; extractParameters(request1, verb1, extractedParameters1); extractParameters(request2, verb2, extractedParameters2); BOOST_CHECK_EQUAL(verb1, REGISTER_VERB); BOOST_CHECK_EQUAL(verb2, REGISTER_VERB); BOOST_CHECK_EQUAL(extractedParameters1.getName(), extractedParameters2.getName()); }
void FibManager::onValidatedFibRequest(const shared_ptr<const Interest>& request) { const Name& command = request->getName(); const Name::Component& verb = command[COMMAND_PREFIX.size()]; const Name::Component& parameterComponent = command[COMMAND_PREFIX.size() + 1]; SignedVerbDispatchTable::const_iterator verbProcessor = m_signedVerbDispatch.find(verb); if (verbProcessor != m_signedVerbDispatch.end()) { ControlParameters parameters; if (!extractParameters(parameterComponent, parameters) || !parameters.hasFaceId()) { NFD_LOG_DEBUG("command result: malformed verb: " << verb); sendResponse(command, 400, "Malformed command"); return; } if (parameters.getFaceId() == 0) { parameters.setFaceId(request->getIncomingFaceId()); } NFD_LOG_DEBUG("command result: processing verb: " << verb); ControlResponse response; (verbProcessor->second)(this, parameters, response); sendResponse(command, response); } else { NFD_LOG_DEBUG("command result: unsupported verb: " << verb); sendResponse(command, 501, "Unsupported command"); } }
void StrategyChoiceManager::onValidatedStrategyChoiceRequest(const shared_ptr<const Interest>& request) { static const Name::Component VERB_SET("set"); static const Name::Component VERB_UNSET("unset"); const Name& command = request->getName(); const Name::Component& parameterComponent = command[COMMAND_PREFIX.size() + 1]; ControlParameters parameters; if (!extractParameters(parameterComponent, parameters)) { sendResponse(command, 400, "Malformed command"); return; } const Name::Component& verb = command[COMMAND_PREFIX.size()]; ControlResponse response; if (verb == VERB_SET) { setStrategy(parameters, response); } else if (verb == VERB_UNSET) { unsetStrategy(parameters, response); } else { NFD_LOG_DEBUG("command result: unsupported verb: " << verb); setResponse(response, 501, "Unsupported command"); } sendResponse(command, response); }
BOOST_FIXTURE_TEST_CASE(EraseFace, RemoteRegistratorFixture) { connectToHub(); Name identity("/remote/register"); uint64_t faceId = 517; insertEntryWithIdentity(identity, DEFAULT_APP_NAME, faceId); scheduler::EventId event; remoteRegistrator->m_regEntries.insert( nfd::rib::RemoteRegistrator::RegisteredEntry(identity, event)); eraseFace(faceId); BOOST_REQUIRE_EQUAL(face->sentInterests.size(), 2); Interest& request = face->sentInterests[1]; ndn::nfd::ControlParameters extractedParameters; Name::Component verb; extractParameters(request, verb, extractedParameters); BOOST_CHECK_EQUAL(verb, UNREGISTER_VERB); BOOST_CHECK_EQUAL(extractedParameters.getName(), identity); }
void PrefixUpdateProcessor::onCommandValidated(const std::shared_ptr<const ndn::Interest>& request) { const ndn::Name& command = request->getName(); const ndn::Name::Component& verb = command[COMMAND_PREFIX.size()]; const ndn::Name::Component& parameterComponent = command[COMMAND_PREFIX.size() + 1]; if (verb == ADVERTISE_VERB || verb == WITHDRAW_VERB) { ndn::nfd::ControlParameters parameters; if (!extractParameters(parameterComponent, parameters)) { sendResponse(request, 400, "Malformed command"); return; } if (verb == ADVERTISE_VERB) { advertise(request, parameters); } else if (verb == WITHDRAW_VERB) { withdraw(request, parameters); } sendResponse(request, 200, "Success"); } else { sendResponse(request, 501, "Unsupported command"); } }
bool WayPointFileWinPilot::parseLine(const TCHAR* line, const unsigned linenum, Waypoints &way_points, const RasterTerrain *terrain) { TCHAR ctemp[255]; const TCHAR *params[20]; size_t n_params; // If (end-of-file or comment) if (line[0] == '\0' || line[0] == 0x1a || _tcsstr(line, _T("**")) == line || _tcsstr(line, _T("*")) == line) // -> return without error condition return true; if (_tcslen(line) >= sizeof(ctemp) / sizeof(ctemp[0])) /* line too long for buffer */ return false; GeoPoint location; // Get fields n_params = extractParameters(line, ctemp, params, 20); if (n_params < 6) return false; // Latitude (e.g. 51:15.900N) if (!parseAngle(params[1], location.Latitude, true)) return false; // Longitude (e.g. 00715.900W) if (!parseAngle(params[2], location.Longitude, false)) return false; Waypoint new_waypoint(location); new_waypoint.FileNum = file_num; // Name (e.g. KAMPLI) if (!parseString(params[5], new_waypoint.Name)) return false; // Altitude (e.g. 458M) /// @todo configurable behaviour bool alt_ok = parseAltitude(params[3], new_waypoint.Altitude); check_altitude(new_waypoint, terrain, alt_ok); if (n_params > 6) { // Description (e.g. 119.750 Airport) parseString(params[6], new_waypoint.Comment); } // Waypoint Flags (e.g. AT) parseFlags(params[4], new_waypoint.Flags); add_waypoint(way_points, new_waypoint); return true; }
ATCommand::ATCommand(const QString &cmdString) { setCmdName(i18n("New Command")); setCmdString(cmdString); mHexOutput = false; extractParameters(); construct(); }
BOOST_FIXTURE_TEST_CASE(UnregisterAdvanced, RemoteRegistratorFixture) { connectToHub(); Name identityShort("/remote/register"); Name identityLong("/remote/register/long"); scheduler::EventId eventShort; scheduler::EventId eventLong; insertEntryWithIdentity(identityShort, name::Component("appA")); remoteRegistrator->m_regEntries.insert( nfd::rib::RemoteRegistrator::RegisteredEntry(identityShort, eventShort)); insertEntryWithIdentity(identityShort, name::Component("appB")); insertEntryWithIdentity(identityLong); remoteRegistrator->m_regEntries.insert( nfd::rib::RemoteRegistrator::RegisteredEntry(identityLong, eventLong)); // two registration commands are generated for identityShort and identityLong BOOST_REQUIRE_EQUAL(face->sentInterests.size(), 2); eraseEntryWithIdentity(identityShort, name::Component("appA")); // no unregistration command is generated as appB also exists BOOST_REQUIRE_EQUAL(face->sentInterests.size(), 2); eraseEntryWithIdentity(identityShort, name::Component("appB")); // one unregistration command is generated for identityShort BOOST_REQUIRE_EQUAL(face->sentInterests.size(), 3); Interest& request = face->sentInterests[2]; ndn::nfd::ControlParameters extractedParameters; Name::Component verb; extractParameters(request, verb, extractedParameters); BOOST_CHECK_EQUAL(verb, UNREGISTER_VERB); BOOST_CHECK_EQUAL(extractedParameters.getName(), identityShort); }
BOOST_FIXTURE_TEST_CASE(RegisterBasic, RemoteRegistratorFixture) { connectToHub(); Name identity("/remote/register"); insertEntryWithIdentity(identity); BOOST_REQUIRE_EQUAL(face->sentInterests.size(), 1); Interest& request = face->sentInterests[0]; ndn::nfd::ControlParameters extractedParameters; Name::Component verb; extractParameters(request, verb, extractedParameters); BOOST_CHECK_EQUAL(verb, REGISTER_VERB); BOOST_CHECK_EQUAL(extractedParameters.getName(), identity); }
void RibManager::onCommandValidated(const shared_ptr<const Interest>& request) { // REMOTE_COMMAND_PREFIX number of componenets are same as // NRD_COMMAND_PREFIX's so no extra checks are required. const Name& command = request->getName(); const Name::Component& verb = command[COMMAND_PREFIX.size()]; const Name::Component& parameterComponent = command[COMMAND_PREFIX.size() + 1]; SignedVerbDispatchTable::const_iterator verbProcessor = m_signedVerbDispatch.find(verb); if (verbProcessor != m_signedVerbDispatch.end()) { ControlParameters parameters; if (!extractParameters(parameterComponent, parameters)) { NFD_LOG_DEBUG("command result: malformed verb: " << verb); if (static_cast<bool>(request)) { sendResponse(command, 400, "Malformed command"); } return; } NFD_LOG_DEBUG("command result: processing verb: " << verb); (verbProcessor->second)(this, request, parameters); } else { NFD_LOG_DEBUG("Unsupported command: " << verb); if (static_cast<bool>(request)) { sendResponse(request->getName(), 501, "Unsupported command"); } } }
bool WayPointFileSeeYou::parseLine(const TCHAR* line, const unsigned linenum, Waypoints &way_points, const RasterTerrain *terrain) { TCHAR ctemp[255]; const TCHAR *params[20]; size_t n_params; static unsigned iName = 0, iCode = 1, iCountry = 2; static unsigned iLatitude = 3, iLongitude = 4, iElevation = 5; static unsigned iStyle = 6, iRWDir = 7, iRWLen = 8; static unsigned iFrequency = 9, iDescription = 10; static bool ignore_following = false; // If (end-of-file or comment) if (line[0] == '\0' || line[0] == 0x1a || _tcsstr(line, _T("**")) == line || _tcsstr(line, _T("*")) == line) // -> return without error condition return true; if (_tcslen(line) >= sizeof(ctemp) / sizeof(ctemp[0])) /* line too long for buffer */ return false; // Parse first line holding field order /// @todo linenum == 0 should be the first /// (not ignored) line, not just line 0 if (linenum == 0) { // Get fields n_params = extractParameters(line, ctemp, params, 20); // Iterate through fields and save the field order for (unsigned i = 0; i < n_params; i++) { const TCHAR* value = params[i]; if (!_tcscmp(value, _T("name"))) iName = i; else if (!_tcscmp(value, _T("code"))) iCode = i; else if (!_tcscmp(value, _T("country"))) iCountry = i; else if (!_tcscmp(value, _T("lat"))) iLatitude = i; else if (!_tcscmp(value, _T("lon"))) iLongitude = i; else if (!_tcscmp(value, _T("elev"))) iElevation = i; else if (!_tcscmp(value, _T("style"))) iStyle = i; else if (!_tcscmp(value, _T("rwdir"))) iRWDir = i; else if (!_tcscmp(value, _T("rwlen"))) iRWLen = i; else if (!_tcscmp(value, _T("freq"))) iFrequency = i; else if (!_tcscmp(value, _T("desc"))) iDescription = i; } ignore_following = false; return true; } // If task marker is reached ignore all following lines if (_tcsstr(line, _T("-----Related Tasks-----")) == line) ignore_following = true; if (ignore_following) return true; // Get fields n_params = extractParameters(line, ctemp, params, 20); // Check if the basic fields are provided if (iName >= n_params) return false; if (iLatitude >= n_params) return false; if (iLongitude >= n_params) return false; GeoPoint location; // Latitude (e.g. 5115.900N) if (!parseAngle(params[iLatitude], location.Latitude, true)) return false; // Longitude (e.g. 00715.900W) if (!parseAngle(params[iLongitude], location.Longitude, false)) return false; Waypoint new_waypoint(location); new_waypoint.FileNum = file_num; // Name (e.g. "Some Turnpoint", with quotes) if (!parseString(params[iName], new_waypoint.Name)) return false; // Elevation (e.g. 458.0m) /// @todo configurable behaviour bool alt_ok = iElevation < n_params && parseAltitude(params[iElevation], new_waypoint.Altitude); check_altitude(new_waypoint, terrain, alt_ok); // Description (e.g. "Some Turnpoint", with quotes) /// @todo include frequency and rwdir/len if (iDescription < n_params) parseString(params[iDescription], new_waypoint.Comment); // Style (e.g. 5) /// @todo include peaks with peak symbols etc. if (iStyle < n_params) parseStyle(params[iStyle], new_waypoint.Flags); // If the Style attribute did not state that this is an airport if (!new_waypoint.Flags.Airport) { // -> parse the runway length fixed rwlen; // Runway length (e.g. 546.0m) if (iRWLen < n_params && parseAltitude(params[iRWLen], rwlen)) { // If runway length is between 100m and 300m -> landpoint if (rwlen > fixed(100) && rwlen <= fixed(300)) new_waypoint.Flags.LandPoint = true; // If runway length is higher then 300m -> airport if (rwlen > fixed(300)) new_waypoint.Flags.Airport = true; } } add_waypoint(way_points, new_waypoint); return true; }