示例#1
0
QString EQPacketFormat::headerFlags(const QString& prefix, 
				    bool brief) const
{
  QString tmp;

  if (m_isValid)
  {
    if (brief)
      tmp = prefix + ": ";
    else
      tmp = prefix + " Hdr (" + QString::number(flagsHi(), 16) + ", "
	+ QString::number(flagsLo(), 16) + "): ";
    
    tmp += m_packet->headerFlags("", true);
    
    if (!brief)
    {
      if (isARQ())
	tmp += QString("arq: ") + QString::number(arq(), 16) + ", ";
      
      if (isFragment())
	tmp += QString("FragSeq: ") + QString::number(fragSeq(), 16)
	  + ", FragCur: " + QString::number(fragCur(), 16)
	  + ", FragTot: " + QString::number(fragTot(), 16) + ", ";

      tmp += QString("Opcode: ") 
	+ QString::number(eqntohuint16(payload()), 16);
    }
  }
  else
      tmp = prefix + ": INVALID CRC32! Possible non-EQ packet?!";

  return tmp;
}
示例#2
0
	uint16_t getFragmentOffset()
	{
		if (isFragment())
			return m_FragHeader->getFragmentOffset();

		return 0;
	}
示例#3
0
	bool isLastFragment()
	{
		if (isFragment())
			return m_FragHeader->isLastFragment();

		return false;
	}
示例#4
0
// ----------------------------------------------------------------------------
bool
xpcc::CanConnectorBase::convertToHeader(const uint32_t & identifier,
		xpcc::Header & header)
{
	const uint8_t *ptr = reinterpret_cast<const uint8_t *>(&identifier);
	
	header.packetIdentifier = ptr[0];
	header.source 			= ptr[1];
	header.destination		= ptr[2];
	
	uint8_t flags = ptr[3];
	
	if (flags & 0x04) {
		header.isAcknowledge = true;
	}
	else {
		header.isAcknowledge = false;
	}
	
	switch (flags & 0x18)
	{
		case 0x00:
			header.type = xpcc::Header::REQUEST;
			break;
		case 0x08:
			header.type = xpcc::Header::RESPONSE;
			break;
		case 0x10:
			header.type = xpcc::Header::NEGATIVE_RESPONSE;
			break;
		default:
			// unknown type
			//XPCC_LOG_ERROR << "Unknown Type" << xpcc::flush;
			header.type = xpcc::Header::REQUEST;
	}
	
	// check if the message is a fragment
	return isFragment(identifier);
}
示例#5
0
//----------------------------------------------------------------------
// EQPacketFormatRaw class methods
QString EQPacketFormatRaw::headerFlags(const QString& prefix, 
				       bool brief) const
{
  QString tmp;
  if (!prefix.isEmpty())
  {
    if (brief)
      tmp = prefix + ": ";
    else
      tmp = prefix + "[Hdr (" + QString::number(flagsHi(), 16) + ", "
	+ QString::number(flagsLo(), 16) + "): ";
  }
  else if (!brief)
    tmp = "[Hdr (" + QString::number(flagsHi(), 16) + ", "
	+ QString::number(flagsLo(), 16) + "): ";

  if (isARQ())
    tmp += "ARQ, ";
  if (isClosingLo())
    tmp += "closingLo, ";
  if (isFragment())
    tmp += "Fragment, ";
  if (isASQ())
    tmp += "ASQ, ";
  if (isSEQStart())
    tmp += "SEQStart, ";
  if (isClosingHi())
    tmp += "closingHi, ";
  if (isSEQEnd())
    tmp += "SEQEnd, ";
  if (isARSP())
    tmp += "ARSP, ";
  if (isNAK())
    tmp += "NAK, ";
  if (isSpecARQ())
    tmp += "SpecARQ, ";
  if (m_flagsHi.m_unknown1)
    tmp += "HiUnknown1, ";

  if (skip() != 0)
    tmp += QString("Skip: ") + QString::number(skip(), 16) + ", ";
  
  tmp += QString("seq: ") + QString::number(seq(), 16);

  tmp += "] ";

  if (!brief)
  {
    if (isARQ())
      tmp += QString("[ARQ: ") + QString::number(arq(), 16) + "] ";
    
    if (isFragment())
    {
      tmp += QString("[FragSeq: ") + QString::number(fragSeq(), 16)
	+ ", FragCur: " + QString::number(fragCur(), 16)
	+ ", FragTot: " + QString::number(fragTot(), 16) + "] ";
    }
  }

  return tmp;
}
示例#6
0
    bool
    BasicModem::processInput(std::string& str)
    {
      bool got_line = false;

      while (!m_chars.empty())
      {
        char c = m_chars.front();
        m_chars.pop();

          m_line.push_back(c);

        //!@fixme: concurrency hazard.
        if (c == m_line_term_in[m_line_term_idx])
        {
          ++m_line_term_idx;
          if (m_line_term_idx == m_line_term_in.size())
          {
            m_line_term_idx = 0;
            got_line = true;
            break;
          }
        }
        else
        {

        }
      }

      if (isFragment(m_line))
      {
        getTask()->inf("fragment: %s", Streams::sanitize(m_line).c_str());
        return false;
      }

      // No complete line is available.
      if (!got_line)
        return false;

      if (m_line.size() <= m_line_term_in.size())
      {
        str = "";
        return true;
      }

      // Remove termination characters.
      str = m_line;
      str.resize(m_line.size() - m_line_term_in.size());

      if (m_line_trim)
        str = Utils::String::trim(str);

      // Got a complete line, but it's empty.
      if (str.empty())
        return true;

      m_task->spew("recv: %s", Streams::sanitize(str).c_str());
      m_line.clear();

      if (!m_skip_line.empty())
      {
        if (m_skip_line == str)
        {
          str.clear();
          m_skip_line.clear();
        }
      }

      return true;
    }