void icnVideoChunkingServer::OnInterest(std::shared_ptr<const ndn::Interest> interest) { // ndn::App::OnInterest(interest); // forward call to perform app-level tracing // // do nothing else (hijack interest) // NS_LOG_DEBUG("Do nothing for incoming interest for" << interest->getName()); ndn::App::OnInterest(interest); // std::cout << "Producer received interest " << interest->getName() << std::endl; // Note that Interests send out by the app will not be sent back to the app ! auto data = std::make_shared<ndn::Data>(interest->getName()); data->setFreshnessPeriod(ndn::time::seconds(1000)); this->total_bytes_served += 1000; data->setContent(std::make_shared< ::ndn::Buffer>(this->chunk_size)); ndn::StackHelper::getKeyChain().sign(*data); // Call trace (for logging purposes) m_transmittedDatas(data, this, m_face); m_face->onReceiveData(*data); // Call trace (for logging purposes) // printf("OnInterest\n"); }
void Producer::populateSegments(std::ifstream& ifs) { BOOST_ASSERT(m_segments.size() == 0); // calculate how many segments are needed std::streampos begin, end; begin = ifs.tellg(); ifs.seekg(0, std::ios::end); end = ifs.tellg(); int num_segments = (end-begin) / m_maxSegmentSize; if ((end-begin) % m_maxSegmentSize != 0) num_segments++; std::cout << "Size of the file: " << (end-begin) << " bytes." << std::endl; std::cout << "Maximum size of a segment: " << m_maxSegmentSize << " bytes." << std::endl; std::cout << "Number of segments: " << num_segments << std::endl; std::vector<uint8_t> buffer(m_maxSegmentSize); ifs.seekg(0, std::ios::beg); for (int i = 0; i < (end-begin) / m_maxSegmentSize; ++i) { ifs.read(reinterpret_cast<char*>(buffer.data()), m_maxSegmentSize); std::string seg_str = "/segment" + std::to_string(i); auto data = make_shared<Data>(Name(m_prefix.toUri()+seg_str).appendSegment(i)); data->setFreshnessPeriod(m_freshnessPeriod); data->setContent(&buffer[0], m_maxSegmentSize); //std::cout << *data << std::endl; m_segments.push_back(data); } if ((end-begin) % m_maxSegmentSize != 0) { ifs.read(reinterpret_cast<char*>(buffer.data()), (end-begin) % m_maxSegmentSize); std::string seg_str = "/segment" + std::to_string(m_segments.size()); auto data = make_shared<Data>(Name(m_prefix.toUri()+seg_str).appendSegment(m_segments.size())); data->setFreshnessPeriod(m_freshnessPeriod); data->setContent(&buffer[0], (end-begin) % m_maxSegmentSize); //std::cout << *data << std::endl; m_segments.push_back(data); } auto finalBlockId = name::Component::fromSegment(m_segments.size() - 1); for (const auto& data : m_segments) { data->setFinalBlockId(finalBlockId); m_keyChain.sign(*data, m_signingInfo); } }
void Producer::populateStore(std::istream& is) { BOOST_ASSERT(m_store.size() == 0); if (m_isVerbose) std::cerr << "Loading input ..." << std::endl; std::vector<uint8_t> buffer(m_maxSegmentSize); while (is.good()) { is.read(reinterpret_cast<char*>(buffer.data()), buffer.size()); const auto nCharsRead = is.gcount(); if (nCharsRead > 0) { auto data = make_shared<Data>(Name(m_versionedPrefix).appendSegment(m_store.size())); data->setFreshnessPeriod(m_freshnessPeriod); data->setContent(&buffer[0], nCharsRead); m_store.push_back(data); } } if (m_store.empty()) { auto data = make_shared<Data>(Name(m_versionedPrefix).appendSegment(0)); data->setFreshnessPeriod(m_freshnessPeriod); m_store.push_back(data); } auto finalBlockId = name::Component::fromSegment(m_store.size() - 1); for (const auto& data : m_store) { data->setFinalBlockId(finalBlockId); m_keyChain.sign(*data, m_signingInfo); } if (m_isVerbose) std::cerr << "Created " << m_store.size() << " chunks for prefix " << m_prefix << std::endl; }
// Callback that will be called when Interest arrives void CustomApp1::OnInterest(std::shared_ptr<const ndn::Interest> interest) { ndn::App::OnInterest(interest); NS_LOG_DEBUG("Received Interest packet for " << interest->getName()); // Note that Interests send out by the app will not be sent back to the app ! Name sender("/malicious"); auto data = std::make_shared<ndn::Data>(interest->getName()); data->setFreshnessPeriod(ndn::time::milliseconds(1000)); data->setContent(std::make_shared< ::ndn::Buffer>(1024)); ndn::StackHelper::getKeyChain().sign(*data); NS_LOG_DEBUG("Sending Data packet for " << data->getName()); // Call trace (for logging purposes) m_transmittedDatas(data, this, m_face); m_face->onReceiveData(*data); }
/** * @deprecated Use setFreshnessPeriod. */ void DEPRECATED_IN_NDN_CPP setFreshnessSeconds(int freshnessSeconds) { setFreshnessPeriod(freshnessSeconds < 0 ? -1.0 : (double)freshnessSeconds * 1000.0); }