2 <head><title>xmlrpc</title></head>
\r\r
4 <h1>Introspect demo</h1>
\r\r
5 <h2>Query server for available methods and their description</h2>
\r\r
6 <h3>The code demonstrates usage of multicall and introspection methods</h3>
\r\r
8 include("xmlrpc.inc");
\r\r
10 function display_error($r)
\r\r
12 print "An error occurred: ";
\r\r
13 print "Code: " . $r->faultCode()
\r\r
14 . " Reason: '" .$r->faultString()."'<br/>";
\r\r
17 // 'new style' client constuctor
\r\r
18 $c = new xmlrpc_client("http://phpxmlrpc.sourceforge.net/server.php");
\r\r
19 print "<h3>methods available at http://" . $c->server . $c->path . "</h3>\n";
\r\r
21 $m = new xmlrpcmsg('system.listMethods');
\r\r
22 $r =& $c->send($m);
\r\r
23 if($r->faultCode())
\r\r
25 display_error($r);
\r\r
30 for($i=0; $i<$v->arraysize(); $i++)
\r\r
32 $mname=$v->arraymem($i);
\r\r
33 print "<h4>" . $mname->scalarval() . "</h4>\n";
\r\r
35 // build messages first, add params later
\r\r
36 $m1 = new xmlrpcmsg('system.methodHelp');
\r\r
37 $m2 = new xmlrpcmsg('system.methodSignature');
\r\r
38 $val = new xmlrpcval($mname->scalarval(), "string");
\r\r
39 $m1->addParam($val);
\r\r
40 $m2->addParam($val);
\r\r
42 // send multiple messages in one pass.
\r\r
43 // If server does not support multicall, client will fall back to 2 separate calls
\r\r
44 $ms = array($m1, $m2);
\r\r
45 $rs =& $c->send($ms);
\r\r
47 if($rs[0]->faultCode())
\r\r
49 display_error($rs[0]);
\r\r
53 $val=$rs[0]->value();
\r\r
54 $txt=$val->scalarval();
\r\r
57 print "<h4>Documentation</h4><p>${txt}</p>\n";
\r\r
61 print "<p>No documentation available.</p>\n";
\r\r
65 if($rs[1]->faultCode())
\r\r
67 display_error($rs[1]);
\r\r
71 print "<h4>Signature</h4><p>\n";
\r\r
72 $val = $rs[1]->value();
\r\r
73 if($val->kindOf()=="array")
\r\r
75 for($j=0; $j<$val->arraysize(); $j++)
\r\r
77 $x = $val->arraymem($j);
\r\r
78 $ret = $x->arraymem(0);
\r\r
79 print "<code>" . $ret->scalarval() . " "
\r\r
80 . $mname->scalarval() . "(";
\r\r
81 if($x->arraysize()>1)
\r\r
83 for($k=1; $k<$x->arraysize(); $k++)
\r\r
85 $y = $x->arraymem($k);
\r\r
86 print $y->scalarval();
\r\r
87 if($k < $x->arraysize()-1)
\r\r
93 print ")</code><br/>\n";
\r\r
98 print "Signature unknown\n";
\r\r