mirror of
https://github.com/signalwire/freeswitch.git
synced 2025-08-13 01:26:58 +00:00
add xmlrpc-c 1.03.14 to in tree libs
git-svn-id: http://svn.freeswitch.org/svn/freeswitch/trunk@3772 d0543943-73ff-0310-b7d9-9358b9ac24b2
This commit is contained in:
215
libs/xmlrpc-c/tools/interop-server/interop-cgi.c
Normal file
215
libs/xmlrpc-c/tools/interop-server/interop-cgi.c
Normal file
@@ -0,0 +1,215 @@
|
||||
/* A CGI which implements all of the test functions need for an interop
|
||||
** endpoint. */
|
||||
|
||||
#include <sys/utsname.h>
|
||||
#include <errno.h>
|
||||
#include <string.h>
|
||||
|
||||
#include "xmlrpc-c/base.h"
|
||||
#include "xmlrpc-c/cgi.h"
|
||||
|
||||
#include "version.h"
|
||||
|
||||
#include "config.h" /* information about this build environment */
|
||||
|
||||
|
||||
/*=========================================================================
|
||||
** Toolkit Identification
|
||||
**=========================================================================
|
||||
*/
|
||||
|
||||
static xmlrpc_value *
|
||||
whichToolkit(xmlrpc_env * const env,
|
||||
xmlrpc_value * const param_array,
|
||||
void * const user_data ATTR_UNUSED) {
|
||||
|
||||
xmlrpc_value * retval;
|
||||
|
||||
/* Parse our argument array. */
|
||||
xmlrpc_parse_value(env, param_array, "()");
|
||||
if (env->fault_occurred)
|
||||
retval = NULL;
|
||||
else {
|
||||
struct utsname utsname;
|
||||
|
||||
int rc;
|
||||
rc = uname(&utsname);
|
||||
if (rc != 0) {
|
||||
xmlrpc_env_set_fault_formatted(env, XMLRPC_INTERNAL_ERROR,
|
||||
"uname() failed. errno=%d (%s)",
|
||||
errno, strerror(errno));
|
||||
retval = NULL;
|
||||
} else {
|
||||
/* Assemble our result. */
|
||||
retval = xmlrpc_build_value(env, "{s:s,s:s,s:s,s:s}",
|
||||
"toolkitDocsUrl",
|
||||
"http://xmlrpc-c.sourceforge.net/",
|
||||
"toolkitName", PACKAGE,
|
||||
"toolkitVersion", XMLRPC_C_VERSION"+",
|
||||
"toolkitOperatingSystem",
|
||||
utsname.sysname);
|
||||
}
|
||||
}
|
||||
return retval;
|
||||
}
|
||||
|
||||
|
||||
|
||||
static char whichToolkit_help[] =
|
||||
"Identify the toolkit used to implement this server. The operating system "
|
||||
"information is based on where the toolkit was compiled, not where it's "
|
||||
"currently running.";
|
||||
|
||||
|
||||
/*=========================================================================
|
||||
** noInParams
|
||||
**=========================================================================
|
||||
** Test a method with no parameters.
|
||||
*/
|
||||
|
||||
static xmlrpc_value *
|
||||
noInParams(xmlrpc_env * const env,
|
||||
xmlrpc_value * const param_array,
|
||||
void * const user_data ATTR_UNUSED) {
|
||||
|
||||
/* Parse our argument array. */
|
||||
xmlrpc_parse_value(env, param_array, "()");
|
||||
if (env->fault_occurred)
|
||||
return NULL;
|
||||
|
||||
/* Assemble our result. */
|
||||
return xmlrpc_build_value(env, "i", (xmlrpc_int32) 0);
|
||||
}
|
||||
|
||||
static char noInParams_help[] =
|
||||
"A method with no parameters. Returns an arbitrary int.";
|
||||
|
||||
|
||||
/*=========================================================================
|
||||
** Echo Tests
|
||||
**=========================================================================
|
||||
** We're lazy--we only implement one actual echo method, but we hook it
|
||||
** up to lots of different names.
|
||||
*/
|
||||
|
||||
static xmlrpc_value *
|
||||
echoValue(xmlrpc_env * const env,
|
||||
xmlrpc_value * const param_array,
|
||||
void * const user_data ATTR_UNUSED) {
|
||||
|
||||
xmlrpc_value *val;
|
||||
|
||||
/* Parse our argument array. */
|
||||
xmlrpc_parse_value(env, param_array, "(V)", &val);
|
||||
if (env->fault_occurred)
|
||||
return NULL;
|
||||
|
||||
/* Create a new reference (because both our parameter list and our
|
||||
** return value will be DECREF'd when we return). */
|
||||
xmlrpc_INCREF(val);
|
||||
|
||||
/* Return our result. */
|
||||
return val;
|
||||
}
|
||||
|
||||
static char echoValue_help[] =
|
||||
"Echo an arbitrary XML-RPC value of any type.";
|
||||
|
||||
static char echoString_help[] =
|
||||
"Echo an arbitrary XML-RPC string.";
|
||||
|
||||
static char echoInteger_help[] =
|
||||
"Echo an arbitrary XML-RPC integer.";
|
||||
|
||||
static char echoBoolean_help[] =
|
||||
"Echo an arbitrary XML-RPC boolean value.";
|
||||
|
||||
static char echoFloat_help[] =
|
||||
"Echo an arbitrary XML-RPC float.";
|
||||
|
||||
static char echoStruct_help[] =
|
||||
"Echo an arbitrary XML-RPC struct.";
|
||||
|
||||
static char echoDate_help[] =
|
||||
"Echo an arbitrary XML-RPC date/time value.";
|
||||
|
||||
static char echoBase64_help[] =
|
||||
"Echo an arbitrary XML-RPC Base64 value.";
|
||||
|
||||
static char echoStringArray_help[] =
|
||||
"Echo an array of arbitrary XML-RPC strings.";
|
||||
|
||||
static char echoIntegerArray_help[] =
|
||||
"Echo an array of arbitrary XML-RPC integers.";
|
||||
|
||||
static char echoFloatArray_help[] =
|
||||
"Echo an array of arbitrary XML-RPC floats.";
|
||||
|
||||
static char echoStructArray_help[] =
|
||||
"Echo an array of arbitrary XML-RPC structs.";
|
||||
|
||||
|
||||
/*=========================================================================
|
||||
** Server Setup
|
||||
**=========================================================================
|
||||
** Set up and run our server.
|
||||
*/
|
||||
|
||||
int
|
||||
main(int const argc ATTR_UNUSED,
|
||||
char ** const argv ATTR_UNUSED) {
|
||||
|
||||
/* Process our request. */
|
||||
xmlrpc_cgi_init(XMLRPC_CGI_NO_FLAGS);
|
||||
|
||||
/* Add a method to identify our toolkit. */
|
||||
xmlrpc_cgi_add_method_w_doc("interopEchoTests.whichToolkit",
|
||||
&whichToolkit, NULL,
|
||||
"S:", whichToolkit_help);
|
||||
|
||||
/* Add a whole bunch of test methods. */
|
||||
xmlrpc_cgi_add_method_w_doc("interopEchoTests.noInParams",
|
||||
&noInParams, NULL,
|
||||
"i:", noInParams_help);
|
||||
xmlrpc_cgi_add_method_w_doc("interopEchoTests.echoValue",
|
||||
&echoValue, NULL,
|
||||
"?", echoValue_help);
|
||||
xmlrpc_cgi_add_method_w_doc("interopEchoTests.echoString",
|
||||
&echoValue, NULL,
|
||||
"s:s", echoString_help);
|
||||
xmlrpc_cgi_add_method_w_doc("interopEchoTests.echoInteger",
|
||||
&echoValue, NULL,
|
||||
"i:i", echoInteger_help);
|
||||
xmlrpc_cgi_add_method_w_doc("interopEchoTests.echoBoolean",
|
||||
&echoValue, NULL,
|
||||
"b:b", echoBoolean_help);
|
||||
xmlrpc_cgi_add_method_w_doc("interopEchoTests.echoFloat",
|
||||
&echoValue, NULL,
|
||||
"d:d", echoFloat_help);
|
||||
xmlrpc_cgi_add_method_w_doc("interopEchoTests.echoStruct",
|
||||
&echoValue, NULL,
|
||||
"S:S", echoStruct_help);
|
||||
xmlrpc_cgi_add_method_w_doc("interopEchoTests.echoDate",
|
||||
&echoValue, NULL,
|
||||
"8:8", echoDate_help);
|
||||
xmlrpc_cgi_add_method_w_doc("interopEchoTests.echoBase64",
|
||||
&echoValue, NULL,
|
||||
"6:6", echoBase64_help);
|
||||
xmlrpc_cgi_add_method_w_doc("interopEchoTests.echoStringArray",
|
||||
&echoValue, NULL,
|
||||
"A:A", echoStringArray_help);
|
||||
xmlrpc_cgi_add_method_w_doc("interopEchoTests.echoIntegerArray",
|
||||
&echoValue, NULL,
|
||||
"A:A", echoIntegerArray_help);
|
||||
xmlrpc_cgi_add_method_w_doc("interopEchoTests.echoFloatArray",
|
||||
&echoValue, NULL,
|
||||
"A:A", echoFloatArray_help);
|
||||
xmlrpc_cgi_add_method_w_doc("interopEchoTests.echoStructArray",
|
||||
&echoValue, NULL,
|
||||
"A:A", echoStructArray_help);
|
||||
|
||||
xmlrpc_cgi_process_call();
|
||||
xmlrpc_cgi_cleanup();
|
||||
|
||||
return 0;
|
||||
}
|
Reference in New Issue
Block a user