/* * SXMLRPC: client example program * $Id: sxmlrpc_echo_c.c,v 1.4 2007/09/02 12:15:19 kouichi Exp $ */ #include #include "sxmlrpc.h" #define METHOD_NAME "examples.echo" static int echo(sxmlrpc_t *, sxmlrpc_value_t *); static int echo(sxRPC, v) sxmlrpc_t * sxRPC; sxmlrpc_value_t * v; { int status; sxmlrpc_param_t p; sxmlrpc_set_param(&p, *v); status = sxmlrpc_call(sxRPC, METHOD_NAME, &p, 1); if (status == 0) { switch (sxRPC->method) { case SXMLRPC_METHOD_RESPONSE: { sxmlrpc_value_t * result; result = sxmlrpc_get_response_value(sxRPC); sxmlrpc_print_value(result, stdout); } break; case SXMLRPC_METHOD_RESPONSE_FAULT: fprintf(stdout, "fault: %d: %s\n", sxmlrpc_get_fault_code(sxRPC), sxmlrpc_get_fault_string(sxRPC)); break; default: fprintf(stdout, "error: %d\n", sxRPC->method); break; } sxmlrpc_flush(sxRPC); } return status; } int main(argc, argv) int argc; char * argv[]; { sxmlrpc_t * sxRPC; sxRPC = sxmlrpc_new("localhost", "10080", "/RPC2"); if (sxRPC != NULL) { sxmlrpc_value_t val; sxmlrpc_value_t v[6]; sxmlrpc_member_t mval[2]; sxmlrpc_struct_t tval; sxmlrpc_array_t aval; const char text[] = "You can't read this!"; char buf[BUFSIZ]; register int i = 0; fprintf(stdout, "==== echo integer ====\n"); sxmlrpc_set_value_int(&val, 41); echo(sxRPC, &val); fprintf(stdout, "==== echo double ====\n"); sxmlrpc_set_value_double(&val, 3.14159265); echo(sxRPC, &val); fprintf(stdout, "==== echo boolean ====\n"); sxmlrpc_set_value_boolean(&val, false); echo(sxRPC, &val); fprintf(stdout, "==== echo string ====\n"); sxmlrpc_set_value_string(&val, "Kouichi ABE (WALL)"); echo(sxRPC, &val); fprintf(stdout, "==== echo datetime ====\n"); sxmlrpc_set_value_string(&val, sxmlrpc_get_current_datetime_iso8601()); echo(sxRPC, &val); fprintf(stdout, "==== echo base64 ====\n"); if (sxmlrpc_base64_encode(text, buf, sizeof(buf)) != -1) { sxmlrpc_set_value_string(&val, buf); echo(sxRPC, &val); } fprintf(stdout, "==== echo array ====\n"); i=0; sxmlrpc_set_value_int(&v[i], 20060327); i++; sxmlrpc_set_value_double(&v[i], 2.71828); i++; sxmlrpc_set_value_boolean(&v[i], true); i++; sxmlrpc_set_value_string(&v[i], "MysticWALL"); i++; sxmlrpc_set_array(&aval, i, v); sxmlrpc_set_value_array(&val, aval); echo(sxRPC, &val); fprintf(stdout, "==== echo struct ====\n"); mval[0].name = "email"; sxmlrpc_set_value_string(&mval[0].value, "kouichi@mysticwall.com"); mval[1].name = "uri"; sxmlrpc_set_value_string(&mval[1].value, "http://www.mysticwall.com/"); sxmlrpc_set_struct(&tval, 2, mval); sxmlrpc_set_value_struct(&val, tval); echo(sxRPC, &val); sxmlrpc_free(sxRPC); } return 0; }