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, size_t 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, size_t len)
00126 {
return;};
00127
00135
virtual int read(
unsigned char *buffer, size_t len) = 0;
00136
00144
virtual void characters(
const unsigned char *text, size_t 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