function _xmlrpcs_multicall_do_call_phpvals($server, $call) { if (!is_array($call)) { return _xmlrpcs_multicall_error('notstruct'); } if (!array_key_exists('methodName', $call)) { return _xmlrpcs_multicall_error('nomethod'); } if (!is_string($call['methodName'])) { return _xmlrpcs_multicall_error('notstring'); } if ($call['methodName'] == 'system.multicall') { return _xmlrpcs_multicall_error('recursion'); } if (!array_key_exists('params', $call)) { return _xmlrpcs_multicall_error('noparams'); } if (!is_array($call['params'])) { return _xmlrpcs_multicall_error('notarray'); } // this is a real dirty and simplistic hack, since we might have received a // base64 or datetime values, but they will be listed as strings here... $numParams = count($call['params']); $pt = array(); foreach ($call['params'] as $val) { $pt[] = php_2_xmlrpc_type(gettype($val)); } $result = $server->execute($call['methodName'], $call['params'], $pt); if ($result->faultCode() != 0) { return _xmlrpcs_multicall_error($result); // Method returned fault. } return new xmlrpcval(array($result->value()), 'array'); }
function _xmlrpcs_multicall_do_call($server, $call) { if ($call->kindOf() != 'struct') { return _xmlrpcs_multicall_error('notstruct'); } $methName = $call->structmem('methodName'); if (!$methName) { return _xmlrpcs_multicall_error('nomethod'); } if ($methName->kindOf() != 'scalar' || $methName->scalartyp() != 'string') { return _xmlrpcs_multicall_error('notstring'); } if ($methName->scalarval() == 'system.multicall') { return _xmlrpcs_multicall_error('recursion'); } $params = $call->structmem('params'); if (!$params) { return _xmlrpcs_multicall_error('noparams'); } if ($params->kindOf() != 'array') { return _xmlrpcs_multicall_error('notarray'); } $numParams = $params->arraysize(); $msg = new xmlrpcmsg($methName->scalarval()); for ($i = 0; $i < $numParams; $i++) { $msg->addParam($params->arraymem($i)); } $result = $server->execute($msg); if ($result->faultCode() != 0) { return _xmlrpcs_multicall_error($result); // Method returned fault. } return new xmlrpcval(array($result->value()), 'array'); }