int main(int argc, char** argv) { std::string logfile = createLogDir("./logs"); GLogger glog( argv[0], logfile.c_str() ); std::cout << "Log to path: " << logfile << std::endl; try { boost::asio::io_service ioService; ptr_lib::shared_ptr<ThreadsafeFace> face; face.reset(new ThreadsafeFace (ioService, "localhost")); // Use the system default key chain and certificate name to sign commands. KeyChain keyChain; face->setCommandSigningInfo(keyChain, keyChain.getDefaultCertificateName()); // Also use the default certificate name to sign data packets. Publisher publisher(ioService, face, keyChain, keyChain.getDefaultCertificateName()); if( !publisher.init() ) { cout << "Publisher init fail" << endl; return 0; } else { std::thread *captureThread = new std::thread(bind(&Publisher::start,&publisher)); captureThread->detach(); LOG(INFO) << "ioservice start" << endl; boost::asio::io_service::work work(ioService); ioService.run(); LOG(INFO) << "ioservice started" << endl; } } catch (std::exception& e) { cout << "exception: " << e.what() << endl; } return 0; }
int main(int argc, char** argv) { try { Name prefix("/nfd/edu/ucla/remap/test"); // Route to aleph.ndn.ucla.edu. Have to use the canonical name with // an IP address and port. string uri = "udp4://128.97.98.7:6363"; // The default Face connects to the local NFD. Face face; // Use the system default key chain and certificate name to sign commands. KeyChain keyChain; face.setCommandSigningInfo(keyChain, keyChain.getDefaultCertificateName()); // Create the /localhost/nfd/faces/query command interest, including the // FaceQueryFilter. Construct the FaceQueryFilter using the structure in // face-query-filter.pb.h which was produced by protoc. ndn_message::FaceQueryFilterMessage message; ndn_message::FaceQueryFilterMessage_FaceQueryFilter* filter = message.add_face_query_filter(); filter->set_uri(uri); Blob encodedFilter = ProtobufTlv::encode(message); Interest interest(Name("/localhost/nfd/faces/query")); interest.getName().append(encodedFilter); bool enabled = true; SegmentFetcher::fetch (face, interest, SegmentFetcher::DontVerifySegment, bind(&processFaceStatus, _1, prefix, uri, &face, &enabled), bind(&onError, _1, _2, &enabled)); // Loop calling processEvents until a callback sets enabled = false. while (enabled) { face.processEvents(); // We need to sleep for a few milliseconds so we don't use 100% of the CPU. usleep(10000); } } catch (std::exception& e) { cout << "exception: " << e.what() << endl; } return 0; }
int ndnsec_op_tool(int argc, char** argv) { using namespace ndn; namespace po = boost::program_options; std::string command; po::options_description description("General options"); description.add_options() ("help,h", "produce this help message") ("command", po::value<std::string>(&command), "command") ; po::positional_options_description p; p.add("command", 1); po::variables_map vm; try { po::store(po::command_line_parser(argc, argv).options(description).positional(p).run(), vm); po::notify(vm); } catch (const std::exception& e) { std::cerr << "ERROR: " << e.what() << std::endl; std::cerr << description << std::endl; return -1; } if (vm.count("help") != 0) { std::cerr << description << std::endl; return 0; } if (vm.count("command") == 0) { std::cerr << "command must be specified" << std::endl; std::cerr << description << std::endl; return 1; } if (command == "sign") // the content to be signed from stdin { KeyChain keyChain; Buffer dataToSign((istreambuf_iterator<char>(cin)), istreambuf_iterator<char>()); Block value = keyChain.sign(dataToSign.buf(), dataToSign.size(), security::SigningInfo(security::SigningInfo::SIGNER_TYPE_CERT, keyChain.getDefaultCertificateName())); if (value.value_size() == 0) { std::cerr << "Error signing with default key" << std::endl; return -1; } std::cout.write(reinterpret_cast<const char*>(value.wire()), value.size()); } return 0; }