]> CyberLeo.Net >> Repos - SourceForge/phpwiki.git/blob - tests/xmlrpc/interop-server.php
include [all] Include and file path should be devided with single space. File path...
[SourceForge/phpwiki.git] / tests / xmlrpc / interop-server.php
1 <?php // $Id$
2
3 include 'xmlrpc_utils.php';
4
5 /* echos whatever it receives */
6 function method_echo($method, $params) {
7   // we use array_pop instead of $params[0] because it works with either
8   // soap (named params) or xmlrpc (ordered params)
9     $foo = array_pop($params);
10     //var_dump($foo);
11   return $foo;
12 }
13
14 /* takes no params, returns none. */
15 function method_echo_void($method, $params) {
16 }
17
18 /* takes no params, returns a random int */
19 function method_no_in_params($method, $params) {
20     return (int)5;
21 }
22
23 /* describes toolkit */
24 function method_toolkit($method, $params) {
25    // outer array = params, inner = struct.
26    return array(toolkitDocsUrl => "http://xmlrpc-epi.sourceforge.net/",
27                 toolkitName => "xmlrpc-epi-php",
28                 toolkitVersion => "0.26",   // (need to implement xmlrpc_get_version()
29                 toolkitOperatingSystem => $GLOBALS[MACHTYPE]
30                 );
31 }
32
33 /*
34 interopEchoTests.echoString (inputString) -- Sends a random string to the server, and checks that the
35 response is a string whose value is the same as the string that was sent.
36
37 interopEchoTests.echoInteger (inputInteger) -- Sends a random integer to the server, and checks that
38 the response is an integer whose value is the same as the integer that was sent.
39
40 interopEchoTests.echoFloat (inputFloat) -- Sends a random floating point number to the server, and
41 checks that the response is a float whose value is the same as the number that was sent.
42
43 interopEchoTests.echoStruct (inputStruct) -- Sends a struct to the server, which contains three
44 elements: varString, varInt, and varFloat, a random string, a random integer, and a random float,
45 respectively, and checks that the response is a struct containing the same values that were sent.
46
47 interopEchoTests.echoStringArray (inputStringArray) -- Sends an array of random strings to the server,
48 and checks that the response is an array of strings, whose values are the same as the values that were
49 sent.
50
51 interopEchoTests.echoIntegerArray (inputIntegerArray) -- Sends an array of random integers to the
52 server, and checks that the response is an array of integers, whose values are the same as the values that
53 were sent.
54
55 interopEchoTests.echoFloatArray (inputFloatArray) -- Sends an array of random floating point numbers
56 to the server, and checks that the response is an array of floats, whose values are the same as the values
57 that were sent.
58
59 interopEchoTests.echoStructArray (inputStructArray) -- Sends an array of structs to the server, and
60 checks that the response is an array of structs, which contain the same values that were sent. Each struct
61 contains three elements: varString, varInt, and varFloat, a string, an integer, and a floating point number,
62 respectively.
63 */
64
65 $request_xml = $HTTP_RAW_POST_DATA;
66 if(!$request_xml) {
67   $request_xml = $HTTP_POST_VARS[xml];
68 }
69
70 if(!$request_xml) {
71   echo "<h1>No XML input found!</h1>";
72 }
73 else {
74     // create server
75     $xmlrpc_server = xmlrpc_server_create();
76
77     if($xmlrpc_server) {
78         // register xmlrpc methods
79         xmlrpc_server_register_method($xmlrpc_server, "interopEchoTests.echoBoolean", "method_echo");
80         xmlrpc_server_register_method($xmlrpc_server, "interopEchoTests.echoString", "method_echo");
81         xmlrpc_server_register_method($xmlrpc_server, "interopEchoTests.echoInteger", "method_echo");
82         xmlrpc_server_register_method($xmlrpc_server, "interopEchoTests.echoFloat", "method_echo");
83         xmlrpc_server_register_method($xmlrpc_server, "interopEchoTests.echoBase64", "method_echo");
84         xmlrpc_server_register_method($xmlrpc_server, "interopEchoTests.echoDate", "method_echo");
85         xmlrpc_server_register_method($xmlrpc_server, "interopEchoTests.echoValue", "method_echo");
86         xmlrpc_server_register_method($xmlrpc_server, "interopEchoTests.echoStruct", "method_echo");
87         xmlrpc_server_register_method($xmlrpc_server, "interopEchoTests.echoStringArray", "method_echo");
88         xmlrpc_server_register_method($xmlrpc_server, "interopEchoTests.echoIntegerArray", "method_echo");
89         xmlrpc_server_register_method($xmlrpc_server, "interopEchoTests.echoFloatArray", "method_echo");
90         xmlrpc_server_register_method($xmlrpc_server, "interopEchoTests.echoStructArray", "method_echo");
91         xmlrpc_server_register_method($xmlrpc_server, "interopEchoTests.echoVoid", "method_echo_void");
92         xmlrpc_server_register_method($xmlrpc_server, "interopEchoTests.whichToolkit", "method_toolkit");
93         xmlrpc_server_register_method($xmlrpc_server, "interopEchoTests.noInParams", "method_no_in_params");
94
95           // soap methods  (interop test naming conventions are slightly different for soap)
96         xmlrpc_server_register_method($xmlrpc_server, "echoBoolean", "method_echo");
97         xmlrpc_server_register_method($xmlrpc_server, "echoString", "method_echo");
98         xmlrpc_server_register_method($xmlrpc_server, "echoInteger", "method_echo");
99         xmlrpc_server_register_method($xmlrpc_server, "echoFloat", "method_echo");
100         xmlrpc_server_register_method($xmlrpc_server, "echoBase64", "method_echo");
101         xmlrpc_server_register_method($xmlrpc_server, "echoDate", "method_echo");
102         xmlrpc_server_register_method($xmlrpc_server, "echoValue", "method_echo");
103         xmlrpc_server_register_method($xmlrpc_server, "echoStruct", "method_echo");
104         xmlrpc_server_register_method($xmlrpc_server, "echoStringArray", "method_echo");
105         xmlrpc_server_register_method($xmlrpc_server, "echoIntegerArray", "method_echo");
106         xmlrpc_server_register_method($xmlrpc_server, "echoFloatArray", "method_echo");
107         xmlrpc_server_register_method($xmlrpc_server, "echoStructArray", "method_echo");
108         xmlrpc_server_register_method($xmlrpc_server, "echoVoid", "method_echo_void");
109         xmlrpc_server_register_method($xmlrpc_server, "whichToolkit", "method_toolkit");
110         xmlrpc_server_register_method($xmlrpc_server, "noInParams", "method_no_in_params");
111
112         xmlrpc_server_register_introspection_callback($xmlrpc_server, "introspection_cb");
113
114           //$val =  xmlrpc_decode($request_xml, &$method);
115           //echo "xml: $request_xml\n";
116           //echo "method: $method\nvar: ";
117           //print_r($val);
118         // parse xml and call method
119         echo xmlrpc_server_call_method($xmlrpc_server, $request_xml, $response, array(output_type => "xml", version => "auto"));
120
121         // free server resources
122         $success = xmlrpc_server_destroy($xmlrpc_server);
123     }
124 }
125
126 /********************
127 * API Documentation *
128 ********************/
129
130 function introspection_cb($method) {
131    /* if our xml is not parsed correctly, a php warning will be displayed.
132     * however, very little structural validation is done, so we must be careful.
133     * make sure to test this xml for syntax errors by calling system.describeMethods()
134     *  after making any changes.
135     */
136
137    $methods = array("boolean", "string", "integer", "float", "base64", "date", "value", "struct");
138    $type_map = array(integer => "int", float => "double", date => "datetime", value => "any");
139
140    foreach($methods as $method) {
141       $title = ucfirst($method);
142       $type = $type_map[$method] ? $type_map[$method] : $method;
143
144    $xml_methods .= <<< END
145 <methodDescription name='interopEchoTests.echo$title'>
146
147  <author>Dan Libby &lt;dan@libby.com&gt;</author>
148  <purpose>echos $type parameter back to caller</purpose>
149  <version>1.0</version>
150
151  <signatures>
152
153   <signature>
154    <params>
155     <value type='$type' desc='$type value of caller&apos;s choosing'/>
156    </params>
157    <returns>
158     <value type='$type' desc='same value that was passed in'/>
159    </returns>
160   </signature>
161
162  </signatures>
163
164 </methodDescription>
165 END;
166
167    }
168
169    $methods = array("string", "integer", "float", "struct");
170    foreach($methods as $method) {
171       $title = ucfirst($method) . "Array";
172       $type = $type_map[$method] ? $type_map[$method] : $method;
173
174    $xml_methods .= <<< END
175 <methodDescription name='interopEchoTests.echo$title'>
176
177  <author>Dan Libby &lt;dan@libby.com&gt;</author>
178  <purpose>echos array of $type parameter back to caller</purpose>
179  <version>1.0</version>
180
181  <signatures>
182
183   <signature>
184    <params>
185     <value type='array' desc='an array of $type values'>
186      <value type='$type' desc='$type value(s) of caller&apos;s choosing'/>
187     </value>
188    </params>
189    <returns>
190     <value type='array' desc='same array of $type values that was passed in'>
191      <value type='$type' desc='same value(s) that were passed in'/>
192     </value>
193    </returns>
194   </signature>
195
196  </signatures>
197
198 </methodDescription>
199 END;
200
201    }
202
203    return <<< END
204 <?xml version='1.0'?>
205
206 <introspection version='1.0'>
207
208  <methodList>
209
210  $xml_methods
211
212 <methodDescription name='interopEchoTests.whichToolkit'>
213
214  <author>Dan Libby &lt;dan@libby.com&gt;</author>
215  <purpose>returns information about the xml-rpc library in use</purpose>
216  <version>1.0</version>
217
218  <signatures>
219
220   <signature>
221    <returns>
222     <value type='struct' desc='toolkit info'>
223      <value type='string' name='toolkitDocsUrl' desc='url of library documentation'/>
224      <value type='string' name='toolkitName' desc='name of library'/>
225      <value type='string' name='toolkitVersion' desc='version # of library'/>
226      <value type='string' name='toolkitOperatingSystem' desc='operating system of host machine'/>
227     </value>
228    </returns>
229   </signature>
230
231  </signatures>
232
233 </methodDescription>
234
235 <methodDescription name='interopEchoTests.noInParams'>
236
237  <author>Dan Libby &lt;dan@libby.com&gt;</author>
238  <purpose>tests calling methods with no parameters</purpose>
239  <version>1.0</version>
240
241  <signatures>
242
243   <signature>
244    <returns>
245     <value type='int' desc='a random integer'/>
246    </returns>
247   </signature>
248
249  </signatures>
250
251 </methodDescription>
252
253  </methodList>
254 </introspection>
255 END;
256
257 }
258
259 ?>