X-Git-Url: https://git.quassel-irc.org/?a=blobdiff_plain;f=src%2Fcore%2Fcoresessioneventprocessor.cpp;h=71cde858552620e8c350f46efb4bb22571c7f2a8;hb=35ca85f1c4371ee28d00d5ff0195a5b44aadb299;hp=eef0dd2ebcd1c453a8552edf7c9f427c5bd42c5b;hpb=b65b9f7615165e8700a44d59b7275a55558dd45b;p=quassel.git diff --git a/src/core/coresessioneventprocessor.cpp b/src/core/coresessioneventprocessor.cpp index eef0dd2e..71cde858 100644 --- a/src/core/coresessioneventprocessor.cpp +++ b/src/core/coresessioneventprocessor.cpp @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-2015 by the Quassel Project * + * Copyright (C) 2005-2018 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -144,19 +144,25 @@ void CoreSessionEventProcessor::processIrcEventCap(IrcEvent *e) // additional CAP messages (ls, multi-prefix, et cetera). if (e->params().count() == 3) { - if (e->params().at(2).startsWith("sasl")) { // Freenode (at least) sends "sasl " with a trailing space for some reason! - // FIXME use event - // if the current identity has a cert set, use SASL EXTERNAL + if (e->params().at(1) == "NAK") { + // CAP REQ sasl was denied + coreNetwork(e)->putRawLine("CAP END"); + } + else if (e->params().at(1) == "ACK") { + if (e->params().at(2).startsWith("sasl")) { // Freenode (at least) sends "sasl " with a trailing space for some reason! + // FIXME use event + // if the current identity has a cert set, use SASL EXTERNAL #ifdef HAVE_SSL - if (!coreNetwork(e)->identityPtr()->sslCert().isNull()) { - coreNetwork(e)->putRawLine(coreNetwork(e)->serverEncode("AUTHENTICATE EXTERNAL")); - } else { + if (!coreNetwork(e)->identityPtr()->sslCert().isNull()) { + coreNetwork(e)->putRawLine(coreNetwork(e)->serverEncode("AUTHENTICATE EXTERNAL")); + } else { #endif - // Only working with PLAIN atm, blowfish later - coreNetwork(e)->putRawLine(coreNetwork(e)->serverEncode("AUTHENTICATE PLAIN")); + // Only working with PLAIN atm, blowfish later + coreNetwork(e)->putRawLine(coreNetwork(e)->serverEncode("AUTHENTICATE PLAIN")); #ifdef HAVE_SSL - } + } #endif + } } } } @@ -367,7 +373,8 @@ void CoreSessionEventProcessor::processIrcEventPing(IrcEvent *e) { QString param = e->params().count() ? e->params().first() : QString(); // FIXME use events - coreNetwork(e)->putRawLine("PONG " + coreNetwork(e)->serverEncode(param)); + // Take priority so this won't get stuck behind other queued messages. + coreNetwork(e)->putRawLine("PONG " + coreNetwork(e)->serverEncode(param), true); } @@ -442,6 +449,21 @@ void CoreSessionEventProcessor::processIrcEventTopic(IrcEvent *e) } } +/* ERROR - "ERROR :reason" +Example: ERROR :Closing Link: nickname[xxx.xxx.xxx.xxx] (Large base64 image paste.) +See https://tools.ietf.org/html/rfc2812#section-3.7.4 */ +void CoreSessionEventProcessor::processIrcEventError(IrcEvent *e) +{ + if (!checkParamCount(e, 1)) + return; + + if (coreNetwork(e)->disconnectExpected()) { + // During QUIT, the server should send an error (often, but not always, "Closing Link"). As + // we're expecting it, don't show this to the user. + e->setFlag(EventManager::Silent); + } +} + #ifdef HAVE_QCA2 void CoreSessionEventProcessor::processKeyEvent(KeyEvent *e) @@ -696,10 +718,13 @@ void CoreSessionEventProcessor::processIrcEvent322(IrcEvent *e) switch (e->params().count()) { case 3: topic = e->params()[2]; + [[clang::fallthrough]]; case 2: userCount = e->params()[1].toUInt(); + [[clang::fallthrough]]; case 1: channelName = e->params()[0]; + [[clang::fallthrough]]; default: break; } @@ -1088,6 +1113,6 @@ void CoreSessionEventProcessor::handleCtcpTime(CtcpEvent *e) void CoreSessionEventProcessor::handleCtcpVersion(CtcpEvent *e) { - e->setReply(QString("Quassel IRC %1 (built on %2) -- http://www.quassel-irc.org") - .arg(Quassel::buildInfo().plainVersionString).arg(Quassel::buildInfo().buildDate)); + e->setReply(QString("Quassel IRC %1 (built on %2) -- https://www.quassel-irc.org") + .arg(Quassel::buildInfo().plainVersionString).arg(Quassel::buildInfo().commitDate)); }