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_API 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
00081 friend int cdataHook( Parser *parser, char *data, size_t len );
00082
00090 friend int tagHook( Parser *parser, char *name, char **atts, int type );
00091 };
00092
00093 int cdataHook( Parser *parser, char *data, size_t len );
00094
00095 int tagHook( Parser *parser, char *name, char **atts, int type );
00096
00097 }
00098
00099 #endif // PARSER_H__