2019-03-02 12:33:31 -08:00

56 lines
1.3 KiB
C++

#ifndef RAII_CURLER_HPP
#define RAII_CURLER_HPP
#include <curl/curl.h>
#include "raii/curl_llist.hpp"
#include "raii/curl_string.hpp"
namespace raii{
//RAII wrapper for CURL* with some convenience functions added
class curler
{
private:
CURL* m_curl;
public:
curler(void);
curler(const curler& c);
curler(curler&& c)noexcept;
~curler(void);
template<class T>
curler& setopt(CURLoption option, T&& t){
curl_easy_setopt(m_curl, option, t);
return *this;
}
curler& postreq(void);
curler& getreq(void);
curler& setheader(const curl_llist& h);
curler& seturl(const char* s);
curler& seturl(const string_base& s);
curler& setuseragent(const char* s);
curler& setuseragent(const string_base& s);
curler& setuserpwd(const char* s);
curler& setuserpwd(const string_base& s);
curler& setpostdata(const char* s, curl_off_t len = -1);
curler& setpostdata(const string_base& s);
curler& forcessl(long version = CURL_SSLVERSION_DEFAULT);
void reset(void);
decltype(curl_easy_perform(m_curl)) perform(void);
curl_string encode(const char* data, int len = 0);
curl_string decode(const char* data, int* outlen = nullptr, int len = 0);
CURL* get(void);
const CURL* get(void)const;
operator CURL*(void);
operator const CURL*(void)const;
};
}
#endif