IXR_Library.php - minor cleanups, partly borrowed from https://github.com/kissifrot/php-ixr. closes https://github.com/opnsense/core/issues/5911

At the moment it doesn't seem to make much sense replacing the IXR library, the latest release tag from https://github.com/kissifrot/php-ixr seems to be from a couple of years ago as well and most changes relate to splitting the file into separate class files.
This commit is contained in:
Ad Schellevis 2022-09-21 17:01:23 +02:00
parent 797764c10a
commit 5d59e86b4b
1 changed files with 68 additions and 60 deletions

View File

@ -44,7 +44,7 @@ class IXR_Value
var $data;
var $type;
function __construct($data, $type = false)
public function __construct($data, $type = false)
{
$this->data = $data;
if (!$type) {
@ -64,7 +64,7 @@ class IXR_Value
}
}
function calculateType()
public function calculateType()
{
if ($this->data === true || $this->data === false) {
return 'boolean';
@ -101,7 +101,7 @@ class IXR_Value
}
}
function getXml()
public function getXml()
{
// Return XML for this value
switch ($this->type) {
@ -148,7 +148,7 @@ class IXR_Value
* @param unknown_type $array
* @return boolean
*/
function isStruct($array)
public function isStruct($array)
{
$expected = 0;
foreach ($array as $key => $value) {
@ -188,12 +188,12 @@ class IXR_Message
// The XML parser
var $_parser;
function __construct($message)
public function __construct($message)
{
$this->message =& $message;
}
function parse()
public function parse()
{
// first remove the XML declaration
// merged from WP #10698 - this method avoids the RAM usage of preg_replace on very large messages
@ -233,7 +233,7 @@ class IXR_Message
return true;
}
function tag_open($parser, $tag, $attr)
public function tag_open($parser, $tag, $attr)
{
$this->_currentTagContents = '';
$this->currentTag = $tag;
@ -255,12 +255,12 @@ class IXR_Message
}
}
function cdata($parser, $cdata)
public function cdata($parser, $cdata)
{
$this->_currentTagContents .= $cdata;
}
function tag_close($parser, $tag)
public function tag_close($parser, $tag)
{
$valueFlag = false;
switch($tag) {
@ -346,7 +346,7 @@ class IXR_Server
var $message;
var $capabilities;
function __construct($callbacks = false, $data = false, $wait = false)
public function __construct($callbacks = false, $data = false, $wait = false)
{
$this->setCapabilities();
if ($callbacks) {
@ -358,11 +358,11 @@ class IXR_Server
}
}
function serve($data = false)
public function serve($data = false)
{
if (!$data) {
if (isset($_SERVER['REQUEST_METHOD']) && $_SERVER['REQUEST_METHOD'] !== 'POST') {
header('Content-Type: text/plain'); // merged from WP #9093
header('Content-Type: text/plain'); // merged from WP #9093
die('XML-RPC server accepts POST requests only.');
}
@ -409,7 +409,7 @@ EOD;
$this->output($xml);
}
function call($methodname, $args)
public function call($methodname, $args)
{
if (!$this->hasMethod($methodname)) {
return new IXR_Error(-32601, 'server error. requested method '.$methodname.' does not exist.');
@ -448,7 +448,7 @@ EOD;
return $result;
}
function error($error, $message = false)
public function error($error, $message = false)
{
// Accepts either an error object or an error code and message
if ($message && !is_object($error)) {
@ -457,7 +457,7 @@ EOD;
$this->output($error->getXml());
}
function output($xml)
public function output($xml)
{
$xml = '<?xml version="1.0"?>'."\n".$xml;
$length = strlen($xml);
@ -469,12 +469,12 @@ EOD;
exit;
}
function hasMethod($method)
public function hasMethod($method)
{
return in_array($method, array_keys($this->callbacks));
}
function setCapabilities()
public function setCapabilities()
{
// Initialises capabilities array
$this->capabilities = array(
@ -493,26 +493,26 @@ EOD;
);
}
function getCapabilities($args)
public function getCapabilities($args)
{
return $this->capabilities;
}
function setCallbacks()
public function setCallbacks()
{
$this->callbacks['system.getCapabilities'] = 'this:getCapabilities';
$this->callbacks['system.listMethods'] = 'this:listMethods';
$this->callbacks['system.multicall'] = 'this:multiCall';
}
function listMethods($args)
public function listMethods($args)
{
// Returns a list of methods - uses array_reverse to ensure user defined
// methods are listed before server defined methods
return array_reverse(array_keys($this->callbacks));
}
function multiCall($methodcalls)
public function multiCall($methodcalls)
{
// See http://www.xmlrpc.com/discuss/msgReader$1208
$return = array();
@ -549,7 +549,7 @@ class IXR_Request
var $args;
var $xml;
function __construct($method, $args)
public function __construct($method, $args)
{
$this->method = $method;
$this->args = $args;
@ -569,12 +569,12 @@ EOD;
$this->xml .= '</params></methodCall>';
}
function getLength()
public function getLength()
{
return strlen($this->xml);
}
function getXml()
public function getXml()
{
return $this->xml;
}
@ -601,7 +601,7 @@ class IXR_Client
// Storage place for an error message
var $error = false;
function __construct($server, $path = false, $port = 80, $timeout = 15)
public function __construct($server, $path = false, $port = 80, $timeout = 15)
{
if (!$path) {
// Assume we have been given a URL instead
@ -623,7 +623,7 @@ class IXR_Client
$this->timeout = $timeout;
}
function query()
public function query()
{
$args = func_get_args();
$method = array_shift($args);
@ -652,9 +652,17 @@ class IXR_Client
}
if ($this->timeout) {
$fp = @fsockopen($this->server, $this->port, $errno, $errstr, $this->timeout);
try {
$fp = @fsockopen($this->server, $this->port, $errno, $errstr, $this->timeout);
} catch (\Exception $e) {
$fp = false;
}
} else {
$fp = @fsockopen($this->server, $this->port, $errno, $errstr);
try {
$fp = @fsockopen($this->server, $this->port, $errno, $errstr);
} catch (\Exception $e) {
$fp = false;
}
}
if (!$fp) {
$this->error = new IXR_Error(-32300, 'transport error - could not open socket');
@ -708,23 +716,23 @@ class IXR_Client
return true;
}
function getResponse()
public function getResponse()
{
// methodResponses can only have one param - return that
return $this->message->params[0];
}
function isError()
public function isError()
{
return (is_object($this->error));
}
function getErrorCode()
public function getErrorCode()
{
return $this->error->code;
}
function getErrorMessage()
public function getErrorMessage()
{
return $this->error->message;
}
@ -742,13 +750,13 @@ class IXR_Error
var $code;
var $message;
function __construct($code, $message)
public function __construct($code, $message)
{
$this->code = $code;
$this->message = htmlspecialchars($message);
}
function getXml()
public function getXml()
{
$xml = <<<EOD
<methodResponse>
@ -788,7 +796,7 @@ class IXR_Date {
var $second;
var $timezone;
function __construct($time)
public function __construct($time)
{
// $time can be a PHP timestamp or an ISO one
if (is_numeric($time)) {
@ -798,7 +806,7 @@ class IXR_Date {
}
}
function parseTimestamp($timestamp)
public function parseTimestamp($timestamp)
{
$this->year = date('Y', $timestamp);
$this->month = date('m', $timestamp);
@ -809,7 +817,7 @@ class IXR_Date {
$this->timezone = '';
}
function parseIso($iso)
public function parseIso($iso)
{
$this->year = substr($iso, 0, 4);
$this->month = substr($iso, 4, 2);
@ -820,17 +828,17 @@ class IXR_Date {
$this->timezone = substr($iso, 17);
}
function getIso()
public function getIso()
{
return $this->year.$this->month.$this->day.'T'.$this->hour.':'.$this->minute.':'.$this->second.$this->timezone;
}
function getXml()
public function getXml()
{
return '<dateTime.iso8601>'.$this->getIso().'</dateTime.iso8601>';
}
function getTimestamp()
public function getTimestamp()
{
return mktime($this->hour, $this->minute, $this->second, $this->month, $this->day, $this->year);
}
@ -846,12 +854,12 @@ class IXR_Base64
{
var $data;
function __construct($data)
public function __construct($data)
{
$this->data = $data;
}
function getXml()
public function getXml()
{
return '<base64>'.base64_encode($this->data).'</base64>';
}
@ -868,7 +876,7 @@ class IXR_IntrospectionServer extends IXR_Server
var $signatures;
var $help;
function __construct()
public function __construct()
{
$this->setCallbacks();
$this->setCapabilities();
@ -902,14 +910,14 @@ class IXR_IntrospectionServer extends IXR_Server
);
}
function addCallback($method, $callback, $args, $help)
public function addCallback($method, $callback, $args, $help)
{
$this->callbacks[$method] = $callback;
$this->signatures[$method] = $args;
$this->help[$method] = $help;
}
function call($methodname, $args)
public function call($methodname, $args)
{
// Make sure it's in an array
if ($args && !is_array($args)) {
@ -974,7 +982,7 @@ class IXR_IntrospectionServer extends IXR_Server
return parent::call($methodname, $argsbackup);
}
function methodSignature($method)
public function methodSignature($method)
{
if (!$this->hasMethod($method)) {
return new IXR_Error(-32601, 'server error. requested method "'.$method.'" not specified.');
@ -1014,7 +1022,7 @@ class IXR_IntrospectionServer extends IXR_Server
return $return;
}
function methodHelp($method)
public function methodHelp($method)
{
return $this->help[$method];
}
@ -1030,13 +1038,13 @@ class IXR_ClientMulticall extends IXR_Client
{
var $calls = array();
function __construct($server, $path = false, $port = 80)
public function __construct($server, $path = false, $port = 80)
{
parent::IXR_Client($server, $path, $port);
$this->useragent = 'The Incutio XML-RPC PHP Library (multicall client)';
}
function addCall()
public function addCall()
{
$args = func_get_args();
$methodName = array_shift($args);
@ -1047,7 +1055,7 @@ class IXR_ClientMulticall extends IXR_Client
$this->calls[] = $struct;
}
function query()
public function query()
{
// Prepare multicall, then call the parent::query() method
return parent::query('system.multicall', $this->calls);
@ -1101,7 +1109,7 @@ class IXR_ClientSSL extends IXR_Client
* @param string $server URL of the Server to connect to
* @since 0.1.0
*/
function __construct($server, $path = false, $port = 443, $timeout = false)
public function __construct($server, $path = false, $port = 443, $timeout = false)
{
parent::IXR_Client($server, $path, $port, $timeout);
$this->useragent = 'The Incutio XML-RPC PHP Library for SSL';
@ -1121,7 +1129,7 @@ class IXR_ClientSSL extends IXR_Client
* @param string $keyFile Filename of the client side certificate's private key
* @param string $keyPhrase Passphrase to unlock the private key
*/
function setCertificate($certificateFile, $keyFile, $keyPhrase='')
public function setCertificate($certificateFile, $keyFile, $keyPhrase='')
{
// Check the files all exist
if (is_file($certificateFile)) {
@ -1139,7 +1147,7 @@ class IXR_ClientSSL extends IXR_Client
$this->_passphrase=(string)$keyPhrase;
}
function setCACertificate($caFile)
public function setCACertificate($caFile)
{
if (is_file($caFile)) {
$this->_caFile = $caFile;
@ -1154,7 +1162,7 @@ class IXR_ClientSSL extends IXR_Client
* @returns void
* @since 0.1.2
*/
function setTimeOut($newTimeOut)
public function setTimeOut($newTimeOut)
{
$this->timeout = (int)$newTimeOut;
}
@ -1164,7 +1172,7 @@ class IXR_ClientSSL extends IXR_Client
* @returns int
* @since 0.1.2
*/
function getTimeOut()
public function getTimeOut()
{
return $this->timeout;
}
@ -1173,7 +1181,7 @@ class IXR_ClientSSL extends IXR_Client
* Set the query to send to the XML-RPC Server
* @since 0.1.0
*/
function query()
public function query()
{
$args = func_get_args();
$method = array_shift($args);
@ -1291,19 +1299,19 @@ class IXR_ClassServer extends IXR_Server
var $_objects;
var $_delim;
function __construct($delim = '.', $wait = false)
public function __construct($delim = '.', $wait = false)
{
$this->IXR_Server(array(), false, $wait);
$this->_delimiter = $delim;
$this->_objects = array();
}
function addMethod($rpcName, $functionName)
public function addMethod($rpcName, $functionName)
{
$this->callbacks[$rpcName] = $functionName;
}
function registerObject($object, $methods, $prefix=null)
public function registerObject($object, $methods, $prefix=null)
{
if (is_null($prefix))
{
@ -1327,7 +1335,7 @@ class IXR_ClassServer extends IXR_Server
}
}
function call($methodname, $args)
public function call($methodname, $args)
{
if (!$this->hasMethod($methodname)) {
return new IXR_Error(-32601, 'server error. requested method '.$methodname.' does not exist.');