00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015 #ifndef PARSER_H__
00016 #define PARSER_H__
00017
00018 #include "gloox.h"
00019
00020 #include <iksemel.h>
00021
00022 #include <string>
00023
00024 namespace gloox
00025 {
00026
00027 class ClientBase;
00028 class Stanza;
00029
00036 class GLOOX_EXPORT Parser
00037 {
00038 public:
00042 enum ParserState
00043 {
00044 PARSER_OK,
00045 PARSER_NOMEM,
00046 PARSER_BADXML
00047 };
00048
00053 Parser( ClientBase *parent );
00054
00058 virtual ~Parser();
00059
00065 ParserState feed( const std::string& data );
00066
00067 private:
00068 void streamEvent( Stanza *stanza );
00069
00070 iksparser *m_parser;
00071 ClientBase *m_parent;
00072 Stanza *m_current;
00073 Stanza *m_root;
00074
00075 friend int cdataHook( Parser *parser, char *data, size_t len );
00076 friend int tagHook( Parser *parser, char *name, char **atts, int type );
00077 };
00078
00079 }
00080
00081 #endif // PARSER_H__