Ejemplo n.º 1
0
int xmlrpcsrv_process(char *data, size_t size, char **response, size_t *reslen) {
	
	xmlrpc_env env;
	xmlrpc_env_init(&env);

	xmlrpc_mem_block *output = NULL;
#ifdef HAVE_XMLRPC_REGISTRY_PROCESS_CALL2
	xmlrpc_registry_process_call2(&env, xmlrpcsrv_registry, data, size, NULL, &output);
#else
	output = xmlrpc_registry_process_call(&env, xmlrpcsrv_registry, "localhost", data, size);
#endif
	if (!output)
		return POM_ERR;

	*reslen = xmlrpc_mem_block_size(output);
	*response = malloc(*reslen);
	if (!*response) {
		pomlog(POMLOG_ERR "Not enough memory to allocate %u bytes for response", *reslen);
		xmlrpc_mem_block_free(output);
		xmlrpc_env_clean(&env);
		return POM_ERR;
	}
	memcpy(*response, xmlrpc_mem_block_contents(output), *reslen);

	xmlrpc_mem_block_free(output);
	xmlrpc_env_clean(&env);

	return POM_OK;
}
Ejemplo n.º 2
0
static void
processXmlrpcCall(xmlrpc_env *        const envP,
                  void *              const arg,
                  const char *        const callXml,
                  size_t              const callXmlLen,
                  TSession *          const abyssSessionP,                  
                  xmlrpc_mem_block ** const responseXmlPP) {

    xmlrpc_registry * const registryP = arg;

    xmlrpc_registry_process_call2(envP, registryP,
                                  callXml, callXmlLen, abyssSessionP,
                                  responseXmlPP);

}