/* * SXMLRPC: server example program * $Id: sxmlrpc_echo_s.c,v 1.4 2007/09/04 08:18:03 kouichi Exp $ */ #include #include #include #include "sxmlrpc.h" #define METHOD_NAME "examples.echo" #define CODE_NO_METHOD_NAME 401 #define CODE_INVALID_METHOD_NAME 402 #define CODE_NO_PARAMETERS 403 #define CODE_TOO_MANY_PARAMETERS 404 #define STRING_NO_METHOD_NAME "No method name" #define STRING_INVALID_METHOD_NAME "Invalid method name" #define STRING_NO_PARAMETERS "No parameters" #define STRING_TOO_MANY_PARAMETERS "Too many parameters" static int echo(const char *, const char *, sxmlrpc_params_t *, sxmlrpc_param_t *); static int echo(client, method, params, param) const char * client; const char * method; sxmlrpc_params_t * params; sxmlrpc_param_t * param; /* returns */ { sxmlrpc_value_t value; if (method == NULL) { return sxmlrpc_set_fault(param, CODE_NO_METHOD_NAME, STRING_NO_METHOD_NAME); } if (strcmp(method, METHOD_NAME) != 0) { return sxmlrpc_set_fault(param, CODE_INVALID_METHOD_NAME, STRING_INVALID_METHOD_NAME); } if (params == NULL || params->size == 0) { return sxmlrpc_set_fault(param, CODE_NO_PARAMETERS, STRING_NO_PARAMETERS); } if (params->size > 1) { return sxmlrpc_set_fault(param, CODE_TOO_MANY_PARAMETERS, STRING_TOO_MANY_PARAMETERS); } fprintf(stderr, "Connected from %s. method: %s\n", client, method); sxmlrpc_copy_value(&value, ¶ms->param->value); sxmlrpc_set_param(param, value); return 0; } int main(argc, argv) int argc; char * argv[]; { sxmlrpc_t * sxRPC; sxRPC = sxmlrpc_new("localhost", "10080", "/RPC2"); if (sxRPC != NULL) { sxmlrpc_server(sxRPC, 1, echo); sxmlrpc_free(sxRPC); } return 0; }