1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62
|
###############################################################################
#
# Sub Name: multicall
#
# Description: Execute multiple method calls in a single request
#
# Arguments: NAME IN/OUT TYPE DESCRIPTION
# $srv in ref Server object instance
# $list in ref List of struct's with the call
# data within.
#
# Globals: None.
#
# Environment: None.
#
# Returns: Success: listref
# Failure: fault object
#
###############################################################################
sub multicall
{
use strict;
my $srv = shift;
my $list = shift;
my ($call, $subname, $params, $result, @results);
my $name = $srv->{method_name};
for $call (@$list)
{
unless (ref($call) eq 'HASH')
{
return RPC::XML::fault->new(200,
"$name: One of the array elements " .
'passed in was not a struct');
}
return RPC::XML::fault->new(310,
"$name: Request was missing required " .
'"methodName" member')
unless ($subname = $call->{methodName});
return RPC::XML::fault->new(310,
"$name: Recursive calling of $name not " .
'allowed')
if ($subname eq $name);
$params = $call->{params} || [];
return RPC::XML::fault->new(200,
"$name: Request's value for \"params\" " .
'was not an array')
unless (ref($params) eq 'ARRAY');
$result = $srv->dispatch([ $subname, @$params ]);
return $result if $result->is_fault;
push @results, $result->value;
}
\@results;
}
|