void PcapFilesReader::scan() { if (nonEmptyFiles == 0) { #if DEBUG_TIMING std::cout << "End of all inputs files" << std::endl; #endif // notifyAllEnd(); return; } int earliest_index = -1; const struct timeval* earliest_time; for (unsigned i=0; i < files.size(); i++) { auto file = files.at(i).get(); if (file->atEOF()) continue; std::unique_ptr<PcapPacket> p = file->current(); if (earliest_index == -1) { earliest_index = i; earliest_time = p->getTime(); } else { const struct timeval *time = p->getTime(); if (timercmp(time, earliest_time, <)) { earliest_index = i; earliest_time = time; } } } assert(earliest_index >= 0); struct timeval delay; #if DEBUG_TIMING std::cout << "First packet to send " << PcapPacket::timevalToString(earliest_time) << std::endl; #endif if (respectTiming) { struct timeval delta; timersub(earliest_time, &firstPacketTime, &delta); struct timeval now; gettimeofday(&now, nullptr); struct timeval elapsed; timersub(&now, &startTime, &elapsed); timersub(&delta, &elapsed, &delay); #if DEBUG_TIMING std::cout << "Delta " << PcapPacket::timevalToString(&delta) << " elapsed " << PcapPacket::timevalToString(&elapsed) << " delay " << PcapPacket::timevalToString(&delay) << std::endl; #endif } else { timerclear(&delay); } schedulePacket((unsigned)earliest_index, &delay); }
void PcapFilesReader::scan() { while (true) { if (nonEmptyFiles == 0) { BMLOG_DEBUG("Pcap reader: end of all input files"); // notifyAllEnd(); return; } int earliest_index = -1; const struct timeval *earliest_time; for (unsigned i=0; i < files.size(); i++) { auto file = files.at(i).get(); if (file->atEOF()) continue; std::unique_ptr<PcapPacket> p = file->current(); if (earliest_index == -1) { earliest_index = i; earliest_time = p->getTime(); } else { const struct timeval *time = p->getTime(); if (timercmp(time, earliest_time, <)) { earliest_index = i; earliest_time = time; } } } assert(earliest_index >= 0); struct timeval delay; BMLOG_DEBUG("Pcap reader: first packet to send {}", PcapPacket::timevalToString(earliest_time)); if (respectTiming) { struct timeval delta; timersub(earliest_time, &firstPacketTime, &delta); struct timeval now; gettimeofday(&now, nullptr); struct timeval elapsed; timersub(&now, &startTime, &elapsed); timersub(&delta, &elapsed, &delay); BMLOG_DEBUG("Pcap reader: delta {}, elapsed {}, delay {}", PcapPacket::timevalToString(&delta), PcapPacket::timevalToString(&elapsed), PcapPacket::timevalToString(&delay)); } else { timerclear(&delay); } schedulePacket((unsigned)earliest_index, &delay); } }