31 #ifndef PTLIB_PXMLRPC_H 32 #define PTLIB_PXMLRPC_H 123 PINDEX GetParamCount()
const;
137 PBoolean GetParam(PINDEX idx,
int & result);
138 PBoolean GetParam(PINDEX idx,
double & result);
177 void AddParam(
const PString & str);
178 void AddParam(
int value);
179 void AddParam(
double value);
180 void AddParam(
const PTime & time);
209 virtual PString ToString(PINDEX i)
const;
210 virtual void FromString(PINDEX i,
const PString & str);
213 virtual PINDEX GetSize()
const;
235 virtual void PrintOn(ostream & strm)
const;
238 virtual PINDEX GetSize()
const;
253 virtual PString ToString(PINDEX i)
const;
254 virtual void FromString(PINDEX i,
const PString & str);
257 virtual PObject * CreateObject()
const = 0;
273 void PrintOn(ostream & strm)
const;
283 void EndConstructor();
294 #define PXMLRPC_STRUCT_BEGIN(name) \ 295 class name : public PXMLRPCStructBase { \ 296 public: name() { EndConstructor(); } \ 297 public: name(const name & other) { EndConstructor(); operator=(other); } \ 298 public: name & operator=(const name & other) { PXMLRPCStructBase::operator=(other); return *this; } 300 #define PXMLRPC_VARIABLE_CLASS(base, type, variable, xmltype, init, extras) \ 301 private: struct PXMLRPCVar_##variable : public PXMLRPCVariableBase { \ 302 PXMLRPCVar_##variable() \ 303 : PXMLRPCVariableBase(#variable, xmltype), \ 304 instance(((base &)base::GetInitialiser()).variable) \ 306 virtual void PrintOn (ostream & s) const { s << instance; } \ 307 virtual void ReadFrom(istream & s) { s >> instance; } \ 308 virtual void Copy(const PXMLRPCVariableBase & other) \ 309 { instance = ((PXMLRPCVar_##variable &)other).instance; } \ 312 } pxmlrpcvar_##variable 314 #define PXMLRPC_VARIABLE_CUSTOM(base, type, variable, xmltype, init, extras) \ 315 public: type variable; \ 316 PXMLRPC_VARIABLE_CLASS(base, type, variable, xmltype, init, extras) 318 #define PXMLRPC_ARRAY_CUSTOM(base, arraytype, basetype, variable, xmltype, par, extras) \ 319 public: arraytype variable; \ 320 private: struct PXMLRPCVar_##variable : public par { \ 321 PXMLRPCVar_##variable() \ 322 : par(((base &)base::GetInitialiser()).variable, #variable, xmltype), \ 323 instance((arraytype &)array) \ 326 arraytype & instance; \ 327 } pxmlrpcvar_##variable 333 #define PXMLRPC_STRUCT_END() \ 337 #define PXMLRPC_VARIABLE(base, type, variable, xmltype) \ 338 PXMLRPC_VARIABLE_CUSTOM(base, type, variable, xmltype, ;, ;) 341 #define PXMLRPC_VARIABLE_INIT(base, type, variable, xmltype, init) \ 342 PXMLRPC_VARIABLE_CUSTOM(base, type, variable, xmltype, instance=init;, ;) 345 #define PXMLRPC_STRING(base, type, variable) \ 346 PXMLRPC_VARIABLE(base, type, variable, "string") 349 #define PXMLRPC_STRING_INIT(base, type, variable, init) \ 350 PXMLRPC_VARIABLE_INIT(base, type, variable, "string", init) 353 #define PXMLRPC_INTEGER(base, type, variable) \ 354 PXMLRPC_VARIABLE(base, type, variable, "int") 357 #define PXMLRPC_INTEGER_INIT(base, type, variable, init) \ 358 PXMLRPC_VARIABLE_INIT(base, type, variable, "int", init) 361 #define PXMLRPC_BOOLEAN(base, type, variable) \ 362 PXMLRPC_VARIABLE(base, type, variable, "boolean") 365 #define PXMLRPC_BOOLEAN_INIT(base, type, variable, init) \ 366 PXMLRPC_VARIABLE_INIT(base, type, variable, "boolean", init) 369 #define PXMLRPC_DOUBLE(base, type, variable) \ 370 PXMLRPC_VARIABLE(base, type, variable, "double") 373 #define PXMLRPC_DOUBLE_INIT(base, type, variable, init) \ 374 PXMLRPC_VARIABLE_INIT(base, type, variable, "double", init) 377 #define PXMLRPC_DATETIME(base, type, variable) \ 378 PXMLRPC_VARIABLE_CUSTOM(base, type, variable, "dateTime.iso8601", ;, \ 379 PString ToString(PINDEX) const { return instance.AsString(PTime::ShortISO8601); } ) 382 #define PXMLRPC_BINARY(base, type, variable) \ 383 PXMLRPC_VARIABLE_CUSTOM(base, type, variable, "base64", ;, \ 384 PString ToString(PINDEX) const { return ToBase64(instance); } \ 385 void FromString(PINDEX, const PString & str) { FromBase64(str, instance); } ) 388 #define PXMLRPC_STRUCT(base, type, variable) \ 389 PXMLRPC_VARIABLE_CUSTOM(base, type, variable, "struct", ;, \ 390 PXMLRPCStructBase * GetStruct(PINDEX) const { return &instance; } ) 393 #define PXMLRPC_ARRAY(base, arraytype, basetype, variable, xmltype) \ 394 PXMLRPC_ARRAY_CUSTOM(base, arraytype, basetype, variable, xmltype, PXMLRPCArrayObjectsBase, \ 395 PObject * CreateObject() const { return new basetype; }) 398 #define PXMLRPC_ARRAY_STRING(base, arraytype, basetype, variable) \ 399 PXMLRPC_ARRAY(base, arraytype, basetype, variable, "string") 401 #define PXMLRPC_ARRAY_INTEGER(base, type, variable) \ 402 PXMLRPC_ARRAY_CUSTOM(base, PScalarArray<type>, type, variable, "int", PXMLRPCArrayBase, \ 403 PString ToString(PINDEX i) const { return PString(instance[i]); } \ 404 void FromString(PINDEX i, const PString & str) { instance[i] = (type)str.AsInteger(); }) 406 #define PXMLRPC_ARRAY_DOUBLE(base, type, variable) \ 407 PXMLRPC_ARRAY_CUSTOM(base, PScalarArray<type>, type, variable, "double", PXMLRPCArrayBase, \ 408 PString ToString(PINDEX i) const { return psprintf("%f", instance[i]); } \ 409 void FromString(PINDEX i, const PString & str) { instance[i] = (type)str.AsReal(); }) 411 #define PXMLRPC_ARRAY_STRUCT(base, type, variable) \ 412 PXMLRPC_ARRAY_CUSTOM(base, PArray<type>, type, variable, "struct", PXMLRPCArrayObjectsBase, \ 413 PXMLRPCStructBase * GetStruct(PINDEX i) const { return &instance[i]; } \ 414 PObject * CreateObject() const { return new type; }) 417 #define PXMLRPC_FUNC_NOARG_NOREPLY(name) \ 418 PBoolean name() { return MakeRequest(#name); } 421 #define PXMLRPC_FUNC_SINGLE_ARG(name, vartype, argtype) \ 422 class name##_in : public PXMLRPCStructBase { \ 423 public: name##_in(const argtype & var) : variable(var) { EndConstructor(); } \ 424 vartype(name##_in, argtype, variable); 427 #define PXMLRPC_FUNC_MULTI_ARGS(name) \ 428 PXMLRPC_STRUCT_BEGIN(name##_in) 434 #define PXMLRPC_FUNC_MULTI_REPLY(name) \ 435 }; PXMLRPC_STRUCT_BEGIN(name##_out) 441 #define PXMLRPC_FUNC_NO_ARGS(name) \ 443 PBoolean name(name##_out & reply) \ 444 { return MakeRequest(#name, name##_in(), reply); } 450 #define PXMLRPC_FUNC_STRUCT_ARG(name) \ 452 class name##_in_carrier : public PXMLRPCStructBase { \ 453 public: name##_in_carrier(const name##_in & var) : variable(var) { EndConstructor(); } \ 454 private: struct var_class : public PXMLRPCVariableBase { \ 455 var_class(const name##_in & var) \ 456 : PXMLRPCVariableBase("variable", "struct"), instance(var) { } \ 457 virtual void PrintOn (ostream & s) const { s << instance; } \ 458 virtual PXMLRPCStructBase * GetStruct(PINDEX) const { return (PXMLRPCStructBase *)&instance; } \ 459 virtual void Copy(const PXMLRPCVariableBase &) { } \ 460 const name##_in & instance; \ 463 PBoolean name(const name##_in & args, name##_out & reply) \ 464 { return MakeRequest(#name, name##_in_carrier(args), reply); } 470 #define PXMLRPC_FUNC_NORM_ARGS(name) \ 472 PBoolean name(const name##_in & args, name##_out & reply) \ 473 { return MakeRequest(#name, args, reply); } 481 #endif // PTLIB_PXMLRPC_H const char * name
Definition: pxmlrpc.h:220
PArrayObjects & array
Definition: pxmlrpc.h:260
static PBoolean ISO8601ToPTime(const PString &iso8601, PTime &val, int tz=PTime::GMT)
An array of objects.
Definition: array.h:813
PXMLRPCVariableBase * GetVariable(const char *name) const
Definition: pxmlrpc.h:277
PINDEX faultCode
Definition: pxmlrpc.h:193
This class defines an arbitrary time interval to millisecond accuracy.
Definition: timeint.h:55
Definition: pxmlrpc.h:264
#define PCLASSINFO(cls, par)
Declare all the standard PTLib class information.
Definition: object.h:1049
static PMutex initialiserMutex
Definition: pxmlrpc.h:289
PString faultText
Definition: pxmlrpc.h:104
This class defines an absolute time and date.
Definition: ptime.h:53
PTimeInterval timeout
Definition: pxmlrpc.h:105
PBoolean MakeRequest(const PString &method)
PINDEX GetNumVariables() const
Definition: pxmlrpc.h:275
This is a dictionary collection class of PString objects, keyed by another string.
Definition: pstring.h:2784
PXMLRPCStructBase * initialiserStack
Definition: pxmlrpc.h:288
PXMLRPCVariableBase & GetVariable(PINDEX idx) const
Definition: pxmlrpc.h:276
static PXMLRPCStructBase * initialiserInstance
Definition: pxmlrpc.h:290
This is an array collection class of PString objects.
Definition: pstring.h:2024
PXML::Options m_options
Definition: pxmlrpc.h:106
PContainer & array
Definition: pxmlrpc.h:242
PURL url
Definition: pxmlrpc.h:102
PXMLRPC(const PURL &url, PXML::Options options=PXML::NoOptions)
virtual void PrintOn(ostream &strm) const
Output the contents of the object to the stream.
PObject()
Constructor for PObject, made protected so cannot ever create one on its own.
Definition: object.h:1124
This class contains a variable length array of arbitrary memory blocks.
Definition: array.h:67
BOOL PBoolean
Definition: object.h:102
Array of unsigned characters.
Definition: array.h:670
void SetFault(PINDEX code, const PString &text)
Definition: pxmlrpc.h:128
Definition: pxmlrpc.h:111
PString GetFaultText() const
Definition: pxmlrpc.h:127
PINDEX faultCode
Definition: pxmlrpc.h:103
const char * GetName() const
Definition: pxmlrpc.h:205
Definition: pxmlrpc.h:228
#define PAssertNULL(ptr)
This macro is used to assert that a pointer must be non-null.
Definition: object.h:220
The character string class.
Definition: pstring.h:108
PBoolean PerformRequest(PXMLRPCBlock &request, PXMLRPCBlock &response)
Definition: pxmlrpc.h:199
Abstract class to embody the base functionality of a container.
Definition: contain.h:104
PINDEX GetFaultCode() const
Definition: pxmlrpc.h:126
static PString PTimeToISO8601(const PTime &val)
PArray< PXMLRPCVariableBase > variablesByOrder
Definition: pxmlrpc.h:285
static PXMLRPCStructBase & GetInitialiser()
Definition: pxmlrpc.h:280
Greenwich Mean Time, effectively UTC.
Definition: ptime.h:67
PString faultText
Definition: pxmlrpc.h:192
This template class maps the PArrayObjects to a specific object type.
Definition: array.h:1024
const char * GetType() const
Definition: pxmlrpc.h:206
Definition: pxmlrpc.h:246
PDictionary< PString, PXMLRPCVariableBase > variablesByName
Definition: pxmlrpc.h:286
PINDEX GetFaultCode() const
Definition: pxmlrpc.h:94
Options
Definition: pxml.h:71
PString GetFaultText() const
Definition: pxmlrpc.h:93
Ultimate parent class for all objects in the class library.
Definition: object.h:1118
PXMLElement * params
Definition: pxmlrpc.h:191
const char * type
Definition: pxmlrpc.h:221
This class describes a Universal Resource Locator.
Definition: url.h:54
void SetTimeout(const PTimeInterval &t)
Definition: pxmlrpc.h:86