X-Git-Url: https://git.quassel-irc.org/?p=quassel.git;a=blobdiff_plain;f=src%2Fcore%2Fircserverhandler.h;h=d7b875002cb62a4bc0f05e9e03f8e4fd4bf83439;hp=6149d152bb2eddaa985b855a114992e5146fd870;hb=56b69808aa71b882aa792fadfda2733d765c2ba8;hpb=2d19986a8bafafec55b5d3b0474f7d76eb5f33b2 diff --git a/src/core/ircserverhandler.h b/src/core/ircserverhandler.h index 6149d152..d7b87500 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,67 +18,108 @@ * 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); - QString serverDecode(const QByteArray &string); - QStringList serverDecode(const QList &stringlist); - QString bufferDecode(const QString &bufferName, const QByteArray &string); - QStringList bufferDecode(const QString &bufferName, const QList &stringlist); - QString userDecode(const QString &userNick, const QByteArray &string); - QStringList userDecode(const QString &userNick, const QList &stringlist); +public slots: + void handleJoin(const QString &prefix, const QList ¶ms); + void handleMode(const QString &prefix, const QList ¶ms); + void handleNotice(const QString &prefix, const QList ¶ms); + void handlePing(const QString &prefix, const QList ¶ms); + void handlePrivmsg(const QString &prefix, const QList ¶ms); + void handleQuit(const QString &prefix, const QList ¶ms); + void handle005(const QString &prefix, const QList ¶ms); // RPL_ISUPPORT + 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 + void handle312(const QString &prefix, const QList ¶ms); // RPL_WHOISSERVER + void handle313(const QString &prefix, const QList ¶ms); // RPL_WHOISOPERATOR + void handle314(const QString &prefix, const QList ¶ms); // RPL_WHOWASUSER + void handle315(const QString &prefix, const QList ¶ms); // RPL_ENDOFWHO + void handle317(const QString &prefix, const QList ¶ms); // RPL_WHOISIDLE + 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 handle330(const QString &prefix, const QList ¶ms); // RPL_WHOISACCOUNT (quakenet/snircd/undernet) + 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 handle341(const QString &prefix, const QList ¶ms); // RPL_INVITING + 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 + void handle433(const QString &prefix, const QList ¶ms); // ERR_NICKNAMEINUSE + void handle437(const QString &prefix, const QList ¶ms); // ERR_UNAVAILRESOURCE + void defaultHandler(QString cmd, const QString &prefix, const QList ¶ms); -public slots: - void handleJoin(QString, QList); - void handleKick(QString, QList); - void handleMode(QString, QList); - void handleNick(QString, QList); - void handleNotice(QString, QList); - void handlePart(QString, QList); - void handlePing(QString, QList); - void handlePrivmsg(QString, QList); - void handleQuit(QString, QList); - void handleTopic(QString, QList); - - void handle001(QString, QList); // RPL_WELCOME - void handle005(QString, QList); // RPL_ISUPPORT - void handle301(QString, QList); // RPL_AWAY - void handle311(QString, QList); // RPL_WHOISUSER - void handle312(QString, QList); // RPL_WHOISSERVER - void handle313(QString, QList); // RPL_WHOISOPERATOR - void handle314(QString, QList); // RPL_WHOWASUSER - void handle315(QString, QList); // RPL_ENDOFWHO - void handle317(QString, QList); // RPL_WHOISIDLE - void handle318(QString, QList); // RPL_ENDOFWHOIS - void handle319(QString, QList); // RPL_WHOISCHANNELS - void handle331(QString, QList); // RPL_NOTOPIC - void handle332(QString, QList); // RPL_TOPIC - void handle333(QString, QList); // Topic set by... - void handle352(QString, QList); // RPL_WHOREPLY - void handle353(QString, QList); // RPL_NAMREPLY - void handle369(QString, QList); // RPL_ENDOFWHOWAS - void handle432(QString, QList); // ERR_ERRONEUSNICKNAME - void handle433(QString, QList); // ERR_NICKNAMEINUSE - - void defaultHandler(QString cmd, QString prefix, QList params); +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); - bool _whowas; - NetworkConnection *networkConnection; -}; + 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; + +#ifdef HAVE_QCA2 + QByteArray decrypt(const QString &target, const QByteArray &message, bool isTopic = false); +#endif +}; #endif