Back to index

php5  5.3.10
xmlrpc.h
Go to the documentation of this file.
00001 /*
00002   This file is part of libXMLRPC - a C library for xml-encoded function calls.
00003 
00004   Author: Dan Libby (dan@libby.com)
00005   Epinions.com may be contacted at feedback@epinions-inc.com
00006 */
00007 
00008 /*  
00009   Copyright 2000 Epinions, Inc. 
00010 
00011   Subject to the following 3 conditions, Epinions, Inc.  permits you, free 
00012   of charge, to (a) use, copy, distribute, modify, perform and display this 
00013   software and associated documentation files (the "Software"), and (b) 
00014   permit others to whom the Software is furnished to do so as well.  
00015 
00016   1) The above copyright notice and this permission notice shall be included 
00017   without modification in all copies or substantial portions of the 
00018   Software.  
00019 
00020   2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF 
00021   ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY 
00022   IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR 
00023   PURPOSE OR NONINFRINGEMENT.  
00024 
00025   3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT, 
00026   SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT 
00027   OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING 
00028   NEGLIGENCE), EVEN IF EPINIONS, INC.  IS AWARE OF THE POSSIBILITY OF SUCH 
00029   DAMAGES.    
00030 
00031 */
00032 
00033 #ifndef XMLRPC_ALREADY_INCLUDED
00034 #define XMLRPC_ALREADY_INCLUDED 1
00035 
00036 /* includes */
00037 #include "xml_element.h"
00038 #include <time.h> /* for time_t */
00039 
00040 #ifdef __cplusplus
00041 extern "C" {
00042 #endif
00043 
00044 /* allow version to be specified via compile line define */
00045 #ifndef XMLRPC_LIB_VERSION
00046  #define XMLRPC_LIB_VERSION "0.51"
00047 #endif
00048 
00049 /* this number, representing the date, must be increased each time the API changes */
00050 #define XMLRPC_API_NO 20020623
00051 
00052 /* this string should be changed with each packaged release */
00053 #define XMLRPC_VERSION_STR "xmlrpc-epi v. " XMLRPC_LIB_VERSION
00054 
00055 /* where to find more info. shouldn't need to change much */
00056 #define XMLRPC_HOME_PAGE_STR "http://xmlprc-epi.sourceforge.net/"
00057 
00058 
00059 /****d* VALUE/XMLRPC_VALUE_TYPE
00060  * NAME
00061  *   XMLRPC_VALUE_TYPE
00062  * NOTES
00063  *   Defines data types for XMLRPC_VALUE
00064  *   Deprecated for public use.  See XMLRPC_VALUE_TYPE_EASY
00065  * SEE ALSO
00066  *   XMLRPC_VECTOR_TYPE
00067  *   XMLRPC_REQUEST_TYPE
00068  * SOURCE
00069  */
00070 typedef enum _XMLRPC_VALUE_TYPE {
00071    xmlrpc_none,                   /* not a value                    */
00072    xmlrpc_empty,                  /* empty value, eg NULL           */
00073    xmlrpc_base64,                 /* base64 value, eg binary data   */
00074    xmlrpc_boolean,                /* boolean  [0 | 1]               */
00075    xmlrpc_datetime,               /* datetime [ISO8601 | time_t]    */
00076    xmlrpc_double,                 /* double / floating point        */
00077    xmlrpc_int,                    /* integer                        */
00078    xmlrpc_string,                 /* string                         */
00079    xmlrpc_vector                  /* vector, aka list, array        */
00080 } XMLRPC_VALUE_TYPE;
00081 /*******/
00082 
00083 /****d* VALUE/XMLRPC_VECTOR_TYPE
00084  * NAME
00085  *   XMLRPC_VECTOR_TYPE
00086  * NOTES
00087  *   Defines data types for XMLRPC_VECTOR.
00088  *   Deprecated for public use.  See XMLRPC_VALUE_TYPE_EASY
00089  * SEE ALSO
00090  *   XMLRPC_VALUE_TYPE
00091  *   XMLRPC_REQUEST_TYPE
00092  * SOURCE
00093  */
00094 typedef enum _XMLRPC_VECTOR_TYPE {
00095    xmlrpc_vector_none,            /* not an array                   */
00096    xmlrpc_vector_array,           /* no values may have key names   */
00097    xmlrpc_vector_mixed,           /* some values may have key names */
00098    xmlrpc_vector_struct           /* all values must have key names */
00099 } XMLRPC_VECTOR_TYPE;
00100 /*******/
00101 
00102 /****d* VALUE/XMLRPC_VALUE_TYPE_EASY
00103  * NAME
00104  *   XMLRPC_VALUE_TYPE_EASY
00105  * NOTES
00106  *   Defines data types for XMLRPC_VALUE, including vector types.
00107  * SEE ALSO
00108  *   XMLRPC_VECTOR_TYPE
00109  *   XMLRPC_REQUEST_TYPE
00110  * SOURCE
00111  */
00112 typedef enum _XMLRPC_VALUE_TYPE_EASY {
00113    xmlrpc_type_none,               /* not a value                    */
00114    xmlrpc_type_empty,              /* empty value, eg NULL           */
00115    xmlrpc_type_base64,             /* base64 value, eg binary data   */
00116    xmlrpc_type_boolean,            /* boolean  [0 | 1]               */
00117    xmlrpc_type_datetime,           /* datetime [ISO8601 | time_t]    */
00118    xmlrpc_type_double,             /* double / floating point        */
00119    xmlrpc_type_int,                /* integer                        */
00120    xmlrpc_type_string,             /* string                         */
00121 /* -- IMPORTANT: identical to XMLRPC_VALUE_TYPE to this point. --   */
00122        xmlrpc_type_array,              /* vector array                   */
00123        xmlrpc_type_mixed,              /* vector mixed                   */
00124        xmlrpc_type_struct              /* vector struct                  */
00125 } XMLRPC_VALUE_TYPE_EASY;
00126 /*******/
00127 
00128 
00129 /****d* VALUE/XMLRPC_REQUEST_TYPE
00130  * NAME
00131  *   XMLRPC_REQUEST_TYPE
00132  * NOTES
00133  *   Defines data types for XMLRPC_REQUEST
00134  * SEE ALSO
00135  *   XMLRPC_VALUE_TYPE
00136  *   XMLRPC_VECTOR_TYPE
00137  * SOURCE
00138  */
00139 typedef enum _xmlrpc_request_type {
00140    xmlrpc_request_none,          /* not a valid request            */
00141    xmlrpc_request_call,          /* calling/invoking a method      */
00142    xmlrpc_request_response,      /* responding to a method call    */
00143 } XMLRPC_REQUEST_TYPE;
00144 /*******/
00145 
00146 /****d* VALUE/XMLRPC_ERROR_CODE
00147  * NAME
00148  *   XMLRPC_ERROR_CODE
00149  * NOTES
00150  *   All existing error codes
00151  * SEE ALSO
00152  *   XMLRPC_REQUEST_ERROR
00153  * SOURCE
00154  */
00155 typedef enum _xmlrpc_error_code {
00156    xmlrpc_error_none                      = 0,              /* not an error                                      */
00157    xmlrpc_error_parse_xml_syntax          = -32700,
00158    xmlrpc_error_parse_unknown_encoding    = -32701,
00159    xmlrpc_error_parse_bad_encoding        = -32702,
00160    xmlrpc_error_invalid_xmlrpc            = -32600,
00161    xmlrpc_error_unknown_method            = -32601,
00162    xmlrpc_error_invalid_params            = -32602,
00163    xmlrpc_error_internal_server           = -32603,
00164    xmlrpc_error_application               = -32500,
00165    xmlrpc_error_system                    = -32400,
00166    xmlrpc_error_transport                 = -32300
00167 } XMLRPC_ERROR_CODE;
00168 /******/
00169 
00170 #define xmlrpc_error_parse_xml_syntax_str       "parse error. not well formed."
00171 #define xmlrpc_error_parse_unknown_encoding_str "parse error. unknown encoding"
00172 #define xmlrpc_error_parse_bad_encoding_str     "parse error. invalid character for encoding"
00173 #define xmlrpc_error_invalid_xmlrpc_str         "server error. xml-rpc not conforming to spec"
00174 #define xmlrpc_error_unknown_method_str         "server error. method not found."
00175 #define xmlrpc_error_invalid_params_str         "server error. invalid method parameters"
00176 #define xmlrpc_error_internal_server_str        "server error. internal xmlrpc library error"
00177 #define xmlrpc_error_application_str            "application error."
00178 #define xmlrpc_error_system_str                 "system error."
00179 #define xmlrpc_error_transport_str              "transport error."
00180 
00181 
00182 
00183 /****d* VALUE/XMLRPC_VERSION
00184  * NAME
00185  *   XMLRPC_VERSION
00186  * NOTES
00187  *   Defines xml vocabulary used for generated xml
00188  * SEE ALSO
00189  *   XMLRPC_REQUEST_OUTPUT_OPTIONS
00190  *   XMLRPC_REQUEST_To_XML ()
00191  * SOURCE
00192  */
00193 typedef enum _xmlrpc_version {
00194    xmlrpc_version_none = 0,      /* not a recognized vocabulary    */ 
00195    xmlrpc_version_1_0 = 1,       /* xmlrpc 1.0 standard vocab      */ 
00196    xmlrpc_version_simple = 2,    /* alt more readable vocab        */ 
00197    xmlrpc_version_danda = 2,     /* same as simple. legacy         */
00198        xmlrpc_version_soap_1_1 = 3 /* SOAP. version 1.1              */
00199 } XMLRPC_VERSION;
00200 /******/
00201 
00202 /****s* VALUE/XMLRPC_REQUEST_OUTPUT_OPTIONS
00203  * NAME
00204  *   XMLRPC_REQUEST_OUTPUT_OPTIONS
00205  * NOTES
00206  *   Defines output options for generated xml
00207  * SEE ALSO
00208  *   XMLRPC_VERSION
00209  *   XML_ELEM_OUTPUT_OPTIONS
00210  *   XMLRPC_REQUEST_To_XML ()
00211  * SOURCE
00212  */
00213 typedef struct _xmlrpc_request_output_options {
00214    STRUCT_XML_ELEM_OUTPUT_OPTIONS xml_elem_opts;  /* xml_element specific output options */
00215    XMLRPC_VERSION                 version;        /* xml vocabulary to use               */
00216 } STRUCT_XMLRPC_REQUEST_OUTPUT_OPTIONS, *XMLRPC_REQUEST_OUTPUT_OPTIONS;
00217 /******/
00218 
00219 /****s* VALUE/XMLRPC_REQUEST_INPUT_OPTIONS
00220  * NAME
00221  *   XMLRPC_REQUEST_INPUT_OPTIONS
00222  * NOTES
00223  *   Defines options for reading in xml data
00224  * SEE ALSO
00225  *   XMLRPC_VERSION
00226  *   XML_ELEM_INPUT_OPTIONS
00227  *   XMLRPC_REQUEST_From_XML ()
00228  * SOURCE
00229  */
00230 typedef struct _xmlrpc_request_input_options {
00231    STRUCT_XML_ELEM_INPUT_OPTIONS  xml_elem_opts;  /* xml_element specific output options */
00232 } STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS, *XMLRPC_REQUEST_INPUT_OPTIONS;
00233 /******/
00234 
00235 /****s* VALUE/XMLRPC_ERROR
00236  * NAME
00237  *   XMLRPC_ERROR
00238  * NOTES
00239  *   For the reporting and handling of errors
00240  * SOURCE
00241  */
00242 typedef struct _xmlrpc_error {
00243    XMLRPC_ERROR_CODE      code;
00244    STRUCT_XML_ELEM_ERROR  xml_elem_error;  /* xml_element errors (parser errors) */
00245 } STRUCT_XMLRPC_ERROR, *XMLRPC_ERROR;
00246 /******/
00247 
00248 
00249 /****d* VALUE/XMLRPC_CASE_COMPARISON
00250  * NAME
00251  *   XMLRPC_CASE_COMPARISON
00252  * NOTES
00253  *   Defines case comparison options for XMLRPC_VALUE/VECTOR API's
00254  * SEE ALSO
00255  *   XMLRPC_CASE
00256  *   XMLRPC_VALUE
00257  * SOURCE
00258  */
00259 typedef enum _xmlrpc_case_comparison {
00260    xmlrpc_case_insensitive,      /* use case-insensitive compare */
00261    xmlrpc_case_sensitive         /* use case-sensitive compare   */
00262 } XMLRPC_CASE_COMPARISON;
00263 /******/
00264 
00265 /****d* VALUE/XMLRPC_CASE
00266  * NAME
00267  *   XMLRPC_CASE
00268  * NOTES
00269  *   Defines case behavior when setting IDs in XMLRPC_VALUE API's
00270  * SEE ALSO
00271  *   XMLRPC_CASE_COMPARISON
00272  *   XMLRPC_VALUE
00273  * SOURCE
00274  */
00275 typedef enum _xmlrpc_case {
00276    xmlrpc_case_exact,            /* leave case alone             */
00277    xmlrpc_case_lower,            /* lower-case id                */
00278    xmlrpc_case_upper             /* upper-case id                */
00279 } XMLRPC_CASE;
00280 /******/
00281 
00282 /* if you don't like these defaults, you can set them with XMLRPC_SetDefaultIdCase*() */
00283 #define XMLRPC_DEFAULT_ID_CASE              XMLRPC_GetDefaultIdCase()
00284 #define XMLRPC_DEFAULT_ID_CASE_SENSITIVITY  XMLRPC_GetDefaultIdCaseComparison()
00285 
00286 /* opaque (non-public) types. defined locally in xmlrpc.c */
00287 typedef struct _xmlrpc_request* XMLRPC_REQUEST;
00288 typedef struct _xmlrpc_server* XMLRPC_SERVER;
00289 typedef struct _xmlrpc_value* XMLRPC_VALUE;
00290 
00291 /****d* VALUE/XMLRPC_Callback
00292  * NAME
00293  *   XMLRPC_Callback
00294  * NOTES
00295  *   Function prototype for user defined method handlers (callbacks).
00296  * SEE ALSO
00297  *   XMLRPC_ServerRegisterMethod ()
00298  *   XMLRPC_ServerCallMethod ()
00299  *   XMLRPC_REQUEST
00300  *   XMLRPC_VALUE
00301  * SOURCE
00302  */
00303 typedef XMLRPC_VALUE (*XMLRPC_Callback)(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
00304 /******/
00305 
00306 /* ID Case Defaults */
00307 XMLRPC_CASE XMLRPC_GetDefaultIdCase(void);
00308 XMLRPC_CASE XMLRPC_SetDefaultIdCase(XMLRPC_CASE id_case);
00309 XMLRPC_CASE_COMPARISON XMLRPC_GetDefaultIdCaseComparison(void);
00310 XMLRPC_CASE_COMPARISON XMLRPC_SetDefaultIdCaseComparison(XMLRPC_CASE_COMPARISON id_case);
00311 
00312 /* Vector manipulation */
00313 int XMLRPC_VectorSize(XMLRPC_VALUE value);
00314 XMLRPC_VALUE XMLRPC_VectorRewind(XMLRPC_VALUE value);
00315 XMLRPC_VALUE XMLRPC_VectorNext(XMLRPC_VALUE value);
00316 int XMLRPC_SetIsVector(XMLRPC_VALUE value, XMLRPC_VECTOR_TYPE type);
00317 int XMLRPC_AddValueToVector(XMLRPC_VALUE target, XMLRPC_VALUE source);
00318 int XMLRPC_AddValuesToVector(XMLRPC_VALUE target, ...);
00319 int XMLRPC_VectorRemoveValue(XMLRPC_VALUE vector, XMLRPC_VALUE value);
00320 XMLRPC_VALUE XMLRPC_VectorGetValueWithID_Case(XMLRPC_VALUE vector, const char* id, XMLRPC_CASE_COMPARISON id_case);
00321 
00322 
00323 /* Create values */
00324 XMLRPC_VALUE XMLRPC_CreateValueBoolean(const char* id, int truth);
00325 XMLRPC_VALUE XMLRPC_CreateValueBase64(const char* id, const char* s, int len);
00326 XMLRPC_VALUE XMLRPC_CreateValueDateTime(const char* id, time_t time);
00327 XMLRPC_VALUE XMLRPC_CreateValueDateTime_ISO8601(const char* id, const char *s);
00328 XMLRPC_VALUE XMLRPC_CreateValueDouble(const char* id, double f);
00329 XMLRPC_VALUE XMLRPC_CreateValueInt(const char* id, int i);
00330 XMLRPC_VALUE XMLRPC_CreateValueString(const char* id, const char* s, int len);
00331 XMLRPC_VALUE XMLRPC_CreateValueEmpty(void);
00332 XMLRPC_VALUE XMLRPC_CreateVector(const char* id, XMLRPC_VECTOR_TYPE type);
00333 
00334 /* Cleanup values */
00335 void XMLRPC_CleanupValue(XMLRPC_VALUE value);
00336 
00337 /* Request error */
00338 XMLRPC_VALUE XMLRPC_RequestSetError (XMLRPC_REQUEST request, XMLRPC_VALUE error);
00339 XMLRPC_VALUE XMLRPC_RequestGetError (XMLRPC_REQUEST request);
00340 
00341 /* Copy values */
00342 XMLRPC_VALUE XMLRPC_CopyValue(XMLRPC_VALUE value);
00343 XMLRPC_VALUE XMLRPC_DupValueNew(XMLRPC_VALUE xSource);
00344 
00345 /* Set Values */
00346 void XMLRPC_SetValueDateTime(XMLRPC_VALUE value, time_t time);
00347 void XMLRPC_SetValueDateTime_ISO8601(XMLRPC_VALUE value, const char* s);
00348 void XMLRPC_SetValueDouble(XMLRPC_VALUE value, double val);
00349 void XMLRPC_SetValueInt(XMLRPC_VALUE value, int val);
00350 void XMLRPC_SetValueBoolean(XMLRPC_VALUE value, int val);
00351 const char *XMLRPC_SetValueString(XMLRPC_VALUE value, const char* s, int len);
00352 void XMLRPC_SetValueBase64(XMLRPC_VALUE value, const char* s, int len);
00353 const char *XMLRPC_SetValueID_Case(XMLRPC_VALUE value, const char* id, int len, XMLRPC_CASE id_case);
00354 #define XMLRPC_SetValueID(value, id, len) XMLRPC_SetValueID_Case(value, id, len, XMLRPC_DEFAULT_ID_CASE)
00355 
00356 /* Get Values */
00357 const char* XMLRPC_GetValueString(XMLRPC_VALUE value);
00358 int XMLRPC_GetValueStringLen(XMLRPC_VALUE value);
00359 int XMLRPC_GetValueInt(XMLRPC_VALUE value);
00360 int XMLRPC_GetValueBoolean(XMLRPC_VALUE value);
00361 double XMLRPC_GetValueDouble(XMLRPC_VALUE value);
00362 const char* XMLRPC_GetValueBase64(XMLRPC_VALUE value);
00363 time_t XMLRPC_GetValueDateTime(XMLRPC_VALUE value);
00364 const char* XMLRPC_GetValueDateTime_ISO8601(XMLRPC_VALUE value);
00365 const char* XMLRPC_GetValueID(XMLRPC_VALUE value);
00366 
00367 /* Type introspection */
00368 XMLRPC_VALUE_TYPE XMLRPC_GetValueType(XMLRPC_VALUE v);
00369 XMLRPC_VALUE_TYPE_EASY XMLRPC_GetValueTypeEasy(XMLRPC_VALUE v);
00370 XMLRPC_VECTOR_TYPE XMLRPC_GetVectorType(XMLRPC_VALUE v);
00371 
00372 /* Parsing and Creating XML */
00373 XMLRPC_REQUEST XMLRPC_REQUEST_FromXML(const char* in_buf, int len, XMLRPC_REQUEST_INPUT_OPTIONS in_options);
00374 XMLRPC_VALUE XMLRPC_VALUE_FromXML(const char* in_buf, int len, XMLRPC_REQUEST_INPUT_OPTIONS in_options);
00375 char* XMLRPC_REQUEST_ToXML(XMLRPC_REQUEST request, int *buf_len);
00376 char* XMLRPC_VALUE_ToXML(XMLRPC_VALUE val, int* buf_len);
00377 
00378 /* Request manipulation funcs */
00379 const char* XMLRPC_RequestSetMethodName(XMLRPC_REQUEST request, const char* methodName);
00380 const char* XMLRPC_RequestGetMethodName(XMLRPC_REQUEST request);
00381 XMLRPC_REQUEST XMLRPC_RequestNew(void);
00382 void XMLRPC_RequestFree(XMLRPC_REQUEST request, int bFreeIO);
00383 XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestSetOutputOptions(XMLRPC_REQUEST request, XMLRPC_REQUEST_OUTPUT_OPTIONS output);
00384 XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestGetOutputOptions(XMLRPC_REQUEST request);
00385 XMLRPC_VALUE XMLRPC_RequestSetData(XMLRPC_REQUEST request, XMLRPC_VALUE data);
00386 XMLRPC_VALUE XMLRPC_RequestGetData(XMLRPC_REQUEST request);
00387 XMLRPC_REQUEST_TYPE XMLRPC_RequestSetRequestType(XMLRPC_REQUEST request, XMLRPC_REQUEST_TYPE type);
00388 XMLRPC_REQUEST_TYPE XMLRPC_RequestGetRequestType(XMLRPC_REQUEST request);
00389 
00390 /* Server Creation/Destruction; Method Registration and Invocation */
00391 XMLRPC_SERVER XMLRPC_ServerCreate(void);
00392 XMLRPC_SERVER XMLRPC_GetGlobalServer(void);   /* better to use XMLRPC_ServerCreate if you can */
00393 void XMLRPC_ServerDestroy(XMLRPC_SERVER server);
00394 int XMLRPC_ServerRegisterMethod(XMLRPC_SERVER server, const char *name, XMLRPC_Callback cb);
00395 XMLRPC_Callback XMLRPC_ServerFindMethod(XMLRPC_SERVER server, const char* callName);
00396 XMLRPC_VALUE XMLRPC_ServerCallMethod(XMLRPC_SERVER server, XMLRPC_REQUEST request, void* userData);
00397 
00398 #include "xmlrpc_introspection.h"
00399 
00400 /* Fault interrogation funcs */
00401 int XMLRPC_ValueIsFault (XMLRPC_VALUE value);
00402 int XMLRPC_ResponseIsFault(XMLRPC_REQUEST response);
00403 int XMLRPC_GetValueFaultCode (XMLRPC_VALUE value);
00404 int XMLRPC_GetResponseFaultCode(XMLRPC_REQUEST response);
00405 const char* XMLRPC_GetValueFaultString (XMLRPC_VALUE value);
00406 const char* XMLRPC_GetResponseFaultString (XMLRPC_REQUEST response);
00407 
00408 
00409 /* Public Utility funcs */
00410 XMLRPC_VALUE XMLRPC_UtilityCreateFault(int fault_code, const char* fault_string);
00411 void XMLRPC_Free(void* mem);
00412 const char*  XMLRPC_GetVersionString(void);
00413 
00414 /****d* VALUE/XMLRPC_MACROS
00415  * NAME
00416  *   Some Helpful Macros
00417  * NOTES
00418  *   Some macros for making life easier.  Should be self-explanatory.
00419  * SEE ALSO
00420  *   XMLRPC_AddValueToVector ()
00421  *   XMLRPC_VectorGetValueWithID_Case ()
00422  *   XMLRPC_VALUE
00423  * SOURCE
00424  */
00425 
00426 /* Append values to vector */
00427 #define XMLRPC_VectorAppendString(vector, id, s, len) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueString(id, s, len))
00428 #define XMLRPC_VectorAppendBase64(vector, id, s, len) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueBase64(id, s, len))
00429 #define XMLRPC_VectorAppendDateTime(vector, id, time) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueDateTime(id, time))
00430 #define XMLRPC_VectorAppendDateTime_ISO8601(vector, id, s) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueDateTime_ISO8601(id, s))
00431 #define XMLRPC_VectorAppendDouble(vector, id, f) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueDouble(id, f))
00432 #define XMLRPC_VectorAppendInt(vector, id, i) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueInt(id, i))
00433 #define XMLRPC_VectorAppendBoolean(vector, id, i) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueBoolean(id, i))
00434 
00435 /* Get named values from vector */
00436 #define XMLRPC_VectorGetValueWithID(vector, id) XMLRPC_VectorGetValueWithID_Case(vector, id, XMLRPC_DEFAULT_ID_CASE_SENSITIVITY)
00437 #define XMLRPC_VectorGetStringWithID(vector, id) XMLRPC_GetValueString(XMLRPC_VectorGetValueWithID(vector, id))
00438 #define XMLRPC_VectorGetBase64WithID(vector, id) XMLRPC_GetValueBase64(XMLRPC_VectorGetValueWithID(vector, id))
00439 #define XMLRPC_VectorGetDateTimeWithID(vector, id) XMLRPC_GetValueDateTime(XMLRPC_VectorGetValueWithID(vector, id))
00440 #define XMLRPC_VectorGetDoubleWithID(vector, id) XMLRPC_GetValueDouble(XMLRPC_VectorGetValueWithID(vector, id))
00441 #define XMLRPC_VectorGetIntWithID(vector, id) XMLRPC_GetValueInt(XMLRPC_VectorGetValueWithID(vector, id))
00442 #define XMLRPC_VectorGetBooleanWithID(vector, id) XMLRPC_GetValueBoolean(XMLRPC_VectorGetValueWithID(vector, id))
00443 
00444 /******/
00445 
00446 
00447 #ifdef __cplusplus
00448 }
00449 #endif
00450 
00451 #endif /* not XMLRPC_ALREADY_INCLUDED */
00452 
00453 
00454