-/* RPL_UMODEIS - "<user_modes> [<user_mode_params>]" */
-void IrcServerHandler::handle221(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix)
- //TODO: save information in network object
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("%1").arg(serverDecode(params).join(" ")));
-}
-
-/* RPL_STATSCONN - "Highest connection cout: 8000 (7999 clients)" */
-void IrcServerHandler::handle250(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix)
- //TODO: save information in network object
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("%1").arg(serverDecode(params).join(" ")));
-}
-
-/* RPL_LOCALUSERS - "Current local user: 5024 Max: 7999 */
-void IrcServerHandler::handle265(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix)
- //TODO: save information in network object
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("%1").arg(serverDecode(params).join(" ")));
-}
-
-/* RPL_GLOBALUSERS - "Current global users: 46093 Max: 47650" */
-void IrcServerHandler::handle266(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix)
- //TODO: save information in network object
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("%1").arg(serverDecode(params).join(" ")));
-}
-
-/*
-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);
- if(!checkParamCount("IrcServerHandler::handle301()", params, 2))
- return;
-
-
- QString nickName = serverDecode(params[0]);
- QString awayMessage = userDecode(nickName, params[1]);
-
- 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));
- }
- }
-}
-
-/* RPL_WHOISSERVICE - "<user> is registered nick" */
-void IrcServerHandler::handle307(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix)
- if(!checkParamCount("IrcServerHandler::handle307()", params, 1))
- return;
-
- QString whoisServiceReply = serverDecode(params).join(" ");
- IrcUser *ircuser = network()->ircUser(serverDecode(params[0]));
- if(ircuser) {
- ircuser->setWhoisServiceReply(whoisServiceReply);
- }
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1").arg(whoisServiceReply));
-}
-
-/* RPL_SUSERHOST - "<user> is available for help." */
-void IrcServerHandler::handle310(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix)
- if(!checkParamCount("IrcServerHandler::handle310()", params, 1))
- return;
-
- QString suserHost = serverDecode(params).join(" ");
- IrcUser *ircuser = network()->ircUser(serverDecode(params[0]));
- if(ircuser) {
- ircuser->setSuserHost(suserHost);
- }
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1").arg(suserHost));
-}
-
-/* RPL_WHOISUSER - "<nick> <user> <host> * :<real name>" */
-void IrcServerHandler::handle311(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix)
- if(!checkParamCount("IrcServerHandler::handle311()", params, 3))
- return;
-
- _whois = true;
- IrcUser *ircuser = network()->ircUser(serverDecode(params[0]));
- if(ircuser) {
- ircuser->setUser(serverDecode(params[1]));
- ircuser->setHost(serverDecode(params[2]));
- ircuser->setRealName(serverDecode(params.last()));
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is %2 (%3)") .arg(ircuser->nick()).arg(ircuser->hostmask()).arg(ircuser->realName()));
- } else {
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is %2 (%3)") .arg(serverDecode(params[1])).arg(serverDecode(params[2])).arg(serverDecode(params.last())));
- }
-}
-
-/* RPL_WHOISSERVER - "<nick> <server> :<server info>" */
-void IrcServerHandler::handle312(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix)
- if(!checkParamCount("IrcServerHandler::handle312()", params, 2))
- return;
-
- IrcUser *ircuser = network()->ircUser(serverDecode(params[0]));
- if(ircuser) {
- ircuser->setServer(serverDecode(params[1]));
- }
-
- QString returnString = tr("%1 is online via %2 (%3)").arg(serverDecode(params[0])).arg(serverDecode(params[1])).arg(serverDecode(params.last()));
- if(_whois) {
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1").arg(returnString));
- } else {
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whowas] %1").arg(returnString));
- }
-}
-
-/* RPL_WHOISOPERATOR - "<nick> :is an IRC operator" */
-void IrcServerHandler::handle313(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix)
- if(!checkParamCount("IrcServerHandler::handle313()", params, 1))
- return;
-
- IrcUser *ircuser = network()->ircUser(serverDecode(params[0]));
- if(ircuser) {
- ircuser->setIrcOperator(params.last());
- }
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1").arg(serverDecode(params).join(" ")));
-}
-
-/* RPL_WHOWASUSER - "<nick> <user> <host> * :<real name>" */
-void IrcServerHandler::handle314(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix)
- if(!checkParamCount("IrcServerHandler::handle314()", params, 3))
- return;
-
- QString nick = serverDecode(params[0]);
- QString hostmask = QString("%1@%2").arg(serverDecode(params[1])).arg(serverDecode(params[2]));
- QString realName = serverDecode(params.last());
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whowas] %1 was %2 (%3)").arg(nick).arg(hostmask).arg(realName));
-}
-
-/* RPL_ENDOFWHO: "<name> :End of WHO list" */
-void IrcServerHandler::handle315(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix);
- if(!checkParamCount("IrcServerHandler::handle315()", params, 1))
- return;
-
- QStringList p = serverDecode(params);
- if(networkConnection()->setAutoWhoDone(p[0])) {
- return; // stay silent
- }
- p.takeLast(); // should be "End of WHO list"
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Who] End of /WHO list for %1").arg(p.join(" ")));
-}
-
-/* RPL_WHOISIDLE - "<nick> <integer> :seconds idle"
- (real life: "<nick> <integer> <integer> :seconds idle, signon time) */
-void IrcServerHandler::handle317(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix);
- if(!checkParamCount("IrcServerHandler::handle317()", params, 2))
- return;
-
- QString nick = serverDecode(params[0]);
- IrcUser *ircuser = network()->ircUser(nick);
- if(ircuser) {
- QDateTime now = QDateTime::currentDateTime();
- int idleSecs = serverDecode(params[1]).toInt();
- idleSecs *= -1;
- ircuser->setIdleTime(now.addSecs(idleSecs));
- if(params.size() > 3) { // if we have more then 3 params we have the obove mentioned "real life" situation
- int loginTime = serverDecode(params[2]).toInt();
- ircuser->setLoginTime(QDateTime::fromTime_t(loginTime));
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is logged in since %2").arg(ircuser->nick()).arg(ircuser->loginTime().toString()));
- }
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is idling for %2 (%3)").arg(ircuser->nick()).arg(secondsToString(ircuser->idleTime().secsTo(now))).arg(ircuser->idleTime().toString()));
-
- } else {
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] idle message: %1").arg(userDecode(nick, params).join(" ")));
- }
-}
-
-/* RPL_ENDOFWHOIS - "<nick> :End of WHOIS list" */
-void IrcServerHandler::handle318(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix)
- _whois = false;
- QStringList parameter = serverDecode(params);
- parameter.removeFirst();
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1").arg(parameter.join(" ")));
-}
-
-/* RPL_WHOISCHANNELS - "<nick> :*( ( "@" / "+" ) <channel> " " )" */
-void IrcServerHandler::handle319(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix)
- if(!checkParamCount("IrcServerHandler::handle319()", params, 2))
- return;
-
- QString nick = serverDecode(params.first());
- QStringList op;
- QStringList voice;
- QStringList user;
- foreach (QString channel, serverDecode(params.last()).split(" ")) {
- if(channel.startsWith("@"))
- op.append(channel.remove(0,1));
- else if(channel.startsWith("+"))
- voice.append(channel.remove(0,1));
- else
- user.append(channel);
- }
- if(!user.isEmpty())
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is a user on channels: %2").arg(nick).arg(user.join(" ")));
- if(!voice.isEmpty())
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 has voice on channels: %2").arg(nick).arg(voice.join(" ")));
- if(!op.isEmpty())
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1 is an operator on channels: %2").arg(nick).arg(op.join(" ")));
-}
-
-/* RPL_WHOISVIRT - "<nick> is identified to services" */
-void IrcServerHandler::handle320(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix);
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whois] %1").arg(serverDecode(params).join(" ")));
-}
-
-/* RPL_NOTOPIC */
-void IrcServerHandler::handle331(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix);
- if(!checkParamCount("IrcServerHandler::handle331()", params, 1))
- return;
-
- QString channel = serverDecode(params[0]);
- network()->ircChannel(channel)->setTopic(QString());
- emit displayMsg(Message::Server, BufferInfo::ChannelBuffer, channel, tr("No topic is set for %1.").arg(channel));
-}
-
-/* RPL_TOPIC */
-void IrcServerHandler::handle332(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix);
- if(!checkParamCount("IrcServerHandler::handle332()", params, 2))
- return;
-
- QString channel = serverDecode(params[0]);
- QString topic = channelDecode(channel, params[1]);
- network()->ircChannel(channel)->setTopic(topic);
- emit displayMsg(Message::Server, BufferInfo::ChannelBuffer, channel, tr("Topic for %1 is \"%2\"").arg(channel, topic));
-}
-
-/* Topic set by... */
-void IrcServerHandler::handle333(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix);
- if(!checkParamCount("IrcServerHandler::handle333()", params, 3))
- return;
-
- QString channel = serverDecode(params[0]);
- emit displayMsg(Message::Server, BufferInfo::ChannelBuffer, channel,
- tr("Topic set by %1 on %2") .arg(serverDecode(params[1]), QDateTime::fromTime_t(channelDecode(channel, params[2]).toUInt()).toString()));
-}
-
-/* RPL_WHOREPLY: "<channel> <user> <host> <server> <nick>
- ( "H" / "G" > ["*"] [ ( "@" / "+" ) ] :<hopcount> <real name>" */
-void IrcServerHandler::handle352(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix)
- if(!checkParamCount("IrcServerHandler::handle352()", params, 6))
- return;
-
- QString channel = serverDecode(params[0]);
- IrcUser *ircuser = network()->ircUser(serverDecode(params[4]));
- if(ircuser) {
- ircuser->setUser(serverDecode(params[1]));
- ircuser->setHost(serverDecode(params[2]));
-
- bool away = serverDecode(params[5]).startsWith("G") ? true : false;
- ircuser->setAway(away);
- ircuser->setServer(serverDecode(params[3]));
- ircuser->setRealName(serverDecode(params.last()).section(" ", 1));
- }
-
- if(!networkConnection()->isAutoWhoInProgress(channel)) {
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Who] %1").arg(serverDecode(params).join(" ")));
- }
-}
-
-/* RPL_NAMREPLY */
-void IrcServerHandler::handle353(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix);
- if(!checkParamCount("IrcServerHandler::handle353()", params, 2))
- return;
-
- // param[0] is either "=", "*" or "@" indicating a public, private or secret channel
- // we don't use this information at the time beeing
- QString channelname = serverDecode(params[1]);
-
- IrcChannel *channel = network()->ircChannel(channelname);
- if(!channel) {
- qWarning() << "IrcServerHandler::handle353(): received unknown target channel:" << channelname;
- return;
- }
-
- QStringList nicks;
- QStringList modes;
-
- foreach(QString nick, serverDecode(params[2]).split(' ')) {
- QString mode = QString();
-
- if(network()->prefixes().contains(nick[0])) {
- mode = network()->prefixToMode(nick[0]);
- nick = nick.mid(1);
- }
-
- nicks << nick;
- modes << mode;
- }
-
- channel->joinIrcUsers(nicks, modes);
-}
-
-/* RPL_ENDOFWHOWAS - "<nick> :End of WHOWAS" */
-void IrcServerHandler::handle369(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix)
- emit displayMsg(Message::Server, BufferInfo::StatusBuffer, "", tr("[Whowas] %1").arg(serverDecode(params).join(" ")));
-}
-
-/* ERR_ERRONEUSNICKNAME */
-void IrcServerHandler::handle432(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix);
-
- if(params.size() < 2) {
- // handle unreal-ircd bug, where unreal ircd doesnt supply a TARGET in ERR_ERRONEUSNICKNAME during registration phase:
- // nick @@@
- // :irc.scortum.moep.net 432 @@@ :Erroneous Nickname: Illegal characters
- // correct server reply:
- // :irc.scortum.moep.net 432 * @@@ :Erroneous Nickname: Illegal characters
- emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("There is a nickname in your identity's nicklist which contains illegal characters"));
- emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Due to a bug in Unreal IRCd (and maybe other irc-servers too) we're unable to determine the erroneous nick"));
- emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Please use: /nick <othernick> to continue or clean up your nicklist"));
- } else {
- QString errnick = params[0];
- emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Nick %1 contains illegal characters").arg(errnick));
- tryNextNick(errnick);
- }
-}
-
-/* ERR_NICKNAMEINUSE */
-void IrcServerHandler::handle433(const QString &prefix, const QList<QByteArray> ¶ms) {
- Q_UNUSED(prefix);
- if(!checkParamCount("IrcServerHandler::handle433()", params, 1))
- return;
-
- QString errnick = serverDecode(params[0]);
- emit displayMsg(Message::Error, BufferInfo::StatusBuffer, "", tr("Nick already in use: %1").arg(errnick));
-
- // if there is a problem while connecting to the server -> we handle it
- // but only if our connection has not been finished yet...
- if(!network()->currentServer().isEmpty())
- return;
-
- tryNextNick(errnick);
-}
-
-/* */
-