/* -*- Mode:C++; c-file-style:"gnu"; indent-tabs-mode:nil; -*- */ /** * Copyright (C) 2014 Named Data Networking Project * See COPYING for copyright and distribution information. */ #include #include void usage(const char* programName) { std::cout << "Usage:\n" << programName << " [-h] Uri \n" " -h print usage and exit\n" "\n" " Uri - a FaceMgmt URI\n" << std::endl; } using namespace ndn; class NdnAutoconfigServer { public: explicit NdnAutoconfigServer(const std::string& uri) : m_faceMgmtUri(uri) { } void onInterest(const Name& name, const Interest& interest) { ndn::Data data(ndn::Name(interest.getName()).appendVersion()); data.setFreshnessPeriod(time::hours(1)); // 1 hour // create and encode uri block Block uriBlock = dataBlock(tlv::nfd::Uri, reinterpret_cast(m_faceMgmtUri.c_str()), m_faceMgmtUri.size()); data.setContent(uriBlock); m_keyChain.sign(data); m_face.put(data); } void onRegisterFailed(const ndn::Name& prefix, const std::string& reason) { std::cerr << "ERROR: Failed to register prefix in local hub's daemon (" << reason << ")" << std::endl; m_face.shutdown(); } void listen() { m_face.setInterestFilter("/localhop/ndn-autoconf/hub", ndn::bind(&NdnAutoconfigServer::onInterest, this, _1, _2), ndn::bind(&NdnAutoconfigServer::onRegisterFailed, this, _1, _2)); m_face.processEvents(); } private: ndn::Face m_face; KeyChain m_keyChain; std::string m_faceMgmtUri; }; int main(int argc, char** argv) { int opt; const char* programName = argv[0]; while ((opt = getopt(argc, argv, "h")) != -1) { switch (opt) { case 'h': usage(programName); return 0; default: usage(programName); return 1; } } if (argc != optind + 1) { usage(programName); return 1; } // get the configured face managment uri NdnAutoconfigServer producer(argv[optind]); try { producer.listen(); } catch (std::exception& error) { std::cerr << "ERROR: " << error.what() << std::endl; } return 0; }