| These are instructions for using the Curl HTTP client library for the XML-RPC | |
| communication in an XML-RPC client, on Windows. Normally, an XML-RPC client | |
| running on Windows uses the HTTP client facilities built into Windows | |
| (Wininet) instead. | |
| These instructions worked at one time, but they do not appear to work with | |
| current Xmlrpc-c code. If you are able to update them to work with current | |
| Xmlrpc-c code, please send the updates to the Xmlrpc-c maintainer to help the | |
| next person. | |
| Motivation: | |
| Let�s say you need to have a Xmlrpc-c client running as a service. In this | |
| situation you cannot use WinInet. You can find details of the restriction on | |
| the Curl website or various Microsoft KB articles. Your alternative is to use | |
| the Curl HTTP client library. This document tells how to use use the Curl | |
| library instead of the default Wininet as your client XML transport mechanism. | |
| Overview: | |
| The default projects in Xmlrpc-c create standalone executables that do not | |
| require other DLL�s. Therefore, we need to create static link libraries for | |
| libcurl. Once we create the link libraries, we add them (plus the requisite | |
| curl headers) into the Xmlrpc-c project. Finally, we configure the build to | |
| build the curl transport and build client libraries that use it. Finally, we | |
| build and test the project. | |
| BUILD THE CURL LIBRARY | |
| ---------------------- | |
| Download the Curl source code. Run the buildconf.bat to generate some | |
| additional files. This builds a 'dummy' hugehelp.c, but it can also be built | |
| using the src\mkhelp.pl Perl script. You may have to build your own VCPROJ | |
| file for CURL, if you want to use MSVC. | |
| To build all the CURL library variations, use | |
| > nmake /nologo vc-all | |
| but note this will use the /MD[d] DLL runtime. Only by adding | |
| RTCFGLIB=static to each of the makefile commands will /MT[d] be | |
| used. | |
| Essentially, for building the static Debug or Release CURL libraries, it is | |
| all the sources in the curl\lib folder. Make sure you choose /MT and /MTd for | |
| the runtime, and build both using the name 'libcurl.lib'. | |
| BUILD XMLRPC-C, LINK WITH CURL | |
| ------------------------------ | |
| From the step above, you have Debug\libcurl.lib and Release\libcurl.lib. | |
| After running xmlrpc-c\Windows\configurewin32.bat, start Visual Studio. | |
| In the File View, in the 'xmlrpc' project, in the properties of | |
| xmlrpc_curl_transport.c, change "Exclude file from build" from "yes" to "no", | |
| for Debug and Release. ==>BUT NOTE: in current Xmlrpc-c, this is broken - | |
| there is no 'xmlrpc' project and no xmlrpc_curl_transport.c in any projects. | |
| You need to add it. What you need to do is apparently to get | |
| xmlrpc_curl_transport.c, curltransaction.c, curlmulti.c into the | |
| libxmlrpc_client library built by the libxmlrpc_client project. | |
| In the 'Header Files' section, open the "transport_config.h" file, | |
| and change MUST_BUILD_CURL_CLIENT to 1, and the XMLRPC_DEFAULT_TRANSPORT | |
| to "curl", if you want. | |
| As usual, for each of the "client" projects, and 'rpctest', in the properties, | |
| Linker section, you can add the library libcurl.lib on the Input tab, and the | |
| relative path to the library in the General tab to something like - | |
| ..\..\curl\Debug and ..\..\curl\Release (or wherever you placed the static | |
| Curl libraries you built if you didn't follow recommendations above). | |
| Or you can adjust the Windows/curlink.h, to directly point to your respective | |
| Debug and Release static Curl libraries. | |
| Now, Xmlrpc-c should build using the Curl transport. | |
| Note, for the final linking, all libraries must be linked the same. A mixture | |
| of /MD and /MT will give big linkage problems. Any one project built with the | |
| alternate library will show many items defined more than once. And of course, | |
| you also cannot mix Debug with Release. That is /MDd with /MD, nor /MTd with | |
| /MT. Otherwise, there will be unresolved debug items. | |