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