<?php
include 'xmlrpc.inc';
include 'xmlrpcs.inc';


//=========================================================================
//  sample.add
//=========================================================================

$add_doc = 'Add two numbers';
$add_sig = array(array('int', 'int', 'int'));

function add ($params) {

    // Parse our parameters.
    $xval = $params->getParam(0);
    $x = $xval->scalarval();
    $yval = $params->getParam(1);
    $y = $yval->scalarval();

    // Build our response.
    return new xmlrpcresp(new xmlrpcval($x + $y, 'int'));
}


//=========================================================================
//  debug.authInfo
//=========================================================================

$authInfo_doc = 'Report any HTTP authentication in use';
$authInfo_sig = array(array('struct'));

function authInfo ($params) {
    global $PHP_AUTH_USER, $PHP_AUTH_PW;

    // Build our response.
    $struct = array('user' => new xmlrpcval($PHP_AUTH_USER, 'string'),
		    'password' => new xmlrpcval($PHP_AUTH_PW, 'string'));
    return new xmlrpcresp(new xmlrpcval($struct, 'struct'));
}


//=========================================================================
//  sample.sumAndDifference
//=========================================================================

$sumAndDifference_doc = 'Add and subtract two numbers';
$sumAndDifference_sig = array(array('struct', 'int', 'int'));

function sumAndDifference ($params) {

    // Parse our parameters.
    $xval = $params->getParam(0);
    $x = $xval->scalarval();
    $yval = $params->getParam(1);
    $y = $yval->scalarval();

    // Build our response.
    $struct = array('sum' => new xmlrpcval($x + $y, 'int'),
		    'difference' => new xmlrpcval($x - $y, 'int'));
    return new xmlrpcresp(new xmlrpcval($struct, 'struct'));
}


//=========================================================================
//  Server Code
//=========================================================================
//  Set up our server and process our request.

new xmlrpc_server(array('sample.add' =>
			array('function' => 'add',
			      'signature' => $add_sig,
			      'docstring' => $add_doc),
			'debug.authInfo' =>
			array('function' => 'authInfo',
			      'signature' => $authInfo_sig,
			      'docstring' => $authInfo_doc),
			'sample.sumAndDifference' =>
			array('function' => 'sumAndDifference',
			      'signature' => $sumAndDifference_sig,
			      'docstring' => $sumAndDifference_doc)));
?>
