X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fircserverhandler.h;h=3b2b8750e62045429acecf08616c6f27d60cb6b6;hp=a4005e322af754662be3bec619ab04dbbd75ee23;hb=e4972a0ebce0d555d752ab2f34ffd6a6dcdef1dd;hpb=6fe30667a4a4747e8fad048dad499f7d2390b044 diff --git a/src/core/ircserverhandler.h b/src/core/ircserverhandler.h index a4005e32..3b2b8750 100644 --- a/src/core/ircserverhandler.h +++ b/src/core/ircserverhandler.h @@ -1,5 +1,5 @@ /*************************************************************************** - * Copyright (C) 2005-08 by the Quassel Project * + * Copyright (C) 2005-10 by the Quassel Project * * devel@quassel-irc.org * * * * This program is free software; you can redistribute it and/or modify * @@ -18,16 +18,17 @@ * 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. * ***************************************************************************/ -#ifndef _IRCSERVERHANDLER_H_ -#define _IRCSERVERHANDLER_H_ +#ifndef IRCSERVERHANDLER_H +#define IRCSERVERHANDLER_H -#include "basichandler.h" +#include "corebasichandler.h" +#include "netsplit.h" -class IrcServerHandler : public BasicHandler { +class IrcServerHandler : public CoreBasicHandler { Q_OBJECT public: - IrcServerHandler(NetworkConnection *parent); + IrcServerHandler(CoreNetwork *parent); ~IrcServerHandler(); void handleServerMsg(QByteArray rawMsg); @@ -40,10 +41,12 @@ public slots: void handleNotice(const QString &prefix, const QList ¶ms); void handlePart(const QString &prefix, const QList ¶ms); void handlePing(const QString &prefix, const QList ¶ms); + void handlePong(const QString &prefix, const QList ¶ms); void handlePrivmsg(const QString &prefix, const QList ¶ms); void handleQuit(const QString &prefix, const QList ¶ms); void handleTopic(const QString &prefix, const QList ¶ms); - + void handleCap(const QString &prefix, const QList ¶ms); // CAP framework + void handleAuthenticate(); // SASL auth - no params void handle001(const QString &prefix, const QList ¶ms); // RPL_WELCOME void handle005(const QString &prefix, const QList ¶ms); // RPL_ISUPPORT void handle221(const QString &prefix, const QList ¶ms); // RPL_UMODEIS @@ -51,6 +54,8 @@ public slots: void handle265(const QString &prefix, const QList ¶ms); // RPL_LOCALUSERS void handle266(const QString &prefix, const QList ¶ms); // RPL_GLOBALUSERS void handle301(const QString &prefix, const QList ¶ms); // RPL_AWAY + void handle305(const QString &prefix, const QList ¶ms); // RPL_UNAWAY + void handle306(const QString &prefix, const QList ¶ms); // RPL_NOWAWAY void handle307(const QString &prefix, const QList ¶ms); // RPL_WHOISSERVICE void handle310(const QString &prefix, const QList ¶ms); // RPL_SUSERHOST void handle311(const QString &prefix, const QList ¶ms); // RPL_WHOISUSER @@ -62,10 +67,15 @@ public slots: void handle318(const QString &prefix, const QList ¶ms); // RPL_ENDOFWHOIS void handle319(const QString &prefix, const QList ¶ms); // RPL_WHOISCHANNELS void handle320(const QString &prefix, const QList ¶ms); // RPL_WHOISVIRT (is identified to services) + void handle322(const QString &prefix, const QList ¶ms); // RPL_LIST + void handle323(const QString &prefix, const QList ¶ms); // RPL_LISTEND + void handle324(const QString &prefix, const QList ¶ms); // RPL_CHANNELMODEIS + void handle328(const QString &prefix, const QList ¶ms); // RPL_??? (channel homepage) + void handle329(const QString &prefix, const QList ¶ms); // RPL_??? (channel creation time) void handle331(const QString &prefix, const QList ¶ms); // RPL_NOTOPIC void handle332(const QString &prefix, const QList ¶ms); // RPL_TOPIC void handle333(const QString &prefix, const QList ¶ms); // Topic set by... - void handle352(const QString &prefix, const QList ¶ms); // RPL_WHOREPLY + void handle352(const QString &prefix, const QList ¶ms); // RPL_WHOREPLY void handle353(const QString &prefix, const QList ¶ms); // RPL_NAMREPLY void handle369(const QString &prefix, const QList ¶ms); // RPL_ENDOFWHOWAS void handle432(const QString &prefix, const QList ¶ms); // ERR_ERRONEUSNICKNAME @@ -73,13 +83,51 @@ public slots: void defaultHandler(QString cmd, const QString &prefix, const QList ¶ms); -signals: - void nickChanged(const QString &newNick, const QString &oldNick); // this signal is inteded to rename query buffers in the storage backend - +private slots: + //! Joins after a netsplit + /** This slot handles a bulk-join after a netsplit is over + * \param channel The channel the users joined + * \param users The list of users that joind the channel + * \param modes The list of modes the users get set + * \param quitMessage The message we received when the netsplit occured + */ + void handleNetsplitJoin(const QString &channel, const QStringList &users, const QStringList &modes, const QString &quitMessage); + + //! Quits after a netsplit + /** This slot handles a bulk-quit after a netsplit occured + * \param channel The channel the users quitted + * \param users The list of users that got split + * \param quitMessage The message we received when the netsplit occured + */ + void handleNetsplitQuit(const QString &channel, const QStringList &users, const QString &quitMessage); + + //! Netsplit finished + /** This slot deletes the netsplit object that sent the finished() signal + */ + void handleNetsplitFinished(); + + void handleEarlyNetsplitJoin(const QString &channel, const QStringList &users, const QStringList &modes); + + //! Destroy any existing netsplits + /** This slot deletes all netsplit objects + * Used to get rid of existing netsplits on network reconnect + */ + void destroyNetsplits(); + private: - void tryNextNick(const QString &errnick); + void tryNextNick(const QString &errnick, bool erroneus = false); bool checkParamCount(const QString &methodName, const QList ¶ms, int minParams); + + // holds the target for numeric replies or is invalid otherwise + inline const QString &target() const { return _target; } + bool _whois; + QString _target; + + // structure to organize netsplits + // key: quit message + // value: the corresponding netsplit object + QHash _netsplits; };