From: tomy at envox dot hr
Operating system: Suse 8.2
PHP version: 4CVS-2004-03-01 (stable)
PHP Bug Type: XMLRPC-EPI related
Bug description: system.multiCall does not work
Description:
------------
When building xmlrpc server, system.multiCall method does not work with my
method but works with "built-in" methods such as system.listMethods or
system.methodHelp.
I have tested this on latest CVS snapshots both for PHP4 and PHP5, on Suse
8.2.
In following example I have submitted http request sent to server whose
code is presented in "Reproduce code".
I do not get nay response and HTTP connection to server is dropped.
Calling "built-in" methods such as system.listMethods or system.methodHelp
using system.multiCall works OK.
Calling my method ("contact.select") in a straight fashion (without
system.multiCall) works OK here is request and response with headers:
POST /xmlrpc_server.php HTTP/1.0
Content-Type: text/xml
Content-Length: 317
<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>contact.select</methodName>
<params>
<param>
<value>
<struct>
<member>
<name>SESSIONID</name>
<value>
<string>1234567890</string>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodCall>
Response received:
replyLine: HTTP/1.1 200 OK
HEADER : Date: Mon, 01 Mar 2004 12:09:59 GMT
HEADER : Server: Apache/1.3.27 (Linux/SuSE) mod_python/2.7.8 Python/2.2.2
PHP/4.3.5RC4-dev
HEADER : X-Powered-By: PHP/4.3.5RC4-dev
HEADER : Content-Length: 375
HEADER : Connection: close
HEADER : Content-Type: text/xml
<?xml version="1.0" encoding="iso-8859-1"?>
<methodResponse>
<params>
<param>
<value>
<struct>
<member>
<name>AUTH</name>
<value>
<int>1</int>
</value>
</member>
<member>
<name>SESSIONID</name>
<value>
<string>1234567890</string>
</value>
</member>
</struct>
</value>
</param>
</params>
</methodResponse>
Reproduce code:
---------------
<?php
function select_contact($method_name, $params, $app_data)
{
if (count($params) == 0 || !array_key_exists("SESSIONID", $params[0]))
{
return array("AUTH" => 0);
}
return array("AUTH"=>1, "SESSIONID"=>$params[0]["SESSIONID"]);
}
$xmlrpc_server = xmlrpc_server_create();
xmlrpc_server_register_method($xmlrpc_server, "contact.select",
"select_contact");
$request_xml = $HTTP_RAW_POST_DATA;
$response = xmlrpc_server_call_method($xmlrpc_server, $request_xml,
array());
header("Content-Type: text/xml");
header("Content-Length: " . strlen($response));
print $response;
xmlrpc_server_destroy($xmlrpc_server);
?>
Expected result:
----------------
XMLRPC request sent to server:
POST /xmlrpc_server.php HTTP/1.0
Content-Type: text/xml
Content-Length: 837
<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>system.multiCall</methodName>
<params>
<param>
<value>
<array>
<data>
<value>
<struct>
<member>
<name>methodName</name>
<value>
<string>contact.select</string>
</value>
</member>
<member>
<name>params</name>
<value>
<array>
<data>
<value>
<struct>
<member>
<name>SESSIONID</name>
<value>
<string>1234567890</string>
</value>
</member>
</struct>
</value>
</data>
</array>
</value>
</member>
</struct>
</value>
</data>
</array>
</value>
</param>
</params>
</methodCall>
I would expect response like this:
replyLine: HTTP/1.1 200 OK
HEADER : Date: Mon, 01 Mar 2004 12:09:59 GMT
HEADER : Server: Apache/1.3.27 (Linux/SuSE) mod_python/2.7.8 Python/2.2.2
PHP/4.3.5RC4-dev
HEADER : X-Powered-By: PHP/4.3.5RC4-dev
HEADER : Content-Length: 694
HEADER : Connection: close
HEADER : Content-Type: text/xml
<?xml version="1.0" encoding="iso-8859-1"?>
<methodResponse>
<params>
<param>
<value>
<array>
<data>
<value>
<array>
<data>
<value>
<struct>
<member>
<name>AUTH</name>
<value>
<int>1</int>
</value>
</member>
<member>
<name>SESSIONID</name>
<value>
<string>1234567890</string>
</value>
</member>
</struct>
</value>
</data>
</array>
</value>
</data>
</array>
</value>
</param>
</params>
</methodResponse>
Actual result:
--------------
XMLRPC request sent to server:
POST /xmlrpc_server.php HTTP/1.0
Content-Type: text/xml
Content-Length: 837
<?xml version="1.0" encoding="utf-8"?>
<methodCall>
<methodName>system.multiCall</methodName>
<params>
<param>
<value>
<array>
<data>
<value>
<struct>
<member>
<name>methodName</name>
<value>
<string>contact.select</string>
</value>
</member>
<member>
<name>params</name>
<value>
<array>
<data>
<value>
<struct>
<member>
<name>SESSIONID</name>
<value>
<string>1234567890</string>
</value>
</member>
</struct>
</value>
</data>
</array>
</value>
</member>
</struct>
</value>
</data>
</array>
</value>
</param>
</params>
</methodCall>
After request is sent, HTTP connection is dropped and no response is
received.
--
Edit bug report at http://bugs.php.net/?id=27446&edit=1
--
Try a CVS snapshot (php4): http://bugs.php.net/fix.php?id=27446&r=trysnapshot4
Try a CVS snapshot (php5): http://bugs.php.net/fix.php?id=27446&r=trysnapshot5
Fixed in CVS: http://bugs.php.net/fix.php?id=27446&r=fixedcvs
Fixed in release: http://bugs.php.net/fix.php?id=27446&r=alreadyfixed
Need backtrace: http://bugs.php.net/fix.php?id=27446&r=needtrace
Need Reproduce Script: http://bugs.php.net/fix.php?id=27446&r=needscript
Try newer version: http://bugs.php.net/fix.php?id=27446&r=oldversion
Not developer issue: http://bugs.php.net/fix.php?id=27446&r=support
Expected behavior: http://bugs.php.net/fix.php?id=27446&r=notwrong
Not enough info: http://bugs.php.net/fix.php?id=27446&r=notenoughinfo
Submitted twice: http://bugs.php.net/fix.php?id=27446&r=submittedtwice
register_globals: http://bugs.php.net/fix.php?id=27446&r=globals
PHP 3 support discontinued: http://bugs.php.net/fix.php?id=27446&r=php3
Daylight Savings: http://bugs.php.net/fix.php?id=27446&r=dst
IIS Stability: http://bugs.php.net/fix.php?id=27446&r=isapi
Install GNU Sed: http://bugs.php.net/fix.php?id=27446&r=gnused
Floating point limitations: http://bugs.php.net/fix.php?id=27446&r=float