Main Page | Namespace List | Class Hierarchy | Alphabetical List | Class List | Directories | File List | Namespace Members | Class Members | File Members | Related Pages

ircmessageparser.h

Go to the documentation of this file.
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 */

Generated on Sat Nov 5 16:17:41 2005 for OPIE by  doxygen 1.4.2