bool XmppServerArchive::handleStanza(const QDomElement &element) { const QString domain = server()->domain(); const QString from = element.attribute("from"); const QString to = element.attribute("to"); if (element.tagName() == "message" && to != domain && (QXmppUtils::jidToDomain(from) == domain || QXmppUtils::jidToDomain(to) == domain) && element.attribute("type") != "error" && element.attribute("type") != "groupchat" && element.attribute("type") != "headline" && !element.firstChildElement("body").text().isEmpty()) { const QDateTime now = QDateTime::currentDateTime().toUTC(); QXmppMessage message; message.parse(element); if (QXmppUtils::jidToDomain(from) == domain) saveMessage(message, now, false); if (QXmppUtils::jidToDomain(to) == domain) { saveMessage(message, now, true); // offline messages bool found = false; XmppServerPresence *presenceExtension = XmppServerPresence::instance(server()); Q_ASSERT(presenceExtension); foreach (const QXmppPresence &presence, presenceExtension->availablePresences(QXmppUtils::jidToBareJid(to))) { if (QXmppUtils::jidToResource(to).isEmpty() || presence.from() == to) { found = true; break; } } if (!found) { message.setStamp(now); message.setState(QXmppMessage::None); message.setTo(QXmppUtils::jidToBareJid(to)); QBuffer buffer; buffer.open(QIODevice::WriteOnly); QXmlStreamWriter writer(&buffer); message.toXml(&writer); OfflineMessage offline; offline.setData(QString::fromUtf8(buffer.data())); offline.setJid(QXmppUtils::jidToBareJid(to)); offline.setStamp(now); offline.save(); return true; } } return false; } else if (element.tagName() == "presence" &&