KVIrc 5.2.0
Developer APIs
KviIrcServerParser.h
Go to the documentation of this file.
1#ifndef _KVI_SPARSER_H_
2#define _KVI_SPARSER_H_
3//=============================================================================
4//
5// File : KviIrcServerParser.h
6// Creation date : Sat Jun 29 2000 14:23:11 by Szymon Stefanek
7//
8// This file is part of the KVIrc IRC client distribution
9// Copyright (C) 2000-2010 Szymon Stefanek (pragma at kvirc dot net)
10//
11// This program is FREE software. You can redistribute it and/or
12// modify it under the terms of the GNU General Public License
13// as published by the Free Software Foundation; either version 2
14// of the License, or (at your option) any later version.
15//
16// This program is distributed in the HOPE that it will be USEFUL,
17// but WITHOUT ANY WARRANTY; without even the implied warranty of
18// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
19// See the GNU General Public License for more details.
20//
21// You should have received a copy of the GNU General Public License
22// along with this program. If not, write to the Free Software Foundation,
23// Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA.
24//
25//=============================================================================
26
27#include "kvi_settings.h"
28#include "KviQString.h"
29#include "KviConsoleWindow.h"
31#include <QObject>
32
33#include <time.h>
34
37class KviIrcMessage;
39class KviMainWindow;
40class KviWindow;
41class QByteArray;
42
43#define UNRECOGNIZED_MESSAGE(_msg, _err) \
44 _msg->setUnrecognized(); \
45 m_szLastParserError = _err;
46
47#define IS_ME(_msg, _nick) KviQString::equalCI(_msg->connection()->currentNickName(), _nick)
48
50
56
57class KviIrcMask;
60{
62 const char * pData;
63 QString szTarget;
68
69 QString szTag;
70};
71
84
86
87#define KVI_CTCP_MESSAGE_PARSE_TRIGGERNOEVENT 1
88
96
97#define EXTERNAL_SERVER_DATA_PARSER_CONTROL_RESET 0
98#define EXTERNAL_SERVER_DATA_PARSER_CONTROL_STARTOFDATA 1
99#define EXTERNAL_SERVER_DATA_PARSER_CONTROL_ENDOFDATA 2
100
102{
103public:
106
107public:
108 virtual void processData(KviIrcMessage *){};
109 virtual void control(int){};
110 virtual void die() { delete this; };
111};
112
113class KVIRC_API KviIrcServerParser : public QObject
114{
115 Q_OBJECT
116public:
119
120private:
121 static messageParseProc m_numericParseProcTable[1000];
122 static KviLiteralMessageParseStruct m_literalParseProcTable[];
123 static KviCtcpMessageParseStruct m_ctcpParseProcTable[];
125
126 // KviCString m_szNoAwayNick; //<-- moved to KviConsoleWindow.h in KviConnectionInfo
127public:
128 void parseMessage(const char * message, KviIrcConnection * pConnection);
129
130private:
131 void parseNumeric001(KviIrcMessage * msg);
132 void parseNumeric002(KviIrcMessage * msg);
133 void parseNumeric003(KviIrcMessage * msg);
134 void parseNumeric004(KviIrcMessage * msg);
135 void parseNumeric005(KviIrcMessage * msg);
136 void parseNumeric020(KviIrcMessage * msg);
137 void parseNumeric344(KviIrcMessage * msg);
138 void parseNumeric345(KviIrcMessage * msg);
139 void parseNumeric367(KviIrcMessage * msg);
140 void parseNumeric368(KviIrcMessage * msg);
141 void parseNumeric480(KviIrcMessage * msg);
142 void parseNumeric728(KviIrcMessage * msg);
143 void parseNumeric729(KviIrcMessage * msg);
144 void parseNumeric742(KviIrcMessage * msg);
145 void parseNumeric486(KviIrcMessage * msg);
146
147 void parseNumericSnomask(KviIrcMessage * msg);
148 void parseNumericYourUID(KviIrcMessage * msg);
149 void parseNumericMotd(KviIrcMessage * msg);
150 void parseNumericNames(KviIrcMessage * msg);
151 void parseNumericEndOfNames(KviIrcMessage * msg);
152 void parseNumericTopic(KviIrcMessage * msg);
153 void parseNumericNoTopic(KviIrcMessage * msg);
154 void parseNumericTopicWhoTime(KviIrcMessage * msg);
155 void parseNumericChannelModeIs(KviIrcMessage * msg);
170 void parseNumericInvited(KviIrcMessage * msg);
173 void parseNumericWhoReply(KviIrcMessage * msg);
174 void parseNumericEndOfWho(KviIrcMessage * msg);
175 void parseNumericNicknameProblem(KviIrcMessage * msg);
176 void parseNumericWhoisAway(KviIrcMessage *);
177 void parseNumericWhoisUser(KviIrcMessage * msg);
178 void parseNumericWhoisChannels(KviIrcMessage * msg);
179 void parseNumericWhoisIdle(KviIrcMessage * msg);
180 void parseNumericWhoisServer(KviIrcMessage * msg);
181 void parseNumericWhoisActually(KviIrcMessage * msg);
182 void parseNumericWhoisOther(KviIrcMessage * msg);
183 void parseNumericWhoisAuth(KviIrcMessage * msg);
184 void parseNumericWhoisRegistered(KviIrcMessage * msg);
185 void parseNumericWhowasUser(KviIrcMessage * msg);
186 void parseNumericEndOfWhois(KviIrcMessage * msg);
187 void parseNumericEndOfWhowas(KviIrcMessage * msg);
188 void parseNumericNoSuchNick(KviIrcMessage * msg);
189 void parseNumericChanUrl(KviIrcMessage * msg);
190 void parseNumericCreationTime(KviIrcMessage * msg);
191 void parseNumericIsOn(KviIrcMessage * msg);
192 void parseNumericBanOnChan(KviIrcMessage * msg);
193 void parseNumericUnavailResource(KviIrcMessage * msg);
194 void parseNumericUserInChan(KviIrcMessage * msg);
195 void parseNumericLinks(KviIrcMessage * msg);
196 void parseNumericEndOfLinks(KviIrcMessage * msg);
197 void parseNumericUserhost(KviIrcMessage * msg);
198 void parseLoginNicknameProblem(KviIrcMessage * msg);
199 void parseNumericBackFromAway(KviIrcMessage *);
200 void parseNumericAway(KviIrcMessage *);
201 void parseNumericUsersDontMatch(KviIrcMessage * msg);
202 void parseNumericWatch(KviIrcMessage * msg);
203 void parseNumericList(KviIrcMessage * msg);
204 void parseNumericListStart(KviIrcMessage * msg);
205 void parseNumericListEnd(KviIrcMessage * msg);
206 void parseNumericCantJoinChannel(KviIrcMessage * msg);
207 void parseNumericStats(KviIrcMessage * msg);
208 void parseNumericUserMode(KviIrcMessage * msg);
209 void parseNumericCodePageSet(KviIrcMessage * msg);
210 void parseNumericCodePageScheme(KviIrcMessage * msg);
211 void parseNumericCannotSend(KviIrcMessage * msg);
212 void parseNumericNoSuchChannel(KviIrcMessage * msg);
213 void parseNumericNoSuchServer(KviIrcMessage * msg);
214 void parseNumericTime(KviIrcMessage * msg);
215 void parseNumericHiddenHost(KviIrcMessage * msg);
216 void parseNumericInfoEnd(KviIrcMessage * msg);
217 void parseNumericInfoStart(KviIrcMessage * msg);
218 void parseNumericInfo(KviIrcMessage * msg);
219 void parseNumericYoureOper(KviIrcMessage * msg);
220 void parseNumericNotEnoughParams(KviIrcMessage * msg);
221 void parseNumericAlreadyRegistered(KviIrcMessage * msg);
222 void parseNumericPasswordIncorrect(KviIrcMessage * msg);
223 void parseNumericInviting(KviIrcMessage * msg);
224 void parseNumericCommandSyntax(KviIrcMessage * msg);
225 void parseNumericServerAdminInfoAdminContact(KviIrcMessage * msg);
226 void parseNumericServerAdminInfoAdminName(KviIrcMessage * msg);
227 void parseNumericServerAdminInfoServerName(KviIrcMessage * msg);
228 void parseNumericServerAdminInfoTitle(KviIrcMessage * msg);
229 void parseNumericCannotSendColor(KviIrcMessage * msg);
230 void parseNumericEndOfStats(KviIrcMessage * msg);
231 void parseNumericForward(KviIrcMessage * msg);
232 void parseNumericNoPrivs(KviIrcMessage * msg);
233 void parseNumericNotifyGeneric(KviIrcMessage * msg);
234 void parseNumericYouHaveCallerID(KviIrcMessage * msg);
235 void otherChannelError(KviIrcMessage * msg);
236 void parseNumericUnknownCommand(KviIrcMessage * msg);
237 void parseNumericMotdMissing(KviIrcMessage * msg);
238 void parseCommandSyntaxHelp(KviIrcMessage * msg);
239 void parseCommandHelp(KviIrcMessage * msg);
240 void parseCommandEndOfHelp(KviIrcMessage * msg);
241 void parseChannelHelp(KviIrcMessage * msg);
242 void parseNumericNeedSSL(KviIrcMessage * msg);
243 void parseNumericOftcQuietList(KviIrcMessage * msg);
244 void parseNumericOftcEndOfQuietList(KviIrcMessage * msg);
245 void parseNumericQuietList(KviIrcMessage * msg);
246 void parseNumericEndOfQuietList(KviIrcMessage * msg);
247 void parseNumericWhospcrpl(KviIrcMessage * msg);
248 void parseNumericTryAgain(KviIrcMessage * msg);
249
250 void parseLiteralPing(KviIrcMessage * msg);
251 void parseLiteralJoin(KviIrcMessage * msg);
252 void parseLiteralTopic(KviIrcMessage * msg);
253 void parseLiteralPart(KviIrcMessage * msg);
254 void parseLiteralPrivmsg(KviIrcMessage * msg);
255 void parseLiteralNotice(KviIrcMessage * msg);
256 void parseLiteralQuit(KviIrcMessage * msg);
257 void parseLiteralNick(KviIrcMessage * msg);
258 void parseLiteralMode(KviIrcMessage * msg);
259 void parseLiteralKick(KviIrcMessage * msg);
260 void parseLiteralInvite(KviIrcMessage * msg);
261 void parseLiteralWallops(KviIrcMessage * msg);
262 void parseLiteralPong(KviIrcMessage * msg);
263 void parseLiteralError(KviIrcMessage * msg);
264 void parseChannelMode(const QString & szNick, const QString & szUser, const QString & szHost, KviChannelWindow * chan, KviCString & modefl, KviIrcMessage * msg, int curParam);
265 void parseUserMode(KviIrcMessage * msg, const char * modeflptr);
266 void parseLiteralCap(KviIrcMessage * msg);
267 void parseLiteralAuthenticate(KviIrcMessage * msg);
268 void parseLiteralAway(KviIrcMessage * msg);
269
270 void parseCtcpRequest(KviCtcpMessage * msg);
271 void parseCtcpReply(KviCtcpMessage * msg);
272 void echoCtcpRequest(KviCtcpMessage * msg);
273 void echoCtcpReply(KviCtcpMessage * msg);
274 void replyCtcp(KviCtcpMessage * msg, const QString & data);
275 bool checkCtcpFlood(KviCtcpMessage * msg);
276 void parseCtcpRequestPing(KviCtcpMessage * msg);
277 void parseCtcpRequestVersion(KviCtcpMessage * msg);
278 void parseCtcpRequestUserinfo(KviCtcpMessage * msg);
279 void parseCtcpRequestClientinfo(KviCtcpMessage * msg);
280 void parseCtcpRequestFinger(KviCtcpMessage * msg);
281 void parseCtcpRequestSource(KviCtcpMessage * msg);
282 void parseCtcpRequestAction(KviCtcpMessage * msg);
283 void parseCtcpRequestTime(KviCtcpMessage * msg);
284 void parseCtcpRequestAvatar(KviCtcpMessage * msg);
285 void parseCtcpRequestDcc(KviCtcpMessage * msg);
286 void parseCtcpRequestPage(KviCtcpMessage * msg);
287 void parseCtcpReplyAvatar(KviCtcpMessage * msg);
288 void parseCtcpReplyUserinfo(KviCtcpMessage * msg);
289 void parseCtcpReplyGeneric(KviCtcpMessage * msg);
290 void parseCtcpReplyPing(KviCtcpMessage * msg);
291 void parseCtcpReplyLagcheck(KviCtcpMessage * msg);
292 // void parseCtcpReply(const char * msg_ptr,KviIrcUser &source,const char * target);
293 // STARTTLS support
294 void parseNumericStartTls(KviIrcMessage * msg);
295 void parseNumericNotRegistered(KviIrcMessage * msg);
296 //sasl
297 void parseNumericSaslSuccess(KviIrcMessage * msg);
298 void parseNumericSaslLogin(KviIrcMessage * msg);
299 void parseNumericSaslFail(KviIrcMessage * msg);
300 // IRCv3 stuffs
301 void parseLiteralAccount(KviIrcMessage * msg);
302 void parseLiteralChghost(KviIrcMessage * msg);
303
304public:
305 static void encodeCtcpParameter(const char * param, KviCString & buffer, bool bSpaceBreaks = true);
306 static void encodeCtcpParameter(const char * param, QString & buffer, bool bSpaceBreaks = true);
307 static const char * decodeCtcpEscape(const char * msg_ptr, KviCString & buffer);
308 static const char * decodeCtcpEscape(const char * msg_ptr, QByteArray & buffer);
309 static const char * extractCtcpParameter(const char * msg_ptr, KviCString & buffer, bool bSpaceBreaks = true, bool bSafeOnly = false);
310 static const char * extractCtcpParameter(const char * msg_ptr, QString & buffer, bool bSpaceBreaks = true, bool bSafeOnly = false);
311};
312
313#ifndef _KVI_SPARSER_CPP_
315#endif
316
317#endif //_KVI_SPARSER_H_
void(KviIrcServerParser::* ctcpParseProc)(KviCtcpMessage *)
Definition KviIrcServerParser.h:85
KVIRC_API KviIrcServerParser * g_pServerParser
Definition KviIrcServerParser.cpp:38
void(KviIrcServerParser::* messageParseProc)(KviIrcMessage *)
Definition KviIrcServerParser.h:49
Helper functions for the QString class.
Definition KviCString.h:102
The class which manages a channel.
Definition KviChannelWindow.h:114
Definition KviConsoleWindow.h:74
Definition KviIrcServerParser.h:102
virtual ~KviExternalServerDataParser()
Definition KviIrcServerParser.h:105
virtual void die()
Definition KviIrcServerParser.h:110
virtual void processData(KviIrcMessage *)
Definition KviIrcServerParser.h:108
KviExternalServerDataParser()
Definition KviIrcServerParser.h:104
virtual void control(int)
Definition KviIrcServerParser.h:109
An abstraction of a connection to an IRC server.
Definition KviIrcConnection.h:97
Irc user mask handling.
Definition KviIrcMask.h:48
Definition KviIrcMessage.h:50
Definition KviIrcServerParser.h:114
void parseNumericEndOfReopList(KviIrcMessage *msg)
void parseNumericEndOfExemptChanOpList(KviIrcMessage *msg)
void parseNumericEndOfChanAccessList(KviIrcMessage *msg)
void parseNumericEndOfExceptList(KviIrcMessage *msg)
void parseNumericEndOfQList(KviIrcMessage *msg)
void parseNumericEndOfAList(KviIrcMessage *msg)
void parseNumericReopList(KviIrcMessage *msg)
void parseNumericExceptList(KviIrcMessage *msg)
void parseNumericInviteList(KviIrcMessage *msg)
void parseNumericQList(KviIrcMessage *msg)
KviCString m_szLastParserError
Definition KviIrcServerParser.h:124
void parseNumericEndOfInviteList(KviIrcMessage *msg)
void parseNumericExemptChanOpList(KviIrcMessage *msg)
void parseNumericSpamFilterList(KviIrcMessage *msg)
void parseNumericAList(KviIrcMessage *msg)
void parseNumericChanAccessList(KviIrcMessage *msg)
void parseNumericEndOfSpamFilterList(KviIrcMessage *msg)
Definition KviMainWindow.h:58
Base class for all windows in KVIrc.
Definition KviWindow.h:75
This file contains compile time settings.
#define KVIRC_API
Definition kvi_settings.h:127
QString szHost
Definition libkvisetup.cpp:48
Definition KviIrcServerParser.h:90
const char * msgName
Definition KviIrcServerParser.h:91
ctcpParseProc rpl
Definition KviIrcServerParser.h:93
ctcpParseProc req
Definition KviIrcServerParser.h:92
int iFlags
Definition KviIrcServerParser.h:94
Definition KviIrcServerParser.h:60
KviIrcMessage * msg
Definition KviIrcServerParser.h:61
QString szTag
Definition KviIrcServerParser.h:69
bool bUnknown
Definition KviIrcServerParser.h:67
bool bIsFlood
Definition KviIrcServerParser.h:66
const char * pData
Definition KviIrcServerParser.h:62
bool bIgnored
Definition KviIrcServerParser.h:65
QString szTarget
Definition KviIrcServerParser.h:63
KviIrcMask * pSource
Definition KviIrcServerParser.h:64
Definition KviIrcServerParser.h:73
KviConsoleWindow * pConsole
Definition KviIrcServerParser.h:82
KviCString szParam5
Definition KviIrcServerParser.h:79
KviCString szType
Definition KviIrcServerParser.h:74
bool bIPv6
Definition KviIrcServerParser.h:80
KviCtcpMessage * ctcpMsg
Definition KviIrcServerParser.h:81
KviCString szParam3
Definition KviIrcServerParser.h:77
KviCString szParam1
Definition KviIrcServerParser.h:75
KviCString szParam4
Definition KviIrcServerParser.h:78
KviCString szParam2
Definition KviIrcServerParser.h:76
Definition KviIrcServerParser.h:52
const char * msgName
Definition KviIrcServerParser.h:53
messageParseProc proc
Definition KviIrcServerParser.h:54