Convert docs files to unix newlines
authorgggeek <giunta.gaetano@gmail.com>
Mon, 8 Dec 2014 00:33:50 +0000 (00:33 +0000)
committergggeek <giunta.gaetano@gmail.com>
Mon, 8 Dec 2014 00:33:50 +0000 (00:33 +0000)
ChangeLog
INSTALL
NEWS
README

index cd95a9f..d91166c 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
-NB: All recent commits are available online.\r
-This file will not be updated further.\r
-See https://github.com/gggeek/phpxmlrpc/commits/master\r
-\r
-\r
-2014-02-3 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * bumped up requirements to php 5.1.0\r
-\r
-2014-01-10 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * xmlrpc.inc: when using curl and keepalive, reset curl handle if we did not get back an http 200 response (eg a 302)\r
-\r
-       * testsuite.php, parse_args.php: update testsuite\r
-\r
-       * debugger/controller.php: change default path to javascript debugger\r
-\r
-2010-05-23 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * xmlrpc.inc: omit port on http 'Host' header if it is 80;\r
-       add a namespace declaration in response if ex:nil is in use\r
-\r
-2010-04-12 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * testsuite.php, parse_args.php: testsuite allows interrogating https servers ignoring their certs\r
-\r
-       * xmlrpc.inc: method setAcceptedCompression was failing to disable reception\r
-       of compressed responses if the client supported them (triggering a bug with\r
-       https and php < 5.3 on windows); remove a php warning that could be\r
-       generated when using debug=2 in a client connecting to an https\r
-       server\r
-\r
-2010-04-11 - G. Giunta (giunta.gaetano@gmail.com) thanks amoe\r
-\r
-       * fixed: bad variables in "make install" make target\r
-\r
-2009-11-11 - G. Giunta (giunta.gaetano@gmail.com) thanks Ikiro Watanabe\r
-\r
-       * added INSTALL file\r
-\r
-2009-09-05 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * xmlrpcs.inc, xmlrpcs.inc: remove code that was left for compatibility\r
-       with php 4; use __METHOD__ constant for error messages instead of hardcoded\r
-       values\r
-\r
-       * xmlrpcs.inc: catch exceptions thrown during execution of invoked methods;\r
-       check for $_SERVER having been disabled via php.ini and log an error if so\r
-\r
-       * server.php, testsuite.php: add a new test and server method for exception\r
-       catching in the server\r
-\r
-       * xmlrpc.inc: added new method SetUserAgent to client to allow having different\r
-       user-agent http headers\r
-\r
-       * tagged and released as 3.0.0 beta\r
-\r
-2009-08-05 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * xmlrpc_wrappers.inc: improve compatibility with php 5.0 when registering\r
-       class/object methods\r
-\r
-2009-08-02 - G. Giunta (giunta.gaetano@gmail.com) thanks Laurens\r
-\r
-       * xmlrpcs.inc: add a new member var in server class to allow fine-tuning\r
-       of the encoding of returned values when the server is in 'phpvals' mode;\r
-       allow servers in 'xmlrpcvals' mode to also register plain php functions by\r
-       defining them in the dispatch map with an added option:\r
-       'parameters_type' => 'phpvals' (feature request #2806628)\r
-\r
-       * xmlrpc.inc: added new method xmrlpc_client::SetCurlOptions($array) to\r
-       allow extra flexibility in tweaking http config, such as explicitly\r
-       binding to an ip address (feature request #2787468); fix bad encoding if\r
-       same object is encoded twice using php_xmlrpc_encode; removed some by-ref\r
-       assignments and declarations\r
-\r
-2009-07-31 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * xmlrpc.inc: add support for dateTime objects in both in php_xmlrpc_encode\r
-       and as parameter for constructor of xmlrpcvals; add support for timestamps\r
-       as parameter for constructor of xmlrpcvals; add option 'dates_as_objects' to\r
-       php_xmlrpc_decode to return dateTime objects for xmlrpc datetimes\r
-\r
-       * benchmark.php, xmlrpc_wrappers.inc: remove usage of split(), deprecated in\r
-       php 5.3\r
-\r
-       * benchmark.php: fixed url of server page used for testing; improved\r
-       verification of correspondence of test results; added more variants for\r
-       http options comparison\r
-\r
-       * verify_compat.php: check for php version 5 for client side too\r
-\r
-       * makefile: remove from build the compat directory\r
-\r
-2009-07-26 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * server.php: remove usage of ereg*(), deprecated in php 5.3\r
-\r
-2009-07-16 - G. Giunta (giunta.gaetano@gmail.com) thanks Jean-Jacques Sarton\r
-\r
-       * xmlrpc.inc: add support for the <ex:nil/> from the apache library, both\r
-       in input and output (feature request #...)\r
-\r
-       * xmlrpc.inc, testsuite.php: remove usage of split(), deprecated in php 5.3\r
-\r
-       * testsuite.php: flush better results with output_buffering on\r
-\r
-       * server: php: avoid one warning about static function calls\r
-\r
-2009-07-02 - G. Giunta (giunta.gaetano@gmail.com) thanks Heiko Stuebner\r
-\r
-       * xmlrpc.inc: fix: when checking the parameters against the signatures xmlrpc\r
-       checks for "array" but PHP returns "Array" resulting in a not matches signature\r
-\r
-2009-05-07 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * replace all usage of '= & new' with '= new', as this is deprecated in php 5\r
-       and has been shown to cause problems too\r
-\r
-2009-05-06 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * create php4 branch, rename trunk to 3.0.0beta - it will be the php5-only version\r
-\r
-       * xmlrpc.inc: removed test for php version and inclusion of compat patches for really\r
-       really old versions of php 4\r
-\r
-2009-03-16 - G. Giunta (giunta.gaetano@gmail.com) thanks Tommaso Trani\r
-\r
-       * move from CVS to SVN on sf.net; file layout now is the same as in packaged lib\r
-\r
-       * xmlrpc.inc: fix php warning when receiving 'false' in a bool value\r
-\r
-       * Makefile, doc/Makefile: alter to follow new file layout\r
-\r
-       * tagged and released as 2.2.2\r
-\r
-2009-02-03 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * debugger/action.php: improve code robustness when parsing system.listmethods\r
-       and system.describemethods call\r
-\r
-       * xmlrpc.inc: format floating point values using the correct decimal separator\r
-       even when php locale is set to one that uses comma (bug #2517579);\r
-       use feof() to test if socket connections are to be closed instead of the\r
-       number of bytes read (bug #2556209)\r
-\r
-2008-10-29 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * xmlrpcs.inc: allow add_to_map server method to add docs for single params, too\r
-\r
-2008-09-20 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * xmlrpc_wrappers.inc: added the possibility to wrap for exposure as xmlrpc\r
-       methods plain php class methods, object methods and even whole classes\r
-\r
-       * testsuite.php, server.php: added test cases for the new code\r
-\r
-2008-09-07 - G. Giunta (giunta.gaetano@gmail.com) thanks Bruno Zanetti Melotti\r
-\r
-       * xmlrpc.inc: be more tolerant in detection of charset in http headers (fix for bug #2058158)\r
-\r
-2008-04-05 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * xmlrpc.inc: fix encoding of UTF8 chars outside of the BMP\r
-\r
-       * xmlrpcs.inc: fix detection of zlib.output_compression (thanks xbert)\r
-\r
-2008-03-06 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * tagged and released as 2.2.1\r
-\r
-       * Makefile: improve usage on windows xp despite cmd's broken mkdir\r
-\r
-2007-10-26 - G. Giunta (giunta.gaetano@gmail.com) thanks sajo_raftman\r
-\r
-       * xmlrpc.inc: remove one warning in xmlrpc_client creator\r
-\r
-2007-10-26 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * xmlrpc.inc: improve support for windows cp1252 character set (still\r
-       commented in the code)\r
-\r
-2007-09-05 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * xmlrpc.inc, xmlrps.inc: do not try to set invalid charsets as output for\r
-       xml parser, even if user set them up for internal_encoding (helps encoding\r
-       to exotic charsets, while decoding to UTF8)\r
-\r
-2007-09-05 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * xmlrpc.inc: fix parsing of '1e+1' as valid float\r
-\r
-2007-09-01 - G. Giunta (giunta.gaetano@gmail.com), thanks Frederic Lecointre\r
-\r
-       * xmlrpcs.inc: allow errorlevel 3 to work when prev. error handler was a static method\r
-\r
-       * testsuite.php: fix test on setCookie()\r
-\r
-2007-08-31 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * xmlrpc.inc: minor fix in cookie parsing\r
-\r
-2007-07-31 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * xmlrpc.inc: Fix usage of client::setcookie() for multiple cookies in non-ssl mode\r
-\r
-2007-07-26 - G. Giunta (giunta.gaetano@gmail.com) thanks Mark Olive\r
-\r
-       * xmlrpc.inc: Fix for bug # 1756274 (usage of cookies in ssl mode)\r
-\r
-2007-04-28 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * xmlrpc.inc: give more detailed curl information when DEBUG = 2; fix handling\r
-       of case where curl w. keepalive is used and one connection of many fails\r
-\r
-       * testsuite improvements: add one testcase; give feedbcak while tests are\r
-       running\r
-\r
-2007-04-01 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * doc/makefile, doc/custom.fo.xsl: improve pdf rendering of php source code\r
-\r
-       * makefile: recover version number from source instead of having it hardcoded\r
-\r
-2007-03-10 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * doc/makefile, doc/convert.php, doc/*.xsl: created customizations xslt to\r
-       produce a documentation more in line with the php manual, esp. with regards\r
-       to functions synopsis; added jellyfish book cover as local resource and a\r
-       screenshot of the debugger too; various updates to the manual source; added\r
-       a php script to highlight examples inside html docs\r
-\r
-2007-03-09 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * debugger/action.php: css tweak for IE\r
-\r
-       * added phpunit license file in the phpunit directory\r
-\r
-       * added link to license (on sf.net site) to many files\r
-\r
-2007-03-04 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * Makefile, doc/makefile: assorted improvements\r
-\r
-2007-03-03 - G. Giunta (giunta.gaetano@gmail.com)\r
-\r
-       * xmlrpc.inc: micro-optimization in declaration of global vars xmlrpcerr, xmlrpcstr\r
-\r
-2007-02-25 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * removed a couple of warnings emitted in testsuite.php\r
-\r
-       * doc/makefile: added command for invocation of xxe to generate docs\r
-\r
-       * better rendering of docs in xml+css format for function prototypes\r
-\r
-       * updated documentation\r
-\r
-       * tagged and released as 2.2\r
-\r
-2007-02-22 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * debugger: workaround for case of magic_quotes_gpc being set (properly\r
-       unescape user input); fix case of user not setting msg id in jsonrpc case\r
-       when executing a remote method; allow strings, false, true and null as msg id\r
-\r
-2007-02-13 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * testsuite.php: added one test for automatic encoding/decoding case\r
-\r
-2007-02-05 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: slightly faster encoding of UTF8 data to ascii\r
-\r
-2007-01-11 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: when calling client::multicall() with an unspecified http version,\r
-       use the client default rather than the fixed 'http 1.0'\r
-\r
-2006-09-17 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc, xmlrpcs.inc, testsuite.php: added support for <NIL/> and\r
-       system.getCapabilities, and one more testcase to go with it\r
-\r
-2006-09-05 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: fix support for https through proxies; client parses debug\r
-       messages sent by client even for compressed responses;\r
-\r
-       * testsuite.php, parse_args.php: added 3 test cases for proxy connections\r
-\r
-2006-09-01 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       xmlrpc_wrappers.inc: add two more options in wrap_xmlrpc_method and fix\r
-       typo to allow obj encoding\r
-\r
-2006-08-28 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc_wrappers.inc: more options added to wrap_php_function and\r
-       wrap_xmlrpc_method\r
-\r
-       * xmlrpc.inc: pave the way to support for <nil/>\r
-\r
-       * doc/xmlrpc_php.xml documentation updated\r
-\r
-       * tagged and released as 2.1\r
-\r
-2006-08-25 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: stricter parsing of incoming messages: detect two DATA elements\r
-       inside an ARRAY, a STRUCT or SCALAR inside an already filled VALUE\r
-\r
-       * testsuite.php: added two testcases to check for the above cases\r
-\r
-2006-08-24 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: more code optimization in xmlrpcval::serialize() and\r
-       php_xmlrpc_encode(); fixed bug where struct elements with non-ascii chars\r
-       in their name would not be properly encoded\r
-\r
-       * testsuite.php: added a testcase for the new bug\r
-\r
-2006-08-23 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * remove old code left in comments across many files; many more javadoc\r
-       comments added\r
-\r
-       * xmlrpc.inc: a bit of code optimization: reorder switch() statements of\r
-       xml parsing element handlers; inline code for xmlrpcval() - this breaks\r
-       new xmlrpcval('true') and changes error msgs on new xmlrpcval($x, 'invalid_type')\r
-\r
-       * testsuite.php: change according to above\r
-\r
-       * benchmark.php: basic support for xdebug 2 profiling\r
-\r
-2006-08-22 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: addscalar() and addstruct() where not returning 1 when adding\r
-       data to an already formed value\r
-\r
-2006-08-21 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpcs.inc, xmlrpc.inc: added support for emulating the xmlrpc-extension\r
-       API (the full emulation layer is part of the extras package);\r
-       fix support for the HTTP 'deflate' encoding\r
-\r
-       * xmlrpc.inc: better support for http compression with and without CURL;\r
-       a minor decoding speedup; added a new function: php_xmlrpc_decode_xml(),\r
-       that will convert into the appropriate object the xml representation of\r
-       either a request, response or a single value; log reception of invalid\r
-       datetime values\r
-\r
-       * xmlrpcs.inc: add a new parameter and return type to server->service();\r
-       let server->add_to_map() accept method definitions without parameter types\r
-\r
-       * xmlrpc_wrappers.inc: more logging of errors; wrap_php_functions now takes\r
-       more options; better support for jsonrpc; escape quote chars when wrapping\r
-       remothe servers / remote methods\r
-\r
-       * added cvs Id tag to files that missed it; speling fixes; updated NEWS files\r
-\r
-2006-08-07 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * assorted fixes to make the suite more compatible with php 4.0.5 and 5.x\r
-\r
-2006-07-02 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc_warppers.inc: added new function to wrap entire remote server into\r
-       a local php class; changed default calling synopsis of wrap_remote_method,\r
-       to ease passing multiple options at a time (but old syntax still works!)\r
-\r
-       * updated makefile, debugger/action.php in accord with the above\r
-\r
-2006-06-30 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * added to debugger capability to generate json-rpc code stubs\r
-\r
-       * added to debugger capability to load and launch self correctly if\r
-       controller.php is called directly from outside processes (single url access)\r
-\r
-2006-06-26 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * moved wrap_php_functions and wrap_xmlrpc_method into a file of their own.\r
-       This will let us add further stub functionality without the base lib growing too much.\r
-       All of the files that reference this functionality have been modified accordingly.\r
-\r
-       * made wrap_xmlrpc_method generate better code (with php type juggling), and\r
-       some phpdoc for the generated function, too\r
-\r
-       * added to debugger an option to produce for the user the generated php code\r
-       for wrapping a call to a remote method into a php function\r
-\r
-2006-06-22 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpcs.inc: added description of parameters for system.xxx methods (useful with\r
-       html-self-documenting servers);\r
-       server->service() now returns response object, in case user has need for it...\r
-\r
-       * xmlrpc.inc: save full response payload into xmlrpcresp obj for better debugging\r
-\r
-2006-06-15 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * verify_compat.php: more tests\r
-\r
-2006-06-09 Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpcs.inc: fixed sending of compressed responses when output compression\r
-       is already enabled in php.ini\r
-\r
-       * verify_compat.php: split tests between server and client cases\r
-\r
-2006-05-29  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * added new file: verify_compat.php, to help troubleshooting platform\r
-       support for the library; added it to makefile, too\r
-\r
-2006-05-24  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: removed residual usage of regexp in favour of  pregexps; fixed\r
-       a bug in specifying Host http header with non std ports\r
-\r
-2006-05-23  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: improvements to wrap_php_function: let it deal correctly\r
-       with php functions returning xmlrpcresp objs; make it generate also\r
-       docs for single parameters (useful for documenting_xmlrpc_server class)\r
-\r
-2006-05-22  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc, xmlrpcs.inc: minor performance tuning updates: replaced\r
-       some explode vs. split, ereg vs. preg, single vs. double quotes\r
-\r
-       * xmlrpc.inc: fix wrap_xmlrpc_method to NOT rebuild php objects received\r
-       from the server by default, as it might pose a security risk\r
-\r
-2006-04-24  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * minor fixes makefiles. Tagged and released as 2.0 final\r
-\r
-2006-04-22  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * debugger/*: added option to set cainfo; improve web layout\r
-\r
-       * xmlrpc.inc: set sslverifypeer to TRUE instaed of 1 by default\r
-\r
-       * doc/php_xmlrpc.xml: documentation updates\r
-\r
-2006-04-21  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: added option to set ca certs dir instead of single cert\r
-       (used to validate server in https connetions)\r
-\r
-2006-04-18  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: fixed bug in xmlrpcval::structmemexists()\r
-\r
-       * testsuite.php: added test case for xmlrpcval::structmemexists()\r
-\r
-2006-04-03  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: add support for Digest and NTLM authentication, both to server\r
-       and to proxies (note: must use CURL for this to work)\r
-\r
-       * debugger/*: add support for Digest/NTLM auth to remote servers\r
-\r
-2006-03-19  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: fix a bug parsing of 'true' bool values;\r
-       added a new method to the client class: SetCaCertificate;\r
-       add column number in xml parsing error messages;\r
-       fix serialization of messages to ISO-8859-1 charset with php 5 (by adding\r
-       encoding to the xml prologue of generated messages)\r
-\r
-       * xmlrpcs.inc: correct detection of charset in http headers;\r
-       add column number in xml parsing error messages;\r
-       fix serialization of responses to ISO-8859-1 charset with php 5 (by adding\r
-       encoding to the xml prologue of generated responses)\r
-\r
-       * testsuite.php: added two more tests on charset encoding\r
-\r
-       * NEWS: update info for impending release\r
-\r
-2006-03-23  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * added a new demo file: simple_call.php\r
-\r
-2006-02-20  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpcs.inc: more error checking and logging with regard to user-coded\r
-       method handler functions not being well behaved;\r
-       fix a case where error handler would not be reset upon user function\r
-       returning not valid xmlrpresp\r
-\r
-       * xmlrpc.inc: fix bug in detection of php 4.3.0\r
-\r
-       * Makefile: fix uppercase filenames\r
-\r
-2006-02-15\r
-\r
-       * xmlrpc.inc: parse 'true' and 'false' as valid booleans, even though the\r
-       spec is quite clear on that; fix small bug w. internal_encoding = utf8; add\r
-       definition of $GLOBALS['xmlrpcNull'] for extensibility, e.g. json or\r
-       extensions to the xmlrpc spec\r
-\r
-2006-02-05  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: fix bug in wrap_xmlrpc_method if client passed to function has\r
-       return_type=phpvals\r
-\r
-       * all demo files: review code, add more comments and information\r
-\r
-       * added 2 demo files: proxy.php (implementing an xmlrpc proxy server) and\r
-       wrap.php (showing usage of wrap_method_call)\r
-\r
-2006-02-04  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: fix bug in multicall in case of no fallback and server error\r
-\r
-2006-01-30  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: fix recursive serialization of xmlrpcvals loosing UTF8 charset;\r
-       correctly set type field of xmlrpcvals returned by send() calls\r
-\r
-       * xmlrpcs.inc: add to server checks for correct return type of user-coded\r
-       method handling function; tolerate xmlrpcval instead of xmlrpcresp\r
-\r
-       * minor change in xmlrpcresp internals, to ease subclassing (store payload\r
-       in an internal var on serialize(), same as xmlrpcclient does)\r
-\r
-2006-01-22  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * benchmark.php: do not run http 1.1 tests if CURL notfound\r
-\r
-       * Released as 2.0 Rc3\r
-\r
-2006-01-19  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: make xmlrpc_client::setDebug() accept int values instead of\r
-       boolean. At level 2, the request payload is printed to screen before being\r
-       sent; fix bug with repeated sending of the same msg object and using request\r
-       compression w. php 5.1.2 (objects passed by ref by default!!!)\r
-\r
-       * xmlrpcs.inc: fix detection of clients accepting compressed responses\r
-\r
-       * comment.php: remove warnings due to liberal usage of $HTTP_POST/GET_VARS\r
-\r
-       * benchmark.php: add a test using http compression of both requests and\r
-       responses\r
-\r
-       * testsuite.php: added test for fix in xmlrpc.inc\r
-\r
-2006-01-17  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpcs.php: minor fix: do not raise a PHP warning when std server is\r
-       called via GET (global HTTP_RAW_POST_DATA undefined). Some might have called\r
-       it a security breach (path disclosure)...\r
-\r
-2006-01-15  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * testsuite.php: minor fix to expected date format in http cookie hedaer\r
-       to cope with PHP 5.1.2\r
-\r
-2006-01-05  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpcs.inc: merge code from the 'extras' subclass that allows server\r
-       to register plain php functions in dispatch map instead of functions\r
-       accepting a single xmlrpcmgs obj parameter.\r
-       One step closer to the kitchen sink!!!\r
-\r
-2005-12-31  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpcs.inc: let the server accept 'class::method' syntax in the dispatch\r
-       map\r
-\r
-       * testsuite.php, server.php: added new tests for the recent charset encoding\r
-       capabilities\r
-\r
-2005-12-24  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: correctly serialize() string xmlrpcvals that have been\r
-       created out of non-string php variables, when internal encoding is UTF8;\r
-       serialize to '0' int and double values created out of non-string php\r
-       variables, eg. 'hello', instead of creating invalid xmlrpc;\r
-       extend the php_xmlrpc_encode function to allow serializing string values\r
-       to charsets other tha US-ASCII;\r
-       minor tweak to xml parsing to allow correct parsing of empty strings when\r
-       in 'direct to php values' mode\r
-\r
-       * xmlrpcs.inc: advances in system.multicall with plain php values\r
-\r
-2005-12-17  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpcs.inc: let the functions implementing the system.* methods work\r
-       fine when called with plain php values as parameters instead of xmlrpcmsg\r
-       objects (multicall not quite finished yet...);\r
-       encode level 3 debug info as base64 data, to avoid charset encoding hell\r
-\r
-       * xmlrpc.inc: added a new xmlrpc_2_php_type function, to get the name of\r
-       php types corresponding to xmlrpc types;\r
-       in debug mode, when detecting base64 server debug info, print it out fine\r
-\r
-       * server.php: cosmetic fixes\r
-\r
-2005-12-09  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: remove one warning emitted when received xml contains an\r
-       unknown tag; remove warnings emitted when custom error handler is set\r
-       and user calls php_xmlrpc_encode/decode without the 2nd parameter\r
-\r
-       * xmlrpcs.inc: added a param to service(), to allow the server to parse\r
-       data other than the POST body (useful for subclassing and debugging);\r
-       reworked the implementation of server debug messages at debug level 2:\r
-       since the debug info generated has no known charset, and putting it back\r
-       into the response's xml would most likely break it, send it back to the\r
-       client as a base64 encoded comment. Clients can decode it if they need it...\r
-       Add some more javadocs\r
-\r
-       * testsuite.php: modified the string test, to see if the server can echo\r
-       back to the client the received data without breaking the response's xml\r
-\r
-2005-12-05  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc, xmlrpcs.inc: let server and client objects decide if they\r
-       want to use some charset encoding other than US-ASCII for serialized data:\r
-       add a new var to both objects, and lots of parameters to function calls\r
-       that took none up to now;\r
-       refactored server method service() and parseRequest(), implementing a\r
-       new parserequestHeaders() method to explicitly deal with HTTP\r
-\r
-2005-12-01  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * moved the jsonrpc implementation and the new wsdl stuff to a separate\r
-       CVS module; updated the makefile to reflect it\r
-\r
-2005-11-24  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * modified php_xmlrpc_decode() to work on xmlrpcmessages too, besides\r
-       xmlrpcvals. To achieve this, added a new method: xmlrpcmsg::kindOf()\r
-\r
-2005-11-22  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * released as 2.0 RC2\r
-\r
-2005-11-21  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: fix warnings about references for PHP 4.1.X\r
-\r
-       * Whitespace cleanup on all the lib\r
-\r
-2005-11-16  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: rewritten xmlrpc_encode_entitites adding two extra parameters\r
-       that specify input and output charset encodings. This corrects the bug that\r
-       prevented native UTF-8 strings to be correctly serialized (to have them\r
-       encoded the user must set $xmlrpc_internalencoing appropriately).\r
-\r
-       * xmlrpc.inc: added new method xmlrpcmsg::parseResponseHeaders(), refactoring\r
-       parseResponse(). This makes the code more modular and eases subclassing.\r
-\r
-       * xmlrpc.inc: set cookies and http headers to xmlrpcresp objs even when calls\r
-       to send() do not complete correctly\r
-\r
-       * added new file: jsonrpcs.inc, to accomodate server jsonrpc objects in the future\r
-\r
-       * jsonrpc.inc: slow progress...\r
-\r
-2005-11-10  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: fixed the xmlrpc_client send and sendpayloadhttps methods\r
-       to fix errors in calling https servers;\r
-       added a new xmlrpc_client->setkey method to allow usage of client-side ssl\r
-       certs in recent php builds;\r
-       added to xmlrpcresp objects a content_type var, to be used in HTTP headers\r
-\r
-       * xmlrpcs.inc: separate generation of content-type http header and xml prologue\r
-       from the service() method, to ease subclassing\r
-\r
-2005-11-03  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: moved the 'text/xml' mimetype string as class var of the xmlrpcmsg\r
-       object instead of having it cabled into xmlrpc_client->send(): this allows to\r
-       create subclasses of xmlrpcmsg that use a different mimetype\r
-\r
-       * jsonrpc.inc: added a new file, with an extremely experimental set of classes,\r
-        designed to implement a json-rpc client and server, taking advantage of the\r
-        existing xml-rpc infrastructure\r
-\r
-2005-10-28  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: changed constructor method for xmlrpcresp, making it smarter in\r
-       case user does not declare the type of value it is passing to it;\r
-       minor changes in serialization of xmlrpcresp with error codes, so that it\r
-       utputs LF instead of CRLF on windows boxes after an FTP transfer of the code, too\r
-\r
-2005-10-26  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: added a new var of class xmlrpc_client, indicating what kind of\r
-       object will be stored in the value() of xmlrpcresp's gotten from the send()\r
-       method: xmlrpxc objects, plain php variables or raw xml. This allow the coder\r
-       to make use of xmlrpc_decode for better performances if he wishes so.\r
-       Modified creator of xmlrpcresp class to allow it to distinguish between being\r
-       created out of raw xml or a plain php string (in the former case, serialization\r
-       is still possible, opening a new world of opportunity for server-side programming:\r
-       the php function implementing a web service has to provide the xml for the\r
-       return value on its own).\r
-       Modified xmlrpc_client::multicall() to suit; also added a new parameter which\r
-       allows calls to multicall without automatic fallback to many-calls in case of\r
-       error (speeding up the process of doing a failed multicall() call quite a bit)\r
-       Fixed two bugs in guess_encoding.\r
-       Audited all regexps and fixed some.\r
-       xmlrpc_client::send() does not call xmlrpcmsg::parseresponsefile() anymore.\r
-       Shuffled parseresponse() a little bit\r
-\r
-       * testsuite.php: added a new testcase for the modifications to multicall():\r
-       now we test the case where xmlrpc_client returns php values, too\r
-\r
-2005-10-24  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: fixed guess_encoding() to always return uppercase chars\r
-\r
-       * added new file: benchmark.php. It contains a few tests used to evaluate\r
-       speed of the lib in common use cases\r
-\r
-       * added file parse_args.php, containing common code for benchmark and\r
-       testsuite, and modified testsuite.php accordingly\r
-\r
-       * modified makefile adding new files\r
-\r
-       * testsuite.php: added a couple of new test cases; fixed one warning\r
-       emitted in php 5 E_STRICT mode\r
-\r
-2005-10-20  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: modify 3d param of ParseResponse(), allowing the function to\r
-       return the raw xml received as value of the xmlrpcresponse object.\r
-       This allows eg. to have epi-xmlrpc decode the xml for faster execution.\r
-\r
-2005-10-09  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: fixed error that prevented usage of HTTPS (the client\r
-       always determined that ssl support was not present)\r
-\r
-2005-10-03  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc, xmlrpcs.inc: revert direction of stack growth during xml\r
-       parsing for faster execution time; add support for detecting charset\r
-       encoding of received xml; add support for cookies; better parsing of\r
-       javadoc when building stub code in wrap_php_function; add a lot of\r
-       javadoc comments everywhere; rewrite most error messages\r
-\r
-       * testsuite.php: add many tests for newly introduced features\r
-\r
-       * server.php: add a couple of new functions to support debugging new\r
-       features\r
-\r
-       * debugger: add switches to enable all the latest lib features; minor\r
-       improvements to layout\r
-\r
-       * synch included phpunit with latest PEAR release\r
-\r
-       * reorganize files included in the distribution in a new hierarchy of folders\r
-\r
-       * bump revision number to 2.0RC1 and release\r
-\r
-2005-8-14  Miles Lott <milos@groupwhere.org>\r
-\r
-       * xmlrpc.inc, xmlrpcs.inc: Remove all use of eval() to avoid potential\r
-       security hole.\r
-\r
-       * As of this release we are no longer php3-compatible.\r
-\r
-2005-8-10 Miles Lott <milos@groupwhere.org>\r
-\r
-       * xmlrpc.inc, xmlrpcs.inc: Switched to using $GLOBALS instead of calling\r
-       global $varname\r
-\r
-2005-07-22  Miles Lott <milos@groupwhere.org>\r
-\r
-       * Removed: bug_* files\r
-\r
-2005-07-14  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * debugger: added a workaround to disable using the debugger for attacking\r
-       older versions of the lib\r
-\r
-       * testsuite.php: added code to test wrap_xmlrpc_method;\r
-       use different wording for failed tests\r
-\r
-       * xmlrpcs.inc: change for() with foreach() in system.* methods implementations;\r
-       remove a possible cause of php warning;\r
-\r
-       * xmlrpc.inc: let wrap_php_function and wrap_xmlrpc_method find suitable\r
-       function names if default function names are already in use;\r
-       correct wrap_xmlrpc_method to not set http protocol to 1.0 when not asked to;\r
-       detect curl compiles without SSL\r
-\r
-2005-07-14  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: more auto-fix of xmlrpc_client path: '' -> '/';\r
-       change to the method used for detecting failed evals (php 4.0.x compatibility);\r
-       complete rework of return-by-ref functions to comply with php 4.4.0\r
-\r
-       * xmlrpcs.inc: change to the method used for detecting failed evals (php 4.0.x\r
-       compatibility)\r
-\r
-       * testsuite.php: major rewrite of the multi- tests, to give better feedback on\r
-       number of failed tests;\r
-       flush html page title to screen before starting tests;\r
-\r
-2005-07-13  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: let xmlrpcmsg creator be forgiving of target paths that miss the\r
-       starting '/' char;\r
-       completely reworked assign-by-ref to be compliant with php 4.4.0 stricter\r
-       warnings\r
-\r
-       * testsuite.php: added ability to be run from cli: (really dumb) separation of\r
-       html and plain text outputs + parsing of argv parameters\r
-\r
-2005-07-12  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: compatibility fixes with PHP versions 4.0.x (and remove some for\r
-       PHP 3)\r
-\r
-       * xmlrpcs.inc: compatibility fixes for PHP 4.0.x versions\r
-\r
-       * testsuite.php: better support for running with php versions 4.0.x;\r
-       do not generate runtime errors but finish tests anyway if some calls to\r
-       localhost fail;\r
-       correctly detect a localhost port different from 80 for running tests against\r
-\r
-2005-07-11  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: preliminary building of method signature and docs in\r
-       wrap_php_function;\r
-       fix a bug in extracting function description from javadoc block in\r
-       wrap_php_function;\r
-       small fix for better compatibility with php < 4.2.0\r
-\r
-       * added compat subdir with extra code, taken form PEAR package Compat, to let\r
-       the lib run fine with php 4 versions < 4.1\r
-\r
-2005-07-10  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: some nazi whitespace corrections;\r
-       declared global $xmlrpcBoolean too (was the only one missing);\r
-       used @eval inside getval() to have less path disclosure security reports filed\r
-       in the future;\r
-       added new global var: $xmlrpcValue, to be used in server dispatch maps as\r
-       placeholder for a param which can be of any kind;\r
-       big chunks (but still incomplete) of javadoc parsing in wrap_php_function\r
-       + changed type of return val - now it is the complete array to be put in the\r
-       dispatch map\r
-\r
-       * xmlrpcs.inc: let previous error handler be called by server to handle errors\r
-       even if in debug level 3;\r
-       default to compress responses if zlib installed;\r
-       added a new val useful for only checking number (not type) of params in method\r
-       calls;\r
-       let user use object methods in dispatch map using the\r
-       array($obj, 'fmethodname') format\r
-\r
-       * server.php: Added code called by testsuite.php to exercise registration of\r
-       object methods as xmlrpc methods and auto-registration of php functions as xmlrpc\r
-       methods\r
-\r
-       * testsuite.php: added tests to exercice server registering object methods as\r
-       xmlrpc methods and automatic registration of php functions as server methods;\r
-       added a hint to enable debug if some test goes wrong;\r
-       renamed https test for better clarity\r
-\r
-2005-07-07  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: added function to be used for 'guestimating' charset encoding of\r
-       received xml (not activated yet)\r
-\r
-       * server.php: Let server compress content by default if user asks so: it allows\r
-       testsuite to check for compressed responses\r
-\r
-       * testsuite.php: added suite of tests for compressed responses; test CURL\r
-       (http1.1) with all possible compression combinations too\r
-\r
-2005-07-06  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: Enable setting usage of keepalives on/off (for CURL cases);\r
-       implement compression of xmlrpc requests; enable new syntax of xmlrpclient\r
-       constructor: 1 - allow preferred http method to be set at creation time,\r
-       2 - allow user to insert a single complete URL as only parameter and parse it;\r
-       try to detect if curl is present whether it has been compiled w. zlib to enable\r
-       automatically the reception of compressed responses\r
-\r
-       * xmlrpcs.inc: do not add into logs the content of the request, if it was\r
-       received gzipped/deflated, to avoid breaking the xml sent back as response\r
-       (NB: might be investigated further: is the problem caused by windows chars in\r
-       the range 128-160 ?)\r
-\r
-       * testsuite.php: run all localhost tests 2 more times, to stress request\r
-       compression;\r
-       run all localhost tests in a row using keepalives, to test keepalive\r
-       functionality\r
-\r
-2005-07-05  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: let CURL pass back to caller function the complete PHP headers\r
-       as it did before: it enables better logging / debugging of communication;\r
-       small change to the way CURL declares its ability to receive compressed\r
-       messages (fix for the case where zlib is compiled in PHP but not in curl);\r
-       added Keep-alive (ON BY DEFAULT) for http 1.1 and https messages (had to modify\r
-       a lot of functions for that);\r
-       always make sure a 'Connection: close' header is sent with curl connections if\r
-       keep-alive is not wanted\r
-\r
-       * phpunit.php: switched to PEAR PHPUnit (rel 1.2.3), since it is maintained a\r
-       lot more than the old version we were using\r
-\r
-       * added new folder with code of phpunit classes\r
-\r
-       * testsuite.php: added a new run of tests to check for compliance of client\r
-       when using http 1.1;\r
-       switched to PEAR PHPUnit classes;\r
-       divided test for client ability to do multicall() into 2 separate tests\r
-\r
-2005-06-30  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       tagged and released version 1.1.1, backporting security fixes from HEAD\r
-\r
-2005-06-28  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpcs.inc: fix changes introuced yesterday in a rush;\r
-       do not list system.* methods for a server that has them explicitly disabled\r
-\r
-       * bug_inject.xml: new test case used to check for code injection vulnerability\r
-\r
-       * testsuite.php: added a test case for zero parameters method calls;\r
-       added two test cases for recently found code injection vulnerabilities\r
-\r
-2005-06-27  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: (tentative) fix for security problem reported by\r
-       security@gulftech.org: we were not properly php-escaping xml received for\r
-       BASE64 and NAME tags;\r
-       some more patching related to junk received in xml messages/responses: if the\r
-       PHP code built from the parsed xml is broken, catch any generated errors\r
-       without echoing it to screen but take note of the error and propagate to user\r
-       code\r
-\r
-       * xmlrpcs.inc: some more patching related to junk received in xml messages/\r
-       responses: if the PHP code built from the parsed xml is broken, catch any\r
-       generated errors without echoing it to screen but take note of the error and\r
-       propagate to user code\r
-\r
-2005-06-24  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: fixed php_xmlrpc_encode detection of php arrays (again!);\r
-       removed from wrap_php_function the part about setting a custom error handler\r
-       (it can be activated using the more general $server->setdebug(3) anyway)\r
-\r
-       * xmlrpcs.inc: added to server the capability to trap all processing errors\r
-       during execution of user functions and add them to debug info inside responses;\r
-       return a (new) xmlrpcerr response instead of raising some obscure php execution\r
-       error if there is an undefined function in the dispatch map\r
-\r
-       * testsuite.php: Added new testcases for recently implemented stuff\r
-\r
-2005-06-23  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: added new method: xmlrpcval->structmemexists, to check for\r
-       presence of a wanted struct member without having to loop through all members;\r
-       fix wrap_php_functions: correctly return false for php internal functions,\r
-       whose param list is unknown;\r
-       let addscalar fail as it should if called on struct vals;\r
-       fix addstruct: do not fail when called for adding stuff to initialized structs;\r
-       removed a warning generated when calling addscalar with inexistent type;\r
-       massive code review for speed: replaced each() loops with foreach(), removed\r
-       lots of useless assignments and duplications of data;\r
-       added 'http11' as valid method param for xmlrpclient->send: makes use of curl\r
-       for sending http 1.1 requests;\r
-       changed a couple '=' into '=&' where objects are returned;\r
-       fixed wrap_php_function() to better detect php errors while processing wrapped\r
-       function\r
-\r
-       * xmlrpcs.inc: Fix php warnings generated when clients requested method\r
-       signature / description for a method that had none in its dispatch map;\r
-       turned server->debug into an integer value that will change the amount of\r
-       logging going as comments into xmlrpc responses\r
-\r
-       * server.php: set default server debug level to 2\r
-\r
-       * testsuite.php: removed calls to deleted functions (xmlrpc_encode,\r
-       xmlrpc_decode);\r
-       added html page title describing target servers used for tests;\r
-       added an assign-by-ref\r
-\r
-       * phpunit.php: Do not consider as failures PHP 5 E_STRICT errors (arbitrary\r
-       choice, but lib is targeted at PHP 4)\r
-\r
-2005-06-22  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: removed lottsa old code that had been left in commented\r
-\r
-       * xmlrpc.inc: fixed setting of proxy port\r
-\r
-       * xmlrpc.inc: removed one warning when trying to decompress junk sent as\r
-       deflated response\r
-\r
-       * xmlrpc.inc: changed the error messages (but not the code) that will be found\r
-       in xmlrpcresponses when there are socket errors, to differentiate from HTTP\r
-       errors\r
-\r
-       * xmlrpc.inc: refactored xmlrpcclient->sendpayloadHTTPS: now it calls a new\r
-       method (sendpayloadCURL) that could be used also for generating HTTP 1.1\r
-       requests\r
-\r
-       * xmlrpc.inc: added two new methods: wrap_php_function and wrap_xmlrpc_method:\r
-       designed to let the lazy programmer automagically convert php functions to\r
-       xmlrpc methods and vice versa. Details are in the code\r
-\r
-       * debugger/*: added initial revision of a 'universal xmlrpc debugger'\r
-\r
-2005-06-20  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: replace usage of 'echo' with error_log when errors arise\r
-       in manipulation of xmlrpcval objects\r
-\r
-       * xmlrpc.inc: replaced <br> with <br /> in dump function\r
-\r
-       * xmlrpc.inc: added method structsize to xmlrpcval class (alias for arraysize)\r
-\r
-       * xmlrpc.inc: addarray() now will add extra members to an xmlrpcval object\r
-       of array type; addstruct() can be used to add members to an xmlrpcval object\r
-       of struct type\r
-\r
-       * xmlrpcs.inc: Added member allow_system_funcs to server: controls whether the\r
-       server accepts or not calls to system.* functions\r
-\r
-2005-05-10  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: fix regression in php_xmlrpc_encode when encoding php hashes;\r
-       fix decompression of gzip/deflated xmlrpc responses;\r
-       set user agent string correctly in SSL mode (was forgetting lib name);\r
-       add allowed encoding http headers in requests;\r
-       do not pass http headers back from curl to parseresponse, to avoid re-decoding\r
-       compressed xml or http 100 headers\r
-\r
-       * xmlrpcs.inc: added method setDebug;\r
-       renamed compress_output to compress_response;\r
-       do not try to set http headers if they have already been sent, because trying\r
-       to do so will raise a PHP error, and if headers have been sent something has\r
-       gone wrong already (shall we send a meaningful error response instead?)\r
-\r
-2005-05-08  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpcs.inc, xmlrpcs.inc: reverted to usage of '=& new' for better\r
-       performance on (some) php4 installs.\r
-       NB: PHP 3 compatibility is deprecated from now on!\r
-\r
-       * xmlrpc.inc: decode xmlrpc boolean type to native php boolean\r
-\r
-       * xmlrpcs.inc, xmlrpcs.inc: switched $_xh[$parser] to $_xh, since indexing\r
-       an array by object will give a warning in php 5 (and we were resetting the\r
-       array of _xh elements on every call anyway)\r
-\r
-       * xmlrpc.inc: commented unused code used originally for escaping content\r
-\r
-       * xmlrpc.inc: commented deprecated methods xmlrpc_encode and xmlrpc_decode\r
-\r
-       * xmlrpc.inc: php_xmlrpc_encode: encode integer-indexed php arrays as xmlrpc\r
-       arrays instead of structs; if object given to encode is an xmlrpcval return it\r
-       instead of reencoding (makes easier calling encode on an array of xmlrpcvals)\r
-\r
-       * xmlrpcs.inc: added $debug field to server class; if false will prevent\r
-       the server from echoing debug info back to the client as xml comment\r
-\r
-       * xmlrpcs.inc: let the server add to the debug messages the complete request\r
-       payload received and (if php installed as apache module) http headers, so that\r
-       the client in debug mode can echo a complete fingerprint of the communication\r
-\r
-       * xmlrpcs.inc: changed API of ParseRequest method: now it cannot be called\r
-       without a 'data' parameter; added 2nd parameter (http encoding); changed the\r
-       call to this method from inside service() method\r
-\r
-       * xmlrpc.inc, xmlrpcs.inc: enable both server and client to parse compressed xml\r
-       (if php is compiled with zlib); client should also be able to decode chunked\r
-       http encoding\r
-\r
-       * xmlrpc.inc: add support for proxies (only basic auth supported); default port\r
-       is 8080 (if left unspecified)\r
-\r
-       * xmlrpc.inc: use lowercase for names of http headers received (makes using\r
-       them much simpler, since servers can use any upper/lowercase combination)\r
-\r
-       * xmlrpc.inc: bumped version number to '2.0 beta'\r
-\r
-2005-05-08  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * release of version 1.1\r
-\r
-2005-04-24  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpcs.inc: removed charset declaration from xml prologue of responses,\r
-       since we are now escaping all non-ascii chars in an encoding-independent way\r
-\r
-       * bug_http.xml: modified to exercise some extra functonality of the lib\r
-       (it should now be failed by the current PEAR implementation of the lib)\r
-\r
-       * xmlrpc.inc: bumped up rev. number to 1.1\r
-\r
-       * doc/xmlrpc_php.xml, doc/announce1_1.txt: documentation updates\r
-\r
-       * Makefile: updated to reflect new xml doc source, modified filelist\r
-\r
-2005-04-17  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * client.php, agesort.php, introspect.php, introspect_demo.php,\r
-       which.php, test.pl, test.py: use as default target the server.php page hosted\r
-       on phpxmlrpc.sf.net\r
-\r
-       * server.php: fix for register_globals off; refer to docs on phpxmlrpc.sf.net\r
-\r
-2005-04-15 Miles Lott <milos@groupwhere.org>\r
-\r
-       code formatting and comments\r
-\r
-2005-04-03  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: make use of global var $xmlrpcName in building User_Agent HTTP\r
-       header (in conjunction with $xmlrpcVersion)\r
-\r
-       * agesort.php, client.php, comment.php, dicuss.php, mail.php, server.php,\r
-       which.php: various janitorial fixes\r
-       + always html escape content received from xmlrpc server or from user input\r
-       + make the scripts run fine with register_globals off an register_long_arrays off\r
-       + always use the functions php_xmlrpc_en(de)code, even if the EPI extension\r
-       is not installed\r
-       + in mail.php, allow user to see script source even if support for .phps files\r
-       is not configured in the local web server\r
-\r
-       * testsuite.php: better detection of local webserver hostname for running tests\r
-       against (if the user did not supply a webserver name)\r
-\r
-2005-03-21  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpcs.inc: revert to a PHP3 compatible script (change '=& new' to '= new')\r
-\r
-       * xmlrpc.inc: revert to a PHP3 compatible script (lottsa fixes)\r
-\r
-       * testsuite.php: default to using local server as test target if no user\r
-       provided values are available instead of heddley.com server\r
-\r
-       * testsuite.php: play nice to PHP3 in retrieving user-passed values\r
-\r
-       * testsuite.php: fix constructor method name for a type of tests\r
-\r
-       * phpunit.php: fix all cases of call-time-pass-by-ref\r
-\r
-       * phpunit.php: rename Exception class to _Exception if the script is run with\r
-       PHP 5 (exception is a reserverd word)\r
-\r
-2005-03-19  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: fixed bug in new http header parsing code in case there is\r
-       no correct separator between response headers and body\r
-\r
-       * xmlrpc.inc: added recognizing and stripping of HTTP/1.1 100 response headers\r
-\r
-       * xmlrpc.inc: strip extra whitespace from response body, as well as any junk\r
-       that comes after the last </MethodResponse> tag. It allows the server code to\r
-       be put on public providers that add e.g. javascript advertising to served pages\r
-\r
-       * xmlrpc.inc: removed unused parts of code, trailing whitespace\r
-\r
-       * xmlrpc.inc: fix possible bug (?) in xmlrpc_ee for BOOLEAN values: true was\r
-       being handled differently than false\r
-\r
-       * testsuite.php: added a new file-based test to stress the response parsing\r
-       modifications recently introduced; enabled debugging for file based tests\r
-\r
-2005-03-15  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: fixed missing declaration of global vars in xmlrpc_dh,\r
-       sendpayloadhttps and sendpayloadhttp10\r
-\r
-       * xmlrpc.inc: changed error message for invalid responses: 'enable debugging'\r
-       is more clear that 'enabling debugging' (the user is being encouraged to do it)\r
-\r
-       * xmlrpc.inc: rewrote HTTP response header parsing. It should be more tolerant\r
-       of invalid headers, give more accurate error messages and be marginally faster,\r
-       too.\r
-\r
-       * xmlrpc.inc: cosmetic whitespace fixes and remove useless one-liners\r
-\r
-       * xmlrpc.inc: build a shorter PHP command line to be evaluated for rebuilding\r
-       values from parsed xml: use '$val =& nex xmlrpcval("value")' for string values\r
-       instead of '$val =& nex xmlrpcval("value", $xmlrpcString)'\r
-\r
-       * xmlrpc.inc: fix change introduced 2005/01/30 moving call to curl_close()\r
-       too early: it did not work on error situations\r
-\r
-       * testsuite.php: fix name of testAddingTest method, renamed testErrosString\r
-       into testErrorString and removed useless warning for register_globals=off case\r
-\r
-2005-02-27  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: do not echo XML parsing error to screen (it is already dumped\r
-       into error log)\r
-\r
-       * xmlrpc.inc: set hdrs field into response object in case of XML parsing error\r
-       (uniform behaviour with other responses)\r
-\r
-2005-02-26  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: use global var $xmlrpcVersion as number for user agent string\r
-\r
-       * xmlrpcs.inc: eliminate server side PHP warning and give back to caller\r
-       a better error msg in case the called method exists but no signature matches\r
-       the number of parameters\r
-\r
-2005-02-20  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: accept a + sign in front of floats / integers, since the spec\r
-       clearly mentions it\r
-\r
-       * xmlrpc.inc, xmlrpcs.inc: renamed function XmlEntities to xmlrpc_encode_entitites,\r
-       to avoid using the same name as an array already defined\r
-\r
-       * xmlrpc.inc: fix bug introduced with escaping of UTF8 chars in xmlrpc error\r
-       responses: correct behaviour is to escape chars inside serialize(), not when\r
-       calling the xmlrpcresp creator\r
-\r
-       * testsuite.php: made test suite more friendly to modern PHP configs, allowing\r
-       register_globals to be off and to set in the URL all testing parameters;\r
-       added tests for newly introduced fixes; renamed existing tests acording to the\r
-       docs inside phpunit.php (e.g. no subclass of TestCase should have a name\r
-       starting with test...)\r
-\r
-2005-02-19  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: accept patch 683153 by mah0: if timeout is set, allow all socket\r
-       operations to timeout at the given time, not only the socket connection\r
-\r
-2005-02-13  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: be tolerant to double values received in exponential notation:\r
-       even though the spec forbids their usage PHP is fine with them\r
-\r
-       * xmlrpc.inc: fix bug: new xmlrpcval('-1') was creating an empty value instead\r
-       of a string value!\r
-\r
-       * xmlrpc.inc, xmlrpcs.inc: fix the payload encoding changes introduced by\r
-       Andres Salomon on 2004-03-17: sending named html entities inside an xml chunk\r
-       makes it invalid, and thus renders the lib absolutely non-interoperable with\r
-       any other xmlrpc implementation; moreover the current implementation only ever\r
-       worked for non-ascii requests, while breaking client-parsing of responses\r
-       containing non-ascii chars.\r
-       The principle of using entities is preserved though, because it allows the\r
-       client to send correct xml regardless of php internal charset encoding vs.\r
-       xml request charset encoding, but using 'character references' instead.\r
-\r
-       * xmlrpc.inc: encode (non-ascii) chars into charset entities also for error\r
-       strings\r
-\r
-       * xmlrpcs.inc: encode (non-ascii) chars into charset entities also for debug\r
-       messages\r
-\r
-       * xmlrpcs.inc: added 'Accept-Charset' header in http request to let the server\r
-       know what kind of charset encoding we do expect to be used for responses\r
-\r
-       * xmlrpc.inc, xmlrpcs.inc: explicitly tell the xml parser what charset the\r
-       application expects to receive content in (notably strings). A new variable,\r
-       $xmlrpc_internalencoding, (defaulting to ISO-8859-1) defines what charset the\r
-       parser will use for passing back string xmlrpcvals to the PHP application\r
-       (both server-side and client-side).\r
-       This allows transparent usage of e.g. UTF-8 for encoding xml messages between\r
-       server and client and ISO-8859-1 for internal string handling.\r
-       ISO-8859-1 is, AFAIK, PHP internal encoding for all installs except\r
-       mbstring-enabled ones.\r
-\r
-2005-02-12  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpcs.inc: use '$var =& new(' construct to assign objects: on older versions\r
-       of PHP objects are first built then copied over if the ampersand is omitted.\r
-       Using it should make the code a little bit faster...\r
-\r
-       * doc/xmlrpc.php: update lib version number, release date in preparation for\r
-       next release\r
-\r
-       * makefile: update lib version number in preparation for next release\r
-\r
-       * xmlrpc.inc: split up parsing of xmlrpc INT and DOUBLE values. This allows\r
-       finer-grained control over valid values: now the '.' char is not allowed\r
-       any more inside int values.\r
-\r
-       * xmlrpc.inc: fix for bug #560303: ints and doubles starting with '0' chars are\r
-       no more parsed as octal values\r
-\r
-2005-01-30  Gaetano Giunta <giunta.gaetano@gmail.com>\r
-\r
-       * xmlrpc.inc: Modifed last change by Miles: the functions php_xmlrpc_encode\r
-       and php_xmlrpc_decode are now always defined, regardless of the existence of\r
-       XMLRPC-EPI.  This allows users to start using these functions as the 'default'\r
-       functions, and pave the way for future deprecation of xmlrpc_encode/encode\r
-       while maintaining a stable API.\r
-\r
-       * xmlrpc.inc: use '$var =& new(' construct to assign objects: on older versions\r
-       of PHP objects are first built then copied over if the ampersand is omitted.\r
-       Using it should make the code a little bit faster...\r
-\r
-       * xmlrpc.inc: close curl connection as soon as possible for https requests:\r
-       it could save some memory / resources.\r
-\r
-       * xmlrpc.inc: added some extra info in the PHP error log message generated\r
-       when an invalid xmlrpc integer/float value is encountered and we try to\r
-       deserialize it.\r
-\r
-       * xmlrpc.inc: added @ char before fsockopen to avoid echoing useless warnings\r
-       when connection to server fails; added the same to avoid echoing warnings when\r
-       deserializing data of an unknown type\r
-\r
-       * xmlrpc.inc: reset the _xh array on each xmlrpc call: otherwise a new array\r
-       member is created for each consecutive call and never destroyed, thus making it\r
-       impossible to build an xmlrpc-client daemon beacuse of memory leaking.\r
-\r
-       * xmlrpc.inc: declare global the variables that are used as 'constants',\r
-       so that xmlrpc.inc will work even if it is included from within a function\r
-\r
-2004-12-27  Miles Lott <milos@groupwhere.org>\r
-       * xmlrpc.inc: A new constant, XMLRPC_EPI_ENABLED, is defined depending on\r
-       the existence of the function, xmlrpc_decode.  This function will exist in\r
-       PHP if the extension, XMLRPC-EPI (http://xmlrpc-epi.sourceforge.net), is\r
-       loaded.  It defines the functions xmlrpc_encode and xmlrpc_decode, which\r
-       will conflict with functions of the same name in xmlrpc.inc.  If this\r
-       extension is loaded, we instead use the names php_xmlrpc_encode and\r
-       php_xmlrpc_decode.  Please look at server.php, testsuite.php, etc., for\r
-       how this should be handled if using these functions.\r
-\r
-2003-04-17  Andres Salomon  <dilinger@voxel.net>\r
-       * xmlrpc.inc: encode strings using htmlentities() instead of\r
-       htmlspecialchars(), and add xmlrpc_html_entity_xlate().  This\r
-       should fix longstanding issues with sending weird chars (from\r
-       non-USASCII codesets like UTF-8, ISO-8859-1, etc) that caused\r
-       the xml parser to choke.  Multi-byte chars are now changed to\r
-       entities before sending, so that the xmlrpc server doesn't need\r
-       to know the encoding type of the POST data.\r
-       * xmlrpcs.inc: call xmlrpc_html_entity_xlate before parsing\r
-       request packet.  The parser chokes on unknown entities (the\r
-       entities created by htmlentities() are exactly that; html\r
-       entities, not xml entities), so they must be converted from\r
-       name form (&eacute;) to numerical form (&#233;).\r
-\r
-2003-01-12  Andres Salomon  <dilinger@voxel.net>\r
-\r
-       * released 1.0.99.2.\r
-       * Makefile: separate doc/Makefile a bit more from Makefile,\r
-       and add clean rules.\r
-\r
-2003-01-10  Andres Salomon  <dilinger@voxel.net>\r
-\r
-       * xmlrpc.inc: xmlrpcresp and parseResponse cleanups; variable\r
-       name renames ('xv' to 'val', for example), type checking, and\r
-       stricter default values.\r
-       * xmlrpc.inc: fix xmlrpcresp's faultcode; return -1 for FAULT\r
-       responses from the server whose faultcodes don't reflect any\r
-       errors.\r
-\r
-2003-01-08  Andres Salomon  <dilinger@voxel.net>\r
-\r
-       * xmlrpc.inc: rename $_xh[$parser]['ha'] to\r
-       $_xh[$parser]['headers'].\r
-       * xmlrpc.inc: fix bugs related to $_xh[$parser]['headers];\r
-       some places treated this as an array, others as a scalar.\r
-       Treat unconditionally as an array.  Also wrap header debugging\r
-       output in PRE tags.\r
-\r
-2002-12-17  Andres Salomon  <dilinger@voxel.net>\r
-\r
-       * released 1.0.99.\r
-       * Makefile: changed the tarball format/dist rule to a more\r
-       conventional form, as well as normal release updates.\r
-       * xmlrpc.inc: added setSSLVerifyPeer and setSSLVerifyHost; as\r
-       of curl 7.10, various certificate checks are done (by default).\r
-       The default for CURLOPT_SSL_VERIFYHOST is to ensure the common\r
-       name on the cert matches the provided hostname. This breaks a\r
-       lot of stuff, so allow users to override it.\r
-       * doc/xmlrpc_php.sgml: updated documentation accordingly.\r
-\r
-2002-09-06  Geoffrey T. Dairiki  <dairiki@dairiki.org>\r
-\r
-       Add support for system.multicall() to both the client\r
-       and the server.\r
-\r
-       * testsuite.php: Add new tests 'testServerMulticall',\r
-       and 'testClientMulticall'.\r
-\r
-       * xmlrpc.inc: Added new error messages for system.multicall().\r
-       * xmlrpcs.inc: Added new procedure call system.multicall().\r
-       See http://www.xmlrpc.com/discuss/msgReader$1208 for details.\r
-\r
-       * xmlrpc.inc: Added system.multicall functionality to\r
-       xmlrpc_client.  xmlrpc_client::send can now take an array of\r
-       xmlrpcmsg's as an argument.  In that case it will attempt\r
-       to execute the whole array of procure calls in a single\r
-       HTTP request using system.multicall().  (If that attempt fails,\r
-       then the calls will be excuted one at a time.)  The return\r
-       value will be an array of xmlrpcresp's (or 0 upon transport\r
-       failure.)\r
-\r
-2001-11-29  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * xmlrpc.inc: fixed problem with processing HTTP headers that\r
-       broke any payload with more than one consecutive newline in it.\r
-       also initialise the 'ac' array member to empty string at start.\r
-       * testsuite.php: added unit test to exercise above bug\r
-       * xmlrpcs.inc: fixed uninitialized variable $plist\r
-\r
-2001-09-25  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * xmlrpc.inc: applied urgent security fixes as identified by Dan\r
-       Libby\r
-\r
-2001-08-27  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * xmlrpc.inc: Merged in HTTPS support from Justin Miller, with a\r
-       few additions for better traceability of failure conditions. Added\r
-       small fix from Giancarlo Pinerolo. Bumped rev to 1.0. Changed\r
-       license to BSD license.\r
-\r
-2001-06-15  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * xmlrpcs.inc: Added \r into return MIME headers for server class\r
-\r
-2001-04-25  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * server.php: Added interop suite of methods.\r
-\r
-2001-04-24  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * testsuite.php: added in test case for string handling bug.\r
-\r
-       * xmlrpc.inc: merged in minor fixes from G Giunta to fix\r
-       noninitialization. Created new method, getval(), which includes\r
-       experimental support for recreating nested arrays, from Giunta and\r
-       Sofer. Fixed string handling bug where characters after </string>\r
-       but before </value> weren't ignored. Added in support for native\r
-       boolean type into xmlrpc_encode (Giunta).\r
-\r
-       * xmlrpcs.inc: updated copyright notice\r
-\r
-2001-01-15  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * xmlrpc.inc: fixed bug with creation of booleans. Put checks in\r
-       to ensure that numbers were really numeric. Fixed bug with\r
-       non-escaping of dollar signs in strings.\r
-\r
-       * testsuite.php: created test suite.\r
-\r
-2000-08-26  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * xmlrpcs.inc: added xmlrpc_debugmsg() function which outputs\r
-       debug information in comments inside the return payload XML\r
-\r
-       * xmlrpc.inc: merged in some changes from Dan Libby which fix up\r
-       whitespace handling.\r
-\r
-       * xmlrpcs.inc: added Content-length header on response (bug from\r
-       Jan Varga <varga@utcru.sk>. This means you can no longer print\r
-       during processing\r
-\r
-       * xmlrpc.inc: changed ereg_replace to str_replace in several\r
-       places (thanks to Dan Libby <dan@libby.com> for this).\r
-\r
-       * xmlrpc.inc: added xmlrpc_encode() and xmlrpc_decode() from Dan\r
-       Libby--these helper routines make it easier to work in native PHP\r
-       data structures.\r
-\r
-2000-07-21  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * xmlrpc.inc: added xmlrpc_client::setCredentials method to pass\r
-       in authorization information, and modified sendPayload* methods to\r
-       send this OK. Thanks to Grant Rauscher for the impetus to do this.\r
-       Also, made the client send empty <params></params> if there are no\r
-       parameters set by the user.\r
-\r
-       * doc/xmlrpc_php.sgml: updated documentation to reflect recent\r
-       changes\r
-\r
-\r
-2000-07-18  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * server.php: added examples.invertBooleans method to server as a\r
-       useful test method for boolean values.\r
-\r
-       * xmlrpc.inc: rearranged the way booleans are handled to fix\r
-       outstanding problems. Fixed calling addScalar() on arrays so it\r
-       works. Finally fixed backslashification issues to remove the\r
-       problem will dollar signs disappearing.\r
-\r
-       * booltest.php: really fixed booleans this time.\r
-\r
-2000-06-03  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * xmlrpcs.inc: made signature verification more useful - now\r
-       returns what it found was wrong\r
-\r
-       * xmlrpc.inc: fixed bug with decoding dateTimes. Also fixed a bug\r
-       which meant a PHP syntax error happened when attempting to receive\r
-       empty arrays or structs. Also fixed bug with booleans always being\r
-       interpreted as 'true'.\r
-\r
-       * server.php: Added validator1 suite of tests to test against\r
-       validator.xmlrpc.com\r
-\r
-\r
-2000-05-06  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * released 1.0b6\r
-\r
-       * added test.pl and test.py, Perl and Python scripts that exercise\r
-       server.php somewhat (but not a lot)\r
-\r
-       * added extra fault condition for a non 200 OK response from the\r
-       remote server.\r
-\r
-       * added iso8601_encode() and iso8601_decode() to give some support\r
-       for passing dates around. They translate to and from UNIX\r
-       timestamps. Updated documentation accordingly.\r
-\r
-       * fixed string backslashification -- was previously a little\r
-       overzealous! new behavior is '\' --> '\\' and '"' -->\r
-       '\"'. Everything else gets left alone.\r
-\r
-2000-04-12  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * updated and bugfixed the documentation\r
-\r
-       * fixed base 64 encoding to only happen at serialize() time,\r
-       rather than when a base64 value is created. This fixes the double\r
-       encoding bug reported by Nicolay Mausz\r
-       <castor@flying-dog.com>. The same approach ought to be taken with\r
-       encoding XML entities in the data - this is a TODO.\r
-\r
-       * integrated further code from Peter Kocks: used his new code for\r
-       send(), adding a second, optional, parameter which is a timeout\r
-       parameter to fsockopen()\r
-\r
-1999-10-11  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * added bug fixes from Peter Kocks <peter.kocks@baygate.com>\r
-\r
-1999-10-10  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * updated the documentation\r
-\r
-1999-10-08  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * added system.* methods and dispatcher, plus documentation\r
-\r
-       * fixed bug which meant request::getNumParams was returning an\r
-       incorrect value\r
-\r
-       * added signatures into the dispatch map. This BREAKS\r
-       COMPATIBILITY with previous releases of this code\r
-\r
-1999-08-18  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * made entity encoding and decoding transparent now on string\r
-       passing.\r
-\r
-       * de-globalised the globals in the parse routines, using an\r
-       associative array to hold all parser state $_xh\r
-\r
-       * changed default input encoding to be UTF-8 to match expectation\r
-\r
-       * separated out parseResponse into parseResponse and\r
-       parseResponseFile so that you can call parseResponse on a string\r
-       if you have one handy\r
-\r
-1999-07-20  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * Moved documentation into Docbook format\r
-\r
-1999-07-19  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * Added an echo server into server.php and echotest.php, a client\r
-       which will exercise the new echo routine.\r
-\r
-       * Added test for no valid value returned: in this case will now\r
-       throw the error "invalid payload"\r
-\r
-       * Added serialize() method to xmlrpcresp to return a string with\r
-       the response serialized as XML\r
-\r
-       * Added automatic encoding and decoding for base64 types\r
-\r
-       * Added setDebug() method to client to enable HTML output\r
-       debugging in the client\r
-\r
-1999-07-08  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * Improved XML parse error reporting on the server side to send it\r
-       back in a faultCode packet. expat errors now begin at 100\r
-\r
-1999-07-07  Edd Dumbill  <edd@usefulinc.com>\r
-\r
-       * Changed the structmem and arraymem methods of xmlrpcval to always\r
-       return xmlrpc vals whether they referred to scalars or complex\r
-       types.\r
-\r
-       * Added the server class and demonstrations\r
-\r
-       * Fixed bugs in the XML parsing and reworked it\r
+NB: All recent commits are available online.
+This file will not be updated further.
+See https://github.com/gggeek/phpxmlrpc/commits/master
+
+
+2014-02-3 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * bumped up requirements to php 5.1.0
+
+2014-01-10 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * xmlrpc.inc: when using curl and keepalive, reset curl handle if we did not get back an http 200 response (eg a 302)
+
+       * testsuite.php, parse_args.php: update testsuite
+
+       * debugger/controller.php: change default path to javascript debugger
+
+2010-05-23 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * xmlrpc.inc: omit port on http 'Host' header if it is 80;
+       add a namespace declaration in response if ex:nil is in use
+
+2010-04-12 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * testsuite.php, parse_args.php: testsuite allows interrogating https servers ignoring their certs
+
+       * xmlrpc.inc: method setAcceptedCompression was failing to disable reception
+       of compressed responses if the client supported them (triggering a bug with
+       https and php < 5.3 on windows); remove a php warning that could be
+       generated when using debug=2 in a client connecting to an https
+       server
+
+2010-04-11 - G. Giunta (giunta.gaetano@gmail.com) thanks amoe
+
+       * fixed: bad variables in "make install" make target
+
+2009-11-11 - G. Giunta (giunta.gaetano@gmail.com) thanks Ikiro Watanabe
+
+       * added INSTALL file
+
+2009-09-05 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * xmlrpcs.inc, xmlrpcs.inc: remove code that was left for compatibility
+       with php 4; use __METHOD__ constant for error messages instead of hardcoded
+       values
+
+       * xmlrpcs.inc: catch exceptions thrown during execution of invoked methods;
+       check for $_SERVER having been disabled via php.ini and log an error if so
+
+       * server.php, testsuite.php: add a new test and server method for exception
+       catching in the server
+
+       * xmlrpc.inc: added new method SetUserAgent to client to allow having different
+       user-agent http headers
+
+       * tagged and released as 3.0.0 beta
+
+2009-08-05 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * xmlrpc_wrappers.inc: improve compatibility with php 5.0 when registering
+       class/object methods
+
+2009-08-02 - G. Giunta (giunta.gaetano@gmail.com) thanks Laurens
+
+       * xmlrpcs.inc: add a new member var in server class to allow fine-tuning
+       of the encoding of returned values when the server is in 'phpvals' mode;
+       allow servers in 'xmlrpcvals' mode to also register plain php functions by
+       defining them in the dispatch map with an added option:
+       'parameters_type' => 'phpvals' (feature request #2806628)
+
+       * xmlrpc.inc: added new method xmrlpc_client::SetCurlOptions($array) to
+       allow extra flexibility in tweaking http config, such as explicitly
+       binding to an ip address (feature request #2787468); fix bad encoding if
+       same object is encoded twice using php_xmlrpc_encode; removed some by-ref
+       assignments and declarations
+
+2009-07-31 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * xmlrpc.inc: add support for dateTime objects in both in php_xmlrpc_encode
+       and as parameter for constructor of xmlrpcvals; add support for timestamps
+       as parameter for constructor of xmlrpcvals; add option 'dates_as_objects' to
+       php_xmlrpc_decode to return dateTime objects for xmlrpc datetimes
+
+       * benchmark.php, xmlrpc_wrappers.inc: remove usage of split(), deprecated in
+       php 5.3
+
+       * benchmark.php: fixed url of server page used for testing; improved
+       verification of correspondence of test results; added more variants for
+       http options comparison
+
+       * verify_compat.php: check for php version 5 for client side too
+
+       * makefile: remove from build the compat directory
+
+2009-07-26 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * server.php: remove usage of ereg*(), deprecated in php 5.3
+
+2009-07-16 - G. Giunta (giunta.gaetano@gmail.com) thanks Jean-Jacques Sarton
+
+       * xmlrpc.inc: add support for the <ex:nil/> from the apache library, both
+       in input and output (feature request #...)
+
+       * xmlrpc.inc, testsuite.php: remove usage of split(), deprecated in php 5.3
+
+       * testsuite.php: flush better results with output_buffering on
+
+       * server: php: avoid one warning about static function calls
+
+2009-07-02 - G. Giunta (giunta.gaetano@gmail.com) thanks Heiko Stuebner
+
+       * xmlrpc.inc: fix: when checking the parameters against the signatures xmlrpc
+       checks for "array" but PHP returns "Array" resulting in a not matches signature
+
+2009-05-07 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * replace all usage of '= & new' with '= new', as this is deprecated in php 5
+       and has been shown to cause problems too
+
+2009-05-06 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * create php4 branch, rename trunk to 3.0.0beta - it will be the php5-only version
+
+       * xmlrpc.inc: removed test for php version and inclusion of compat patches for really
+       really old versions of php 4
+
+2009-03-16 - G. Giunta (giunta.gaetano@gmail.com) thanks Tommaso Trani
+
+       * move from CVS to SVN on sf.net; file layout now is the same as in packaged lib
+
+       * xmlrpc.inc: fix php warning when receiving 'false' in a bool value
+
+       * Makefile, doc/Makefile: alter to follow new file layout
+
+       * tagged and released as 2.2.2
+
+2009-02-03 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * debugger/action.php: improve code robustness when parsing system.listmethods
+       and system.describemethods call
+
+       * xmlrpc.inc: format floating point values using the correct decimal separator
+       even when php locale is set to one that uses comma (bug #2517579);
+       use feof() to test if socket connections are to be closed instead of the
+       number of bytes read (bug #2556209)
+
+2008-10-29 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * xmlrpcs.inc: allow add_to_map server method to add docs for single params, too
+
+2008-09-20 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * xmlrpc_wrappers.inc: added the possibility to wrap for exposure as xmlrpc
+       methods plain php class methods, object methods and even whole classes
+
+       * testsuite.php, server.php: added test cases for the new code
+
+2008-09-07 - G. Giunta (giunta.gaetano@gmail.com) thanks Bruno Zanetti Melotti
+
+       * xmlrpc.inc: be more tolerant in detection of charset in http headers (fix for bug #2058158)
+
+2008-04-05 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * xmlrpc.inc: fix encoding of UTF8 chars outside of the BMP
+
+       * xmlrpcs.inc: fix detection of zlib.output_compression (thanks xbert)
+
+2008-03-06 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * tagged and released as 2.2.1
+
+       * Makefile: improve usage on windows xp despite cmd's broken mkdir
+
+2007-10-26 - G. Giunta (giunta.gaetano@gmail.com) thanks sajo_raftman
+
+       * xmlrpc.inc: remove one warning in xmlrpc_client creator
+
+2007-10-26 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * xmlrpc.inc: improve support for windows cp1252 character set (still
+       commented in the code)
+
+2007-09-05 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * xmlrpc.inc, xmlrps.inc: do not try to set invalid charsets as output for
+       xml parser, even if user set them up for internal_encoding (helps encoding
+       to exotic charsets, while decoding to UTF8)
+
+2007-09-05 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * xmlrpc.inc: fix parsing of '1e+1' as valid float
+
+2007-09-01 - G. Giunta (giunta.gaetano@gmail.com), thanks Frederic Lecointre
+
+       * xmlrpcs.inc: allow errorlevel 3 to work when prev. error handler was a static method
+
+       * testsuite.php: fix test on setCookie()
+
+2007-08-31 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * xmlrpc.inc: minor fix in cookie parsing
+
+2007-07-31 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * xmlrpc.inc: Fix usage of client::setcookie() for multiple cookies in non-ssl mode
+
+2007-07-26 - G. Giunta (giunta.gaetano@gmail.com) thanks Mark Olive
+
+       * xmlrpc.inc: Fix for bug # 1756274 (usage of cookies in ssl mode)
+
+2007-04-28 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * xmlrpc.inc: give more detailed curl information when DEBUG = 2; fix handling
+       of case where curl w. keepalive is used and one connection of many fails
+
+       * testsuite improvements: add one testcase; give feedbcak while tests are
+       running
+
+2007-04-01 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * doc/makefile, doc/custom.fo.xsl: improve pdf rendering of php source code
+
+       * makefile: recover version number from source instead of having it hardcoded
+
+2007-03-10 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * doc/makefile, doc/convert.php, doc/*.xsl: created customizations xslt to
+       produce a documentation more in line with the php manual, esp. with regards
+       to functions synopsis; added jellyfish book cover as local resource and a
+       screenshot of the debugger too; various updates to the manual source; added
+       a php script to highlight examples inside html docs
+
+2007-03-09 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * debugger/action.php: css tweak for IE
+
+       * added phpunit license file in the phpunit directory
+
+       * added link to license (on sf.net site) to many files
+
+2007-03-04 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * Makefile, doc/makefile: assorted improvements
+
+2007-03-03 - G. Giunta (giunta.gaetano@gmail.com)
+
+       * xmlrpc.inc: micro-optimization in declaration of global vars xmlrpcerr, xmlrpcstr
+
+2007-02-25 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * removed a couple of warnings emitted in testsuite.php
+
+       * doc/makefile: added command for invocation of xxe to generate docs
+
+       * better rendering of docs in xml+css format for function prototypes
+
+       * updated documentation
+
+       * tagged and released as 2.2
+
+2007-02-22 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * debugger: workaround for case of magic_quotes_gpc being set (properly
+       unescape user input); fix case of user not setting msg id in jsonrpc case
+       when executing a remote method; allow strings, false, true and null as msg id
+
+2007-02-13 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * testsuite.php: added one test for automatic encoding/decoding case
+
+2007-02-05 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: slightly faster encoding of UTF8 data to ascii
+
+2007-01-11 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: when calling client::multicall() with an unspecified http version,
+       use the client default rather than the fixed 'http 1.0'
+
+2006-09-17 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc, xmlrpcs.inc, testsuite.php: added support for <NIL/> and
+       system.getCapabilities, and one more testcase to go with it
+
+2006-09-05 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: fix support for https through proxies; client parses debug
+       messages sent by client even for compressed responses;
+
+       * testsuite.php, parse_args.php: added 3 test cases for proxy connections
+
+2006-09-01 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       xmlrpc_wrappers.inc: add two more options in wrap_xmlrpc_method and fix
+       typo to allow obj encoding
+
+2006-08-28 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc_wrappers.inc: more options added to wrap_php_function and
+       wrap_xmlrpc_method
+
+       * xmlrpc.inc: pave the way to support for <nil/>
+
+       * doc/xmlrpc_php.xml documentation updated
+
+       * tagged and released as 2.1
+
+2006-08-25 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: stricter parsing of incoming messages: detect two DATA elements
+       inside an ARRAY, a STRUCT or SCALAR inside an already filled VALUE
+
+       * testsuite.php: added two testcases to check for the above cases
+
+2006-08-24 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: more code optimization in xmlrpcval::serialize() and
+       php_xmlrpc_encode(); fixed bug where struct elements with non-ascii chars
+       in their name would not be properly encoded
+
+       * testsuite.php: added a testcase for the new bug
+
+2006-08-23 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * remove old code left in comments across many files; many more javadoc
+       comments added
+
+       * xmlrpc.inc: a bit of code optimization: reorder switch() statements of
+       xml parsing element handlers; inline code for xmlrpcval() - this breaks
+       new xmlrpcval('true') and changes error msgs on new xmlrpcval($x, 'invalid_type')
+
+       * testsuite.php: change according to above
+
+       * benchmark.php: basic support for xdebug 2 profiling
+
+2006-08-22 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: addscalar() and addstruct() where not returning 1 when adding
+       data to an already formed value
+
+2006-08-21 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpcs.inc, xmlrpc.inc: added support for emulating the xmlrpc-extension
+       API (the full emulation layer is part of the extras package);
+       fix support for the HTTP 'deflate' encoding
+
+       * xmlrpc.inc: better support for http compression with and without CURL;
+       a minor decoding speedup; added a new function: php_xmlrpc_decode_xml(),
+       that will convert into the appropriate object the xml representation of
+       either a request, response or a single value; log reception of invalid
+       datetime values
+
+       * xmlrpcs.inc: add a new parameter and return type to server->service();
+       let server->add_to_map() accept method definitions without parameter types
+
+       * xmlrpc_wrappers.inc: more logging of errors; wrap_php_functions now takes
+       more options; better support for jsonrpc; escape quote chars when wrapping
+       remothe servers / remote methods
+
+       * added cvs Id tag to files that missed it; speling fixes; updated NEWS files
+
+2006-08-07 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * assorted fixes to make the suite more compatible with php 4.0.5 and 5.x
+
+2006-07-02 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc_warppers.inc: added new function to wrap entire remote server into
+       a local php class; changed default calling synopsis of wrap_remote_method,
+       to ease passing multiple options at a time (but old syntax still works!)
+
+       * updated makefile, debugger/action.php in accord with the above
+
+2006-06-30 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * added to debugger capability to generate json-rpc code stubs
+
+       * added to debugger capability to load and launch self correctly if
+       controller.php is called directly from outside processes (single url access)
+
+2006-06-26 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * moved wrap_php_functions and wrap_xmlrpc_method into a file of their own.
+       This will let us add further stub functionality without the base lib growing too much.
+       All of the files that reference this functionality have been modified accordingly.
+
+       * made wrap_xmlrpc_method generate better code (with php type juggling), and
+       some phpdoc for the generated function, too
+
+       * added to debugger an option to produce for the user the generated php code
+       for wrapping a call to a remote method into a php function
+
+2006-06-22 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpcs.inc: added description of parameters for system.xxx methods (useful with
+       html-self-documenting servers);
+       server->service() now returns response object, in case user has need for it...
+
+       * xmlrpc.inc: save full response payload into xmlrpcresp obj for better debugging
+
+2006-06-15 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * verify_compat.php: more tests
+
+2006-06-09 Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpcs.inc: fixed sending of compressed responses when output compression
+       is already enabled in php.ini
+
+       * verify_compat.php: split tests between server and client cases
+
+2006-05-29  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * added new file: verify_compat.php, to help troubleshooting platform
+       support for the library; added it to makefile, too
+
+2006-05-24  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: removed residual usage of regexp in favour of  pregexps; fixed
+       a bug in specifying Host http header with non std ports
+
+2006-05-23  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: improvements to wrap_php_function: let it deal correctly
+       with php functions returning xmlrpcresp objs; make it generate also
+       docs for single parameters (useful for documenting_xmlrpc_server class)
+
+2006-05-22  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc, xmlrpcs.inc: minor performance tuning updates: replaced
+       some explode vs. split, ereg vs. preg, single vs. double quotes
+
+       * xmlrpc.inc: fix wrap_xmlrpc_method to NOT rebuild php objects received
+       from the server by default, as it might pose a security risk
+
+2006-04-24  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * minor fixes makefiles. Tagged and released as 2.0 final
+
+2006-04-22  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * debugger/*: added option to set cainfo; improve web layout
+
+       * xmlrpc.inc: set sslverifypeer to TRUE instaed of 1 by default
+
+       * doc/php_xmlrpc.xml: documentation updates
+
+2006-04-21  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: added option to set ca certs dir instead of single cert
+       (used to validate server in https connetions)
+
+2006-04-18  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: fixed bug in xmlrpcval::structmemexists()
+
+       * testsuite.php: added test case for xmlrpcval::structmemexists()
+
+2006-04-03  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: add support for Digest and NTLM authentication, both to server
+       and to proxies (note: must use CURL for this to work)
+
+       * debugger/*: add support for Digest/NTLM auth to remote servers
+
+2006-03-19  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: fix a bug parsing of 'true' bool values;
+       added a new method to the client class: SetCaCertificate;
+       add column number in xml parsing error messages;
+       fix serialization of messages to ISO-8859-1 charset with php 5 (by adding
+       encoding to the xml prologue of generated messages)
+
+       * xmlrpcs.inc: correct detection of charset in http headers;
+       add column number in xml parsing error messages;
+       fix serialization of responses to ISO-8859-1 charset with php 5 (by adding
+       encoding to the xml prologue of generated responses)
+
+       * testsuite.php: added two more tests on charset encoding
+
+       * NEWS: update info for impending release
+
+2006-03-23  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * added a new demo file: simple_call.php
+
+2006-02-20  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpcs.inc: more error checking and logging with regard to user-coded
+       method handler functions not being well behaved;
+       fix a case where error handler would not be reset upon user function
+       returning not valid xmlrpresp
+
+       * xmlrpc.inc: fix bug in detection of php 4.3.0
+
+       * Makefile: fix uppercase filenames
+
+2006-02-15
+
+       * xmlrpc.inc: parse 'true' and 'false' as valid booleans, even though the
+       spec is quite clear on that; fix small bug w. internal_encoding = utf8; add
+       definition of $GLOBALS['xmlrpcNull'] for extensibility, e.g. json or
+       extensions to the xmlrpc spec
+
+2006-02-05  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: fix bug in wrap_xmlrpc_method if client passed to function has
+       return_type=phpvals
+
+       * all demo files: review code, add more comments and information
+
+       * added 2 demo files: proxy.php (implementing an xmlrpc proxy server) and
+       wrap.php (showing usage of wrap_method_call)
+
+2006-02-04  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: fix bug in multicall in case of no fallback and server error
+
+2006-01-30  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: fix recursive serialization of xmlrpcvals loosing UTF8 charset;
+       correctly set type field of xmlrpcvals returned by send() calls
+
+       * xmlrpcs.inc: add to server checks for correct return type of user-coded
+       method handling function; tolerate xmlrpcval instead of xmlrpcresp
+
+       * minor change in xmlrpcresp internals, to ease subclassing (store payload
+       in an internal var on serialize(), same as xmlrpcclient does)
+
+2006-01-22  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * benchmark.php: do not run http 1.1 tests if CURL notfound
+
+       * Released as 2.0 Rc3
+
+2006-01-19  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: make xmlrpc_client::setDebug() accept int values instead of
+       boolean. At level 2, the request payload is printed to screen before being
+       sent; fix bug with repeated sending of the same msg object and using request
+       compression w. php 5.1.2 (objects passed by ref by default!!!)
+
+       * xmlrpcs.inc: fix detection of clients accepting compressed responses
+
+       * comment.php: remove warnings due to liberal usage of $HTTP_POST/GET_VARS
+
+       * benchmark.php: add a test using http compression of both requests and
+       responses
+
+       * testsuite.php: added test for fix in xmlrpc.inc
+
+2006-01-17  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpcs.php: minor fix: do not raise a PHP warning when std server is
+       called via GET (global HTTP_RAW_POST_DATA undefined). Some might have called
+       it a security breach (path disclosure)...
+
+2006-01-15  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * testsuite.php: minor fix to expected date format in http cookie hedaer
+       to cope with PHP 5.1.2
+
+2006-01-05  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpcs.inc: merge code from the 'extras' subclass that allows server
+       to register plain php functions in dispatch map instead of functions
+       accepting a single xmlrpcmgs obj parameter.
+       One step closer to the kitchen sink!!!
+
+2005-12-31  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpcs.inc: let the server accept 'class::method' syntax in the dispatch
+       map
+
+       * testsuite.php, server.php: added new tests for the recent charset encoding
+       capabilities
+
+2005-12-24  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: correctly serialize() string xmlrpcvals that have been
+       created out of non-string php variables, when internal encoding is UTF8;
+       serialize to '0' int and double values created out of non-string php
+       variables, eg. 'hello', instead of creating invalid xmlrpc;
+       extend the php_xmlrpc_encode function to allow serializing string values
+       to charsets other tha US-ASCII;
+       minor tweak to xml parsing to allow correct parsing of empty strings when
+       in 'direct to php values' mode
+
+       * xmlrpcs.inc: advances in system.multicall with plain php values
+
+2005-12-17  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpcs.inc: let the functions implementing the system.* methods work
+       fine when called with plain php values as parameters instead of xmlrpcmsg
+       objects (multicall not quite finished yet...);
+       encode level 3 debug info as base64 data, to avoid charset encoding hell
+
+       * xmlrpc.inc: added a new xmlrpc_2_php_type function, to get the name of
+       php types corresponding to xmlrpc types;
+       in debug mode, when detecting base64 server debug info, print it out fine
+
+       * server.php: cosmetic fixes
+
+2005-12-09  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: remove one warning emitted when received xml contains an
+       unknown tag; remove warnings emitted when custom error handler is set
+       and user calls php_xmlrpc_encode/decode without the 2nd parameter
+
+       * xmlrpcs.inc: added a param to service(), to allow the server to parse
+       data other than the POST body (useful for subclassing and debugging);
+       reworked the implementation of server debug messages at debug level 2:
+       since the debug info generated has no known charset, and putting it back
+       into the response's xml would most likely break it, send it back to the
+       client as a base64 encoded comment. Clients can decode it if they need it...
+       Add some more javadocs
+
+       * testsuite.php: modified the string test, to see if the server can echo
+       back to the client the received data without breaking the response's xml
+
+2005-12-05  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc, xmlrpcs.inc: let server and client objects decide if they
+       want to use some charset encoding other than US-ASCII for serialized data:
+       add a new var to both objects, and lots of parameters to function calls
+       that took none up to now;
+       refactored server method service() and parseRequest(), implementing a
+       new parserequestHeaders() method to explicitly deal with HTTP
+
+2005-12-01  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * moved the jsonrpc implementation and the new wsdl stuff to a separate
+       CVS module; updated the makefile to reflect it
+
+2005-11-24  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * modified php_xmlrpc_decode() to work on xmlrpcmessages too, besides
+       xmlrpcvals. To achieve this, added a new method: xmlrpcmsg::kindOf()
+
+2005-11-22  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * released as 2.0 RC2
+
+2005-11-21  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: fix warnings about references for PHP 4.1.X
+
+       * Whitespace cleanup on all the lib
+
+2005-11-16  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: rewritten xmlrpc_encode_entitites adding two extra parameters
+       that specify input and output charset encodings. This corrects the bug that
+       prevented native UTF-8 strings to be correctly serialized (to have them
+       encoded the user must set $xmlrpc_internalencoing appropriately).
+
+       * xmlrpc.inc: added new method xmlrpcmsg::parseResponseHeaders(), refactoring
+       parseResponse(). This makes the code more modular and eases subclassing.
+
+       * xmlrpc.inc: set cookies and http headers to xmlrpcresp objs even when calls
+       to send() do not complete correctly
+
+       * added new file: jsonrpcs.inc, to accomodate server jsonrpc objects in the future
+
+       * jsonrpc.inc: slow progress...
+
+2005-11-10  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: fixed the xmlrpc_client send and sendpayloadhttps methods
+       to fix errors in calling https servers;
+       added a new xmlrpc_client->setkey method to allow usage of client-side ssl
+       certs in recent php builds;
+       added to xmlrpcresp objects a content_type var, to be used in HTTP headers
+
+       * xmlrpcs.inc: separate generation of content-type http header and xml prologue
+       from the service() method, to ease subclassing
+
+2005-11-03  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: moved the 'text/xml' mimetype string as class var of the xmlrpcmsg
+       object instead of having it cabled into xmlrpc_client->send(): this allows to
+       create subclasses of xmlrpcmsg that use a different mimetype
+
+       * jsonrpc.inc: added a new file, with an extremely experimental set of classes,
+        designed to implement a json-rpc client and server, taking advantage of the
+        existing xml-rpc infrastructure
+
+2005-10-28  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: changed constructor method for xmlrpcresp, making it smarter in
+       case user does not declare the type of value it is passing to it;
+       minor changes in serialization of xmlrpcresp with error codes, so that it
+       utputs LF instead of CRLF on windows boxes after an FTP transfer of the code, too
+
+2005-10-26  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: added a new var of class xmlrpc_client, indicating what kind of
+       object will be stored in the value() of xmlrpcresp's gotten from the send()
+       method: xmlrpxc objects, plain php variables or raw xml. This allow the coder
+       to make use of xmlrpc_decode for better performances if he wishes so.
+       Modified creator of xmlrpcresp class to allow it to distinguish between being
+       created out of raw xml or a plain php string (in the former case, serialization
+       is still possible, opening a new world of opportunity for server-side programming:
+       the php function implementing a web service has to provide the xml for the
+       return value on its own).
+       Modified xmlrpc_client::multicall() to suit; also added a new parameter which
+       allows calls to multicall without automatic fallback to many-calls in case of
+       error (speeding up the process of doing a failed multicall() call quite a bit)
+       Fixed two bugs in guess_encoding.
+       Audited all regexps and fixed some.
+       xmlrpc_client::send() does not call xmlrpcmsg::parseresponsefile() anymore.
+       Shuffled parseresponse() a little bit
+
+       * testsuite.php: added a new testcase for the modifications to multicall():
+       now we test the case where xmlrpc_client returns php values, too
+
+2005-10-24  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: fixed guess_encoding() to always return uppercase chars
+
+       * added new file: benchmark.php. It contains a few tests used to evaluate
+       speed of the lib in common use cases
+
+       * added file parse_args.php, containing common code for benchmark and
+       testsuite, and modified testsuite.php accordingly
+
+       * modified makefile adding new files
+
+       * testsuite.php: added a couple of new test cases; fixed one warning
+       emitted in php 5 E_STRICT mode
+
+2005-10-20  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: modify 3d param of ParseResponse(), allowing the function to
+       return the raw xml received as value of the xmlrpcresponse object.
+       This allows eg. to have epi-xmlrpc decode the xml for faster execution.
+
+2005-10-09  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: fixed error that prevented usage of HTTPS (the client
+       always determined that ssl support was not present)
+
+2005-10-03  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc, xmlrpcs.inc: revert direction of stack growth during xml
+       parsing for faster execution time; add support for detecting charset
+       encoding of received xml; add support for cookies; better parsing of
+       javadoc when building stub code in wrap_php_function; add a lot of
+       javadoc comments everywhere; rewrite most error messages
+
+       * testsuite.php: add many tests for newly introduced features
+
+       * server.php: add a couple of new functions to support debugging new
+       features
+
+       * debugger: add switches to enable all the latest lib features; minor
+       improvements to layout
+
+       * synch included phpunit with latest PEAR release
+
+       * reorganize files included in the distribution in a new hierarchy of folders
+
+       * bump revision number to 2.0RC1 and release
+
+2005-8-14  Miles Lott <milos@groupwhere.org>
+
+       * xmlrpc.inc, xmlrpcs.inc: Remove all use of eval() to avoid potential
+       security hole.
+
+       * As of this release we are no longer php3-compatible.
+
+2005-8-10 Miles Lott <milos@groupwhere.org>
+
+       * xmlrpc.inc, xmlrpcs.inc: Switched to using $GLOBALS instead of calling
+       global $varname
+
+2005-07-22  Miles Lott <milos@groupwhere.org>
+
+       * Removed: bug_* files
+
+2005-07-14  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * debugger: added a workaround to disable using the debugger for attacking
+       older versions of the lib
+
+       * testsuite.php: added code to test wrap_xmlrpc_method;
+       use different wording for failed tests
+
+       * xmlrpcs.inc: change for() with foreach() in system.* methods implementations;
+       remove a possible cause of php warning;
+
+       * xmlrpc.inc: let wrap_php_function and wrap_xmlrpc_method find suitable
+       function names if default function names are already in use;
+       correct wrap_xmlrpc_method to not set http protocol to 1.0 when not asked to;
+       detect curl compiles without SSL
+
+2005-07-14  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: more auto-fix of xmlrpc_client path: '' -> '/';
+       change to the method used for detecting failed evals (php 4.0.x compatibility);
+       complete rework of return-by-ref functions to comply with php 4.4.0
+
+       * xmlrpcs.inc: change to the method used for detecting failed evals (php 4.0.x
+       compatibility)
+
+       * testsuite.php: major rewrite of the multi- tests, to give better feedback on
+       number of failed tests;
+       flush html page title to screen before starting tests;
+
+2005-07-13  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: let xmlrpcmsg creator be forgiving of target paths that miss the
+       starting '/' char;
+       completely reworked assign-by-ref to be compliant with php 4.4.0 stricter
+       warnings
+
+       * testsuite.php: added ability to be run from cli: (really dumb) separation of
+       html and plain text outputs + parsing of argv parameters
+
+2005-07-12  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: compatibility fixes with PHP versions 4.0.x (and remove some for
+       PHP 3)
+
+       * xmlrpcs.inc: compatibility fixes for PHP 4.0.x versions
+
+       * testsuite.php: better support for running with php versions 4.0.x;
+       do not generate runtime errors but finish tests anyway if some calls to
+       localhost fail;
+       correctly detect a localhost port different from 80 for running tests against
+
+2005-07-11  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: preliminary building of method signature and docs in
+       wrap_php_function;
+       fix a bug in extracting function description from javadoc block in
+       wrap_php_function;
+       small fix for better compatibility with php < 4.2.0
+
+       * added compat subdir with extra code, taken form PEAR package Compat, to let
+       the lib run fine with php 4 versions < 4.1
+
+2005-07-10  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: some nazi whitespace corrections;
+       declared global $xmlrpcBoolean too (was the only one missing);
+       used @eval inside getval() to have less path disclosure security reports filed
+       in the future;
+       added new global var: $xmlrpcValue, to be used in server dispatch maps as
+       placeholder for a param which can be of any kind;
+       big chunks (but still incomplete) of javadoc parsing in wrap_php_function
+       + changed type of return val - now it is the complete array to be put in the
+       dispatch map
+
+       * xmlrpcs.inc: let previous error handler be called by server to handle errors
+       even if in debug level 3;
+       default to compress responses if zlib installed;
+       added a new val useful for only checking number (not type) of params in method
+       calls;
+       let user use object methods in dispatch map using the
+       array($obj, 'fmethodname') format
+
+       * server.php: Added code called by testsuite.php to exercise registration of
+       object methods as xmlrpc methods and auto-registration of php functions as xmlrpc
+       methods
+
+       * testsuite.php: added tests to exercice server registering object methods as
+       xmlrpc methods and automatic registration of php functions as server methods;
+       added a hint to enable debug if some test goes wrong;
+       renamed https test for better clarity
+
+2005-07-07  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: added function to be used for 'guestimating' charset encoding of
+       received xml (not activated yet)
+
+       * server.php: Let server compress content by default if user asks so: it allows
+       testsuite to check for compressed responses
+
+       * testsuite.php: added suite of tests for compressed responses; test CURL
+       (http1.1) with all possible compression combinations too
+
+2005-07-06  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: Enable setting usage of keepalives on/off (for CURL cases);
+       implement compression of xmlrpc requests; enable new syntax of xmlrpclient
+       constructor: 1 - allow preferred http method to be set at creation time,
+       2 - allow user to insert a single complete URL as only parameter and parse it;
+       try to detect if curl is present whether it has been compiled w. zlib to enable
+       automatically the reception of compressed responses
+
+       * xmlrpcs.inc: do not add into logs the content of the request, if it was
+       received gzipped/deflated, to avoid breaking the xml sent back as response
+       (NB: might be investigated further: is the problem caused by windows chars in
+       the range 128-160 ?)
+
+       * testsuite.php: run all localhost tests 2 more times, to stress request
+       compression;
+       run all localhost tests in a row using keepalives, to test keepalive
+       functionality
+
+2005-07-05  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: let CURL pass back to caller function the complete PHP headers
+       as it did before: it enables better logging / debugging of communication;
+       small change to the way CURL declares its ability to receive compressed
+       messages (fix for the case where zlib is compiled in PHP but not in curl);
+       added Keep-alive (ON BY DEFAULT) for http 1.1 and https messages (had to modify
+       a lot of functions for that);
+       always make sure a 'Connection: close' header is sent with curl connections if
+       keep-alive is not wanted
+
+       * phpunit.php: switched to PEAR PHPUnit (rel 1.2.3), since it is maintained a
+       lot more than the old version we were using
+
+       * added new folder with code of phpunit classes
+
+       * testsuite.php: added a new run of tests to check for compliance of client
+       when using http 1.1;
+       switched to PEAR PHPUnit classes;
+       divided test for client ability to do multicall() into 2 separate tests
+
+2005-06-30  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       tagged and released version 1.1.1, backporting security fixes from HEAD
+
+2005-06-28  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpcs.inc: fix changes introuced yesterday in a rush;
+       do not list system.* methods for a server that has them explicitly disabled
+
+       * bug_inject.xml: new test case used to check for code injection vulnerability
+
+       * testsuite.php: added a test case for zero parameters method calls;
+       added two test cases for recently found code injection vulnerabilities
+
+2005-06-27  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: (tentative) fix for security problem reported by
+       security@gulftech.org: we were not properly php-escaping xml received for
+       BASE64 and NAME tags;
+       some more patching related to junk received in xml messages/responses: if the
+       PHP code built from the parsed xml is broken, catch any generated errors
+       without echoing it to screen but take note of the error and propagate to user
+       code
+
+       * xmlrpcs.inc: some more patching related to junk received in xml messages/
+       responses: if the PHP code built from the parsed xml is broken, catch any
+       generated errors without echoing it to screen but take note of the error and
+       propagate to user code
+
+2005-06-24  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: fixed php_xmlrpc_encode detection of php arrays (again!);
+       removed from wrap_php_function the part about setting a custom error handler
+       (it can be activated using the more general $server->setdebug(3) anyway)
+
+       * xmlrpcs.inc: added to server the capability to trap all processing errors
+       during execution of user functions and add them to debug info inside responses;
+       return a (new) xmlrpcerr response instead of raising some obscure php execution
+       error if there is an undefined function in the dispatch map
+
+       * testsuite.php: Added new testcases for recently implemented stuff
+
+2005-06-23  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: added new method: xmlrpcval->structmemexists, to check for
+       presence of a wanted struct member without having to loop through all members;
+       fix wrap_php_functions: correctly return false for php internal functions,
+       whose param list is unknown;
+       let addscalar fail as it should if called on struct vals;
+       fix addstruct: do not fail when called for adding stuff to initialized structs;
+       removed a warning generated when calling addscalar with inexistent type;
+       massive code review for speed: replaced each() loops with foreach(), removed
+       lots of useless assignments and duplications of data;
+       added 'http11' as valid method param for xmlrpclient->send: makes use of curl
+       for sending http 1.1 requests;
+       changed a couple '=' into '=&' where objects are returned;
+       fixed wrap_php_function() to better detect php errors while processing wrapped
+       function
+
+       * xmlrpcs.inc: Fix php warnings generated when clients requested method
+       signature / description for a method that had none in its dispatch map;
+       turned server->debug into an integer value that will change the amount of
+       logging going as comments into xmlrpc responses
+
+       * server.php: set default server debug level to 2
+
+       * testsuite.php: removed calls to deleted functions (xmlrpc_encode,
+       xmlrpc_decode);
+       added html page title describing target servers used for tests;
+       added an assign-by-ref
+
+       * phpunit.php: Do not consider as failures PHP 5 E_STRICT errors (arbitrary
+       choice, but lib is targeted at PHP 4)
+
+2005-06-22  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: removed lottsa old code that had been left in commented
+
+       * xmlrpc.inc: fixed setting of proxy port
+
+       * xmlrpc.inc: removed one warning when trying to decompress junk sent as
+       deflated response
+
+       * xmlrpc.inc: changed the error messages (but not the code) that will be found
+       in xmlrpcresponses when there are socket errors, to differentiate from HTTP
+       errors
+
+       * xmlrpc.inc: refactored xmlrpcclient->sendpayloadHTTPS: now it calls a new
+       method (sendpayloadCURL) that could be used also for generating HTTP 1.1
+       requests
+
+       * xmlrpc.inc: added two new methods: wrap_php_function and wrap_xmlrpc_method:
+       designed to let the lazy programmer automagically convert php functions to
+       xmlrpc methods and vice versa. Details are in the code
+
+       * debugger/*: added initial revision of a 'universal xmlrpc debugger'
+
+2005-06-20  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: replace usage of 'echo' with error_log when errors arise
+       in manipulation of xmlrpcval objects
+
+       * xmlrpc.inc: replaced <br> with <br /> in dump function
+
+       * xmlrpc.inc: added method structsize to xmlrpcval class (alias for arraysize)
+
+       * xmlrpc.inc: addarray() now will add extra members to an xmlrpcval object
+       of array type; addstruct() can be used to add members to an xmlrpcval object
+       of struct type
+
+       * xmlrpcs.inc: Added member allow_system_funcs to server: controls whether the
+       server accepts or not calls to system.* functions
+
+2005-05-10  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: fix regression in php_xmlrpc_encode when encoding php hashes;
+       fix decompression of gzip/deflated xmlrpc responses;
+       set user agent string correctly in SSL mode (was forgetting lib name);
+       add allowed encoding http headers in requests;
+       do not pass http headers back from curl to parseresponse, to avoid re-decoding
+       compressed xml or http 100 headers
+
+       * xmlrpcs.inc: added method setDebug;
+       renamed compress_output to compress_response;
+       do not try to set http headers if they have already been sent, because trying
+       to do so will raise a PHP error, and if headers have been sent something has
+       gone wrong already (shall we send a meaningful error response instead?)
+
+2005-05-08  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpcs.inc, xmlrpcs.inc: reverted to usage of '=& new' for better
+       performance on (some) php4 installs.
+       NB: PHP 3 compatibility is deprecated from now on!
+
+       * xmlrpc.inc: decode xmlrpc boolean type to native php boolean
+
+       * xmlrpcs.inc, xmlrpcs.inc: switched $_xh[$parser] to $_xh, since indexing
+       an array by object will give a warning in php 5 (and we were resetting the
+       array of _xh elements on every call anyway)
+
+       * xmlrpc.inc: commented unused code used originally for escaping content
+
+       * xmlrpc.inc: commented deprecated methods xmlrpc_encode and xmlrpc_decode
+
+       * xmlrpc.inc: php_xmlrpc_encode: encode integer-indexed php arrays as xmlrpc
+       arrays instead of structs; if object given to encode is an xmlrpcval return it
+       instead of reencoding (makes easier calling encode on an array of xmlrpcvals)
+
+       * xmlrpcs.inc: added $debug field to server class; if false will prevent
+       the server from echoing debug info back to the client as xml comment
+
+       * xmlrpcs.inc: let the server add to the debug messages the complete request
+       payload received and (if php installed as apache module) http headers, so that
+       the client in debug mode can echo a complete fingerprint of the communication
+
+       * xmlrpcs.inc: changed API of ParseRequest method: now it cannot be called
+       without a 'data' parameter; added 2nd parameter (http encoding); changed the
+       call to this method from inside service() method
+
+       * xmlrpc.inc, xmlrpcs.inc: enable both server and client to parse compressed xml
+       (if php is compiled with zlib); client should also be able to decode chunked
+       http encoding
+
+       * xmlrpc.inc: add support for proxies (only basic auth supported); default port
+       is 8080 (if left unspecified)
+
+       * xmlrpc.inc: use lowercase for names of http headers received (makes using
+       them much simpler, since servers can use any upper/lowercase combination)
+
+       * xmlrpc.inc: bumped version number to '2.0 beta'
+
+2005-05-08  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * release of version 1.1
+
+2005-04-24  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpcs.inc: removed charset declaration from xml prologue of responses,
+       since we are now escaping all non-ascii chars in an encoding-independent way
+
+       * bug_http.xml: modified to exercise some extra functonality of the lib
+       (it should now be failed by the current PEAR implementation of the lib)
+
+       * xmlrpc.inc: bumped up rev. number to 1.1
+
+       * doc/xmlrpc_php.xml, doc/announce1_1.txt: documentation updates
+
+       * Makefile: updated to reflect new xml doc source, modified filelist
+
+2005-04-17  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * client.php, agesort.php, introspect.php, introspect_demo.php,
+       which.php, test.pl, test.py: use as default target the server.php page hosted
+       on phpxmlrpc.sf.net
+
+       * server.php: fix for register_globals off; refer to docs on phpxmlrpc.sf.net
+
+2005-04-15 Miles Lott <milos@groupwhere.org>
+
+       code formatting and comments
+
+2005-04-03  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: make use of global var $xmlrpcName in building User_Agent HTTP
+       header (in conjunction with $xmlrpcVersion)
+
+       * agesort.php, client.php, comment.php, dicuss.php, mail.php, server.php,
+       which.php: various janitorial fixes
+       + always html escape content received from xmlrpc server or from user input
+       + make the scripts run fine with register_globals off an register_long_arrays off
+       + always use the functions php_xmlrpc_en(de)code, even if the EPI extension
+       is not installed
+       + in mail.php, allow user to see script source even if support for .phps files
+       is not configured in the local web server
+
+       * testsuite.php: better detection of local webserver hostname for running tests
+       against (if the user did not supply a webserver name)
+
+2005-03-21  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpcs.inc: revert to a PHP3 compatible script (change '=& new' to '= new')
+
+       * xmlrpc.inc: revert to a PHP3 compatible script (lottsa fixes)
+
+       * testsuite.php: default to using local server as test target if no user
+       provided values are available instead of heddley.com server
+
+       * testsuite.php: play nice to PHP3 in retrieving user-passed values
+
+       * testsuite.php: fix constructor method name for a type of tests
+
+       * phpunit.php: fix all cases of call-time-pass-by-ref
+
+       * phpunit.php: rename Exception class to _Exception if the script is run with
+       PHP 5 (exception is a reserverd word)
+
+2005-03-19  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: fixed bug in new http header parsing code in case there is
+       no correct separator between response headers and body
+
+       * xmlrpc.inc: added recognizing and stripping of HTTP/1.1 100 response headers
+
+       * xmlrpc.inc: strip extra whitespace from response body, as well as any junk
+       that comes after the last </MethodResponse> tag. It allows the server code to
+       be put on public providers that add e.g. javascript advertising to served pages
+
+       * xmlrpc.inc: removed unused parts of code, trailing whitespace
+
+       * xmlrpc.inc: fix possible bug (?) in xmlrpc_ee for BOOLEAN values: true was
+       being handled differently than false
+
+       * testsuite.php: added a new file-based test to stress the response parsing
+       modifications recently introduced; enabled debugging for file based tests
+
+2005-03-15  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: fixed missing declaration of global vars in xmlrpc_dh,
+       sendpayloadhttps and sendpayloadhttp10
+
+       * xmlrpc.inc: changed error message for invalid responses: 'enable debugging'
+       is more clear that 'enabling debugging' (the user is being encouraged to do it)
+
+       * xmlrpc.inc: rewrote HTTP response header parsing. It should be more tolerant
+       of invalid headers, give more accurate error messages and be marginally faster,
+       too.
+
+       * xmlrpc.inc: cosmetic whitespace fixes and remove useless one-liners
+
+       * xmlrpc.inc: build a shorter PHP command line to be evaluated for rebuilding
+       values from parsed xml: use '$val =& nex xmlrpcval("value")' for string values
+       instead of '$val =& nex xmlrpcval("value", $xmlrpcString)'
+
+       * xmlrpc.inc: fix change introduced 2005/01/30 moving call to curl_close()
+       too early: it did not work on error situations
+
+       * testsuite.php: fix name of testAddingTest method, renamed testErrosString
+       into testErrorString and removed useless warning for register_globals=off case
+
+2005-02-27  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: do not echo XML parsing error to screen (it is already dumped
+       into error log)
+
+       * xmlrpc.inc: set hdrs field into response object in case of XML parsing error
+       (uniform behaviour with other responses)
+
+2005-02-26  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: use global var $xmlrpcVersion as number for user agent string
+
+       * xmlrpcs.inc: eliminate server side PHP warning and give back to caller
+       a better error msg in case the called method exists but no signature matches
+       the number of parameters
+
+2005-02-20  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: accept a + sign in front of floats / integers, since the spec
+       clearly mentions it
+
+       * xmlrpc.inc, xmlrpcs.inc: renamed function XmlEntities to xmlrpc_encode_entitites,
+       to avoid using the same name as an array already defined
+
+       * xmlrpc.inc: fix bug introduced with escaping of UTF8 chars in xmlrpc error
+       responses: correct behaviour is to escape chars inside serialize(), not when
+       calling the xmlrpcresp creator
+
+       * testsuite.php: made test suite more friendly to modern PHP configs, allowing
+       register_globals to be off and to set in the URL all testing parameters;
+       added tests for newly introduced fixes; renamed existing tests acording to the
+       docs inside phpunit.php (e.g. no subclass of TestCase should have a name
+       starting with test...)
+
+2005-02-19  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: accept patch 683153 by mah0: if timeout is set, allow all socket
+       operations to timeout at the given time, not only the socket connection
+
+2005-02-13  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: be tolerant to double values received in exponential notation:
+       even though the spec forbids their usage PHP is fine with them
+
+       * xmlrpc.inc: fix bug: new xmlrpcval('-1') was creating an empty value instead
+       of a string value!
+
+       * xmlrpc.inc, xmlrpcs.inc: fix the payload encoding changes introduced by
+       Andres Salomon on 2004-03-17: sending named html entities inside an xml chunk
+       makes it invalid, and thus renders the lib absolutely non-interoperable with
+       any other xmlrpc implementation; moreover the current implementation only ever
+       worked for non-ascii requests, while breaking client-parsing of responses
+       containing non-ascii chars.
+       The principle of using entities is preserved though, because it allows the
+       client to send correct xml regardless of php internal charset encoding vs.
+       xml request charset encoding, but using 'character references' instead.
+
+       * xmlrpc.inc: encode (non-ascii) chars into charset entities also for error
+       strings
+
+       * xmlrpcs.inc: encode (non-ascii) chars into charset entities also for debug
+       messages
+
+       * xmlrpcs.inc: added 'Accept-Charset' header in http request to let the server
+       know what kind of charset encoding we do expect to be used for responses
+
+       * xmlrpc.inc, xmlrpcs.inc: explicitly tell the xml parser what charset the
+       application expects to receive content in (notably strings). A new variable,
+       $xmlrpc_internalencoding, (defaulting to ISO-8859-1) defines what charset the
+       parser will use for passing back string xmlrpcvals to the PHP application
+       (both server-side and client-side).
+       This allows transparent usage of e.g. UTF-8 for encoding xml messages between
+       server and client and ISO-8859-1 for internal string handling.
+       ISO-8859-1 is, AFAIK, PHP internal encoding for all installs except
+       mbstring-enabled ones.
+
+2005-02-12  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpcs.inc: use '$var =& new(' construct to assign objects: on older versions
+       of PHP objects are first built then copied over if the ampersand is omitted.
+       Using it should make the code a little bit faster...
+
+       * doc/xmlrpc.php: update lib version number, release date in preparation for
+       next release
+
+       * makefile: update lib version number in preparation for next release
+
+       * xmlrpc.inc: split up parsing of xmlrpc INT and DOUBLE values. This allows
+       finer-grained control over valid values: now the '.' char is not allowed
+       any more inside int values.
+
+       * xmlrpc.inc: fix for bug #560303: ints and doubles starting with '0' chars are
+       no more parsed as octal values
+
+2005-01-30  Gaetano Giunta <giunta.gaetano@gmail.com>
+
+       * xmlrpc.inc: Modifed last change by Miles: the functions php_xmlrpc_encode
+       and php_xmlrpc_decode are now always defined, regardless of the existence of
+       XMLRPC-EPI.  This allows users to start using these functions as the 'default'
+       functions, and pave the way for future deprecation of xmlrpc_encode/encode
+       while maintaining a stable API.
+
+       * xmlrpc.inc: use '$var =& new(' construct to assign objects: on older versions
+       of PHP objects are first built then copied over if the ampersand is omitted.
+       Using it should make the code a little bit faster...
+
+       * xmlrpc.inc: close curl connection as soon as possible for https requests:
+       it could save some memory / resources.
+
+       * xmlrpc.inc: added some extra info in the PHP error log message generated
+       when an invalid xmlrpc integer/float value is encountered and we try to
+       deserialize it.
+
+       * xmlrpc.inc: added @ char before fsockopen to avoid echoing useless warnings
+       when connection to server fails; added the same to avoid echoing warnings when
+       deserializing data of an unknown type
+
+       * xmlrpc.inc: reset the _xh array on each xmlrpc call: otherwise a new array
+       member is created for each consecutive call and never destroyed, thus making it
+       impossible to build an xmlrpc-client daemon beacuse of memory leaking.
+
+       * xmlrpc.inc: declare global the variables that are used as 'constants',
+       so that xmlrpc.inc will work even if it is included from within a function
+
+2004-12-27  Miles Lott <milos@groupwhere.org>
+       * xmlrpc.inc: A new constant, XMLRPC_EPI_ENABLED, is defined depending on
+       the existence of the function, xmlrpc_decode.  This function will exist in
+       PHP if the extension, XMLRPC-EPI (http://xmlrpc-epi.sourceforge.net), is
+       loaded.  It defines the functions xmlrpc_encode and xmlrpc_decode, which
+       will conflict with functions of the same name in xmlrpc.inc.  If this
+       extension is loaded, we instead use the names php_xmlrpc_encode and
+       php_xmlrpc_decode.  Please look at server.php, testsuite.php, etc., for
+       how this should be handled if using these functions.
+
+2003-04-17  Andres Salomon  <dilinger@voxel.net>
+       * xmlrpc.inc: encode strings using htmlentities() instead of
+       htmlspecialchars(), and add xmlrpc_html_entity_xlate().  This
+       should fix longstanding issues with sending weird chars (from
+       non-USASCII codesets like UTF-8, ISO-8859-1, etc) that caused
+       the xml parser to choke.  Multi-byte chars are now changed to
+       entities before sending, so that the xmlrpc server doesn't need
+       to know the encoding type of the POST data.
+       * xmlrpcs.inc: call xmlrpc_html_entity_xlate before parsing
+       request packet.  The parser chokes on unknown entities (the
+       entities created by htmlentities() are exactly that; html
+       entities, not xml entities), so they must be converted from
+       name form (&eacute;) to numerical form (&#233;).
+
+2003-01-12  Andres Salomon  <dilinger@voxel.net>
+
+       * released 1.0.99.2.
+       * Makefile: separate doc/Makefile a bit more from Makefile,
+       and add clean rules.
+
+2003-01-10  Andres Salomon  <dilinger@voxel.net>
+
+       * xmlrpc.inc: xmlrpcresp and parseResponse cleanups; variable
+       name renames ('xv' to 'val', for example), type checking, and
+       stricter default values.
+       * xmlrpc.inc: fix xmlrpcresp's faultcode; return -1 for FAULT
+       responses from the server whose faultcodes don't reflect any
+       errors.
+
+2003-01-08  Andres Salomon  <dilinger@voxel.net>
+
+       * xmlrpc.inc: rename $_xh[$parser]['ha'] to
+       $_xh[$parser]['headers'].
+       * xmlrpc.inc: fix bugs related to $_xh[$parser]['headers];
+       some places treated this as an array, others as a scalar.
+       Treat unconditionally as an array.  Also wrap header debugging
+       output in PRE tags.
+
+2002-12-17  Andres Salomon  <dilinger@voxel.net>
+
+       * released 1.0.99.
+       * Makefile: changed the tarball format/dist rule to a more
+       conventional form, as well as normal release updates.
+       * xmlrpc.inc: added setSSLVerifyPeer and setSSLVerifyHost; as
+       of curl 7.10, various certificate checks are done (by default).
+       The default for CURLOPT_SSL_VERIFYHOST is to ensure the common
+       name on the cert matches the provided hostname. This breaks a
+       lot of stuff, so allow users to override it.
+       * doc/xmlrpc_php.sgml: updated documentation accordingly.
+
+2002-09-06  Geoffrey T. Dairiki  <dairiki@dairiki.org>
+
+       Add support for system.multicall() to both the client
+       and the server.
+
+       * testsuite.php: Add new tests 'testServerMulticall',
+       and 'testClientMulticall'.
+
+       * xmlrpc.inc: Added new error messages for system.multicall().
+       * xmlrpcs.inc: Added new procedure call system.multicall().
+       See http://www.xmlrpc.com/discuss/msgReader$1208 for details.
+
+       * xmlrpc.inc: Added system.multicall functionality to
+       xmlrpc_client.  xmlrpc_client::send can now take an array of
+       xmlrpcmsg's as an argument.  In that case it will attempt
+       to execute the whole array of procure calls in a single
+       HTTP request using system.multicall().  (If that attempt fails,
+       then the calls will be excuted one at a time.)  The return
+       value will be an array of xmlrpcresp's (or 0 upon transport
+       failure.)
+
+2001-11-29  Edd Dumbill  <edd@usefulinc.com>
+
+       * xmlrpc.inc: fixed problem with processing HTTP headers that
+       broke any payload with more than one consecutive newline in it.
+       also initialise the 'ac' array member to empty string at start.
+       * testsuite.php: added unit test to exercise above bug
+       * xmlrpcs.inc: fixed uninitialized variable $plist
+
+2001-09-25  Edd Dumbill  <edd@usefulinc.com>
+
+       * xmlrpc.inc: applied urgent security fixes as identified by Dan
+       Libby
+
+2001-08-27  Edd Dumbill  <edd@usefulinc.com>
+
+       * xmlrpc.inc: Merged in HTTPS support from Justin Miller, with a
+       few additions for better traceability of failure conditions. Added
+       small fix from Giancarlo Pinerolo. Bumped rev to 1.0. Changed
+       license to BSD license.
+
+2001-06-15  Edd Dumbill  <edd@usefulinc.com>
+
+       * xmlrpcs.inc: Added \r into return MIME headers for server class
+
+2001-04-25  Edd Dumbill  <edd@usefulinc.com>
+
+       * server.php: Added interop suite of methods.
+
+2001-04-24  Edd Dumbill  <edd@usefulinc.com>
+
+       * testsuite.php: added in test case for string handling bug.
+
+       * xmlrpc.inc: merged in minor fixes from G Giunta to fix
+       noninitialization. Created new method, getval(), which includes
+       experimental support for recreating nested arrays, from Giunta and
+       Sofer. Fixed string handling bug where characters after </string>
+       but before </value> weren't ignored. Added in support for native
+       boolean type into xmlrpc_encode (Giunta).
+
+       * xmlrpcs.inc: updated copyright notice
+
+2001-01-15  Edd Dumbill  <edd@usefulinc.com>
+
+       * xmlrpc.inc: fixed bug with creation of booleans. Put checks in
+       to ensure that numbers were really numeric. Fixed bug with
+       non-escaping of dollar signs in strings.
+
+       * testsuite.php: created test suite.
+
+2000-08-26  Edd Dumbill  <edd@usefulinc.com>
+
+       * xmlrpcs.inc: added xmlrpc_debugmsg() function which outputs
+       debug information in comments inside the return payload XML
+
+       * xmlrpc.inc: merged in some changes from Dan Libby which fix up
+       whitespace handling.
+
+       * xmlrpcs.inc: added Content-length header on response (bug from
+       Jan Varga <varga@utcru.sk>. This means you can no longer print
+       during processing
+
+       * xmlrpc.inc: changed ereg_replace to str_replace in several
+       places (thanks to Dan Libby <dan@libby.com> for this).
+
+       * xmlrpc.inc: added xmlrpc_encode() and xmlrpc_decode() from Dan
+       Libby--these helper routines make it easier to work in native PHP
+       data structures.
+
+2000-07-21  Edd Dumbill  <edd@usefulinc.com>
+
+       * xmlrpc.inc: added xmlrpc_client::setCredentials method to pass
+       in authorization information, and modified sendPayload* methods to
+       send this OK. Thanks to Grant Rauscher for the impetus to do this.
+       Also, made the client send empty <params></params> if there are no
+       parameters set by the user.
+
+       * doc/xmlrpc_php.sgml: updated documentation to reflect recent
+       changes
+
+
+2000-07-18  Edd Dumbill  <edd@usefulinc.com>
+
+       * server.php: added examples.invertBooleans method to server as a
+       useful test method for boolean values.
+
+       * xmlrpc.inc: rearranged the way booleans are handled to fix
+       outstanding problems. Fixed calling addScalar() on arrays so it
+       works. Finally fixed backslashification issues to remove the
+       problem will dollar signs disappearing.
+
+       * booltest.php: really fixed booleans this time.
+
+2000-06-03  Edd Dumbill  <edd@usefulinc.com>
+
+       * xmlrpcs.inc: made signature verification more useful - now
+       returns what it found was wrong
+
+       * xmlrpc.inc: fixed bug with decoding dateTimes. Also fixed a bug
+       which meant a PHP syntax error happened when attempting to receive
+       empty arrays or structs. Also fixed bug with booleans always being
+       interpreted as 'true'.
+
+       * server.php: Added validator1 suite of tests to test against
+       validator.xmlrpc.com
+
+
+2000-05-06  Edd Dumbill  <edd@usefulinc.com>
+
+       * released 1.0b6
+
+       * added test.pl and test.py, Perl and Python scripts that exercise
+       server.php somewhat (but not a lot)
+
+       * added extra fault condition for a non 200 OK response from the
+       remote server.
+
+       * added iso8601_encode() and iso8601_decode() to give some support
+       for passing dates around. They translate to and from UNIX
+       timestamps. Updated documentation accordingly.
+
+       * fixed string backslashification -- was previously a little
+       overzealous! new behavior is '\' --> '\\' and '"' -->
+       '\"'. Everything else gets left alone.
+
+2000-04-12  Edd Dumbill  <edd@usefulinc.com>
+
+       * updated and bugfixed the documentation
+
+       * fixed base 64 encoding to only happen at serialize() time,
+       rather than when a base64 value is created. This fixes the double
+       encoding bug reported by Nicolay Mausz
+       <castor@flying-dog.com>. The same approach ought to be taken with
+       encoding XML entities in the data - this is a TODO.
+
+       * integrated further code from Peter Kocks: used his new code for
+       send(), adding a second, optional, parameter which is a timeout
+       parameter to fsockopen()
+
+1999-10-11  Edd Dumbill  <edd@usefulinc.com>
+
+       * added bug fixes from Peter Kocks <peter.kocks@baygate.com>
+
+1999-10-10  Edd Dumbill  <edd@usefulinc.com>
+
+       * updated the documentation
+
+1999-10-08  Edd Dumbill  <edd@usefulinc.com>
+
+       * added system.* methods and dispatcher, plus documentation
+
+       * fixed bug which meant request::getNumParams was returning an
+       incorrect value
+
+       * added signatures into the dispatch map. This BREAKS
+       COMPATIBILITY with previous releases of this code
+
+1999-08-18  Edd Dumbill  <edd@usefulinc.com>
+
+       * made entity encoding and decoding transparent now on string
+       passing.
+
+       * de-globalised the globals in the parse routines, using an
+       associative array to hold all parser state $_xh
+
+       * changed default input encoding to be UTF-8 to match expectation
+
+       * separated out parseResponse into parseResponse and
+       parseResponseFile so that you can call parseResponse on a string
+       if you have one handy
+
+1999-07-20  Edd Dumbill  <edd@usefulinc.com>
+
+       * Moved documentation into Docbook format
+
+1999-07-19  Edd Dumbill  <edd@usefulinc.com>
+
+       * Added an echo server into server.php and echotest.php, a client
+       which will exercise the new echo routine.
+
+       * Added test for no valid value returned: in this case will now
+       throw the error "invalid payload"
+
+       * Added serialize() method to xmlrpcresp to return a string with
+       the response serialized as XML
+
+       * Added automatic encoding and decoding for base64 types
+
+       * Added setDebug() method to client to enable HTML output
+       debugging in the client
+
+1999-07-08  Edd Dumbill  <edd@usefulinc.com>
+
+       * Improved XML parse error reporting on the server side to send it
+       back in a faultCode packet. expat errors now begin at 100
+
+1999-07-07  Edd Dumbill  <edd@usefulinc.com>
+
+       * Changed the structmem and arraymem methods of xmlrpcval to always
+       return xmlrpc vals whether they referred to scalars or complex
+       types.
+
+       * Added the server class and demonstrations
+
+       * Fixed bugs in the XML parsing and reworked it
diff --git a/INSTALL b/INSTALL
index 2a39bdf..b5eeddf 100644 (file)
--- a/INSTALL
+++ b/INSTALL
@@ -1,38 +1,38 @@
-XMLRPC for PHP\r
-\r
-Requirements\r
-------------\r
-\r
-The following requirements should be met prior to using 'XMLRPC for PHP': \r
-. PHP 5.1.0 or later\r
-. the php "curl" extension is needed if you wish to use SSL or HTTP 1.1 to\r
-  communicate with remote servers\r
-\r
-The php "xmlrpc" native extension is not required, but if it is installed,\r
-there will be no interference with the operation of this library.\r
-\r
-\r
-Installation instructions\r
--------------------------\r
-\r
-Installation of the library is quite easy:\r
-\r
-1. copy the contents of the lib/ folder to any location required by your\r
-   application (it can be inside the web server root or not).\r
-\r
-2. make sure your app can include those files. This can be achieved by setting\r
-   the PHP include path, either in the php.ini file or directly in the php code\r
-   of your application, using the 'set_include_path' function\r
-\r
-\r
-Example of php code allowing an application to import the library:\r
-\r
-set_include_path(get_include_path() . PATH_SEPARATOR . '/path/to/phpxmlrpc/lib/');\r
-require_once( 'xmlrpc.inc' );\r
-require_once( 'xmlrpcs.inc' );\r
-require_once( 'xmlrpc_wrappers.inc' );\r
-\r
-\r
-Please note that usage of the 'make' command for installation of the library is\r
-not recommended, as it will generally involve editing of the makefile for a\r
-succesfull run.\r
+XMLRPC for PHP
+
+Requirements
+------------
+
+The following requirements should be met prior to using 'XMLRPC for PHP': 
+. PHP 5.1.0 or later
+. the php "curl" extension is needed if you wish to use SSL or HTTP 1.1 to
+  communicate with remote servers
+
+The php "xmlrpc" native extension is not required, but if it is installed,
+there will be no interference with the operation of this library.
+
+
+Installation instructions
+-------------------------
+
+Installation of the library is quite easy:
+
+1. copy the contents of the lib/ folder to any location required by your
+   application (it can be inside the web server root or not).
+
+2. make sure your app can include those files. This can be achieved by setting
+   the PHP include path, either in the php.ini file or directly in the php code
+   of your application, using the 'set_include_path' function
+
+
+Example of php code allowing an application to import the library:
+
+set_include_path(get_include_path() . PATH_SEPARATOR . '/path/to/phpxmlrpc/lib/');
+require_once( 'xmlrpc.inc' );
+require_once( 'xmlrpcs.inc' );
+require_once( 'xmlrpc_wrappers.inc' );
+
+
+Please note that usage of the 'make' command for installation of the library is
+not recommended, as it will generally involve editing of the makefile for a
+succesfull run.
diff --git a/NEWS b/NEWS
index 195b6a3..5d36f47 100644 (file)
--- a/NEWS
+++ b/NEWS
-XML-RPC for PHP version 3.0.1 - 201X/Y/Z\r
-\r
-Taking baby steps to modern-world php, this release is now tested using Travis ( https://travis-ci.org/ ).\r
-\r
-Improved: no need to call anymore $client->setSSLVerifyHost(2) to silence a curl warning when using https with recent curl builds\r
-\r
-\r
-XML-RPC for PHP version 3.0.0 - 2014/6/15\r
-\r
-This release corrects all bugs that have been reported and successfully reproduced since\r
-version 3.0.0 beta.\r
-\r
-The requirements have increased to php 5.1.0 - which is still way older than what you should be running for any serious purpose, really.\r
-\r
-It also is the first release to be installable via composer.\r
-\r
-See the Changelog file or the pdf docs for a complete list of changes.\r
-\r
-\r
-XML-RPC for PHP version 3.0.0 beta - 2009/09/05\r
-\r
-This is the first release of the library to only support PHP 5.\r
-Some legacy code has been removed, and support for features such as exceptions\r
-and dateTime objects introduced.\r
-\r
-The "beta" tag is meant to indicate the fact that the refactoring has been more widespread\r
-than in precedent releases and that more changes are likely to be introduced with time -\r
-the library is still considered to be production quality.\r
-\r
-* improved: removed all usage of php functions deprecated in php 5.3, usage of assign-by-ref when creating new objects etc...\r
-* improved: add support for the <ex:nil/> tag used by the apache library, both in input and output\r
-* improved: add support for dateTime objects in both in php_xmlrpc_encode and as parameter for constructor of xmlrpcval\r
-* improved: add support for timestamps as parameter for constructor of xmlrpcval\r
-* improved: add option 'dates_as_objects' to php_xmlrpc_decode to return dateTime objects for xmlrpc datetimes\r
-* improved: add new method SetCurlOptions to xmrlpc_client to allow extra flexibility in tweaking http config, such as explicitly binding to an ip address\r
-* improved: add new method SetUserAgent to xmrlpc_client to to allow having different user-agent http headers\r
-* improved: add a new member variable in server class to allow fine-tuning of the encoding of returned values when the server is in 'phpvals' mode\r
-* improved: allow servers in 'xmlrpcvals' mode to also register plain php functions by defining them in the dispatch map with an added option\r
-* improved: catch exceptions thrown during execution of php functions exposed as methods by the server\r
-* fixed: bad encoding if same object is encoded twice using php_xmlrpc_encode\r
-\r
-\r
-XML-RPC for PHP version 2.2.2 - 2009/03/16\r
-\r
-This release corrects all bugs that have been reported and sucesfully reproduced since\r
-version 2.2.1.\r
-Regardless of the intimidating message about dropping PHP 4 support, it still does\r
-support that ancient, broken and insecure platform.\r
-\r
-\r
-* fixed: php warning when receiving 'false' in a bool value\r
-* fixed: improve robustness of the debugger when parsing weird results from non-compliant servers\r
-* fixed: format floating point values using the correct decimal separator even when php locale is set to one that uses comma\r
-* fixed: use feof() to test if socket connections are to be closed instead of the number of bytes read (rare bug when communicating with some servers)\r
-* fixed: be more tolerant in detection of charset in http headers\r
-* fixed: fix encoding of UTF8 chars outside of the BMP plane\r
-* fixed: fix detection of zlib.output_compression\r
-* improved: allow the add_to_map server method to add docs for single params too\r
-* improved: added the possibility to wrap for exposure as xmlrpc methods plain php class methods, object methods and even whole classes\r
-\r
-\r
-XML-RPC for PHP version 2.2.1 - 2008/03/06\r
-\r
-This release corrects all bugs that have been reported and sucesfully reproduced.\r
-It is the last release of the library that will support PHP 4.\r
-\r
-* fixed: work around bug in php 5.2.2 which broke support of HTTP_RAW_POST_DATA\r
-* fixed: is_dir parameter of setCaCertificate() method is reversed\r
-* fixed: a php warning in xmlrpc_client creator method\r
-* fixed: parsing of '1e+1' as valid float\r
-* fixed: allow errorlevel 3 to work when prev. error handler was a static method\r
-* fixed: usage of client::setcookie() for multiple cookies in non-ssl mode\r
-* improved: support for CP1252 charset is not part or the library but almost possible\r
-* improved: more info when curl is enabled and debug mode is on\r
-\r
-\r
-XML-RPC for PHP version 2.2 - 2007/02/25\r
-\r
-This release corrects a couple of bugs and adds a few minor features.\r
-\r
-* fixed: debugger errors on php installs with magic_quotes_gpc on\r
-* fixed: support for https connections via proxy\r
-* fixed: wrap_xmlrpc_method() generated code failed to properly encode php objects\r
-* improved: slightly faster encoding of data which is internally UTF-8\r
-* improved: debugger always generates a 'null' id for jsonrpc if user omits it\r
-* new: debugger can take advantage of a graphical value builder\r
-  (it has to be downloaded separately, as part of jsxmlrpc package)\r
-* new: support for the <NIL/> xmlrpc extension\r
-* new: server support for the system.getCapabilities xmlrpc extension\r
-* new: wrap_xmlrpc_method() accepts two new options: debug and return_on_fault\r
-\r
-\r
-XML-RPC for PHP version 2.1 - 2006/08/28\r
-\r
-This release corrects quite a few bugs and adds some interesting new features.\r
-There is a minor security enhancement and overall speedup too.\r
-\r
-It has been tested with PHP 4.0.5 up to 4.4.4 and 5.1.5.\r
-Please note that 404pl1 is NOT supported, and has not been since 2.0.\r
-\r
-*** PLEASE READ CAREFULLY BELOW ***\r
-\r
-CHANGES THAT MIGHT AFFECT DEPLOYED APPLICATIONS:\r
-\r
-The wrap_php_function and wrap_xmlrpc_method functions have been moved out of\r
-the base library file xmlrpc.inc into a file of their own: xmlrpc_wrappers.inc.\r
-You will have to include() / require() it in your scripts if you have been using\r
-those functions.\r
-\r
-For increased security, the automatic rebuilding of php object instances out of\r
-received xmlrpc structs in wrap_xmlrpc_method() has been disabled (but it can be\r
-optionally reenabled).\r
-\r
-The constructor of xmlrpcval() values has seen major changes, and it will not\r
-throw a php warning anymore when invoked using an unknown xmlrpc type: the\r
-error will only be written to php error log. Also new xmlrpcval('true', 'boolean')\r
-is not supported anymore.\r
-\r
-MAJOR IMPROVEMENTS:\r
-\r
-The new function php_xmlrpc_decode_xml() will take the xml representation of\r
-either an xmlrpc request, response or single value and return the corresponding\r
-php-xmlrpc object instance.\r
-\r
-Both wrap_php_function() and wrap_xmlrpc_method() functions accept many more\r
-options to fine tune their behaviour, including one to return the php code to\r
-be saved and later used as standalone php script.\r
-\r
-A new function wrap_xmlrpc_server() has been added, to wrap all (or some) of the\r
-methods exposed by a remote xmlrpc server into a php class.\r
-\r
-Lib internals have been modified to provide better support for grafting extra\r
-functionality on top of it. Stay tuned for future releases of the EXTRAS package.\r
-\r
-Last but not least a new file has been added: verify_compat.php, to help users\r
-diagnose the level of compliance of the current php install with the library.\r
-\r
-CHANGELOG IN DETAIL:\r
-\r
-* fixed bug 1311927: client not playing nice with some proxy/firewall on ports != 80\r
-* fixed bug 1334340: all ereg_ functions have been replaced with corresponding preg_\r
-* fixed bug: wrong handling of 'deflate' http encoding, both server and client side\r
-* fixed bug: sending compressed responses when php output compression is enabled was not working\r
-* fixed bug: addarray() and addstruct() where not returning 1 when adding data to already initialized values\r
-* fixed bug: non-ascii chars used in struct element names where not being encoded correctly\r
-* restored compatibility with php 4.0.5 (for those poor souls still stuck on it)\r
-* server->service() now returns either the payload or xmlrpcresp instance\r
-* server->add_to_map() now accepts methods with no param definitions\r
-* added new function: php_xmlrpc_decode_xml()\r
-* added new function: wrap_xmlrpc_server()\r
-* major improvements and security enhancements to wrap_php_function() and wrap_xmlrpc_method()\r
-* documentation for single parameters of exposed methods can be added to the dispatch map\r
-  (and turned into html docs in conjunction with a future release of the extras package)\r
-* full response payload is saved into xmlrpcresp object for further debugging\r
-* stricter parsing of incmoing xmlrpc messages: two more invalid cases are now detected\r
-  (double data element inside array and struct/array after scalar inside value element)\r
-* debugger can now generate code that wraps a remote method into php function (works for jsonrpc, too)\r
-* debugger has better support for being activated via a single GET call (for integration into other tools?)\r
-* more logging of errors in a lot of situations\r
-* javadoc documentation of lib files almost complete\r
-* the usual amount of new testcases in the testsuite\r
-* many performance tweaks and code cleanups\r
-* added foundation for emulating the API of the xmlrpc extension (extras package needed)\r
-\r
-\r
-XML-RPC for PHP version 2.0 - 2006/04/24\r
-\r
-I'm pleased to announce XML-RPC for PHP version 2.0, final.\r
-\r
-With respect to the last release candidate, this release corrects a few small\r
-bugs and adds a couple of new features: more authentication options (digest and\r
-ntlm for servers, ntlm for proxies, and some https custom certificates stuff);\r
-all the examples have been reviewed and some demo files added,\r
-including a ready-made xmlrpc proxy (useful e.g. for ajax calls, when the xmlrpc\r
-client is a browser); the server logs more warning messages for incorrect situations;\r
-both client and server are more tolerant of commonly-found mistakes.\r
-The debugger has been upgraded to reflect the new client capabilities.\r
-\r
-In greater detail:\r
-\r
-* fixed bug: method xmlrpcval::structmemexists($value) would not work\r
-* fixed bug: wrap_xmlrpc_method would fail if invoked with a client object that\r
-  has return_type=phpvals\r
-* fixed bug: in case of call to client::multicall without fallback and server error\r
-* fixed bug: recursive serialization of xmlrpcvals loosing specified UTF8 charset\r
-* fixed bug: serializing to ISO-8859-1 with php 5 would raise an error if non-ascii\r
-  chars where found when decoding\r
-* new: client can use NTLM and Digest authentication methods for https and http 1.1\r
-  connections; authentication to proxy can be set to NTLM, too\r
-* new: server tolerates user functions returning a single xmlrpcval object instead\r
-  of an xmlrpcresp\r
-* new: server does more checks for presence and correct return type of user\r
-  coded method handling functions, and logs inconsistencies to php error log\r
-* new: client method SetCaCertificate($cert, $is_dir) to validate server against\r
-* new: both server and client tolerate receiving 'true' and 'false' for bool values\r
-  (which btw are not valid according to the xmlrpc spec)\r
-\r
-\r
-XML-RPC for PHP version 2.0RC3 - 2006/01/22\r
-\r
-This release corrects a few bugs and adds some interesting new features.\r
-It has been tested with PHP up to 4.4.2 and 5.1.2.\r
-\r
-* fixed bug: server not recognizing clients that declare support for http compression\r
-* fixed bug: serialization of new xmlrpcval (8, 'string') when internal encoding\r
-  set to UTF-8\r
-* fixed bug: serialization of new xmlrpcval ('hello', 'int') would produce\r
-  invalid xml-rpc\r
-* new: let the server accept 'class::method' syntax in the dispatch map\r
-* new: php_xmlrpc_decode() can decode xmlrpcmessage objects\r
-* new: both client and server can specify a charset to be used for serializing\r
-  values instead of the default 'US-ASCII+xml-entities-for-other-characters'.\r
-  Values allowed: ISO-8859-1 and UTF-8\r
-* new: the server object can register 'plain' php functions instead of functions\r
-  that accept a single parameter of type xmlrpcmsg. Faster, uses less memory\r
-  (but comes with minor drawbacks as well, read the manual for more details)\r
-* new: client::setDebug(2) can be used to have the request payload printed to\r
-  screen before being sent\r
-* new: server::service($data) lets user parse data other than POST body, for\r
-  easier testing / subclassing\r
-* changed: framework-generated debug messages are sent back by the server base64\r
-  encoded, to avoid any charset/xml compatibility problem\r
-* other minor fixes\r
-\r
-The usual refactoring of a lot of (private) methods has taken place, with new\r
-parameters added to some functions.\r
-Javadoc documentation has been improved a lot.\r
-The HTML documentation has been shuffled around a bit, hoping to give it a more\r
-logical organization.\r
-\r
-The experimental support for the JSON protocol has been removed, and will be\r
-packaged as a separate download with some extra very interesting stuff (human\r
-readable auto-generated documentation, anyone?).\r
-\r
-\r
-XML-RPC for PHP version 2.0RC2 - 2005/11/22\r
-\r
-This release corrects a few bugs and adds basically one new method for better\r
-HTTPS support:\r
-\r
- * fixed two bugs that prevented xmlrpc calls to take place over https\r
- * fixed two bugs that prevented proper recognition of xml character set\r
-   when it was declared inside the xml prologue\r
- * added xmlrpc_client::setKey($key, $keypass) method, to allow using client\r
-   side certificates for https connections\r
- * fixed bug that prevented proper serialization of string xmlrpcvals when\r
-   $xmlrpc_internalencoding was set to UTF-8\r
- * fixed bug in xmlrpc_server::echoInput() (and marked method as deprecated)\r
- * correctly set cookies/http headers into xmlrpcresp objects even when the\r
-   sned() method call fails for some reason\r
- * added a benchmark file in the testsuite directory\r
-\r
-A couple of (private/protected) methods have been refactored, as well as a\r
-couple of extra parameters added to some (private) functions - this has no\r
-impact on the public API and should be of interest primarily to people extending\r
-/ subclassing the lib.\r
-\r
-There is also new, PARTIAL support for the JSON-RPC protocol, implemented in\r
-two files in the extras dir (more info about json-rpc at http://json-rpc.org)\r
-\r
-\r
-XML-RPC for PHP version 2.0RC1 - 2005/10/03\r
-\r
-I'm pleased to announce XML-RPC for PHP version 2.0, release candidate 1.\r
-\r
-This release introduces so many new features it is almost impossible to list them\r
-here, making the library finally on pair with, if not more advanced than, any other\r
-similar offer (e.g. the PEAR XMLRPC package or the Incutio IXR library).\r
-No, really, trust me.\r
-\r
-The minimum supported PHP version is now 4.2 - natively - or 4.0.4pl1 - by usage of\r
-a couple of compatibility classes (code taken from PEAR php_compat package).\r
-\r
-The placement of files and directories in the distribution has been deeply modified,\r
-in the hope of making it more clear, now that the file count has increased.\r
-I hope you find it easy.\r
-\r
-Support for "advanced" HTTP features such as cookies, proxies and keep-alives has\r
-been added at last.\r
-\r
-It is now much easier to convert between xmlrpcval objects and php values, and\r
-in fact php_xmlrpc_encode and php_xmlrpc_decode are now the recommended methods\r
-for all cases, except when encoding base64 data.\r
-\r
-Two new (experimental) functions have been added, allowing automagic conversion\r
-of a php function into an xmlrpc method to be exposed and vice-versa.\r
-\r
-PHP objects can be now automatically serialized as xmlrpc struct values and\r
-correctly deserialized on the other end of the transmission, provided that the\r
-same class definition is present on both sides and no object members are of\r
-type resource.\r
-\r
-A lot of the existing class methods have been overloaded with extra parameters\r
-or new functionality, and a few added ex-novo, making usage easier than ever.\r
-\r
-A complete debugger solution is included in the distribution. It needs a web server\r
-to run (a freely available version of the same debugger is accessible online, it\r
-can be found at http://phpxmlrpc.sourceforge.net).\r
-\r
-For a more detailed list of changes, please read carefully chapter 2 of the\r
-included documentation, or, even better, take a look at the source code, which\r
-is commented in javadoc style quite a bit.\r
-\r
-\r
-XML-RPC for PHP version 1.2 - 2005/08/14\r
-\r
-This removes all use of eval(), which is a potential security problem.\r
-All users are encouraged to upgrade as soon as possible.\r
-As of this release we are no longer php3-compatible.\r
-\r
-\r
-XML-RPC for PHP version 1.1.1 - 2005/06/30\r
-\r
-This is a security vulnerability fix release.\r
-All users are invited to upgrade as soon as possible.\r
-\r
-\r
-XML-RPC for PHP version 1.1 - 2005/05/03\r
-\r
-I'm pleased to announce XML-RPC for PHP version 1.1\r
-It's taken two years to get to the this point, but here we are, finally.\r
-\r
-This is a bugfix and maintenance release. No major new features have been added.\r
-All known bugs have been ironed out, unless fixing would have meant breaking\r
-the API.\r
-The code has been tested with PHP 3, 4 and 5, even tough PHP 4 is the main\r
-development platform (and some warnings will be emitted when runnning PHP5).\r
-\r
-Notheworthy changes include:\r
-\r
- * do not clash any more with the EPI xmlrpc extension bundled with PHP 4 and 5\r
- * fixed the unicode/charset problems that have been plaguing the lib for years\r
- * proper parsing of int and float values prepended with zeroes or the '+' char\r
- * accept float values in exponential notation\r
- * configurable http user-agent string\r
- * use the same timeout on client socket reads as used for connecting\r
- * more explicative error messages in xmlrpcresponse in many cases\r
- * much more tolerant parsing of malformed http responses from xmlrpc servers\r
- * fixed memleak that prevented the client to be used in never-ending scripts\r
- * parse bigger xmlrpc messages without crashing (1MB in size or more)\r
- * be tolerant to xmlrpc responses generated on public servers that add\r
-   javascript advertising at the end of hosted content\r
- * the lib generates quite a few less PHP warnings during standard operation\r
-\r
-This is the last release that will support PHP 3.\r
-The next release will include better support for PHP 5 and (possibly) a slew of\r
-new features.\r
-\r
-The changelog is available at:\r
-http://cvs.sourceforge.net/viewcvs.py/phpxmlrpc/xmlrpc/ChangeLog?view=markup\r
-\r
-Please report bugs to the XML-RPC PHP mailing list or to the sourceforge project\r
-pages at http://sourceforge.net/projects/phpxmlrpc/\r
+XML-RPC for PHP version 3.0.1 - 201X/Y/Z
+
+Taking baby steps to modern-world php, this release is now tested using Travis ( https://travis-ci.org/ ).
+
+Improved: no need to call anymore $client->setSSLVerifyHost(2) to silence a curl warning when using https with recent curl builds
+
+
+XML-RPC for PHP version 3.0.0 - 2014/6/15
+
+This release corrects all bugs that have been reported and successfully reproduced since
+version 3.0.0 beta.
+
+The requirements have increased to php 5.1.0 - which is still way older than what you should be running for any serious purpose, really.
+
+It also is the first release to be installable via composer.
+
+See the Changelog file or the pdf docs for a complete list of changes.
+
+
+XML-RPC for PHP version 3.0.0 beta - 2009/09/05
+
+This is the first release of the library to only support PHP 5.
+Some legacy code has been removed, and support for features such as exceptions
+and dateTime objects introduced.
+
+The "beta" tag is meant to indicate the fact that the refactoring has been more widespread
+than in precedent releases and that more changes are likely to be introduced with time -
+the library is still considered to be production quality.
+
+* improved: removed all usage of php functions deprecated in php 5.3, usage of assign-by-ref when creating new objects etc...
+* improved: add support for the <ex:nil/> tag used by the apache library, both in input and output
+* improved: add support for dateTime objects in both in php_xmlrpc_encode and as parameter for constructor of xmlrpcval
+* improved: add support for timestamps as parameter for constructor of xmlrpcval
+* improved: add option 'dates_as_objects' to php_xmlrpc_decode to return dateTime objects for xmlrpc datetimes
+* improved: add new method SetCurlOptions to xmrlpc_client to allow extra flexibility in tweaking http config, such as explicitly binding to an ip address
+* improved: add new method SetUserAgent to xmrlpc_client to to allow having different user-agent http headers
+* improved: add a new member variable in server class to allow fine-tuning of the encoding of returned values when the server is in 'phpvals' mode
+* improved: allow servers in 'xmlrpcvals' mode to also register plain php functions by defining them in the dispatch map with an added option
+* improved: catch exceptions thrown during execution of php functions exposed as methods by the server
+* fixed: bad encoding if same object is encoded twice using php_xmlrpc_encode
+
+
+XML-RPC for PHP version 2.2.2 - 2009/03/16
+
+This release corrects all bugs that have been reported and sucesfully reproduced since
+version 2.2.1.
+Regardless of the intimidating message about dropping PHP 4 support, it still does
+support that ancient, broken and insecure platform.
+
+
+* fixed: php warning when receiving 'false' in a bool value
+* fixed: improve robustness of the debugger when parsing weird results from non-compliant servers
+* fixed: format floating point values using the correct decimal separator even when php locale is set to one that uses comma
+* fixed: use feof() to test if socket connections are to be closed instead of the number of bytes read (rare bug when communicating with some servers)
+* fixed: be more tolerant in detection of charset in http headers
+* fixed: fix encoding of UTF8 chars outside of the BMP plane
+* fixed: fix detection of zlib.output_compression
+* improved: allow the add_to_map server method to add docs for single params too
+* improved: added the possibility to wrap for exposure as xmlrpc methods plain php class methods, object methods and even whole classes
+
+
+XML-RPC for PHP version 2.2.1 - 2008/03/06
+
+This release corrects all bugs that have been reported and sucesfully reproduced.
+It is the last release of the library that will support PHP 4.
+
+* fixed: work around bug in php 5.2.2 which broke support of HTTP_RAW_POST_DATA
+* fixed: is_dir parameter of setCaCertificate() method is reversed
+* fixed: a php warning in xmlrpc_client creator method
+* fixed: parsing of '1e+1' as valid float
+* fixed: allow errorlevel 3 to work when prev. error handler was a static method
+* fixed: usage of client::setcookie() for multiple cookies in non-ssl mode
+* improved: support for CP1252 charset is not part or the library but almost possible
+* improved: more info when curl is enabled and debug mode is on
+
+
+XML-RPC for PHP version 2.2 - 2007/02/25
+
+This release corrects a couple of bugs and adds a few minor features.
+
+* fixed: debugger errors on php installs with magic_quotes_gpc on
+* fixed: support for https connections via proxy
+* fixed: wrap_xmlrpc_method() generated code failed to properly encode php objects
+* improved: slightly faster encoding of data which is internally UTF-8
+* improved: debugger always generates a 'null' id for jsonrpc if user omits it
+* new: debugger can take advantage of a graphical value builder
+  (it has to be downloaded separately, as part of jsxmlrpc package)
+* new: support for the <NIL/> xmlrpc extension
+* new: server support for the system.getCapabilities xmlrpc extension
+* new: wrap_xmlrpc_method() accepts two new options: debug and return_on_fault
+
+
+XML-RPC for PHP version 2.1 - 2006/08/28
+
+This release corrects quite a few bugs and adds some interesting new features.
+There is a minor security enhancement and overall speedup too.
+
+It has been tested with PHP 4.0.5 up to 4.4.4 and 5.1.5.
+Please note that 404pl1 is NOT supported, and has not been since 2.0.
+
+*** PLEASE READ CAREFULLY BELOW ***
+
+CHANGES THAT MIGHT AFFECT DEPLOYED APPLICATIONS:
+
+The wrap_php_function and wrap_xmlrpc_method functions have been moved out of
+the base library file xmlrpc.inc into a file of their own: xmlrpc_wrappers.inc.
+You will have to include() / require() it in your scripts if you have been using
+those functions.
+
+For increased security, the automatic rebuilding of php object instances out of
+received xmlrpc structs in wrap_xmlrpc_method() has been disabled (but it can be
+optionally reenabled).
+
+The constructor of xmlrpcval() values has seen major changes, and it will not
+throw a php warning anymore when invoked using an unknown xmlrpc type: the
+error will only be written to php error log. Also new xmlrpcval('true', 'boolean')
+is not supported anymore.
+
+MAJOR IMPROVEMENTS:
+
+The new function php_xmlrpc_decode_xml() will take the xml representation of
+either an xmlrpc request, response or single value and return the corresponding
+php-xmlrpc object instance.
+
+Both wrap_php_function() and wrap_xmlrpc_method() functions accept many more
+options to fine tune their behaviour, including one to return the php code to
+be saved and later used as standalone php script.
+
+A new function wrap_xmlrpc_server() has been added, to wrap all (or some) of the
+methods exposed by a remote xmlrpc server into a php class.
+
+Lib internals have been modified to provide better support for grafting extra
+functionality on top of it. Stay tuned for future releases of the EXTRAS package.
+
+Last but not least a new file has been added: verify_compat.php, to help users
+diagnose the level of compliance of the current php install with the library.
+
+CHANGELOG IN DETAIL:
+
+* fixed bug 1311927: client not playing nice with some proxy/firewall on ports != 80
+* fixed bug 1334340: all ereg_ functions have been replaced with corresponding preg_
+* fixed bug: wrong handling of 'deflate' http encoding, both server and client side
+* fixed bug: sending compressed responses when php output compression is enabled was not working
+* fixed bug: addarray() and addstruct() where not returning 1 when adding data to already initialized values
+* fixed bug: non-ascii chars used in struct element names where not being encoded correctly
+* restored compatibility with php 4.0.5 (for those poor souls still stuck on it)
+* server->service() now returns either the payload or xmlrpcresp instance
+* server->add_to_map() now accepts methods with no param definitions
+* added new function: php_xmlrpc_decode_xml()
+* added new function: wrap_xmlrpc_server()
+* major improvements and security enhancements to wrap_php_function() and wrap_xmlrpc_method()
+* documentation for single parameters of exposed methods can be added to the dispatch map
+  (and turned into html docs in conjunction with a future release of the extras package)
+* full response payload is saved into xmlrpcresp object for further debugging
+* stricter parsing of incmoing xmlrpc messages: two more invalid cases are now detected
+  (double data element inside array and struct/array after scalar inside value element)
+* debugger can now generate code that wraps a remote method into php function (works for jsonrpc, too)
+* debugger has better support for being activated via a single GET call (for integration into other tools?)
+* more logging of errors in a lot of situations
+* javadoc documentation of lib files almost complete
+* the usual amount of new testcases in the testsuite
+* many performance tweaks and code cleanups
+* added foundation for emulating the API of the xmlrpc extension (extras package needed)
+
+
+XML-RPC for PHP version 2.0 - 2006/04/24
+
+I'm pleased to announce XML-RPC for PHP version 2.0, final.
+
+With respect to the last release candidate, this release corrects a few small
+bugs and adds a couple of new features: more authentication options (digest and
+ntlm for servers, ntlm for proxies, and some https custom certificates stuff);
+all the examples have been reviewed and some demo files added,
+including a ready-made xmlrpc proxy (useful e.g. for ajax calls, when the xmlrpc
+client is a browser); the server logs more warning messages for incorrect situations;
+both client and server are more tolerant of commonly-found mistakes.
+The debugger has been upgraded to reflect the new client capabilities.
+
+In greater detail:
+
+* fixed bug: method xmlrpcval::structmemexists($value) would not work
+* fixed bug: wrap_xmlrpc_method would fail if invoked with a client object that
+  has return_type=phpvals
+* fixed bug: in case of call to client::multicall without fallback and server error
+* fixed bug: recursive serialization of xmlrpcvals loosing specified UTF8 charset
+* fixed bug: serializing to ISO-8859-1 with php 5 would raise an error if non-ascii
+  chars where found when decoding
+* new: client can use NTLM and Digest authentication methods for https and http 1.1
+  connections; authentication to proxy can be set to NTLM, too
+* new: server tolerates user functions returning a single xmlrpcval object instead
+  of an xmlrpcresp
+* new: server does more checks for presence and correct return type of user
+  coded method handling functions, and logs inconsistencies to php error log
+* new: client method SetCaCertificate($cert, $is_dir) to validate server against
+* new: both server and client tolerate receiving 'true' and 'false' for bool values
+  (which btw are not valid according to the xmlrpc spec)
+
+
+XML-RPC for PHP version 2.0RC3 - 2006/01/22
+
+This release corrects a few bugs and adds some interesting new features.
+It has been tested with PHP up to 4.4.2 and 5.1.2.
+
+* fixed bug: server not recognizing clients that declare support for http compression
+* fixed bug: serialization of new xmlrpcval (8, 'string') when internal encoding
+  set to UTF-8
+* fixed bug: serialization of new xmlrpcval ('hello', 'int') would produce
+  invalid xml-rpc
+* new: let the server accept 'class::method' syntax in the dispatch map
+* new: php_xmlrpc_decode() can decode xmlrpcmessage objects
+* new: both client and server can specify a charset to be used for serializing
+  values instead of the default 'US-ASCII+xml-entities-for-other-characters'.
+  Values allowed: ISO-8859-1 and UTF-8
+* new: the server object can register 'plain' php functions instead of functions
+  that accept a single parameter of type xmlrpcmsg. Faster, uses less memory
+  (but comes with minor drawbacks as well, read the manual for more details)
+* new: client::setDebug(2) can be used to have the request payload printed to
+  screen before being sent
+* new: server::service($data) lets user parse data other than POST body, for
+  easier testing / subclassing
+* changed: framework-generated debug messages are sent back by the server base64
+  encoded, to avoid any charset/xml compatibility problem
+* other minor fixes
+
+The usual refactoring of a lot of (private) methods has taken place, with new
+parameters added to some functions.
+Javadoc documentation has been improved a lot.
+The HTML documentation has been shuffled around a bit, hoping to give it a more
+logical organization.
+
+The experimental support for the JSON protocol has been removed, and will be
+packaged as a separate download with some extra very interesting stuff (human
+readable auto-generated documentation, anyone?).
+
+
+XML-RPC for PHP version 2.0RC2 - 2005/11/22
+
+This release corrects a few bugs and adds basically one new method for better
+HTTPS support:
+
+ * fixed two bugs that prevented xmlrpc calls to take place over https
+ * fixed two bugs that prevented proper recognition of xml character set
+   when it was declared inside the xml prologue
+ * added xmlrpc_client::setKey($key, $keypass) method, to allow using client
+   side certificates for https connections
+ * fixed bug that prevented proper serialization of string xmlrpcvals when
+   $xmlrpc_internalencoding was set to UTF-8
+ * fixed bug in xmlrpc_server::echoInput() (and marked method as deprecated)
+ * correctly set cookies/http headers into xmlrpcresp objects even when the
+   sned() method call fails for some reason
+ * added a benchmark file in the testsuite directory
+
+A couple of (private/protected) methods have been refactored, as well as a
+couple of extra parameters added to some (private) functions - this has no
+impact on the public API and should be of interest primarily to people extending
+/ subclassing the lib.
+
+There is also new, PARTIAL support for the JSON-RPC protocol, implemented in
+two files in the extras dir (more info about json-rpc at http://json-rpc.org)
+
+
+XML-RPC for PHP version 2.0RC1 - 2005/10/03
+
+I'm pleased to announce XML-RPC for PHP version 2.0, release candidate 1.
+
+This release introduces so many new features it is almost impossible to list them
+here, making the library finally on pair with, if not more advanced than, any other
+similar offer (e.g. the PEAR XMLRPC package or the Incutio IXR library).
+No, really, trust me.
+
+The minimum supported PHP version is now 4.2 - natively - or 4.0.4pl1 - by usage of
+a couple of compatibility classes (code taken from PEAR php_compat package).
+
+The placement of files and directories in the distribution has been deeply modified,
+in the hope of making it more clear, now that the file count has increased.
+I hope you find it easy.
+
+Support for "advanced" HTTP features such as cookies, proxies and keep-alives has
+been added at last.
+
+It is now much easier to convert between xmlrpcval objects and php values, and
+in fact php_xmlrpc_encode and php_xmlrpc_decode are now the recommended methods
+for all cases, except when encoding base64 data.
+
+Two new (experimental) functions have been added, allowing automagic conversion
+of a php function into an xmlrpc method to be exposed and vice-versa.
+
+PHP objects can be now automatically serialized as xmlrpc struct values and
+correctly deserialized on the other end of the transmission, provided that the
+same class definition is present on both sides and no object members are of
+type resource.
+
+A lot of the existing class methods have been overloaded with extra parameters
+or new functionality, and a few added ex-novo, making usage easier than ever.
+
+A complete debugger solution is included in the distribution. It needs a web server
+to run (a freely available version of the same debugger is accessible online, it
+can be found at http://phpxmlrpc.sourceforge.net).
+
+For a more detailed list of changes, please read carefully chapter 2 of the
+included documentation, or, even better, take a look at the source code, which
+is commented in javadoc style quite a bit.
+
+
+XML-RPC for PHP version 1.2 - 2005/08/14
+
+This removes all use of eval(), which is a potential security problem.
+All users are encouraged to upgrade as soon as possible.
+As of this release we are no longer php3-compatible.
+
+
+XML-RPC for PHP version 1.1.1 - 2005/06/30
+
+This is a security vulnerability fix release.
+All users are invited to upgrade as soon as possible.
+
+
+XML-RPC for PHP version 1.1 - 2005/05/03
+
+I'm pleased to announce XML-RPC for PHP version 1.1
+It's taken two years to get to the this point, but here we are, finally.
+
+This is a bugfix and maintenance release. No major new features have been added.
+All known bugs have been ironed out, unless fixing would have meant breaking
+the API.
+The code has been tested with PHP 3, 4 and 5, even tough PHP 4 is the main
+development platform (and some warnings will be emitted when runnning PHP5).
+
+Notheworthy changes include:
+
+ * do not clash any more with the EPI xmlrpc extension bundled with PHP 4 and 5
+ * fixed the unicode/charset problems that have been plaguing the lib for years
+ * proper parsing of int and float values prepended with zeroes or the '+' char
+ * accept float values in exponential notation
+ * configurable http user-agent string
+ * use the same timeout on client socket reads as used for connecting
+ * more explicative error messages in xmlrpcresponse in many cases
+ * much more tolerant parsing of malformed http responses from xmlrpc servers
+ * fixed memleak that prevented the client to be used in never-ending scripts
+ * parse bigger xmlrpc messages without crashing (1MB in size or more)
+ * be tolerant to xmlrpc responses generated on public servers that add
+   javascript advertising at the end of hosted content
+ * the lib generates quite a few less PHP warnings during standard operation
+
+This is the last release that will support PHP 3.
+The next release will include better support for PHP 5 and (possibly) a slew of
+new features.
+
+The changelog is available at:
+http://cvs.sourceforge.net/viewcvs.py/phpxmlrpc/xmlrpc/ChangeLog?view=markup
+
+Please report bugs to the XML-RPC PHP mailing list or to the sourceforge project
+pages at http://sourceforge.net/projects/phpxmlrpc/
diff --git a/README b/README
index 9647aba..8004813 100644 (file)
--- a/README
+++ b/README
@@ -1,15 +1,15 @@
-NAME: XMLRPC for PHP\r
-\r
-DESCRIPTION: A php library for building xmlrpc clients and servers\r
-\r
-\r
-\r
-Installation instructions are in the INSTALL file.\r
-\r
-The manual, in HTML and pdf versions, can be found in the doc/ directory.\r
-\r
-Recent changes in the ChangeLog file.\r
-\r
-Use of this software is subject to the terms in doc/index.html\r
-\r
-The passphrase for the rsakey.pem certificate is 'test'.\r
+NAME: XMLRPC for PHP
+
+DESCRIPTION: A php library for building xmlrpc clients and servers
+
+
+
+Installation instructions are in the INSTALL file.
+
+The manual, in HTML and pdf versions, can be found in the doc/ directory.
+
+Recent changes in the ChangeLog file.
+
+Use of this software is subject to the terms in doc/index.html
+
+The passphrase for the rsakey.pem certificate is 'test'.