X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fircparser.cpp;h=f3db4fceab455ba03de4849452c2a9606204e690;hb=04315f46a16fc3627218377071e008b6b9744992;hp=e69336fba5995fb534d8249314d3e1ef3a520a90;hpb=9fc57dc2c000e80fb8bd746a090e2e8210e1278e;p=quassel.git diff --git a/src/core/ircparser.cpp b/src/core/ircparser.cpp index e69336fb..f3db4fce 100644 --- a/src/core/ircparser.cpp +++ b/src/core/ircparser.cpp @@ -28,6 +28,7 @@ #ifdef HAVE_QCA2 # include "cipher.h" +# include "keyevent.h" #endif IrcParser::IrcParser(CoreSession *session) : @@ -58,7 +59,7 @@ QByteArray IrcParser::decrypt(Network *network, const QString &bufferName, const return message; Cipher *cipher = qobject_cast(network)->cipher(bufferName); - if (!cipher) + if (!cipher || cipher->key().isEmpty()) return message; return isTopic ? cipher->decryptTopic(message) : cipher->decrypt(message); @@ -228,7 +229,16 @@ void IrcParser::processNetworkIncoming(NetworkDataEvent *e) if (!net->isChannelName(target)) target = nickFromMask(prefix); } - events << new IrcEventRawMessage(EventManager::IrcEventRawNotice, net, params[1], prefix, target, e->timestamp()); + +#ifdef HAVE_QCA2 + // Handle DH1080 key exchange + if (params[1].startsWith("DH1080_INIT")) { + events << new KeyEvent(EventManager::KeyEvent, net, prefix, target, KeyEvent::Init, params[1].mid(12)); + } else if (params[1].startsWith("DH1080_FINISH")) { + events << new KeyEvent(EventManager::KeyEvent, net, prefix, target, KeyEvent::Finish, params[1].mid(14)); + } else +#endif + events << new IrcEventRawMessage(EventManager::IrcEventRawNotice, net, params[1], prefix, target, e->timestamp()); } } break;