IXR_IntrospectionServer::call( $methodname,  $args )

In this article

Source

function call($methodname, $args)
{
    // Make sure it's in an array
    if ($args && !is_array($args)) {
        $args = array($args);
    }

    // Over-rides default call method, adds signature check
    if (!$this->hasMethod($methodname)) {
        return new IXR_Error(-32601, 'server error. requested method "'.$this->message->methodName.'" not specified.');
    }
    $method = $this->callbacks[$methodname];
    $signature = $this->signatures[$methodname];
    $returnType = array_shift($signature);

    // Check the number of arguments
    if (count($args) != count($signature)) {
        return new IXR_Error(-32602, 'server error. wrong number of method parameters');
    }

    // Check the argument types
    $ok = true;
    $argsbackup = $args;
    for ($i = 0, $j = count($args); $i < $j; $i++) {
        $arg = array_shift($args);
        $type = array_shift($signature);
        switch ($type) {
            case 'int':
            case 'i4':
                if (is_array($arg) || !is_int($arg)) {
                    $ok = false;
                }
                break;
            case 'base64':
            case 'string':
                if (!is_string($arg)) {
                    $ok = false;
                }
                break;
            case 'boolean':
                if ($arg !== false && $arg !== true) {
                    $ok = false;
                }
                break;
            case 'float':
            case 'double':
                if (!is_float($arg)) {
                    $ok = false;
                }
                break;
            case 'date':
            case 'dateTime.iso8601':
                if (!is_a($arg, 'IXR_Date')) {
                    $ok = false;
                }
                break;
        }
        if (!$ok) {
            return new IXR_Error(-32602, 'server error. invalid method parameters');
        }
    }
    // It passed the test - run the "real" method call
    return parent::call($methodname, $argsbackup);
}

User Contributed Notes

You must log in before being able to contribute a note or feedback.