/[cvs]/joko/Scripts/psh/lib/RPC/XML/introspection.xpl
ViewVC logotype

Annotation of /joko/Scripts/psh/lib/RPC/XML/introspection.xpl

Parent Directory Parent Directory | Revision Log Revision Log


Revision 1.1.1.1 - (hide annotations) (vendor branch)
Fri Jun 14 21:22:12 2002 UTC (22 years, 3 months ago) by cvsjoko
Branch: nfo, MAIN
CVS Tags: r001, HEAD
Changes since 1.1: +0 -0 lines
first import

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>

MailToCvsAdmin">MailToCvsAdmin
ViewVC Help
Powered by ViewVC 1.1.26 RSS 2.0 feed