void OtrProxyChannel::Adaptee::onMessageReceived(const Tp::ReceivedMessage &receivedMessage) { const uint id = receivedMessage.header()[QLatin1String("pending-message-id")].variant().toUInt(nullptr); OTR::Message otrMsg(receivedMessage.parts()); // no private key - should generate on now if(otrMsg.isOTRmessage() && otrSes.localFingerprint().isEmpty() && ps->getPolicy() != OTRL_POLICY_NEVER) { enqueuedMessages << receivedMessage; acquirePrivateKey(); return; // private key is currently being generated } else if(isGenerating) { enqueuedMessages << receivedMessage; return; } qCDebug(KTP_PROXY) << "Received message with id: " << id; const OTR::CryptResult cres = otrSes.decrypt(otrMsg); if(cres == OTR::CryptResult::CHANGED || cres == OTR::CryptResult::UNCHANGED) { messages.insert(id, receivedMessage); Q_EMIT messageReceived(otrMsg.parts()); } else { // Error or OTR message - acknowledge right now if(cres == OTR::CryptResult::ERROR) { qCWarning(KTP_PROXY) << "Decryption error of the message: " << otrMsg.text(); } chan->acknowledge(QList<Tp::ReceivedMessage>() << receivedMessage); } }
void OtrProxyChannel::Adaptee::onPendingMessageRemoved(const Tp::ReceivedMessage &receivedMessage) { const uint id = receivedMessage.header().value(QLatin1String("pending-message-id")).variant().toUInt(nullptr); if(messages.remove(id)) { Q_EMIT pendingMessagesRemoved(Tp::UIntList() << id); } else { qCDebug(KTP_PROXY) << "Text channel removed missing pending message with id or an OTR message: " << id; } }