bool LLTemplateTokenizer::wantEOF() { // see if the next token is EOF if(atEOF()) return true; inc(); if(!atEOF()) { dec(); // back up a step return false; } return true; }
bool LLTemplateTokenizer::want(const std::string & token) { if(atEOF()) return false; inc(); if(atEOF()) return false; if(get() != token) { dec(); // back up a step return false; } return true; }
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); }
U32 LLTemplateTokenizer::line() const { if(atEOF()) { return 0; } return mCurrent->line; }
std::string LLTemplateTokenizer::get() const { if(atEOF()) { error("trying to get EOF"); } return mCurrent->str; }
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); } }
void LLTemplateTokenizer::error(std::string message) const { if(atEOF()) { llerrs << "Unexpected end of file: " << message << llendl; } else { llerrs << "Problem parsing message template at line " << line() << ", with token '" << get() << "' : " << message << llendl; } }
void LLTemplateTokenizer::inc() { if(atEOF()) { error("trying to increment token of EOF"); } else if(mStarted) { ++mCurrent; } else { mStarted = true; mCurrent = mTokens.begin(); } }
bool readEOF() { return atEOF(); }