/* A simple synchronous XML-RPC client written in C. */ #include #include #include #include #include "config.h" /* information about this build environment */ #define NAME "XML-RPC C Test Client synch_client" #define VERSION "1.0" 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); } } int main(int const argc, const char ** const argv ATTR_UNUSED) { xmlrpc_env env; xmlrpc_value * resultP; const char * stateName; int val; static int count = 0; /* Start up our XML-RPC client library. */ xmlrpc_client_init(XMLRPC_CLIENT_NO_FLAGS, NAME, VERSION); while (1) { /* Initialize our error-handling environment. */ xmlrpc_env_init(&env); /* Call the famous server at UserLand. */ resultP = xmlrpc_client_call(&env, "http://localhost:3000/RPC2", "ping", "(i)", (xmlrpc_int32) count); die_if_fault_occurred(&env); /* Get our state name and print it out. xmlrpc_read_string(&env, resultP, &stateName); die_if_fault_occurred(&env); printf("%s\n", stateName); free((char*)stateName); */ xmlrpc_read_int(&env, resultP, &val); die_if_fault_occurred(&env); printf("%d %d\n", val, count++); /* Dispose of our result value. */ xmlrpc_DECREF(resultP); /* Clean up our error-handling environment. */ xmlrpc_env_clean(&env); } /* Shutdown our XML-RPC client library. */ xmlrpc_client_cleanup(); return 0; }