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;
}
Example #6
0
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();
	}
}
Example #9
0
bool		readEOF()
{
  return atEOF();
}