/usr/share/php/Horde/Rpc/Xmlrpc.php is in php-horde-rpc 2.1.6-1build1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 | <?php
/**
* The Horde_Rpc_xmlrpc class provides an XMLRPC implementation of the
* Horde RPC system.
*
* Copyright 2002-2016 Horde LLC (http://www.horde.org/)
*
* See the enclosed file COPYING for license information (LGPL). If you
* did not receive this file, see http://www.horde.org/licenses/lgpl21.
*
* @author Jan Schneider <jan@horde.org>
* @package Rpc
*/
class Horde_Rpc_Xmlrpc extends Horde_Rpc
{
/**
* Resource handler for the XMLRPC server.
*
* @var resource
*/
var $_server;
/**
* XMLRPC server constructor
*
* @access private
*/
public function __construct($request, $params = array())
{
parent::__construct($request, $params);
$this->_server = xmlrpc_server_create();
foreach ($GLOBALS['registry']->listMethods() as $method) {
xmlrpc_server_register_method($this->_server, str_replace('/', '.', $method), array('Horde_Rpc_Xmlrpc', '_dispatcher'));
}
}
/**
* Sends an RPC request to the server and returns the result.
*
* @param string The raw request string.
*
* @return string The XML encoded response from the server.
*/
function getResponse($request)
{
$response = null;
return xmlrpc_server_call_method($this->_server, $request, $response);
}
/**
* Will be registered as the handler for all available methods
* and will call the appropriate function through the registry.
*
* @access private
*
* @param string $method The name of the method called by the RPC request.
* @param array $params The passed parameters.
* @param mixed $data Unknown.
*
* @return mixed The result of the called registry method.
*/
function _dispatcher($method, $params, $data)
{
global $registry;
$method = str_replace('.', '/', $method);
if (!$registry->hasMethod($method)) {
return 'Method "' . $method . '" is not defined';
}
try {
$result = $registry->call($method, $params);
} catch (Horde_Exception $e) {
$result = array('faultCode' => (int)$e->getCode(),
'faultString' => $e->getMessage());
}
return $result;
}
/**
* Builds an XMLRPC request and sends it to the XMLRPC server.
*
* This statically called method is actually the XMLRPC client.
*
* @param string|Horde_Url $url The path to the XMLRPC server on the
* called host.
* @param string $method The method to call.
* @param Horde_Http_Client $client The transport client
* @param array $params A hash containing any necessary
* parameters for the method call.
*
* @return mixed The returned result from the method.
* @throws Horde_Rpc_Exception
*/
public static function request($url, $method, $client, $params = null)
{
$headers = array(
'User-Agent' => 'Horde RPC client',
'Content-Type' => 'text/xml');
try {
$result = $client->post((string)$url, xmlrpc_encode_request($method, $params), $headers);
} catch (Horde_Http_Exception $e) {
throw new Horde_Rpc_Exception($e);
}
if ($result->code != 200) {
throw new Horde_Rpc_Exception('Request couldn\'t be answered. Returned errorcode: "' . $result->code);
} elseif (strpos($result->getBody(), '<?xml') === false) {
throw new Horde_Rpc_Exception("No valid XML data returned:\n" . $result->getBody());
} else {
$response = @xmlrpc_decode(substr($result->getBody(), strpos($result->getBody(), '<?xml')));
if (is_array($response) && isset($response['faultString'])) {
throw new Horde_Rpc_Exception($response['faultString']);
} elseif (is_array($response) && isset($response[0]) &&
is_array($response[0]) && isset($response[0]['faultString'])) {
throw new Horde_Rpc_Exception($response[0]['faultString']);
}
return $response;
}
}
}
|