00001 /* 00002 OpieIRC - An embedded IRC client 00003 Copyright (C) 2002 Wenzel Jakob 00004 00005 This program is free software; you can redistribute it and/or modify 00006 it under the terms of the GNU General Public License as published by 00007 the Free Software Foundation; either version 2 of the License, or 00008 (at your option) any later version. 00009 00010 This program is distributed in the hope that it will be useful, 00011 but WITHOUT ANY WARRANTY; without even the implied warranty of 00012 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the 00013 GNU General Public License for more details. 00014 00015 You should have received a copy of the GNU General Public License 00016 along with this program; if not, write to the Free Software 00017 Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA 00018 00019 */ 00020 00021 #ifndef __IRCMESSAGEPARSER_H 00022 #define __IRCMESSAGEPARSER_H 00023 00024 #include "ircsession.h" 00025 00026 /* Macro to facilitate the parser table's creation */ 00027 #define FUNC(__proc) &IRCMessageParser::__proc 00028 00029 class IRCMessageParser; 00030 00031 /* Typedef representing a parser function */ 00032 typedef void (IRCMessageParser::*IRCMessageParseProc)(IRCMessage *); 00033 00034 /* Struct representing a literal command handler */ 00035 typedef struct IRCLiteralMessageParserStruct { 00036 char *commandName; 00037 IRCMessageParseProc proc; 00038 }; 00039 00040 /* Struct representing a ctcp command handler */ 00041 typedef struct IRCCTCPMessageParserStruct { 00042 char *commandName; 00043 IRCMessageParseProc proc; 00044 }; 00045 00046 /* Struct representing a numerical command handler */ 00047 typedef struct IRCNumericalMessageParserStruct { 00048 unsigned short commandNumber; 00049 char *message; 00050 char *params; 00051 IRCMessageParseProc proc; 00052 }; 00053 00054 class IRCMessageParser : public QObject { 00055 Q_OBJECT 00056 public: 00057 /* Create an IRCMessageParser object */ 00058 IRCMessageParser(IRCSession *session); 00059 /* Parse a server message and take the appropriate actions */ 00060 void parse(IRCMessage *message); 00061 signals: 00062 /* Used to send commands to the UI (such as displaying text etc) */ 00063 void outputReady(IRCOutput output); 00064 private: 00065 /* Parser functions */ 00066 void parseLiteralPing(IRCMessage *message); 00067 void parseLiteralNotice(IRCMessage *message); 00068 void parseLiteralJoin(IRCMessage *message); 00069 void parseLiteralPrivMsg(IRCMessage *message); 00070 void parseLiteralNick(IRCMessage *message); 00071 void parseLiteralPart(IRCMessage *message); 00072 void parseLiteralQuit(IRCMessage *message); 00073 void parseLiteralError(IRCMessage *message); 00074 void parseLiteralMode(IRCMessage *message); 00075 void parseLiteralKick(IRCMessage *message); 00076 void parseLiteralTopic(IRCMessage *message); 00077 void parseNumerical(IRCMessage *message, int position); 00078 void parseCTCP(IRCMessage *message, int position); 00079 void parseNumericalServerName(IRCMessage *message); 00080 void parseNumericalServerFeatures(IRCMessage *message); 00081 void parseNumericalServerProtocol(IRCMessage *message); 00082 void parseNumericalWhoisIdle(IRCMessage *message); 00083 void parseNumericalNames(IRCMessage *message); 00084 void parseNumericalEndOfNames(IRCMessage *message); 00085 void parseNumericalNicknameInUse(IRCMessage *message); 00086 void parseNumericalNoSuchNick(IRCMessage *message); 00087 void parseNumericalTopic(IRCMessage *message); 00088 void parseNumericalTopicWhoTime(IRCMessage *message); 00089 void parseCTCPPing(IRCMessage *message); 00090 void parseCTCPVersion(IRCMessage *message); 00091 void parseCTCPAction(IRCMessage *message); 00092 void parseCTCPDCC(IRCMessage *message); 00093 protected: 00094 IRCSession *m_session; 00095 /* Parser tables */ 00096 static IRCLiteralMessageParserStruct literalParserProcTable[]; 00097 static IRCNumericalMessageParserStruct numericalParserProcTable[]; 00098 static IRCCTCPMessageParserStruct ctcpParserProcTable[]; 00099 }; 00100 00101 #endif /* __IRCMESSAGEPARSER_H */
1.4.2