00001
00002
00003
00004
00005
00006 #ifndef __WVPROTOSTREAM_H
00007 #define __WVPROTOSTREAM_H
00008
00009 #include "wvstreamclone.h"
00010
00011 class WvLog;
00012
00019 class WvProtoStream : public WvStreamClone
00020 {
00021 public:
00022 class Token
00023 {
00024 public:
00025 WvString data;
00026 size_t length;
00027
00028 Token();
00029 Token(const unsigned char *_data, size_t _length);
00030 void fill(const unsigned char *_data, size_t _length);
00031 ~Token();
00032 };
00033
00034 DeclareWvList(Token);
00035
00036 WvDynBuf tokbuf;
00037 bool log_enable;
00038
00039 WvProtoStream(WvStream *_cloned, WvLog *_debuglog = NULL);
00040 virtual ~WvProtoStream();
00041
00043 virtual size_t uwrite(const void *buffer, size_t size);
00044
00045
00046 virtual Token *next_token();
00047 WvString next_token_str();
00048 WvString token_remaining();
00049 virtual TokenList *tokenize();
00050 size_t list_to_array(TokenList *tl, Token **array);
00051 Token *tokline(const char *line);
00052
00054 int tokanal(const Token &t, char **lookup,
00055 bool case_sensitive = false);
00056
00057
00058 int state;
00059 virtual void do_state(Token &t1);
00060 virtual void switch_state(int newstate);
00061
00063 virtual void execute();
00064
00065 protected:
00066 WvLog *logp;
00067
00068 public:
00069 const char *wstype() const { return "WvProtoStream"; }
00070 };
00071
00072
00073 #endif // __WVPROTOSTREAM_H