/usr/share/perl5/RPC/XML/introspection.xpl is in librpc-xml-perl 0.79-1.
This file is owned by root:root, with mode 0o644.
The actual contents of the file can be viewed below.
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 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 | <?xml version="1.0" encoding="iso-8859-1"?>
<!DOCTYPE methoddef SYSTEM "rpc-method.dtd">
<!--
Generated automatically by make_method 1.15
Any changes made here will be lost.
-->
<methoddef>
<name>system.introspection</name>
<version>1.1</version>
<signature>array</signature>
<signature>array array</signature>
<signature>struct string</signature>
<help>
Return the name, signatures and help text for the registered methods on
the server. With no parameters, returns an ARRAY of STRUCTs. With an ARRAY
parameter, expects all elements to be of type STRING and specify method
names, with the return value being an ARRAY of STRUCT for the named methods
(in order). If the parameter is a single STRING type, the return value is
a STRUCT for the named method.
Each STRUCT will have the following members:
name A STRING containing the method name
version A STRING version stamp. Empty if none was specified.
signature An ARRAY containing the signatures, each an ARRAY of STRING
help A STRING containing the help text for the method
Note that an ARRAY is returned for the signatures even when there is only one
signature.
</help>
<code language="perl">
<![CDATA[
#!/usr/bin/perl
###############################################################################
#
# Sub Name: introspection
#
# Description: Collates the data from listMethods, methodHelp and
# methodSignature into a single array
#
# Arguments: NAME IN/OUT TYPE DESCRIPTION
# $srv in ref Server object instance
# $list in listref If passed, limit methods listed
# or scalar to these.
#
# Globals: None.
#
# Environment: None.
#
# Returns: Success: string or listref
# Failure: fault object
#
###############################################################################
sub introspection
{
use strict;
my $srv = shift;
my $list = shift;
my (@methods, @all_methods, %all_methods, @bad, @results, $scalar, $meth);
my $name = $srv->{method_name};
$scalar = ($list and (! ref($list))) ? 1 : 0;
@all_methods = sort $srv->list_methods;
if ($list)
{
# This is an expensive-enough operation that I don't want to do it
# if I don't have to
@methods = ($scalar) ? ($list) : @$list;
@all_methods{@all_methods} = (1) x scalar(@all_methods);
if (@bad = grep(! $all_methods{$_}, @methods))
{
local $" = ', ';
return RPC::XML::fault->new(302, "$name: Method(s) @bad unknown");
}
}
else
{
@methods = @all_methods;
}
# Convert in-place to their objects
for (@methods) { $_ = $srv->get_method($_); }
# Since that list came from the server object, we know alls calls were OK
for (@methods)
{
push(@results, { name => $_->name,
help => $_->help,
signature => $_->signature,
version => RPC::XML::string->new($_->version) });
}
return $scalar ? $results[0] : \@results;
}
__END__
]]></code>
</methoddef>
|