1 | /*************************************************************************** |
2 | * Copyright (C) 2005-2014 by the Quassel Project * |
3 | * devel@quassel-irc.org * |
4 | * * |
5 | * This program is free software; you can redistribute it and/or modify * |
6 | * it under the terms of the GNU General Public License as published by * |
7 | * the Free Software Foundation; either version 2 of the License, or * |
8 | * (at your option) version 3. * |
9 | * * |
10 | * This program is distributed in the hope that it will be useful, * |
11 | * but WITHOUT ANY WARRANTY; without even the implied warranty of * |
12 | * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * |
13 | * GNU General Public License for more details. * |
14 | * * |
15 | * You should have received a copy of the GNU General Public License * |
16 | * along with this program; if not, write to the * |
17 | * Free Software Foundation, Inc., * |
18 | * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. * |
19 | ***************************************************************************/ |
20 | |
21 | #ifndef CORESESSIONEVENTPROCESSOR_H |
22 | #define CORESESSIONEVENTPROCESSOR_H |
23 | |
24 | #include "basichandler.h" |
25 | #include "corenetwork.h" |
26 | #include "networkevent.h" |
27 | |
28 | class CoreSession; |
29 | class CtcpEvent; |
30 | class IrcEvent; |
31 | class IrcEventNumeric; |
32 | class Netsplit; |
33 | |
34 | #ifdef HAVE_QCA2 |
35 | class KeyEvent; |
36 | #endif |
37 | |
38 | class CoreSessionEventProcessor : public BasicHandler |
39 | { |
40 | Q_OBJECT |
41 | |
42 | public: |
43 | CoreSessionEventProcessor(CoreSession *session); |
44 | |
45 | inline CoreSession *coreSession() const { return _coreSession; } |
46 | |
47 | Q_INVOKABLE void processIrcEventNumeric(IrcEventNumeric *event); |
48 | |
49 | Q_INVOKABLE void processIrcEventAuthenticate(IrcEvent *event); // SASL auth |
50 | Q_INVOKABLE void processIrcEventCap(IrcEvent *event); // CAP framework |
51 | Q_INVOKABLE void processIrcEventInvite(IrcEvent *event); |
52 | Q_INVOKABLE void processIrcEventJoin(IrcEvent *event); |
53 | Q_INVOKABLE void lateProcessIrcEventKick(IrcEvent *event); |
54 | Q_INVOKABLE void processIrcEventMode(IrcEvent *event); |
55 | Q_INVOKABLE void lateProcessIrcEventNick(IrcEvent *event); |
56 | Q_INVOKABLE void lateProcessIrcEventPart(IrcEvent *event); |
57 | Q_INVOKABLE void processIrcEventPing(IrcEvent *event); |
58 | Q_INVOKABLE void processIrcEventPong(IrcEvent *event); |
59 | Q_INVOKABLE void processIrcEventQuit(IrcEvent *event); |
60 | Q_INVOKABLE void lateProcessIrcEventQuit(IrcEvent *event); |
61 | Q_INVOKABLE void processIrcEventTopic(IrcEvent *event); |
62 | #ifdef HAVE_QCA2 |
63 | Q_INVOKABLE void processKeyEvent(KeyEvent *event); |
64 | #endif |
65 | |
66 | Q_INVOKABLE void processIrcEvent001(IrcEventNumeric *event); // RPL_WELCOME |
67 | Q_INVOKABLE void processIrcEvent005(IrcEvent *event); // RPL_ISUPPORT |
68 | Q_INVOKABLE void processIrcEvent221(IrcEvent *event); // RPL_UMODEIS |
69 | Q_INVOKABLE void processIrcEvent250(IrcEvent *event); // RPL_STATSCONN |
70 | Q_INVOKABLE void processIrcEvent265(IrcEvent *event); // RPL_LOCALUSERS |
71 | Q_INVOKABLE void processIrcEvent266(IrcEvent *event); // RPL_GLOBALUSERS |
72 | Q_INVOKABLE void processIrcEvent301(IrcEvent *event); // RPL_AWAY |
73 | Q_INVOKABLE void processIrcEvent305(IrcEvent *event); // RPL_UNAWAY |
74 | Q_INVOKABLE void processIrcEvent306(IrcEvent *event); // RPL_NOWAWAY |
75 | Q_INVOKABLE void processIrcEvent307(IrcEvent *event); // RPL_WHOISSERVICE |
76 | Q_INVOKABLE void processIrcEvent310(IrcEvent *event); // RPL_SUSERHOST |
77 | Q_INVOKABLE void processIrcEvent311(IrcEvent *event); // RPL_WHOISUSER |
78 | Q_INVOKABLE void processIrcEvent312(IrcEvent *event); // RPL_WHOISSERVER |
79 | Q_INVOKABLE void processIrcEvent313(IrcEvent *event); // RPL_WHOISOPERATOR |
80 | Q_INVOKABLE void processIrcEvent315(IrcEvent *event); // RPL_ENDOFWHO |
81 | Q_INVOKABLE void processIrcEvent317(IrcEvent *event); // RPL_WHOISIDLE |
82 | Q_INVOKABLE void processIrcEvent322(IrcEvent *event); // RPL_LIST |
83 | Q_INVOKABLE void processIrcEvent323(IrcEvent *event); // RPL_LISTEND |
84 | Q_INVOKABLE void processIrcEvent324(IrcEvent *event); // RPL_CHANNELMODEIS |
85 | Q_INVOKABLE void processIrcEvent331(IrcEvent *event); // RPL_NOTOPIC |
86 | Q_INVOKABLE void processIrcEvent332(IrcEvent *event); // RPL_TOPIC |
87 | Q_INVOKABLE void processIrcEvent352(IrcEvent *event); // RPL_WHOREPLY |
88 | Q_INVOKABLE void processIrcEvent353(IrcEvent *event); // RPL_NAMREPLY |
89 | Q_INVOKABLE void processIrcEvent432(IrcEventNumeric *event); // ERR_ERRONEUSNICKNAME |
90 | Q_INVOKABLE void processIrcEvent433(IrcEventNumeric *event); // ERR_NICKNAMEINUSE |
91 | Q_INVOKABLE void processIrcEvent437(IrcEventNumeric *event); // ERR_UNAVAILRESOURCE |
92 | |
93 | // Q_INVOKABLE void processIrcEvent(IrcEvent *event); |
94 | |
95 | /* CTCP handlers */ |
96 | Q_INVOKABLE void processCtcpEvent(CtcpEvent *event); |
97 | |
98 | Q_INVOKABLE void handleCtcpAction(CtcpEvent *event); |
99 | Q_INVOKABLE void handleCtcpClientinfo(CtcpEvent *event); |
100 | Q_INVOKABLE void handleCtcpDcc(CtcpEvent *event); |
101 | Q_INVOKABLE void handleCtcpPing(CtcpEvent *event); |
102 | Q_INVOKABLE void handleCtcpTime(CtcpEvent *event); |
103 | Q_INVOKABLE void handleCtcpVersion(CtcpEvent *event); |
104 | Q_INVOKABLE void defaultHandler(const QString &ctcpCmd, CtcpEvent *event); |
105 | |
106 | signals: |
107 | void newEvent(Event *event); |
108 | |
109 | protected: |
110 | bool checkParamCount(IrcEvent *event, int minParams); |
111 | inline CoreNetwork *coreNetwork(NetworkEvent *e) const { return qobject_cast<CoreNetwork *>(e->network()); } |
112 | void tryNextNick(NetworkEvent *e, const QString &errnick, bool erroneous = false); |
113 | |
114 | private slots: |
115 | //! Joins after a netsplit |
116 | /** This slot handles a bulk-join after a netsplit is over |
117 | * \param net The network |
118 | * \param channel The channel the users joined |
119 | * \param users The list of users that joind the channel |
120 | * \param modes The list of modes the users get set |
121 | * \param quitMessage The message we received when the netsplit occured |
122 | */ |
123 | void handleNetsplitJoin(Network *net, const QString &channel, const QStringList &users, const QStringList &modes, const QString &quitMessage); |
124 | |
125 | //! Quits after a netsplit |
126 | /** This slot handles a bulk-quit after a netsplit occured |
127 | * \param net The network |
128 | * \param channel The channel the users quitted |
129 | * \param users The list of users that got split |
130 | * \param quitMessage The message we received when the netsplit occured |
131 | */ |
132 | void handleNetsplitQuit(Network *net, const QString &channel, const QStringList &users, const QString &quitMessage); |
133 | |
134 | //! Netsplit finished |
135 | /** This slot deletes the netsplit object that sent the finished() signal |
136 | */ |
137 | void handleNetsplitFinished(); |
138 | |
139 | void handleEarlyNetsplitJoin(Network *net, const QString &channel, const QStringList &users, const QStringList &modes); |
140 | |
141 | //! Destroy any existing netsplits |
142 | /** This slot deletes all netsplit objects |
143 | * Used to get rid of existing netsplits on network reconnect |
144 | * \param network The network we want to clear |
145 | */ |
146 | void destroyNetsplits(NetworkId network); |
147 | |
148 | private: |
149 | CoreSession *_coreSession; |
150 | |
151 | // structure to organize netsplits |
152 | // key: quit message |
153 | // value: the corresponding netsplit object |
154 | QHash<Network *, QHash<QString, Netsplit *> > _netsplits; |
155 | }; |
156 | |
157 | |
158 | #endif |
159 | |