コード例 #1
0
ファイル: xmlrpcs.php プロジェクト: Tommar/vino2
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');
}
コード例 #2
0
 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');
 }