(There is a detailed release-by-release change history after the following overview). XML-RPC For C/C++ was created by Eric Kidd in 2000, when XML-RPC was new and vital. Its development was funded in significant part by First Peer, Inc. Eric released the package in January 2001 and set up an extensive project to maintain it. The project used virtually every feature on Sourceforge, had about 8 official developers, and distributed code in various formats. There were mailing lists, trackers, CVS branches, RPMs, and a full PHP-based web site, just to name a few features of the project. Then everything ground to a halt in June 2001, with the disappearance of Eric. We don't know what happened to him, but Google searches in late 2004 indicated he dropped off the face of the web at that time. While people continued to use Xmlrpc-c, and some developed fixes and enhancements and posted them to the Sourceforge trackers, the release remained frozen at 0.9.10. The web site also became frozen in time. In the years that followed the great freeze, XML-RPC became marginalized by more sophisticated alternatives such as SOAP. XML-RPC consequently became rather stable and interest in Xmlrpc-c levelled off. This dark age of Xmlrpc-c lasted until November 2004, when Bryan Henderson set out to find an RPC mechanism to use in one of his projects. Bryan found XML-RPC and then Xmlrpc-c. He decided that the two were almost right for his needs, but he needed some small extensions. On finding out that the project was orphaned, Bryan decided to take it over. Bryan became the Sourceforge project administrator through Sourceforge's abandonned project process, then gathered the patches that had been submitted over the years and made a come-back release called 1.0. Bryan then proceeded to add a lot of features in subsequent releases about every two months. Most of it was code Bryan wrote himself, but significant parts were contributed by others, as you can see in the detailed history below. Among the larger enhancements was a new C++ interface; the old one was a fairly weak wrapper around the C interface and required the user to manage memory and access the underlying C structures; the new one used pure C++ principles with automatic memory management. Bryan also wrote a complete user's manual. Surprisingly, in spite of the wide array of features the project had, documentation wasn't one of them. There was only a smattering of information available on how to use the package. One significant change Bryan made to the project was to strip it down considerably. In order to concentrate the small amount of time Bryan had available for Xmlrpc-c development on actual code and documentation, Bryan had to greatly reduce the amount of bureaucracy involved in administering the project and making releases, and reduce the set of skills required to do it. Bryan made static make files (for GNU Make) to replace the two extra build stages that originally generated make files. Bryan moved away from Libtool and toward simple compiling and linking. Bryan eliminated all pre-built distributions; each of his releases consisted of a single source code tarball, and that tarball was not signed. Bryan removed some redundant sources of information from the package and the web site. DETAILED RELEASE HISTORY: (BJH means Bryan Henderson ) (SAB means Steven A. Bone ) 1.03.14 - 06.04.15 *BJH: Fix int/size_t mismatch in xmlrpc_server_abyss.c (manifests on 64 bit systems). 1.03.13 - 06.04.05 *BJH: Fix build on system with no wchar_t. *BJH: Abyss XML-RPC server accepts (ignores) parameters after "text/xml" in Content-type header from client. 1.03.12 - 06.03.20 *BJH: Fix build of transport_config.h *BJH: Remove tantalizing but broken RPM spec file. *BJH: Remove casprintf.o from link of 'xmlrpc', 'xmlrpc_transport', because it conflicts with the version in libxmlrpc_client. *BJH: Change order of libraries in linking 'xml-rpc-api2cpp' to fix undefined reference error. 1.03.11 - 06.01.25 *Mike Goddard: in Xmlrpc-c-config, allow libwww-client as synonym for client, for backward compatibility. *Daniel Dlab: Correct INTERNET_FLAG_IGNORE_CERT_DATE_INVALID to ERROR_INTERNET_SEC_CERT_DATE_INVALID in Wininet transport. *BJH: Fix memory leak in C++ client result value - one leak per RPC. *BJH: Fix memory leak in C++ client - one leak per RPC. *BJH: Fix signature in xmlrpc_sample_add_server C++ example program. *BJH: Fix memory leak in xmlrpc_server_abyss_set_handler(). *BJH: Fix memory leak in server method registry -- one leak for each RPC. *BJH: Fix memory leak in wide character constructor functions. 1.03.10 - December 18, 2005 *BJH: Change default minimum on paramList::getDouble() from DBL_MIN to -DBL_MAX. 1.03.09 - December 7, 2005 * BJH: Fix size_t/int type mismatch in xmlrpc_server_abyss.c. * BJH: meerkat-app-list example program: remove NUL character from time period parameter. 1.03.08 - November 23, 2005 * BJH: Fix use of uninitialized 'name' member in Abyss ServerCreate(). * BJH: Install client_simple.hpp interface header file. * BJH: Fix bogus NULL default value for string argument in serverAbyss constructor. Use null string instead * BJH: Remove 'cpptest' from default make. * Mike West: Don't include tools/xmlrpc and tools/xmlrpc_transport in the build if client library configured out. 1.03.07 - October 22, 2005 * BJH: Remove curl_global_cleanup() so that multiple simultaneous Curl client XML transports per process are essentially possible and they don't interfere with other process use of Curl. * BJH: Serialize access to synchronous Curl session in Curl client XML transport (to avoid crashes with multiple threads). * BJH: When installing legacy header symlinks, remove old names first. 1.03.06 - October 6, 2005 * BJH: Fix use of pthread_mutex_t in girmem.hpp so it can be used in a Windows program. * BJH: Don't include xml-rpc-api2cpp in the build with --disable-cpp. * BJH: Fix bug in tools build, where it tries to link libxml2 instead of expat. * BJH: Add missing xmlrpc_config.h so lib/abyss/src/socket.h will compile on Solaris. 1.03.05 - September 24, 2005 * BJH: Change int to long in XMLRPC_STRUCTSIZE to correct 64 bit compile error. * BJH: Add virtual destructor for client to quiet compiler warning. * BJH: Don't try to build Abyss example programs if Abyss libraries not built. * BJH: Include if it exists (i.e. Solaris). * BJH: Include instead of , which doesn't exist in some environments. 1.03.04 - September 9, 2005 * BJH: Make Abyss work with short writes to sockets. Thanks Alistair John Strachan . * BJH: Remove unused SSPRINTF definition that won't compile on AIX because it has variable arguments. * BJH: Fix Curl transport bug: arbitrary values for SSL verify options. 1.03.03 - August 4, 2005 * SAB: Fix for Windows what broke between 1.02 and 1.03. * SAB: Fix incorrect result of xmlrpc_read_string_w() (wrong-size memcpy()). * BJH: Fix various things that don't compile on AIX. * BJH: Fix bug: doesn't install libxmlrpc_abyss. * BJH: Fix missing -l options in xmlrpc-c-config --client 1.03.02 - July 20, 2005 * BJH: Fix for bug in which Abyss doesn't build with either thread or fork capability. (Add -D_UNIX and -D_THREAD compile options). 1.03.01 - July 9, 2005 * BJH: Fix for libxml2, no curl builds. make clean cleans test directory 1.03 - June 26, 2005 * BJH: new C++ libraries designed for pure C++ applications (Application never sees the underlying C structures or reference counts). * BJH: Make Curl do cookies (session only) and persistent connections. This is only for calls through the synchronous interface, and the synchronous interface is no longer thread safe -- you can have only one thread making calls through it. * BJH: Add Curl SSL_NO_VERIFYPEER, SSL_NO_VERIFYHOST control. * BJH: Add User-Agent to Curl transport, Xmlrpc program. * BJH: libwww transport does not do the weird handling of the "auth" cookie. It used to have a global cookie (one cookie shared by all servers) called "auth", which it maintained in an environment variable. * BJH: interface header files renamed from xmlrpc_xxx to xmlrpc-c/xxx (old names installed a symbolic links for backward compatibility). * BJH: libxmlrpc_server_abyss: Add ability to set the /RPC2 handler without also setting default handler, and to set handlers for files other than /RPC2. * BJH: libxmlrpc_server_abyss: Eliminate global variable for registry handle. * BJH: Abyss: allow user's request handlers to have context (Add URIHandler2 type). * BJH: Add xmlrpc_datetime_new_sec(), xmlrpc_read_datetime_sec(). * BJH: Builds on AIX - new __inline definition, uint32_t instead of uint32, et al. * BJH: Don't build client library if not building any client XML transport. * BJH: Fix bug: xmlrpc_serialize_base64_data() doesn't free working storage. * BJH: Fix mysterious disablement of forking Abyss (ServerRunForked()). * BJH: Fix bug: 'make install' doesn't install libxmlrpc_xmltok. * BJH: Renamed CGI stuff, add non-builtin-registry style of CGI server. * BJH: Break up 'rpctest', rename to 'test'. 1.02 - April 4, 2005 * SAB: Win32 http.sys server: Add new project and sample as an alternative to Abyss on current Win32 platforms. Does basic authentication and SSL. Requires recent Platform SDK to build. * BJH: Add xmlrpc_int_new(), xmlrpc_read_int(), etc., xmlrpc_decompose_value() * BJH: Add nil (, XMLRPC_TYPE_NIL) capability. * SAB: WinInet Transport: Add Ignore Invalid SSL certs option. * BJH: Add 'network_interface' option to Curl transport. * BJH: Add basic authentication to 'xmlrpc' program. * BJH: Add 'xmlrpc_transport' tool. * SAB: Improve use of libCurl in Win32. Add documentation and alter some project and configuration files. * BJH: Add transport-specific options. * BJH: Use GNUmakefile to catch non-GNU make * BJH: Fix usage message in xmlrpc-c-config. * BJH: Curl transport: check for failure of Winsock startup. * BJH: Fix memory leak in Curl - not freeing curlTransaction. * SAB: WinInet Transport: Fix bad authentication header. 1.01 - January 8, 2005 * SAB: Windows works again; new build strategy. * BJH: Abyss: Add ConnCreate2() with foreground capability. * BJH: Abyss: Add ServerRunOnce2() with foreground capability. * BJH: Abyss: Fix ServerRunOnce(). * BJH: Add xmlrpc_server_abyss(). * BJH: Abyss pthreads is default * BJH: Clean up client transport multiplexor * BJH: Separate out server registry stuff into new libxml_server. * BJH: Examples/Makefile uses new xmlrpc-c-config.test so as to be a better example. * BJH: Fail when structure format specifier does not end in "*" instead of just asserting that it does. * BJH: Fail when structure format specifier is not closed by "}" instead of just asserting that it is. * BJH: Add xmlrpc_array_read_item(). 1.00 - October 25, 2004 * New modular client XML transport structure. Curl and Wininet transports (in addition to existing libwww). * Bryan Henderson: create Makefile.config; make examples/ directory use static make file. * Bryan Henderson: replace Makefile.am with already built Makefile.in. * Peter Astrand: make it compile with Gcc 3.1.1. * Joe Shaw: Can use libxml2 instead of libexpat. * Bernhard Herzog: const fixes * Stephen Blackheath: ./configure support for building Abyss with pthreads. * Jeff Dubrule: Removed C++ comments from expat. * Patrick Boykin: Facility to copy xmlrpc_server_info structs. 0.9.10 - Eric Kidd - 30 June 2001 * Man pages! * Debian packages! * Jeff Stewart: NT CGI fixes. * Andy Maloney: Win32 xmlrpc_win32_config.h fixes. * Mike Bytnar: Solaris build fixes. Thanks! * No more 'CVS' directories lurking in the dist tarball. * Disabled rpath stuff so we comply with Debian policy. * wchar_t code can now be disabled. * New interop server. * Parts of an interop client. * Lots of interop fixes. * Other stuff. 0.9.9 - Eric Kidd - 03 April 2001 * xml-rpc-api2cpp now generates usable proxy classes. * Luke Howard: Default method capability. * Abstract XML parser API (but you'll need to edit makefiles to use it). * Implemented a configurable size limit for XML data off the network. * Ability to build and parse XML-RPC values using wchar_t strings. * Basic UTF-8 handling: Refuse to process invalid UTF-8 from network, print warnings when sending invalid UTF-8 *to* network. * Highly robust UTF-8 validator, decoder, encoder. * Modularized the build system--build only what you need. * Integrated Electric Fence into build system (optional). * Fixed all recent, reproducible bugs in CVS. These were generally Windows build bugs. * Andy Maloney: Build fixes for Windows. * Mike Bytnar: Build fixes for Solaris. * RedHat 7 warning fixes. 0.9.8 - Eric Kidd - 19 February 2001 * J. Alan Eldridge, Rosimildo daSIlva: Build fixes. * Send 'encoding="UTF-8"' in XML prologue. 0.9.7 - Eric Kidd - 14 February 2001 * SECURITY: Configurable nesting limits (see advisory 1) to prevent denial-of-service attacks and stack overflow. * Win32 build fixes from Alex Olugbile. * Function name fix from Luke Howard. 0.9.6w - Eric Kidd - 02 February 2001 * Merged Win32 VC/C++ changes from Alex and Ian. * Merged Win32 Cygwin changes from Rosimildo daSilva 0.9.6 - Eric Kidd - 30 January 2001 * Fixed lots of gcc warnings. * Added a new 'xmlrpc_server_info' class, which allows you to set options on a per-server basis. * HTTP Basic authentication. * Added internal implementation of system.multicall, lots of brutal test cases, and stubs for other system.* commands. * Added APIs for accessing CGI and Abyss method registries. * Implemented system.listMethods, system.methodHelp, system.methodSignature. * Fixed stupid bug in parsing of "(ss*)"-style array descriptions where there were no extra elements. * Added highly experimental hacked copy of mod_gzip into the tools/turbocharger directory. This version does gzip *and* deflate! * Added xml-rpc-api2txt, since XML-RPC doesn't have any IDL language. * Merged in Ilya Goldberg's libwww/SSL setup code. 0.9.5 - Eric Kidd - 20 January 2001 * Bug fix: Make sure CGI-based servers send correct content-length. 0.9.4 - Eric Kidd - 18 January 2001 * Services for CGI-based servers. 0.9.3 - Eric Kidd - 14 January 2001 * Works with Libwww 5.2.8, even when linked against expat. * Added xmlrpc_value_type and XmlRpcValue::getType functions. * Miscellaneous API tweaks to discourage writing of incorrect programs. Should not affect any correct programs. 0.9.2 - Eric Kidd - 12 January 2001 * Improved error messages. * Refuse to link against libwww if it was built with expat. 0.9.1 - Eric Kidd - 9 January 2001 * Integrated Rick Blair's fix to speed up libwww client. * Added informative URLs to Meerkat example programs. * Hid the implementation details of xmlrpc_value, just to keep people honest. (No more dangerous allocation on the stack!) * Minor C++ code cleanup after buying modern C++ books. * Documentation improvements. Some other contributions of unknown date: Adrian Likins made lots of good, real-world suggestions for improvement. Ian MacLean made patches from Alex's Windows port. Brian Quinlan of the Active State company made lots of cool patches, including preliminary wchar_t capability.