initial load of upstream version 1.06.32
[xmlrpc-c] / examples / gen_sample_add_xml.c
1 /* This program generates on Standard Output the XML for an XML-RPC
2    call suitable for the xmlrpc_sample_add_server program.
3
4    This is the same XML that the xmlrpc_sample_add_client program sends.
5
6    Use this either as an example of how to use the Xmlrpc-c XML-generating
7    functions or to generate XML that you can use to test an XML-RPC
8    server.
9 */
10
11 #include <stdlib.h>
12 #include <stdio.h>
13
14 #include <xmlrpc-c/base.h>
15
16 #include "config.h"
17
18 static void 
19 die_if_fault_occurred (xmlrpc_env *env) {
20     if (env->fault_occurred) {
21         fprintf(stderr, "XML-RPC Fault: %s (%d)\n",
22                 env->fault_string, env->fault_code);
23         exit(1);
24     }
25 }
26
27
28
29 int 
30 main(int           const argc, 
31      const char ** const argv ATTR_UNUSED) {
32
33     char * const methodName = "sample.add";
34
35     xmlrpc_env env;
36     xmlrpc_value * params;
37     xmlrpc_mem_block * xmlmemblockP;
38
39     if (argc-1 > 0) {
40         fprintf(stderr, "This program has no arguments\n");
41         exit(1);
42     }
43
44     /* Initialize our error-handling environment. */
45     xmlrpc_env_init(&env);
46
47     params = xmlrpc_build_value(&env, "(ii)", 
48                                 (xmlrpc_int32) 5, (xmlrpc_int32) 7);
49     
50     die_if_fault_occurred(&env);
51
52     xmlmemblockP = XMLRPC_MEMBLOCK_NEW(char, &env, 0);
53
54     xmlrpc_serialize_call(&env, xmlmemblockP, methodName, params);
55
56     die_if_fault_occurred(&env);
57
58     fwrite(XMLRPC_MEMBLOCK_CONTENTS(char, xmlmemblockP), 
59            sizeof(char), 
60            XMLRPC_MEMBLOCK_SIZE(char, xmlmemblockP), 
61            stdout);
62
63     XMLRPC_MEMBLOCK_FREE(char, xmlmemblockP);
64
65     /* Dispose of our parameter array. */
66     xmlrpc_DECREF(params);
67
68     /* Clean up our error-handling environment. */
69     xmlrpc_env_clean(&env);
70     
71     return 0;
72 }
73