i inteded to show xml format on the console from following basic code :
#include <stdio.h>
#include <stdlib.h>
#include <xmlrpc.h>
#include <xmlrpc_client.h>
#include <xmlrpc-c/base.h>
#include <xmlrpc-c/util.h>
#define XMLRPC_NAME "XML-RPC tesaja"
#define XMLRPC_VERSION "0.1"
int main()
{
//declare
xmlrpc_env env;
xmlrpc_value *result = NULL;
xmlrpc_client_init(XMLRPC_CLIENT_NO_FLAGS, XMLRPC_NAME, XMLRPC_VERSION);
xmlrpc_env_init(&env);
result = xmlrpc_client_call(&env, "http://xmlrpc-c.sourceforge.net/api/sample.php" ,
"sample.sumAndDifference", "(ii)", //method
(xmlrpc_int32) 5, //var
(xmlrpc_int32) 3); //var
/* ma code */
char output[1024] = {0};
int l_output = 0;
/* ------------------ keluarin xml ------------------*/
xmlrpc_value *params;
xmlrpc_mem_block *xmlmemblockP = NULL;
params = xmlrpc_build_value(&env, "(ii)", (xmlrpc_int32) 5, (xmlrpc_int32) 7);
xmlmemblockP = XMLRPC_MEMBLOCK_NEW(char, &env, 0);
xmlrpc_serialize_call(&env, xmlmemblockP, "sample.sumAndDifference", params);
l_output = snprintf(output,XMLRPC_MEMBLOCK_SIZE(char, xmlmemblockP),"%s",XMLRPC_MEMBLOCK_CONTENTS(char, xmlmemblockP));
output[l_output] = '\0';
printf("submit data -> \n %s\n",output);
XMLRPC_MEMBLOCK_FREE(char, xmlmemblockP);
/* Dispose of our parameter array. */
xmlrpc_DECREF(params);
/* ------------------ keluarin xml ------------------*/
if(env.fault_occurred)
{
printf("%s\n",env.fault_string);
return 0;
}
// Parse our result value
xmlrpc_int32 sum, difference;
xmlrpc_decompose_value(&env, result, "{s:i,s:i,*}",
"sum", &sum,
"difference", &difference);
/* keluarin xml respon */
params = result;
xmlmemblockP = XMLRPC_MEMBLOCK_NEW(char, &env, 0);
xmlrpc_serialize_call(&env, xmlmemblockP, "sample.sumAndDifference", params);
l_output = snprintf(output,XMLRPC_MEMBLOCK_SIZE(char, xmlmemblockP),"%s",XMLRPC_MEMBLOCK_CONTENTS(char, xmlmemblockP));
output[l_output] = '\0';
printf("respon data-> \n %s \n",output);
XMLRPC_MEMBLOCK_FREE(char, xmlmemblockP);
/* Dispose of our parameter array. */
//xmlrpc_DECREF(params); //udah diwakilin dibawah
/* keluarin xml respon*/
if(env.fault_occurred)
{
printf("%s\n",env.fault_string);
return 0;
}
// Print out our sum and difference.
printf("Sum: %d, Difference: %d\n", (int) sum, (int) difference);
// Dispose of our result value.
xmlrpc_DECREF(result);
//Shutdown our XML-RPC client library.
xmlrpc_env_clean(&env);
xmlrpc_client_cleanup();
return 0;
}
and somehow it doesnt work properly :
compile
$ gcc -o xxx xxx.c `xmlrpc-c-config libwww-client --libs --cflags`
output
submit data ->
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>sample.sumAndDifference</methodName>
<params>
<param><value><i4>5</i4></value></param>
<param><value><i4>7</i4></value></param>
</params>
</methodCall>
respon data->
<?xml version="1.0" encoding="UTF-8"?>
<methodCall>
<methodName>sample.sumAndDifference</methodName>
params>
Expected XMLRPC_TYPE_ARRAY
question
- why these code could not work properly ?
- what is
<i4>mean ?, if xmlrpc server (any xmlrpc based, like xmlrpc-c, xmlrpc java, etc..) asking forinteger, will<i4>representing it ?
thx for everything
aah, after i sought the functions provided by xmlrpc-c library, i found
xmlrpc_serialize_response();, which i thought will do such thingoutput
and fortunately it did.
now thats first question done with.
but second question left unanswered, anyone mind to answer the left?