static void
computeParamArray(xmlrpc_env * const envP,
const char * const format,
va_list args,
xmlrpc_value ** const paramArrayPP) {
/*----------------------------------------------------------------------------
'format' and 'args' specify the parameter list of an RPC, in the form
of an XML-RPC array value, with one element per RPC parameter.
'format' is an XML-RPC value format string, e.g. "(ii{s:i,s:i})".
'args' is the list of substitution values for that string
(6 values in this example, 4 integers and 2 strings).
We return the XML-RPC value 'format' and 'args' represent, but throw an
error if they don't validly specify a single array.
Note that it is a common user error to specify the format string as a
single or string of argument types, instead of as an array of argument
types. E.g. "i" or "ii" instead of "(i)" and "(ii)". So we try
especially hard to give an informative message for that case.
-----------------------------------------------------------------------------*/
xmlrpc_env env;
xmlrpc_value * paramArrayP;
const char * suffix;
/* Stuff left over in format string after parameter array
specification.
*/
xmlrpc_env_init(&env);
xmlrpc_build_value_va(&env, format, args, ¶mArrayP, &suffix);
if (env.fault_occurred)
xmlrpc_env_set_fault_formatted(
envP, env.fault_code, "Invalid RPC arguments. "
"The format argument must indicate a single array (each element "
"of which is one argument to the XML-RPC call), and the "
"following arguments must correspond to that format argument. "
"The failure is: %s",
env.fault_string);
else {
XMLRPC_ASSERT_VALUE_OK(paramArrayP);
if (*suffix != '\0')
xmlrpc_faultf(envP,
"Junk after the parameter array specifier: '%s'. "
"The format string must specify exactly one value: "
"an array of RPC parameters",
suffix);
else {
if (xmlrpc_value_type(paramArrayP) != XMLRPC_TYPE_ARRAY)
xmlrpc_faultf(
envP,
"You must specify the parameter list as an "
"XML-RPC array value, "
"each element of which is a parameter of the RPC. "
"But your format string specifies an XML-RPC %s, not "
"an array",
xmlrpc_type_name(xmlrpc_value_type(paramArrayP)));
}
if (env.fault_occurred)
xmlrpc_DECREF(paramArrayP);
else
*paramArrayPP = paramArrayP;
}
xmlrpc_env_clean(&env);
}
xml-rpc 接口函数
猜你喜欢
转载自blog.csdn.net/qingzhuyuxian/article/details/86571337
今日推荐
周排行