Question

I need to use XmlRpc in C++ on a Windows platform. Despite the fact that my friends assure me that XmlRpc is a "widely available standard technology", there are not many libraries available for it. In fact I only found one library to do this on Windows, (plus another one that claims "you'll have to do a lot of work to get this to compile on Windows). The library I found was Chris Morley's "XmlRpc++". However, it doesn't have support for SSL.

My question therefore is: what library should I be using?

Was it helpful?

Solution

I've written my own C++ library. It's available at sourceforge: xmlrpcc4win

The reason I wrote it rather than using Chris Morley's was that:

  • The Windows "wininet.lib" library gives you all the functionality for handling Http requests, so I'd rather use that. As a result, I only needed 1700 LOC.
  • "wininet.lib", and therefore my implementation, supports HTTPS
  • Chris Morley's use of STL containers was quite inefficient (Chris, mail me if you read this).

OTHER TIPS

Until I wrote my own library, (see above) here was my answer:

Currently, the XmlRpc++ library by Chris Morley is the only public domain/LPGL XmlRpc implementation for C++ on Windows.

There are a couple of C++ implementations for Linux, either of which could be presumably easily ported to Windows, but the fact seems to be that no-one has yet done so and made it publicly available. Also, as eczamy says, "The XML-RPC specification is somewhat simple and it would not be difficult to implement your own XML-RPC client."

I'm using Chris Morley's library successfully, despite having had to find and fix quite a number of bugs. The Help Forum for this project seems to be somewhat active, but no-one has fixed these bugs and done a new release. I have been in correspondence with Chris Morley and he has vague hopes to do a new release, and he has contributed to this stackOverflow question (see below/above) and he claims to have fixed most of the bugs, but so far he has not made a release that fixes the many bugs. The last release was in 2003.

It is disappointing to me that a supposed widely supported (and simple!) protocol has such poor support on Windows + C++. Please can someone reading this page pick up the baton and e.g. take over XmlRpc++ or properly port one of the Linux implementations.

There are dozens of implementations of the XML-RPC implementations, some in C++, but most in other languages. For example, besides XmlRpc++ there is also XML-RPC for C and C++. Here is a HOWTO on how the XML-RPC for C and C++ library can be used.

The XML-RPC specification is somewhat simple and it would not be difficult to implement your own XML-RPC client. Not to mention, it would also be possible to take an existing XML-RPC implementation in C and bring into your C++ project.

The XML-RPC home page also provides a lot of useful information.

Just wanted to note a couple of items:

  • The source in the cvs repository for XmlRpc++ has support for OpenSSL (although I have not tried it, it was contributed by another developer).

  • Most of the reported bugs are fixed in cvs; I don't have access to a linux machine at the moment, so I haven't made an official release.

  • XmlRpc++ is not public domain. It is copyrighted and licensed (LGPL).

Thanks, Chris Morley

I was able to get Tim's version of xml rpc working with https and with basic username / password authentication.

For the authentication:

1) the username and password need to be passed to the InternetConnect(...) function

2) an http request header of "Authorization: Basic base64encoded(user:pass)" needs to be added prior to sending the HttpSendRequest(...) command.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top