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> |