- foreach(QString channel, ircuser->channels())
- emit displayMsg(Message::Quit, BufferInfo::ChannelBuffer, channel, msg, prefix);
-
- network()->removeIrcUser(nickFromMask(prefix));
-}
-
-void IrcServerHandler::handleTopic(const QString &prefix, const QList<QByteArray> ¶ms) {
- IrcUser *ircuser = network()->updateNickFromMask(prefix);
- if(!ircuser) return;
- QString channel = serverDecode(params[0]);
- QString topic;
- if(params.count() >= 2) topic = channelDecode(channel, params[1]);
-
- network()->ircChannel(channel)->setTopic(topic);
-
- emit displayMsg(Message::Server, BufferInfo::ChannelBuffer, channel, tr("%1 has changed topic for %2 to: \"%3\"").arg(ircuser->nick()).arg(channel).arg(topic));
-}
-
-/* RPL_WELCOME */
-void IrcServerHandler::handle001(const QString &prefix, const QList<QByteArray> ¶ms) {
- // there should be only one param: "Welcome to the Internet Relay Network <nick>!<user>@<host>"
- QString param = serverDecode(params[0]);
- QString myhostmask = param.section(' ', -1, -1);
- network()->setCurrentServer(prefix);
- network()->setMyNick(nickFromMask(myhostmask));
-
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", param, prefix);
-}
-
-/* RPL_ISUPPORT */
-// TODO Complete 005 handling, also use sensible defaults for non-sent stuff
-void IrcServerHandler::handle005(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix);
- const int numParams = params.size();
- if(numParams < 1) {
- qWarning() << "IrcServerHandler::handle005(): received RPL_ISUPPORT (005) with too few parameters:" << serverDecode(params);
- return;
- }
-
- QString rpl_isupport_suffix = serverDecode(params.last());
- if(!rpl_isupport_suffix.toLower().contains("supported")) {
- qWarning() << "Received invalid RPL_ISUPPORT! Suffix is:" << rpl_isupport_suffix << "Excpected: are supported by this server";
- return;
- }
-
- QString rawSupport;
- QString key, value;
- for(int i = 0; i < numParams - 1; i++) {
- QString rawSupport = serverDecode(params[i]);
- QString key = rawSupport.section("=", 0, 0);
- QString value = rawSupport.section("=", 1);
- network()->addSupport(key, value);
- }
-}
-
-
-/*
-WHOIS-Message:
- Replies 311 - 313, 317 - 319 are all replies generated in response to a WHOIS message.
- and 301 (RPL_AWAY)
- "<nick> :<away message>"
-WHO-Message:
- Replies 352 and 315 paired are used to answer a WHO message.
-
-WHOWAS-Message:
- Replies 314 and 369 are responses to a WHOWAS message.
-
-*/
-
-
-/* RPL_AWAY - "<nick> :<away message>" */
-void IrcServerHandler::handle301(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix);
- QString nickName = serverDecode(params[0]);
- QString awayMessage = userDecode(nickName, params.last());
-
- IrcUser *ircuser = network()->ircUser(nickName);
- if(ircuser) {
- ircuser->setAwayMessage(awayMessage);
- ircuser->setAway(true);
- }
-
- // FIXME: proper redirection needed
- if(_whois) {
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is away: \"%2\"").arg(nickName).arg(awayMessage));
- } else {
- if(ircuser) {
- int now = QDateTime::currentDateTime().toTime_t();
- int silenceTime = 60;
- if(ircuser->lastAwayMessage() + silenceTime < now) {
- emit displayMsg(Message::Server, BufferInfo::QueryBuffer, params[0], tr("%1 is away: \"%2\"").arg(nickName).arg(awayMessage));
- }
- ircuser->setLastAwayMessage(now);
- } else {
- // probably should not happen
- emit displayMsg(Message::Server, BufferInfo::QueryBuffer, params[0], tr("%1 is away: \"%2\"").arg(nickName).arg(awayMessage));
+ // check if netsplit
+ if(Netsplit::isNetsplit(msg)) {
+ Netsplit *n;
+ if(!_netsplits.contains(msg)) {
+ n = new Netsplit();
+ connect(n, SIGNAL(finished()), this, SLOT(handleNetsplitFinished()));
+ connect(n, SIGNAL(netsplitJoin(const QString&, const QStringList&, const QStringList&, const QString&)),
+ this, SLOT(handleNetsplitJoin(const QString&, const QStringList&, const QStringList&, const QString&)));
+ connect(n, SIGNAL(netsplitQuit(const QString&, const QStringList&, const QString&)),
+ this, SLOT(handleNetsplitQuit(const QString&, const QStringList&, const QString&)));
+ connect(n, SIGNAL(earlyJoin(const QString&, const QStringList&, const QStringList&)),
+ this, SLOT(handleEarlyNetsplitJoin(const QString&, const QStringList&, const QStringList&)));
+ _netsplits.insert(msg, n);