00001
00002
00003
00004
00005
00006
00007
00008
00009
00010
00011
00012
00013
00014
00015
00016
00017
00018
00019
00020
00021
00022
00023
00024
00025
00026
00027
00028
00029
00030
00031
00032
00033
00034
00035
00036
00037
00043 #ifndef CCXX_XML_H_
00044 #define CCXX_XML_H_
00045
00046 #ifndef CCXX_MISSING_H_
00047 #include <cc++/missing.h>
00048 #endif
00049
00050 #ifndef CCXX_THREAD_H_
00051 #include <cc++/thread.h>
00052 #endif
00053
00054 #ifndef CCXX_SLOG_H_
00055 #include <cc++/slog.h>
00056 #endif
00057
00058 #ifdef CCXX_NAMESPACES
00059 namespace ost {
00060 #endif
00061
00072 class __EXPORT XMLStream
00073 {
00074 #ifndef HAVE_LIBXML
00075 private:
00076 int ecount, dcount;
00077 enum { TAG, CDATA, COMMENT, DTD, AMP, NONE} state;
00078 char dbuf[8192];
00079 unsigned dp;
00080 bool parseChunk(const char *chunk, size_t len);
00081 void parseInit(void);
00082 bool parseTag(void);
00083 void putData(char c);
00084 void clrData(void);
00085
00086 #endif
00087
00088 protected:
00089 virtual ~XMLStream();
00090
00091 public:
00101 virtual bool open(const char *resource);
00102
00107 virtual void close(void);
00108
00114 virtual Slog::Level getLogging(void);
00115
00123 virtual void comment(const unsigned char *text, size_t len);
00124
00132 virtual int read(unsigned char *buffer, size_t len) = 0;
00133
00141 virtual void characters(const unsigned char *text, size_t len) = 0;
00142
00146 virtual void startDocument(void);
00147
00151 virtual void endDocument(void);
00152
00159 virtual void startElement(const unsigned char *name, const unsigned char **attr) = 0;
00160
00166 virtual void endElement(const unsigned char *name) = 0;
00167
00174 bool parse(const char *resource = NULL);
00175 };
00176
00186 class __EXPORT XMLRPC : public XMLStream
00187 {
00188 private:
00189 #ifdef HAVE_SSTREAM
00190 std::stringstream strBuf;
00191 #else
00192 char *buffer;
00193 std::strstream *oldStrBuf;
00194 size_t bufSize;
00195 #endif
00196 bool structFlag;
00197 bool reply, fault;
00198 unsigned array;
00199
00200 protected:
00210 virtual bool post(const char *resource, const char *msg) = 0;
00211
00215 void begStruct(void);
00216
00217 public:
00225 XMLRPC(size_t bufferSize = 512);
00226
00230 virtual ~XMLRPC();
00231
00235 void begArray(void);
00236
00240 void endArray(void);
00241
00247 void invoke(const char *method);
00248
00254 void response(bool fault);
00255
00261 void addParam(bool value);
00262
00269 void addMember(const char *name, bool value);
00270
00276 void addParam(long value);
00277
00284 void addMember(const char *name, long value);
00285
00291 void addParam(const char *string);
00292
00299 void addMember(const char *name, const char *value);
00300
00304 void endStruct(void);
00305
00312 bool send(const char *resource);
00313 };
00314
00315
00316
00317
00318
00319
00320
00321
00322
00323 #ifdef CCXX_NAMESPACES
00324 }
00325 #endif
00326
00327 #endif
00328