| 1 |
cvsjoko |
1.1 |
<?xml version="1.0"?> |
| 2 |
|
|
<!DOCTYPE methoddef SYSTEM "rpc-method.dtd"> |
| 3 |
|
|
<!-- |
| 4 |
|
|
Generated automatically by etc\make_method v1.09, Fri May 31 04:39:51 2002 |
| 5 |
|
|
|
| 6 |
|
|
Any changes made here will be lost. |
| 7 |
|
|
--> |
| 8 |
|
|
<methoddef> |
| 9 |
|
|
<name>system.introspection</name> |
| 10 |
|
|
<version>1.1</version> |
| 11 |
|
|
<signature>array</signature> |
| 12 |
|
|
<signature>array array</signature> |
| 13 |
|
|
<signature>struct string</signature> |
| 14 |
|
|
<help> |
| 15 |
|
|
Return the name, signatures and help text for the registered methods on |
| 16 |
|
|
the server. With no parameters, returns an ARRAY of STRUCTs. With an ARRAY |
| 17 |
|
|
parameter, expects all elements to be of type STRING and specify method |
| 18 |
|
|
names, with the return value being an ARRAY of STRUCT for the named methods |
| 19 |
|
|
(in order). If the parameter is a single STRING type, the return value is |
| 20 |
|
|
a STRUCT for the named method. |
| 21 |
|
|
|
| 22 |
|
|
Each STRUCT will have the following members: |
| 23 |
|
|
|
| 24 |
|
|
name A STRING containing the method name |
| 25 |
|
|
version A STRING version stamp. Empty if none was specified. |
| 26 |
|
|
signature An ARRAY containing the signatures, each an ARRAY of STRING |
| 27 |
|
|
help A STRING containing the help text for the method |
| 28 |
|
|
|
| 29 |
|
|
Note that an ARRAY is returned for the signatures even when there is only one |
| 30 |
|
|
signature. |
| 31 |
|
|
</help> |
| 32 |
|
|
<code language="perl"> |
| 33 |
|
|
<![CDATA[ |
| 34 |
|
|
#!perl |
| 35 |
|
|
############################################################################### |
| 36 |
|
|
# |
| 37 |
|
|
# Sub Name: introspection |
| 38 |
|
|
# |
| 39 |
|
|
# Description: Collates the data from listMethods, methodHelp and |
| 40 |
|
|
# methodSignature into a single array |
| 41 |
|
|
# |
| 42 |
|
|
# Arguments: NAME IN/OUT TYPE DESCRIPTION |
| 43 |
|
|
# $srv in ref Server object instance |
| 44 |
|
|
# $list in listref If passed, limit methods listed |
| 45 |
|
|
# or scalar to these. |
| 46 |
|
|
# |
| 47 |
|
|
# Globals: None. |
| 48 |
|
|
# |
| 49 |
|
|
# Environment: None. |
| 50 |
|
|
# |
| 51 |
|
|
# Returns: Success: string or listref |
| 52 |
|
|
# Failure: fault object |
| 53 |
|
|
# |
| 54 |
|
|
############################################################################### |
| 55 |
|
|
sub introspection |
| 56 |
|
|
{ |
| 57 |
|
|
use strict; |
| 58 |
|
|
|
| 59 |
|
|
my $srv = shift; |
| 60 |
|
|
my $list = shift; |
| 61 |
|
|
|
| 62 |
|
|
my (@methods, @all_methods, %all_methods, @bad, @results, $scalar, $meth); |
| 63 |
|
|
|
| 64 |
|
|
my $name = $srv->{method_name}; |
| 65 |
|
|
$scalar = ($list and (! ref($list))) ? 1 : 0; |
| 66 |
|
|
@all_methods = sort $srv->list_methods; |
| 67 |
|
|
|
| 68 |
|
|
if ($list) |
| 69 |
|
|
{ |
| 70 |
|
|
# This is an expensive-enough operation that I don't want to do it |
| 71 |
|
|
# if I don't have to |
| 72 |
|
|
@methods = ($scalar) ? ($list) : @$list; |
| 73 |
|
|
@all_methods{@all_methods} = (1) x scalar(@all_methods); |
| 74 |
|
|
if (@bad = grep(! $all_methods{$_}, @methods)) |
| 75 |
|
|
{ |
| 76 |
|
|
local $" = ', '; |
| 77 |
|
|
return RPC::XML::fault->new(302, "$name: Method(s) @bad unknown"); |
| 78 |
|
|
} |
| 79 |
|
|
} |
| 80 |
|
|
else |
| 81 |
|
|
{ |
| 82 |
|
|
@methods = @all_methods; |
| 83 |
|
|
} |
| 84 |
|
|
|
| 85 |
|
|
# Convert in-place to their objects |
| 86 |
|
|
for (@methods) { $_ = $srv->get_method($_); } |
| 87 |
|
|
# Since that list came from the server object, we know alls calls were OK |
| 88 |
|
|
|
| 89 |
|
|
for (@methods) |
| 90 |
|
|
{ |
| 91 |
|
|
push(@results, { name => $_->name, |
| 92 |
|
|
help => $_->help, |
| 93 |
|
|
signature => $_->signature, |
| 94 |
|
|
version => RPC::XML::string->new($_->version) }); |
| 95 |
|
|
} |
| 96 |
|
|
|
| 97 |
|
|
return $scalar ? $results[0] : \@results; |
| 98 |
|
|
} |
| 99 |
|
|
|
| 100 |
|
|
__END__ |
| 101 |
|
|
]]></code> |
| 102 |
|
|
</methoddef> |