WvStreams
wvprotostream.h
00001 /* -*- Mode: C++ -*-
00002  * Worldvisions Weaver Software:
00003  *   Copyright (C) 1997-2002 Net Integration Technologies, Inc.
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     // Routines to convert an input line into a set of Tokens.
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, const char **lookup,
00055                 bool case_sensitive = false);
00056     
00057     // finite state machine
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