WvStreams
|
00001 /* -*- Mode: C++ -*- 00002 * Worldvisions Tunnel Vision Software: 00003 * Copyright (C) 1997-2002 Net Integration Technologies, Inc. 00004 * 00005 * Manages a connection between the UniConf client and daemon. 00006 */ 00007 #ifndef __UNICONFCONN_H 00008 #define __UNICONFCONN_H 00009 00010 #include "uniconfkey.h" 00011 #include "uniconfgen.h" 00012 #include "wvstreamclone.h" 00013 #include "wvistreamlist.h" 00014 #include "wvbuf.h" 00015 #include "wvlog.h" 00016 00017 #define UNICONF_PROTOCOL_VERSION UniClientConn::NUM_COMMANDS 00018 #define DEFAULT_UNICONF_DAEMON_TCP_PORT 4111 00019 #define DEFAULT_UNICONF_DAEMON_SSL_PORT 4112 00020 00027 class UniClientConn : public WvStreamClone 00028 { 00029 WvDynBuf msgbuf; 00030 00031 protected: 00032 WvLog log; 00033 bool closed; 00034 int version; 00035 00036 public: 00037 WvConstStringBuffer payloadbuf; 00039 /* This table is _very_ important!!! 00040 * 00041 * With UniConf, we promise to never remove or modify the behaviour of 00042 * any of the commands listed here. If you want to modify anything, 00043 * you'd better just add a new command instead. We keep track of the 00044 * version of the UniConf protocol by the number of commands supported 00045 * by the server. 00046 * 00047 * @see UniClientConn::cmdinfos 00048 */ 00049 enum Command 00050 { 00051 NONE = -2, 00052 INVALID = -1, 00054 // requests 00055 REQ_NOOP, 00056 REQ_GET, 00057 REQ_SET, 00058 REQ_SETV, 00059 REQ_REMOVE, 00060 REQ_SUBTREE, 00061 REQ_HASCHILDREN, 00062 REQ_COMMIT, 00063 REQ_REFRESH, 00064 REQ_QUIT, 00065 REQ_HELP, 00067 // command completion replies 00068 REPLY_OK, 00069 REPLY_FAIL, 00070 REPLY_CHILD, 00071 REPLY_ONEVAL, 00073 // partial replies 00074 PART_VALUE, 00075 PART_TEXT, 00077 // events 00078 EVENT_HELLO, 00079 EVENT_NOTICE, 00080 }; 00081 static const int NUM_COMMANDS = EVENT_NOTICE + 1; 00082 struct CommandInfo 00083 { 00084 const char *name; 00085 const char *description; 00086 }; 00087 static const CommandInfo cmdinfos[NUM_COMMANDS]; 00088 00090 UniClientConn(IWvStream *_s, WvStringParm dst = WvString::null); 00091 virtual ~UniClientConn(); 00092 00093 virtual void close(); 00094 00101 Command readcmd(); 00102 Command readcmd(WvString &command); 00103 00108 WvString readarg(); 00109 00115 void writecmd(Command command, WvStringParm payload = WvString::null); 00116 00121 void writeok(WvStringParm payload = ""); 00122 00127 void writefail(WvStringParm payload = ""); 00128 00134 void writevalue(const UniConfKey &key, WvStringParm value); 00135 00141 void writeonevalue(const UniConfKey &key, WvStringParm value); 00142 00147 void writetext(WvStringParm text); 00148 00149 private: 00151 WvString readmsg(); 00152 00154 void writemsg(WvStringParm message); 00155 }; 00156 00157 #endif // __UNICONFCONN_H