summaryrefslogtreecommitdiffstats
path: root/system/libraries/Xmlrpcs.php
diff options
context:
space:
mode:
Diffstat (limited to 'system/libraries/Xmlrpcs.php')
-rw-r--r--system/libraries/Xmlrpcs.php178
1 files changed, 123 insertions, 55 deletions
diff --git a/system/libraries/Xmlrpcs.php b/system/libraries/Xmlrpcs.php
index 6bedfe324..9cd332147 100644
--- a/system/libraries/Xmlrpcs.php
+++ b/system/libraries/Xmlrpcs.php
@@ -59,10 +59,15 @@ class CI_Xmlrpcs extends CI_Xmlrpc
log_message('debug', "XML-RPC Server Class Initialized");
}
- //-------------------------------------
- // Initialize Prefs and Serve
- //-------------------------------------
+ // --------------------------------------------------------------------
+ /**
+ * Initialize Prefs and Serve
+ *
+ * @access public
+ * @param mixed
+ * @return void
+ */
function initialize($config=array())
{
if (isset($config['functions']) && is_array($config['functions']))
@@ -86,11 +91,15 @@ class CI_Xmlrpcs extends CI_Xmlrpc
}
}
- //-------------------------------------
- // Setting of System Methods
- //-------------------------------------
+ // --------------------------------------------------------------------
- function set_system_methods ()
+ /**
+ * Setting of System Methods
+ *
+ * @access public
+ * @return void
+ */
+ function set_system_methods()
{
$this->methods = array(
'system.listMethods' => array(
@@ -112,11 +121,14 @@ class CI_Xmlrpcs extends CI_Xmlrpc
);
}
+ // --------------------------------------------------------------------
- //-------------------------------------
- // Main Server Function
- //-------------------------------------
-
+ /**
+ * Main Server Function
+ *
+ * @access public
+ * @return void
+ */
function serve()
{
$r = $this->parseRequest();
@@ -129,11 +141,19 @@ class CI_Xmlrpcs extends CI_Xmlrpc
exit($payload);
}
- //-------------------------------------
- // Add Method to Class
- //-------------------------------------
+ // --------------------------------------------------------------------
- function add_to_map($methodname,$function,$sig,$doc)
+ /**
+ * Add Method to Class
+ *
+ * @access public
+ * @param string method name
+ * @param string function
+ * @param string signature
+ * @param string docstring
+ * @return void
+ */
+ function add_to_map($methodname, $function, $sig, $doc)
{
$this->methods[$methodname] = array(
'function' => $function,
@@ -142,11 +162,15 @@ class CI_Xmlrpcs extends CI_Xmlrpc
);
}
+ // --------------------------------------------------------------------
- //-------------------------------------
- // Parse Server Request
- //-------------------------------------
-
+ /**
+ * Parse Server Request
+ *
+ * @access public
+ * @param string data
+ * @return object xmlrpc response
+ */
function parseRequest($data='')
{
global $HTTP_RAW_POST_DATA;
@@ -196,7 +220,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
xml_get_current_line_number($parser)));
xml_parser_free($parser);
}
- elseif($parser_object->xh[$parser]['isf'])
+ elseif ($parser_object->xh[$parser]['isf'])
{
return new XML_RPC_Response(0, $this->xmlrpcerr['invalid_return'], $this->xmlrpcstr['invalid_return']);
}
@@ -207,7 +231,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
$m = new XML_RPC_Message($parser_object->xh[$parser]['method']);
$plist='';
- for($i=0; $i < count($parser_object->xh[$parser]['params']); $i++)
+ for ($i=0; $i < count($parser_object->xh[$parser]['params']); $i++)
{
if ($this->debug === TRUE)
{
@@ -239,10 +263,15 @@ class CI_Xmlrpcs extends CI_Xmlrpc
return $r;
}
- //-------------------------------------
- // Executes the Method
- //-------------------------------------
+ // --------------------------------------------------------------------
+ /**
+ * Executes the Method
+ *
+ * @access protected
+ * @param object
+ * @return mixed
+ */
function _execute($m)
{
$methName = $m->method_name;
@@ -297,13 +326,13 @@ class CI_Xmlrpcs extends CI_Xmlrpc
if (isset($this->methods[$methName]['signature']))
{
$sig = $this->methods[$methName]['signature'];
- for($i=0; $i<count($sig); $i++)
+ for ($i=0; $i<count($sig); $i++)
{
$current_sig = $sig[$i];
if (count($current_sig) == count($m->params)+1)
{
- for($n=0; $n < count($m->params); $n++)
+ for ($n=0; $n < count($m->params); $n++)
{
$p = $m->params[$n];
$pt = ($p->kindOf() == 'scalar') ? $p->scalarval() : $p->kindOf();
@@ -352,23 +381,27 @@ class CI_Xmlrpcs extends CI_Xmlrpc
return call_user_func($this->methods[$methName]['function'], $m);
}
}
+
+ // --------------------------------------------------------------------
-
- //-------------------------------------
- // Server Function: List Methods
- //-------------------------------------
-
+ /**
+ * Server Function: List Methods
+ *
+ * @access public
+ * @param mixed
+ * @return object
+ */
function listMethods($m)
{
$v = new XML_RPC_Values();
$output = array();
- foreach($this->methods as $key => $value)
+ foreach ($this->methods as $key => $value)
{
$output[] = new XML_RPC_Values($key, 'string');
}
- foreach($this->system_methods as $key => $value)
+ foreach ($this->system_methods as $key => $value)
{
$output[]= new XML_RPC_Values($key, 'string');
}
@@ -376,11 +409,16 @@ class CI_Xmlrpcs extends CI_Xmlrpc
$v->addArray($output);
return new XML_RPC_Response($v);
}
+
+ // --------------------------------------------------------------------
- //-------------------------------------
- // Server Function: Return Signature for Method
- //-------------------------------------
-
+ /**
+ * Server Function: Return Signature for Method
+ *
+ * @access public
+ * @param mixed
+ * @return object
+ */
function methodSignature($m)
{
$parameters = $m->output_parameters();
@@ -393,11 +431,11 @@ class CI_Xmlrpcs extends CI_Xmlrpc
$sigs = array();
$signature = $this->methods[$method_name]['signature'];
- for($i=0; $i < count($signature); $i++)
+ for ($i=0; $i < count($signature); $i++)
{
$cursig = array();
$inSig = $signature[$i];
- for($j=0; $j<count($inSig); $j++)
+ for ($j=0; $j<count($inSig); $j++)
{
$cursig[]= new XML_RPC_Values($inSig[$j], 'string');
}
@@ -417,10 +455,15 @@ class CI_Xmlrpcs extends CI_Xmlrpc
return $r;
}
- //-------------------------------------
- // Server Function: Doc String for Method
- //-------------------------------------
+ // --------------------------------------------------------------------
+ /**
+ * Server Function: Doc String for Method
+ *
+ * @access public
+ * @param mixed
+ * @return object
+ */
function methodHelp($m)
{
$parameters = $m->output_parameters();
@@ -437,11 +480,16 @@ class CI_Xmlrpcs extends CI_Xmlrpc
return new XML_RPC_Response(0, $this->xmlrpcerr['introspect_unknown'], $this->xmlrpcstr['introspect_unknown']);
}
}
+
+ // --------------------------------------------------------------------
- //-------------------------------------
- // Server Function: Multi-call
- //-------------------------------------
-
+ /**
+ * Server Function: Multi-call
+ *
+ * @access public
+ * @param mixed
+ * @return object
+ */
function multicall($m)
{
// Disabled
@@ -459,7 +507,7 @@ class CI_Xmlrpcs extends CI_Xmlrpc
$m = new XML_RPC_Message($value[0]);
$plist='';
- for($i=0; $i < count($value[1]); $i++)
+ for ($i=0; $i < count($value[1]); $i++)
{
$m->addParam(new XML_RPC_Values($value[1][$i], 'string'));
}
@@ -477,11 +525,15 @@ class CI_Xmlrpcs extends CI_Xmlrpc
return new XML_RPC_Response(new XML_RPC_Values($result, 'array'));
}
+ // --------------------------------------------------------------------
- //-------------------------------------
- // Multi-call Function: Error Handling
- //-------------------------------------
-
+ /**
+ * Multi-call Function: Error Handling
+ *
+ * @access public
+ * @param mixed
+ * @return object
+ */
function multicall_error($err)
{
$str = is_string($err) ? $this->xmlrpcstr["multicall_${err}"] : $err->faultString();
@@ -493,29 +545,45 @@ class CI_Xmlrpcs extends CI_Xmlrpc
return new XML_RPC_Values($struct, 'struct');
}
+ // --------------------------------------------------------------------
- //-------------------------------------
- // Multi-call Function: Processes method
- //-------------------------------------
-
+ /**
+ * Multi-call Function: Processes method
+ *
+ * @access public
+ * @param mixed
+ * @return object
+ */
function do_multicall($call)
{
if ($call->kindOf() != 'struct')
+ {
return $this->multicall_error('notstruct');
+ }
elseif ( ! $methName = $call->me['struct']['methodName'])
+ {
return $this->multicall_error('nomethod');
+ }
list($scalar_type,$scalar_value)=each($methName->me);
$scalar_type = $scalar_type == $this->xmlrpcI4 ? $this->xmlrpcInt : $scalar_type;
if ($methName->kindOf() != 'scalar' OR $scalar_type != 'string')
+ {
return $this->multicall_error('notstring');
+ }
elseif ($scalar_value == 'system.multicall')
+ {
return $this->multicall_error('recursion');
+ }
elseif ( ! $params = $call->me['struct']['params'])
+ {
return $this->multicall_error('noparams');
+ }
elseif ($params->kindOf() != 'array')
+ {
return $this->multicall_error('notarray');
+ }
list($a,$b)=each($params->me);
$numParams = count($b);