Ejemplo n.º 1
0
void SyslogParser::parseNew(const std::string& msg, RemoteSyslogChannel::Severity severity, RemoteSyslogChannel::Facility fac, std::size_t& pos)
{
	Poco::Message::Priority prio = convert(severity);
	// rest of the unparsed header is:
	// VERSION SP TIMESTAMP SP HOSTNAME SP APP-NAME SP PROCID SP MSGID
	std::string versionStr(parseUntilSpace(msg, pos));
	std::string timeStr(parseUntilSpace(msg, pos)); // can be the nilvalue!
	std::string hostName(parseUntilSpace(msg, pos));
	std::string appName(parseUntilSpace(msg, pos));
	std::string procId(parseUntilSpace(msg, pos));
	std::string msgId(parseUntilSpace(msg, pos));
	std::string message(msg.substr(pos));
	pos = msg.size();
	Poco::DateTime date;
	int tzd = 0;
	bool hasDate = Poco::DateTimeParser::tryParse(RemoteSyslogChannel::SYSLOG_TIMEFORMAT, timeStr, date, tzd);
	Poco::Message logEntry(msgId, message, prio);
	logEntry["host"] = hostName;
	logEntry["app"] = appName;
	
	if (hasDate)
		logEntry.setTime(date.timestamp());
	int lval(0);
	Poco::NumberParser::tryParse(procId, lval);
	logEntry.setPid(lval);
	_pListener->log(logEntry);
}
Ejemplo n.º 2
0
/**
 * Start an RPC request
 *
 * Use send() to pass on each of the call parameters
 *
 * Returns a MsgpackRequest object. You can connect to
 * its finished() SIGNAL to handle the response
 */
MsgpackRequest* MsgpackIODevice::startRequestUnchecked(const QString& method, quint32 argcount)
{
	quint32 msgid = msgId();
	// [type(0), msgid, method, args]
	msgpack_pack_array(&m_pk, 4);
	msgpack_pack_int(&m_pk, 0);
	msgpack_pack_int(&m_pk, msgid);
	const QByteArray& utf8 = method.toUtf8();
	msgpack_pack_bin(&m_pk, utf8.size());
	msgpack_pack_bin_body(&m_pk, utf8.constData(), utf8.size());
	msgpack_pack_array(&m_pk, argcount);

	MsgpackRequest *r = new MsgpackRequest( msgid, this);
	connect(r, &MsgpackRequest::timeout,
			this, &MsgpackIODevice::requestTimeout);
	m_requests.insert(msgid, r);
	return r;
}
Ejemplo n.º 3
0
void FifoReadCallback::readDataAvailable(size_t len) noexcept {
  try {
    readBuffer_.postallocate(len);

    // Process any pending packet headers.
    if (pendingHeader_.packetSize() > 0) {
      if (readBuffer_.chainLength() < pendingHeader_.packetSize()) {
        return;
      }
      feedParser(pendingHeader_,
                 readBuffer_.split(pendingHeader_.packetSize()));
      pendingHeader_.setPacketSize(0);
    }

    while (readBuffer_.chainLength() >= std::max(sizeof(MessageHeader),
                                                 sizeof(PacketHeader))) {
      if (isMessageHeader(readBuffer_)) {
        auto msgHeader = parseMessageHeader(readBuffer_);

        auto fromAddr = msgHeader.getLocalAddress();
        auto toAddr = msgHeader.getPeerAddress();
        if (msgHeader.direction() == MessageDirection::Received) {
          std::swap(fromAddr, toAddr);
        }
        parserMap_.fetch(msgHeader.msgId()).setAddresses(fromAddr, toAddr);
        continue;
      }

      auto packetHeader = parsePacketHeader(
          readBuffer_.split(sizeof(PacketHeader))->coalesce());
      if (packetHeader.packetSize() > readBuffer_.chainLength()) {
        // Wait for more data.
        pendingHeader_ = std::move(packetHeader);
        return;
      }

      feedParser(packetHeader, readBuffer_.split(packetHeader.packetSize()));
    }
  } catch (const std::exception& ex) {
    CHECK(false) << "Unexpected exception: " << ex.what();
  }
}