- e->stop();
- return false;
- }
- return true;
-}
-
-void EventStringifier::processIrcEventNumeric(IrcEventNumeric *e) {
- //qDebug() << e->number();
- switch(e->number()) {
- // Welcome, status, info messages. Just display these.
- case 1: case 2: case 3: case 4: case 5:
- case 221: case 250: case 251: case 252: case 253: case 254: case 255: case 265: case 266:
- case 372: case 375:
- displayMsg(e, Message::Server, e->params().join(" "), e->prefix());
- break;
-
- // Server error messages without param, just display them
- case 409: case 411: case 412: case 422: case 424: case 445: case 446: case 451: case 462:
- case 463: case 464: case 465: case 466: case 472: case 481: case 483: case 485: case 491: case 501: case 502:
- case 431: // ERR_NONICKNAMEGIVEN
- displayMsg(e, Message::Error, e->params().join(" "), e->prefix());
- break;
-
- // Server error messages, display them in red. First param will be appended.
- case 401: {
- QString target = e->params().takeFirst();
- displayMsg(e, Message::Error, e->params().join(" ") + " " + target, e->prefix(), target, Message::Redirected);
- break;
- }
-
- case 402: case 403: case 404: case 406: case 408: case 415: case 421: case 442: {
- QString channelName = e->params().takeFirst();
- displayMsg(e, Message::Error, e->params().join(" ") + " " + channelName, e->prefix());
- break;
- }
-
- // Server error messages which will be displayed with a colon between the first param and the rest
- case 413: case 414: case 423: case 441: case 444: case 461: // FIXME see below for the 47x codes
- case 467: case 471: case 473: case 474: case 475: case 476: case 477: case 478: case 482:
- case 436: // ERR_NICKCOLLISION
- {
- QString p = e->params().takeFirst();
- displayMsg(e, Message::Error, p + ": " + e->params().join(" "));
- break;
- }
-
- // Ignore these commands.
- case 321: case 366: case 376:
- break;
-
- // CAP stuff
- case 903: case 904: case 905: case 906: case 907:
- {
- displayMsg(e, Message::Info, "CAP: " + e->params().join(""));
- break;
- }
-
- // Everything else will be marked in red, so we can add them somewhere.
- default:
- if(_whois) {
- // many nets define their own WHOIS fields. we fetch those not in need of special attention here:
- displayMsg(e, Message::Server, tr("[Whois] ") + e->params().join(" "), e->prefix());
- } else {
- // FIXME figure out how/where to do this in the future
- //if(coreSession()->ircListHelper()->requestInProgress(network()->networkId()))
- // coreSession()->ircListHelper()->reportError(params.join(" "));
- //else
- displayMsg(e, Message::Error, QString("%1 %2").arg(e->number(), 3, 10, QLatin1Char('0')).arg(e->params().join(" ")), e->prefix());
+
+ case 402:
+ case 403:
+ case 404:
+ case 406:
+ case 408:
+ case 415:
+ case 421:
+ case 442:
+ {
+ if (!checkParamCount(e, 1))
+ return;
+
+ QStringList params = e->params();
+ QString channelName = params.takeFirst();
+ displayMsg(e, Message::Error, channelName + ": " + params.join(" "), e->prefix());
+ break;
+ }
+
+ // Server error messages which will be displayed with a colon between the first param and the rest
+ case 413:
+ case 414:
+ case 423:
+ case 441:
+ case 444:
+ case 461: // FIXME see below for the 47x codes
+ case 467:
+ case 471:
+ case 473:
+ case 474:
+ case 475:
+ case 476:
+ case 477:
+ case 478:
+ case 482:
+ case 436: // ERR_NICKCOLLISION
+ {
+ if (!checkParamCount(e, 1))
+ return;
+
+ QStringList params = e->params();
+ QString p = params.takeFirst();
+ displayMsg(e, Message::Error, p + ": " + params.join(" "));
+ break;
+ }
+
+ // Ignore these commands.
+ case 321:
+ case 353:
+ case 366:
+ case 376:
+ break;
+
+ // SASL authentication stuff
+ // See: http://ircv3.net/specs/extensions/sasl-3.1.html
+ case 900: // RPL_LOGGEDIN
+ case 901: // RPL_LOGGEDOUT
+ {
+ // :server 900 <nick> <nick>!<ident>@<host> <account> :You are now logged in as <user>
+ // :server 901 <nick> <nick>!<ident>@<host> :You are now logged out
+ if (!checkParamCount(e, 3))
+ return;
+ displayMsg(e, Message::Server, "SASL: " + e->params().at(2));
+ break;
+ }
+ // Ignore SASL success, partially redundant with RPL_LOGGEDIN and RPL_LOGGEDOUT
+ case 903: // RPL_SASLSUCCESS :server 903 <nick> :SASL authentication successful
+ break;
+ case 902: // ERR_NICKLOCKED :server 902 <nick> :You must use a nick assigned to you
+ case 904: // ERR_SASLFAIL :server 904 <nick> :SASL authentication failed
+ case 905: // ERR_SASLTOOLONG :server 905 <nick> :SASL message too long
+ case 906: // ERR_SASLABORTED :server 906 <nick> :SASL authentication aborted
+ case 907: // ERR_SASLALREADY :server 907 <nick> :You have already authenticated using SASL
+ case 908: // RPL_SASLMECHS :server 908 <nick> <mechanisms> :are available SASL mechanisms
+ {
+ displayMsg(e, Message::Server, "SASL: " + e->params().join(""));
+ break;
+ }
+
+ // Everything else will be marked in red, so we can add them somewhere.
+ default:
+ if (_whois) {
+ // many nets define their own WHOIS fields. we fetch those not in need of special attention here:
+ displayMsg(e, Message::Server, tr("[Whois] ") + e->params().join(" "), e->prefix());
+ }
+ else {
+ // FIXME figure out how/where to do this in the future
+ //if(coreSession()->ircListHelper()->requestInProgress(network()->networkId()))
+ // coreSession()->ircListHelper()->reportError(params.join(" "));
+ //else
+ displayMsg(e, Message::Error, QString("%1 %2").arg(e->number(), 3, 10, QLatin1Char('0')).arg(e->params().join(" ")), e->prefix());
+ }