xml-rpc 接口函数

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, &paramArrayP, &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);
}

猜你喜欢

转载自blog.csdn.net/qingzhuyuxian/article/details/86571337