Annotation of embedaddon/php/ext/xmlrpc/libxmlrpc/xmlrpc.h, revision 1.1.1.1
1.1 misho 1: /*
2: This file is part of libXMLRPC - a C library for xml-encoded function calls.
3:
4: Author: Dan Libby (dan@libby.com)
5: Epinions.com may be contacted at feedback@epinions-inc.com
6: */
7:
8: /*
9: Copyright 2000 Epinions, Inc.
10:
11: Subject to the following 3 conditions, Epinions, Inc. permits you, free
12: of charge, to (a) use, copy, distribute, modify, perform and display this
13: software and associated documentation files (the "Software"), and (b)
14: permit others to whom the Software is furnished to do so as well.
15:
16: 1) The above copyright notice and this permission notice shall be included
17: without modification in all copies or substantial portions of the
18: Software.
19:
20: 2) THE SOFTWARE IS PROVIDED "AS IS", WITHOUT ANY WARRANTY OR CONDITION OF
21: ANY KIND, EXPRESS, IMPLIED OR STATUTORY, INCLUDING WITHOUT LIMITATION ANY
22: IMPLIED WARRANTIES OF ACCURACY, MERCHANTABILITY, FITNESS FOR A PARTICULAR
23: PURPOSE OR NONINFRINGEMENT.
24:
25: 3) IN NO EVENT SHALL EPINIONS, INC. BE LIABLE FOR ANY DIRECT, INDIRECT,
26: SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES OR LOST PROFITS ARISING OUT
27: OF OR IN CONNECTION WITH THE SOFTWARE (HOWEVER ARISING, INCLUDING
28: NEGLIGENCE), EVEN IF EPINIONS, INC. IS AWARE OF THE POSSIBILITY OF SUCH
29: DAMAGES.
30:
31: */
32:
33: #ifndef XMLRPC_ALREADY_INCLUDED
34: #define XMLRPC_ALREADY_INCLUDED 1
35:
36: /* includes */
37: #include "xml_element.h"
38: #include <time.h> /* for time_t */
39:
40: #ifdef __cplusplus
41: extern "C" {
42: #endif
43:
44: /* allow version to be specified via compile line define */
45: #ifndef XMLRPC_LIB_VERSION
46: #define XMLRPC_LIB_VERSION "0.51"
47: #endif
48:
49: /* this number, representing the date, must be increased each time the API changes */
50: #define XMLRPC_API_NO 20020623
51:
52: /* this string should be changed with each packaged release */
53: #define XMLRPC_VERSION_STR "xmlrpc-epi v. " XMLRPC_LIB_VERSION
54:
55: /* where to find more info. shouldn't need to change much */
56: #define XMLRPC_HOME_PAGE_STR "http://xmlprc-epi.sourceforge.net/"
57:
58:
59: /****d* VALUE/XMLRPC_VALUE_TYPE
60: * NAME
61: * XMLRPC_VALUE_TYPE
62: * NOTES
63: * Defines data types for XMLRPC_VALUE
64: * Deprecated for public use. See XMLRPC_VALUE_TYPE_EASY
65: * SEE ALSO
66: * XMLRPC_VECTOR_TYPE
67: * XMLRPC_REQUEST_TYPE
68: * SOURCE
69: */
70: typedef enum _XMLRPC_VALUE_TYPE {
71: xmlrpc_none, /* not a value */
72: xmlrpc_empty, /* empty value, eg NULL */
73: xmlrpc_base64, /* base64 value, eg binary data */
74: xmlrpc_boolean, /* boolean [0 | 1] */
75: xmlrpc_datetime, /* datetime [ISO8601 | time_t] */
76: xmlrpc_double, /* double / floating point */
77: xmlrpc_int, /* integer */
78: xmlrpc_string, /* string */
79: xmlrpc_vector /* vector, aka list, array */
80: } XMLRPC_VALUE_TYPE;
81: /*******/
82:
83: /****d* VALUE/XMLRPC_VECTOR_TYPE
84: * NAME
85: * XMLRPC_VECTOR_TYPE
86: * NOTES
87: * Defines data types for XMLRPC_VECTOR.
88: * Deprecated for public use. See XMLRPC_VALUE_TYPE_EASY
89: * SEE ALSO
90: * XMLRPC_VALUE_TYPE
91: * XMLRPC_REQUEST_TYPE
92: * SOURCE
93: */
94: typedef enum _XMLRPC_VECTOR_TYPE {
95: xmlrpc_vector_none, /* not an array */
96: xmlrpc_vector_array, /* no values may have key names */
97: xmlrpc_vector_mixed, /* some values may have key names */
98: xmlrpc_vector_struct /* all values must have key names */
99: } XMLRPC_VECTOR_TYPE;
100: /*******/
101:
102: /****d* VALUE/XMLRPC_VALUE_TYPE_EASY
103: * NAME
104: * XMLRPC_VALUE_TYPE_EASY
105: * NOTES
106: * Defines data types for XMLRPC_VALUE, including vector types.
107: * SEE ALSO
108: * XMLRPC_VECTOR_TYPE
109: * XMLRPC_REQUEST_TYPE
110: * SOURCE
111: */
112: typedef enum _XMLRPC_VALUE_TYPE_EASY {
113: xmlrpc_type_none, /* not a value */
114: xmlrpc_type_empty, /* empty value, eg NULL */
115: xmlrpc_type_base64, /* base64 value, eg binary data */
116: xmlrpc_type_boolean, /* boolean [0 | 1] */
117: xmlrpc_type_datetime, /* datetime [ISO8601 | time_t] */
118: xmlrpc_type_double, /* double / floating point */
119: xmlrpc_type_int, /* integer */
120: xmlrpc_type_string, /* string */
121: /* -- IMPORTANT: identical to XMLRPC_VALUE_TYPE to this point. -- */
122: xmlrpc_type_array, /* vector array */
123: xmlrpc_type_mixed, /* vector mixed */
124: xmlrpc_type_struct /* vector struct */
125: } XMLRPC_VALUE_TYPE_EASY;
126: /*******/
127:
128:
129: /****d* VALUE/XMLRPC_REQUEST_TYPE
130: * NAME
131: * XMLRPC_REQUEST_TYPE
132: * NOTES
133: * Defines data types for XMLRPC_REQUEST
134: * SEE ALSO
135: * XMLRPC_VALUE_TYPE
136: * XMLRPC_VECTOR_TYPE
137: * SOURCE
138: */
139: typedef enum _xmlrpc_request_type {
140: xmlrpc_request_none, /* not a valid request */
141: xmlrpc_request_call, /* calling/invoking a method */
142: xmlrpc_request_response, /* responding to a method call */
143: } XMLRPC_REQUEST_TYPE;
144: /*******/
145:
146: /****d* VALUE/XMLRPC_ERROR_CODE
147: * NAME
148: * XMLRPC_ERROR_CODE
149: * NOTES
150: * All existing error codes
151: * SEE ALSO
152: * XMLRPC_REQUEST_ERROR
153: * SOURCE
154: */
155: typedef enum _xmlrpc_error_code {
156: xmlrpc_error_none = 0, /* not an error */
157: xmlrpc_error_parse_xml_syntax = -32700,
158: xmlrpc_error_parse_unknown_encoding = -32701,
159: xmlrpc_error_parse_bad_encoding = -32702,
160: xmlrpc_error_invalid_xmlrpc = -32600,
161: xmlrpc_error_unknown_method = -32601,
162: xmlrpc_error_invalid_params = -32602,
163: xmlrpc_error_internal_server = -32603,
164: xmlrpc_error_application = -32500,
165: xmlrpc_error_system = -32400,
166: xmlrpc_error_transport = -32300
167: } XMLRPC_ERROR_CODE;
168: /******/
169:
170: #define xmlrpc_error_parse_xml_syntax_str "parse error. not well formed."
171: #define xmlrpc_error_parse_unknown_encoding_str "parse error. unknown encoding"
172: #define xmlrpc_error_parse_bad_encoding_str "parse error. invalid character for encoding"
173: #define xmlrpc_error_invalid_xmlrpc_str "server error. xml-rpc not conforming to spec"
174: #define xmlrpc_error_unknown_method_str "server error. method not found."
175: #define xmlrpc_error_invalid_params_str "server error. invalid method parameters"
176: #define xmlrpc_error_internal_server_str "server error. internal xmlrpc library error"
177: #define xmlrpc_error_application_str "application error."
178: #define xmlrpc_error_system_str "system error."
179: #define xmlrpc_error_transport_str "transport error."
180:
181:
182:
183: /****d* VALUE/XMLRPC_VERSION
184: * NAME
185: * XMLRPC_VERSION
186: * NOTES
187: * Defines xml vocabulary used for generated xml
188: * SEE ALSO
189: * XMLRPC_REQUEST_OUTPUT_OPTIONS
190: * XMLRPC_REQUEST_To_XML ()
191: * SOURCE
192: */
193: typedef enum _xmlrpc_version {
194: xmlrpc_version_none = 0, /* not a recognized vocabulary */
195: xmlrpc_version_1_0 = 1, /* xmlrpc 1.0 standard vocab */
196: xmlrpc_version_simple = 2, /* alt more readable vocab */
197: xmlrpc_version_danda = 2, /* same as simple. legacy */
198: xmlrpc_version_soap_1_1 = 3 /* SOAP. version 1.1 */
199: } XMLRPC_VERSION;
200: /******/
201:
202: /****s* VALUE/XMLRPC_REQUEST_OUTPUT_OPTIONS
203: * NAME
204: * XMLRPC_REQUEST_OUTPUT_OPTIONS
205: * NOTES
206: * Defines output options for generated xml
207: * SEE ALSO
208: * XMLRPC_VERSION
209: * XML_ELEM_OUTPUT_OPTIONS
210: * XMLRPC_REQUEST_To_XML ()
211: * SOURCE
212: */
213: typedef struct _xmlrpc_request_output_options {
214: STRUCT_XML_ELEM_OUTPUT_OPTIONS xml_elem_opts; /* xml_element specific output options */
215: XMLRPC_VERSION version; /* xml vocabulary to use */
216: } STRUCT_XMLRPC_REQUEST_OUTPUT_OPTIONS, *XMLRPC_REQUEST_OUTPUT_OPTIONS;
217: /******/
218:
219: /****s* VALUE/XMLRPC_REQUEST_INPUT_OPTIONS
220: * NAME
221: * XMLRPC_REQUEST_INPUT_OPTIONS
222: * NOTES
223: * Defines options for reading in xml data
224: * SEE ALSO
225: * XMLRPC_VERSION
226: * XML_ELEM_INPUT_OPTIONS
227: * XMLRPC_REQUEST_From_XML ()
228: * SOURCE
229: */
230: typedef struct _xmlrpc_request_input_options {
231: STRUCT_XML_ELEM_INPUT_OPTIONS xml_elem_opts; /* xml_element specific output options */
232: } STRUCT_XMLRPC_REQUEST_INPUT_OPTIONS, *XMLRPC_REQUEST_INPUT_OPTIONS;
233: /******/
234:
235: /****s* VALUE/XMLRPC_ERROR
236: * NAME
237: * XMLRPC_ERROR
238: * NOTES
239: * For the reporting and handling of errors
240: * SOURCE
241: */
242: typedef struct _xmlrpc_error {
243: XMLRPC_ERROR_CODE code;
244: STRUCT_XML_ELEM_ERROR xml_elem_error; /* xml_element errors (parser errors) */
245: } STRUCT_XMLRPC_ERROR, *XMLRPC_ERROR;
246: /******/
247:
248:
249: /****d* VALUE/XMLRPC_CASE_COMPARISON
250: * NAME
251: * XMLRPC_CASE_COMPARISON
252: * NOTES
253: * Defines case comparison options for XMLRPC_VALUE/VECTOR API's
254: * SEE ALSO
255: * XMLRPC_CASE
256: * XMLRPC_VALUE
257: * SOURCE
258: */
259: typedef enum _xmlrpc_case_comparison {
260: xmlrpc_case_insensitive, /* use case-insensitive compare */
261: xmlrpc_case_sensitive /* use case-sensitive compare */
262: } XMLRPC_CASE_COMPARISON;
263: /******/
264:
265: /****d* VALUE/XMLRPC_CASE
266: * NAME
267: * XMLRPC_CASE
268: * NOTES
269: * Defines case behavior when setting IDs in XMLRPC_VALUE API's
270: * SEE ALSO
271: * XMLRPC_CASE_COMPARISON
272: * XMLRPC_VALUE
273: * SOURCE
274: */
275: typedef enum _xmlrpc_case {
276: xmlrpc_case_exact, /* leave case alone */
277: xmlrpc_case_lower, /* lower-case id */
278: xmlrpc_case_upper /* upper-case id */
279: } XMLRPC_CASE;
280: /******/
281:
282: /* if you don't like these defaults, you can set them with XMLRPC_SetDefaultIdCase*() */
283: #define XMLRPC_DEFAULT_ID_CASE XMLRPC_GetDefaultIdCase()
284: #define XMLRPC_DEFAULT_ID_CASE_SENSITIVITY XMLRPC_GetDefaultIdCaseComparison()
285:
286: /* opaque (non-public) types. defined locally in xmlrpc.c */
287: typedef struct _xmlrpc_request* XMLRPC_REQUEST;
288: typedef struct _xmlrpc_server* XMLRPC_SERVER;
289: typedef struct _xmlrpc_value* XMLRPC_VALUE;
290:
291: /****d* VALUE/XMLRPC_Callback
292: * NAME
293: * XMLRPC_Callback
294: * NOTES
295: * Function prototype for user defined method handlers (callbacks).
296: * SEE ALSO
297: * XMLRPC_ServerRegisterMethod ()
298: * XMLRPC_ServerCallMethod ()
299: * XMLRPC_REQUEST
300: * XMLRPC_VALUE
301: * SOURCE
302: */
303: typedef XMLRPC_VALUE (*XMLRPC_Callback)(XMLRPC_SERVER server, XMLRPC_REQUEST input, void* userData);
304: /******/
305:
306: /* ID Case Defaults */
307: XMLRPC_CASE XMLRPC_GetDefaultIdCase(void);
308: XMLRPC_CASE XMLRPC_SetDefaultIdCase(XMLRPC_CASE id_case);
309: XMLRPC_CASE_COMPARISON XMLRPC_GetDefaultIdCaseComparison(void);
310: XMLRPC_CASE_COMPARISON XMLRPC_SetDefaultIdCaseComparison(XMLRPC_CASE_COMPARISON id_case);
311:
312: /* Vector manipulation */
313: int XMLRPC_VectorSize(XMLRPC_VALUE value);
314: XMLRPC_VALUE XMLRPC_VectorRewind(XMLRPC_VALUE value);
315: XMLRPC_VALUE XMLRPC_VectorNext(XMLRPC_VALUE value);
316: int XMLRPC_SetIsVector(XMLRPC_VALUE value, XMLRPC_VECTOR_TYPE type);
317: int XMLRPC_AddValueToVector(XMLRPC_VALUE target, XMLRPC_VALUE source);
318: int XMLRPC_AddValuesToVector(XMLRPC_VALUE target, ...);
319: int XMLRPC_VectorRemoveValue(XMLRPC_VALUE vector, XMLRPC_VALUE value);
320: XMLRPC_VALUE XMLRPC_VectorGetValueWithID_Case(XMLRPC_VALUE vector, const char* id, XMLRPC_CASE_COMPARISON id_case);
321:
322:
323: /* Create values */
324: XMLRPC_VALUE XMLRPC_CreateValueBoolean(const char* id, int truth);
325: XMLRPC_VALUE XMLRPC_CreateValueBase64(const char* id, const char* s, int len);
326: XMLRPC_VALUE XMLRPC_CreateValueDateTime(const char* id, time_t time);
327: XMLRPC_VALUE XMLRPC_CreateValueDateTime_ISO8601(const char* id, const char *s);
328: XMLRPC_VALUE XMLRPC_CreateValueDouble(const char* id, double f);
329: XMLRPC_VALUE XMLRPC_CreateValueInt(const char* id, int i);
330: XMLRPC_VALUE XMLRPC_CreateValueString(const char* id, const char* s, int len);
331: XMLRPC_VALUE XMLRPC_CreateValueEmpty(void);
332: XMLRPC_VALUE XMLRPC_CreateVector(const char* id, XMLRPC_VECTOR_TYPE type);
333:
334: /* Cleanup values */
335: void XMLRPC_CleanupValue(XMLRPC_VALUE value);
336:
337: /* Request error */
338: XMLRPC_VALUE XMLRPC_RequestSetError (XMLRPC_REQUEST request, XMLRPC_VALUE error);
339: XMLRPC_VALUE XMLRPC_RequestGetError (XMLRPC_REQUEST request);
340:
341: /* Copy values */
342: XMLRPC_VALUE XMLRPC_CopyValue(XMLRPC_VALUE value);
343: XMLRPC_VALUE XMLRPC_DupValueNew(XMLRPC_VALUE xSource);
344:
345: /* Set Values */
346: void XMLRPC_SetValueDateTime(XMLRPC_VALUE value, time_t time);
347: void XMLRPC_SetValueDateTime_ISO8601(XMLRPC_VALUE value, const char* s);
348: void XMLRPC_SetValueDouble(XMLRPC_VALUE value, double val);
349: void XMLRPC_SetValueInt(XMLRPC_VALUE value, int val);
350: void XMLRPC_SetValueBoolean(XMLRPC_VALUE value, int val);
351: const char *XMLRPC_SetValueString(XMLRPC_VALUE value, const char* s, int len);
352: void XMLRPC_SetValueBase64(XMLRPC_VALUE value, const char* s, int len);
353: const char *XMLRPC_SetValueID_Case(XMLRPC_VALUE value, const char* id, int len, XMLRPC_CASE id_case);
354: #define XMLRPC_SetValueID(value, id, len) XMLRPC_SetValueID_Case(value, id, len, XMLRPC_DEFAULT_ID_CASE)
355:
356: /* Get Values */
357: const char* XMLRPC_GetValueString(XMLRPC_VALUE value);
358: int XMLRPC_GetValueStringLen(XMLRPC_VALUE value);
359: int XMLRPC_GetValueInt(XMLRPC_VALUE value);
360: int XMLRPC_GetValueBoolean(XMLRPC_VALUE value);
361: double XMLRPC_GetValueDouble(XMLRPC_VALUE value);
362: const char* XMLRPC_GetValueBase64(XMLRPC_VALUE value);
363: time_t XMLRPC_GetValueDateTime(XMLRPC_VALUE value);
364: const char* XMLRPC_GetValueDateTime_ISO8601(XMLRPC_VALUE value);
365: const char* XMLRPC_GetValueID(XMLRPC_VALUE value);
366:
367: /* Type introspection */
368: XMLRPC_VALUE_TYPE XMLRPC_GetValueType(XMLRPC_VALUE v);
369: XMLRPC_VALUE_TYPE_EASY XMLRPC_GetValueTypeEasy(XMLRPC_VALUE v);
370: XMLRPC_VECTOR_TYPE XMLRPC_GetVectorType(XMLRPC_VALUE v);
371:
372: /* Parsing and Creating XML */
373: XMLRPC_REQUEST XMLRPC_REQUEST_FromXML(const char* in_buf, int len, XMLRPC_REQUEST_INPUT_OPTIONS in_options);
374: XMLRPC_VALUE XMLRPC_VALUE_FromXML(const char* in_buf, int len, XMLRPC_REQUEST_INPUT_OPTIONS in_options);
375: char* XMLRPC_REQUEST_ToXML(XMLRPC_REQUEST request, int *buf_len);
376: char* XMLRPC_VALUE_ToXML(XMLRPC_VALUE val, int* buf_len);
377:
378: /* Request manipulation funcs */
379: const char* XMLRPC_RequestSetMethodName(XMLRPC_REQUEST request, const char* methodName);
380: const char* XMLRPC_RequestGetMethodName(XMLRPC_REQUEST request);
381: XMLRPC_REQUEST XMLRPC_RequestNew(void);
382: void XMLRPC_RequestFree(XMLRPC_REQUEST request, int bFreeIO);
383: XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestSetOutputOptions(XMLRPC_REQUEST request, XMLRPC_REQUEST_OUTPUT_OPTIONS output);
384: XMLRPC_REQUEST_OUTPUT_OPTIONS XMLRPC_RequestGetOutputOptions(XMLRPC_REQUEST request);
385: XMLRPC_VALUE XMLRPC_RequestSetData(XMLRPC_REQUEST request, XMLRPC_VALUE data);
386: XMLRPC_VALUE XMLRPC_RequestGetData(XMLRPC_REQUEST request);
387: XMLRPC_REQUEST_TYPE XMLRPC_RequestSetRequestType(XMLRPC_REQUEST request, XMLRPC_REQUEST_TYPE type);
388: XMLRPC_REQUEST_TYPE XMLRPC_RequestGetRequestType(XMLRPC_REQUEST request);
389:
390: /* Server Creation/Destruction; Method Registration and Invocation */
391: XMLRPC_SERVER XMLRPC_ServerCreate(void);
392: XMLRPC_SERVER XMLRPC_GetGlobalServer(void); /* better to use XMLRPC_ServerCreate if you can */
393: void XMLRPC_ServerDestroy(XMLRPC_SERVER server);
394: int XMLRPC_ServerRegisterMethod(XMLRPC_SERVER server, const char *name, XMLRPC_Callback cb);
395: XMLRPC_Callback XMLRPC_ServerFindMethod(XMLRPC_SERVER server, const char* callName);
396: XMLRPC_VALUE XMLRPC_ServerCallMethod(XMLRPC_SERVER server, XMLRPC_REQUEST request, void* userData);
397:
398: #include "xmlrpc_introspection.h"
399:
400: /* Fault interrogation funcs */
401: int XMLRPC_ValueIsFault (XMLRPC_VALUE value);
402: int XMLRPC_ResponseIsFault(XMLRPC_REQUEST response);
403: int XMLRPC_GetValueFaultCode (XMLRPC_VALUE value);
404: int XMLRPC_GetResponseFaultCode(XMLRPC_REQUEST response);
405: const char* XMLRPC_GetValueFaultString (XMLRPC_VALUE value);
406: const char* XMLRPC_GetResponseFaultString (XMLRPC_REQUEST response);
407:
408:
409: /* Public Utility funcs */
410: XMLRPC_VALUE XMLRPC_UtilityCreateFault(int fault_code, const char* fault_string);
411: void XMLRPC_Free(void* mem);
412: const char* XMLRPC_GetVersionString(void);
413:
414: /****d* VALUE/XMLRPC_MACROS
415: * NAME
416: * Some Helpful Macros
417: * NOTES
418: * Some macros for making life easier. Should be self-explanatory.
419: * SEE ALSO
420: * XMLRPC_AddValueToVector ()
421: * XMLRPC_VectorGetValueWithID_Case ()
422: * XMLRPC_VALUE
423: * SOURCE
424: */
425:
426: /* Append values to vector */
427: #define XMLRPC_VectorAppendString(vector, id, s, len) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueString(id, s, len))
428: #define XMLRPC_VectorAppendBase64(vector, id, s, len) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueBase64(id, s, len))
429: #define XMLRPC_VectorAppendDateTime(vector, id, time) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueDateTime(id, time))
430: #define XMLRPC_VectorAppendDateTime_ISO8601(vector, id, s) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueDateTime_ISO8601(id, s))
431: #define XMLRPC_VectorAppendDouble(vector, id, f) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueDouble(id, f))
432: #define XMLRPC_VectorAppendInt(vector, id, i) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueInt(id, i))
433: #define XMLRPC_VectorAppendBoolean(vector, id, i) XMLRPC_AddValueToVector(vector, XMLRPC_CreateValueBoolean(id, i))
434:
435: /* Get named values from vector */
436: #define XMLRPC_VectorGetValueWithID(vector, id) XMLRPC_VectorGetValueWithID_Case(vector, id, XMLRPC_DEFAULT_ID_CASE_SENSITIVITY)
437: #define XMLRPC_VectorGetStringWithID(vector, id) XMLRPC_GetValueString(XMLRPC_VectorGetValueWithID(vector, id))
438: #define XMLRPC_VectorGetBase64WithID(vector, id) XMLRPC_GetValueBase64(XMLRPC_VectorGetValueWithID(vector, id))
439: #define XMLRPC_VectorGetDateTimeWithID(vector, id) XMLRPC_GetValueDateTime(XMLRPC_VectorGetValueWithID(vector, id))
440: #define XMLRPC_VectorGetDoubleWithID(vector, id) XMLRPC_GetValueDouble(XMLRPC_VectorGetValueWithID(vector, id))
441: #define XMLRPC_VectorGetIntWithID(vector, id) XMLRPC_GetValueInt(XMLRPC_VectorGetValueWithID(vector, id))
442: #define XMLRPC_VectorGetBooleanWithID(vector, id) XMLRPC_GetValueBoolean(XMLRPC_VectorGetValueWithID(vector, id))
443:
444: /******/
445:
446:
447: #ifdef __cplusplus
448: }
449: #endif
450:
451: #endif /* not XMLRPC_ALREADY_INCLUDED */
452:
453:
454:
FreeBSD-CVSweb <freebsd-cvsweb@FreeBSD.org>