| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
| |
|
|
| #define _XOPEN_SOURCE 600 |
| #include <stdlib.h> |
| #include <unistd.h> |
| #include <stdio.h> |
|
|
| #include <xmlrpc-c/base.h> |
| #include <xmlrpc-c/client.h> |
|
|
| #include "config.h" |
|
|
|
|
|
|
| static void |
| die_if_fault_occurred (xmlrpc_env * const envP) { |
| if (envP->fault_occurred) { |
| fprintf(stderr, "XML-RPC Fault: %s (%d)\n", |
| envP->fault_string, envP->fault_code); |
| exit(1); |
| } |
| } |
|
|
|
|
|
|
| static void |
| add(xmlrpc_client * const clientP, |
| const char * const serverUrl, |
| int const addend, |
| int const adder) { |
|
|
| const char * const methodName = "sample.add"; |
|
|
| xmlrpc_env env; |
| xmlrpc_value * resultP; |
| xmlrpc_int32 sum; |
|
|
| xmlrpc_env_init(&env); |
|
|
| printf("Making XMLRPC call to server url '%s' method '%s' " |
| "to request the sum " |
| "of %d and %d...\n", serverUrl, methodName, addend, adder); |
|
|
| |
|
|
| xmlrpc_client_call2f(&env, clientP, serverUrl, methodName, &resultP, |
| "(ii)", (xmlrpc_int32) addend, (xmlrpc_int32) adder); |
| die_if_fault_occurred(&env); |
|
|
| |
| xmlrpc_read_int(&env, resultP, &sum); |
| die_if_fault_occurred(&env); |
| printf("The sum is %d\n", sum); |
| |
| |
| xmlrpc_DECREF(resultP); |
|
|
| xmlrpc_env_clean(&env); |
| } |
|
|
|
|
|
|
| int |
| main(int const argc, |
| const char ** const argv) { |
|
|
| const char * serverUrl; |
|
|
| xmlrpc_env env; |
| struct xmlrpc_curl_xportparms transportParms; |
| struct xmlrpc_clientparms clientParms; |
| xmlrpc_client * clientP; |
|
|
| if (argc-1 < 1) { |
| fprintf(stderr, "You must specify the server URL as an argument. " |
| "Example: http://localhost:8080/RPC2\n"); |
| exit(1); |
| } else { |
| serverUrl = argv[1]; |
| } |
|
|
| |
| xmlrpc_env_init(&env); |
|
|
| |
| xmlrpc_client_setup_global_const(&env); |
| die_if_fault_occurred(&env); |
|
|
| transportParms.network_interface = NULL; |
| transportParms.no_ssl_verifypeer = 1; |
| transportParms.no_ssl_verifyhost = 1; |
| transportParms.user_agent = NULL; |
| transportParms.ssl_cert = NULL; |
| transportParms.sslcerttype = NULL; |
| transportParms.sslcertpasswd = NULL; |
| transportParms.sslkey = NULL; |
| transportParms.sslkeytype = NULL; |
| transportParms.sslengine = NULL; |
| transportParms.sslengine_default = 0; |
| transportParms.sslversion = XMLRPC_SSLVERSION_DEFAULT; |
| transportParms.cainfo = NULL; |
| transportParms.capath = NULL; |
| transportParms.randomfile = NULL; |
| transportParms.egdsocket= NULL; |
| transportParms.ssl_cipher_list= "ALL:eNULL:aNULL"; |
| transportParms.timeout = 2000; |
|
|
| clientParms.transport = "curl"; |
| clientParms.transportparmsP = &transportParms; |
| clientParms.transportparm_size = XMLRPC_CXPSIZE(timeout); |
|
|
| |
| xmlrpc_client_create(&env, 0, NULL, NULL, |
| &clientParms, XMLRPC_CPSIZE(transportparm_size), |
| &clientP); |
|
|
| die_if_fault_occurred(&env); |
|
|
| |
| |
| |
| |
| |
|
|
| add(clientP, serverUrl, 5, 7); |
| |
|
|
| add(clientP, serverUrl, 5, 1); |
| |
|
|
| xmlrpc_env_clean(&env); |
| xmlrpc_client_destroy(clientP); |
| xmlrpc_client_teardown_global_const(); |
|
|
| return 0; |
| } |
|
|
|
|