cURLpp

Version 0.7.2 is out! · 276 days ago

Mostly this include bug fixes, plus some code inspired by Christopher Smith’s suggestion that he made from his blog: http://blog.360.yahoo.com/blog-NGG_XKMyebVXpbF6EpCU?p=169

— Jean-Philippe Barrette-LaPierre

---

Version 0.7.1 is out! · 458 days ago

This is the first “stable” version that includes boost library support. Some bugs were fixed by contributors. Thanks to you all!

— Jean-Philippe Barrette-LaPierre

---

boost function feature added · 683 days ago

I just added the boost (http://www.boost.org) function feature. It should allow everyone to use the very well known boost.Function instead of the “very home-made” utilspp functors. The binding is much easier and powerfull in boost. The code is in the curlpp-0.7.1-devel.tar.gz. However the boost feature is optionnal for those who doesn’t want to rely on other libraries. utilspp functors are still availables.

— Jean-Philippe Barrette-LaPierre

---

Version 0.7.0 is out! · 690 days ago

Mainly, this version add the multi interface to cURLpp. I want to thanks Armel Asselin for all the patches he provided. Here’s all the changes:

— Jean-Philippe Barrette-LaPierre

---

Description

cURLpp is a C++ wrapper for libcURL. libcURL is described as:

a free and easy-to-use client-side URL transfer library, supporting FTP, FTPS, HTTP, HTTPS, GOPHER, TELNET, DICT, FILE and LDAP. libcurl supports HTTPS certificates, HTTP POST, HTTP PUT, FTP uploading, kerberos, HTTP form based upload, proxies, cookies, user+password authentication, file transfer resume, http proxy tunneling and more!

libcurl is highly portable, it builds and works identically on numerous platforms, including Solaris, NetBSD, FreeBSD, OpenBSD, Darwin, HPUX, IRIX, AIX, Tru64, Linux, Windows, Amiga, OS/2, BeOs, Mac OS X, Ultrix, QNX, OpenVMS, RISC OS, Novell NetWare, DOS and more…

libcurl is free, thread-safe, IPv6 compatible, feature rich, well supported and fast.

First, I need to quote Daniel Stenberg, the maintener of libcURL:
You can use libcURL instantly from within your C++ programs. You don’t need cURLpp for that, cURLpp just adds an OO’ified layer that libcURL doesn’t normally provide.

It means that you need to be sure that you need, or want, cURLpp features. If not, I suggest to use directly the libcURL library. So, what are thoses features that cURLpp offers?
You can query handles for option values (version 0.5.x and newer only).

Downloads

All the release are here.

curlpp-0.7

curlpp-0.7.2.tar.gz (462 Kb)
curlpp-0.7.1.tar.gz (456 Kb)
curlpp-0.7.0.tar.gz (447 Kb)
curlpp-0.7.0-pre2.tar.gz (428 Kb)
curlpp-0.7.0-pre1.tar.gz (426 Kb)

curlpp-0.6

curlpp-0.6.1.tar.gz (423 Kb)
curlpp-0.6.0.tar.gz (413 Kb)
curlpp-0.6.0-pre5.tar.gz (441 Kb)
curlpp-0.6.0-pre4.tar.gz (440 Kb)
curlpp-0.6.0-pre3.tar.gz (432 Kb)
curlpp-0.6.0-pre2.tar.gz (411 Kb)
curlpp-0.6.0-pre1.tar.gz (403 Kb)

curlpp-0.5

curlpp-0.5.2.tar.gz (397 Kb)
curlpp-0.5.1.tar.gz (395 Kb)
curlpp-0.5.0.tar.gz (395 Kb)
curlpp-0.5.0-rc7.tar.gz (384 Kb)
curlpp-0.5.0-rc6.tar.gz (383 Kb)
curlpp-0.5.0-rc5.tar.gz (382 Kb)
curlpp-0.5.0-rc4.tar.gz (394 Kb)
curlpp-0.5.0-rc3.tar.gz (394 Kb)
curlpp-0.5.0-rc2.tar.gz (389 Kb)
curlpp-0.5.0-rc1.tar.gz (396 Kb)

curlpp-0.3

curlpp-0.3.3.tar.gz (396 Kb)
curlpp-0.3.3-rc2.tar.gz (389 Kb)
curlpp-0.3.3-rc1.tar.gz (388 Kb)
curlpp-0.3.2-rc3.tar.gz (388 Kb)
curlpp-0.3.2-rc2.tar.gz (403 Kb)
curlpp-0.3.1.tar.gz (252 Kb)

License

cURLpp is true Open Source/Free Software and meet all definitions as such. It means that you are free to modify and redistribute all contents of the cURLpp distributed archives. You may also freely use cURLpp in your commercial projects. cURLpp is licensed under a MIT license, see below.

Copyright© 2002-2006, Jean-Philippe Barrette-LaPierre

Permission is hereby granted, free of charge, to any person obtaining a copy of this software and associated documentation files (the “Software”), to deal in the Software without restriction, including without limitation the rights to use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies of the Software, and to permit persons to whom the Software is furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED “AS IS”, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.

Documentation

The programming guide for the 0.5.x and newer versions is here. This guide is greatly inspired by the libcURL guide, that I strongly suggest to read. There’s also some examples in the “examples/” source directory of cURLpp.

Branches

The devel branch (0.5.x and newer)

This version is a complete re-factorization of cURLpp against 0.3.x and older versions. This re-factorization was made for the following reasons:

Those two points are in fact related. cURLpp was difficult to maintain because each libcURL’s option change needed a change in cURLpp; the design didn’t allow those changes to be automatically taken in charge. Because I don’t monitor libcURL project carefully, those changes were only applied 2-3 months after the release. It wasn’t flexible because it didn’t allowed the user to change cURLpp’s behavior without risking to break previously made applications.

But in fact, the real problem is that I’m a fat bastard who DOES read feature requests, but does not necessarily program them (You can send your complains to my university/job/girlfriend). So, this design is, in fact, “Ze” one that is compatible with my laziness.

Seriously, here’s the advantages of this new design:

For more details, see the guide. Note that, as you probably deduced, this version is NOT compatible against 0.3.x and older versions.

The stable branch

This version is designed over the project began by Eric Lavigne. It’s no longer active.

Development Plans

So, what’s next? I have some ideas for future releases. If you want to suggest some feature, don’t be shy and send me an email (see at the bottom of the page).

Version 0.6.0 (Out)

Exception safe feature. What’s exactly the matter? Isn’t supposed to be already exception safe? Well, the problem is when you work with C++ callbacks that are called within C code. What will happen if the callback throw an exception? The exception will go through the C code. This will completely break the C code. So, you need to be sure that it’s impossible that an exception is thrown, without being handled in your callback. So, I want to add some code that will handle any exception thrown and rethrow it in the C++ code, meaning in the cURLpp::Easy::perform function. Then, you’ll be able to throw exceptions, without being scared to break libcURL’s execution.

Functors. At this time we use plain functions as callbacks. However, if you want to use a member function, you need to create a function that will cast your data (that you previously set on the handle), and then call your member function. I want to use functors instead. If you don’t know what are functors, check this.

Version 0.7.0 (Out)

Multi interface. We need to add the Multi interface. Here’s the description from libcURL’s documentation:
The multi interface is the asynchronous brother in the family and it also offers multiple transfers using a single thread and more. The multi interface introduces several new abilities that the easy interface refuses to offer. They are mainly:

Version 0.8.0

Share interface. Right now, we don’t provide any wrapping for the Share interface. Mostly, this wrapping will depend on the functor feature. This is the description from the libcURL documentation: The share interface was added to enable sharing of data between curl “handles”. You can have multiple easy handles share data between them. Have them update and use the same cookie database or DNS cache! This way, each single transfer will take advantage from data updates made by the other transfer(s).

Compilers

cURLpp is meant to be portable, but I can’t maintain, all by myself, a project file for every platform that exists. Here’s the environnements that I maintain, or will maintain personally:

I know there’s some people who wants a VC++ project file. I don’t want to maintain those VC++ files. I don’t want to because I don’t have any licence of VC++ and I don’t want to buy one. The only way I will make available some Win32 binaries(DLL), is with MinGW. However, if someone is willing to maintain thoses files, it will be my pleasure to make them available.

Subversion

I no longer use CVS. After using GNU Arch for few months, I decided to use subversion. GNU Arch was too complex to use. In fact, it was so complex that I’m not event sure if there’s a single person that was able to access cURLpp’s GNU Arch repository.

The subversion repository isn’t available, but it will when my sysadmin will be kind enough to set it up (Hey david! Come on!).

Mailing-List

If you have some questions or bugs to submit, you call send an email to the mailing-list . You need to register to the mailing-list before sending any email. However, keep in mind that cURLpp is a C++ wrapper over libcURL, so if you have a libcURL feature’s related question, send it to libcURL’s mailing-list.