File: xmlrpc-server.php

package info (click to toggle)
libsoup 2.2.98-2%2Betch1
  • links: PTS
  • area: main
  • in suites: etch
  • size: 4,180 kB
  • ctags: 3,121
  • sloc: ansic: 14,096; sh: 8,772; xml: 8,638; makefile: 192; php: 58
file content (75 lines) | stat: -rw-r--r-- 1,893 bytes parent folder | download | duplicates (2)
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
71
72
73
74
75
<?php

function sum ($method_name, $params, $app_data)
{
	$sum = 0;
	foreach ($params[0] as $val) {
		$sum = $sum + $val;
	}
	return $sum;
}

function countBools ($method_name, $params, $app_data)
{
	$counts["true"] = $counts["false"] = 0;
	foreach ($params[0] as $val) {
		if (xmlrpc_get_type ($val) != "boolean")
			return "bad value: $val";

		if ($val)
			$counts["true"] = $counts["true"] + 1;
		else
			$counts["false"] = $counts["false"] + 1;
	}
	return $counts;
}

function md5sum ($method_name, $params, $app_data)
{
	$val = md5 ($params[0]->scalar, true);
	xmlrpc_set_type ($val, "base64");
	return $val;
}

function dateChange ($method_name, $params, $app_data)
{
	$date_str = $params[0]["date"]->scalar;
	$date = strptime ($date_str, "%Y%m%dT%H:%M:%S");

	foreach ($params[0] as $name => $val) {
		if ($name == "date")
			continue;
		$date[$name] = $val;
	}

	$ret = sprintf ("%04d%02d%02dT%02d:%02d:%02d",
			$date["tm_year"] + 1900, $date["tm_mon"] + 1,
			$date["tm_mday"], $date["tm_hour"],
			$date["tm_min"], $date["tm_sec"]);
	xmlrpc_set_type ($ret, "datetime");
	return $ret;
}

function echo_ ($method_name, $params, $app_data)
{
	return $params[0];
}

# Work around xmlrpc-epi-php lossage; otherwise the datetime values
# we return will sometimes get a DST adjustment we don't want.
putenv ("TZ=");

$xmlrpc_server = xmlrpc_server_create ();
xmlrpc_server_register_method($xmlrpc_server, "sum", "sum");
xmlrpc_server_register_method($xmlrpc_server, "countBools", "countBools");
xmlrpc_server_register_method($xmlrpc_server, "md5sum", "md5sum");
xmlrpc_server_register_method($xmlrpc_server, "dateChange", "dateChange");
xmlrpc_server_register_method($xmlrpc_server, "echo", "echo_");

$response = xmlrpc_server_call_method ($xmlrpc_server, $HTTP_RAW_POST_DATA,
				       0, array ("output_type" => "xml"));
echo ($response);

xmlrpc_server_destroy ($xmlrpc_server);

?>