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