File: mod_xmlrpc_server.c

package info (click to toggle)
libapache2-mod-xmlrpc2 2.2.1-1
  • links: PTS
  • area: main
  • in suites: sarge
  • size: 176 kB
  • ctags: 72
  • sloc: ansic: 747; sh: 43; makefile: 14
file content (70 lines) | stat: -rw-r--r-- 1,615 bytes parent folder | download
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
#include "xmlrpc.h"
#include "mod_xmlrpc_server.h"

void *mod_xmlrpc_server_new(void)
{
	xmlrpc_registry *registry;
	xmlrpc_env env;
	int failed = 0;
                                                                                
	xmlrpc_env_init(&env);
	registry = xmlrpc_registry_new(&env);
	if (env.fault_occurred)
		failed = 1;
	xmlrpc_env_clean(&env);

	if (failed)
		return NULL;

	return (void *) registry;
}

int mod_xmlrpc_server_register(void *registry, char *name, void *method,
		void *user_data, char *sig, char *help)
{
	xmlrpc_env env;
	int failed = 0;

	xmlrpc_env_init(&env);
	xmlrpc_registry_add_method_w_doc(&env, (xmlrpc_registry *) registry,
			NULL, name, (xmlrpc_method) method, user_data, sig,
			help);
	if (env.fault_occurred)
		failed = 1;
	xmlrpc_env_clean(&env);

	return !failed;
}

int mod_xmlrpc_server_parse(void *registry, char *data,
		size_t len, struct mod_xmlrpc_result *r)
{
	xmlrpc_mem_block *output;
	xmlrpc_env env;
	int failed = 0;

	xmlrpc_env_init(&env);
	output = xmlrpc_registry_process_call(&env, (xmlrpc_registry *) registry, NULL, data, len);
	if (env.fault_occurred)
		failed = 1;
	else
		r->result = (void *) output;
	xmlrpc_env_clean(&env);

	return !failed;
}

void mod_xmlrpc_result_free(struct mod_xmlrpc_result *r)
{
	xmlrpc_mem_block_free((xmlrpc_mem_block *) r->result);
}

size_t mod_xmlrpc_result_size(struct mod_xmlrpc_result *r)
{
	return xmlrpc_mem_block_size((xmlrpc_mem_block *) r->result);
}

const char *mod_xmlrpc_result_contents(struct mod_xmlrpc_result *r)
{
	return (const char *) xmlrpc_mem_block_contents((xmlrpc_mem_block *) r->result);
}