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
00038
00039
00040
00046 #ifndef CCXX_XML_H_
00047 #define CCXX_XML_H_
00048
00049 #ifndef CCXX_MISSING_H_
00050 #include <cc++/missing.h>
00051 #endif
00052
00053 #ifndef CCXX_THREAD_H_
00054 #include <cc++/thread.h>
00055 #endif
00056
00057 #ifndef CCXX_SLOG_H_
00058 #include <cc++/slog.h>
00059 #endif
00060
00061 #ifdef CCXX_NAMESPACES
00062 namespace ost {
00063 #endif
00064
00075 class __EXPORT XMLStream
00076 {
00077 #ifndef HAVE_LIBXML
00078 private:
00079 int ecount, dcount;
00080 enum { TAG, CDATA, COMMENT, DTD, AMP, NONE} state;
00081 char dbuf[8192];
00082 unsigned dp;
00083 bool parseChunk(const char *chunk, unsigned len);
00084 void parseInit(void);
00085 bool parseTag(void);
00086 void putData(char c);
00087 void clrData(void);
00088
00089 #endif
00090 public:
00100 virtual bool open(const char *resource)
00101 {return true;};
00102
00107 virtual void close(void)
00108 {return;};
00109
00115 virtual Slog::Level getLogging(void)
00116 {return Slog::levelCritical;};
00117
00125 virtual void comment(const unsigned char *text, unsigned len)
00126 {return;};
00127
00135 virtual int read(unsigned char *buffer, int len) = 0;
00136
00144 virtual void characters(const unsigned char *text, unsigned len) = 0;
00145
00149 virtual void startDocument(void)
00150 {return;};
00151
00155 virtual void endDocument(void)
00156 {return;};
00157
00164 virtual void startElement(const unsigned char *name, const unsigned char **attr) = 0;
00165
00171 virtual void endElement(const unsigned char *name) = 0;
00172
00179 bool parse(const char *resource = NULL);
00180 };
00181
00191 class __EXPORT XMLRPC : public XMLStream
00192 {
00193 private:
00194 #ifdef HAVE_SSTREAM
00195 std::stringstream strBuf;
00196 #else
00197 char *buffer;
00198 std::strstream *oldStrBuf;
00199 size_t bufSize;
00200 #endif
00201 bool structFlag;
00202 bool reply, fault;
00203 unsigned array;
00204
00205 protected:
00215 virtual bool post(const char *resource, const char *msg) = 0;
00216
00220 void begStruct(void);
00221
00222 public:
00230 XMLRPC(size_t bufferSize = 512);
00231
00235 virtual ~XMLRPC();
00236
00240 void begArray(void);
00241
00245 void endArray(void);
00246
00252 void invoke(const char *method);
00253
00259 void response(bool fault);
00260
00266 void addParam(bool value);
00267
00274 void addMember(const char *name, bool value);
00275
00281 void addParam(long value);
00282
00289 void addMember(const char *name, long value);
00290
00296 void addParam(const char *string);
00297
00304 void addMember(const char *name, const char *value);
00305
00309 void endStruct(void);
00310
00317 bool send(const char *resource);
00318 };
00319
00320
00321
00322
00323
00324
00325
00326
00327
00328 #ifdef CCXX_NAMESPACES
00329 }
00330 #endif
00331
00332 #endif
00333