MiniCurl::~MiniCurl()
{
- // NEEDS TO CLEAN HOSTLIST
+ clearHostlist();
curl_easy_cleanup(d_curl);
}
void MiniCurl::setupURL(const std::string& str, const ComboAddress* rem, const ComboAddress* src, int timeout, bool fastopen, bool verify)
{
if(rem) {
- struct curl_slist *hostlist = nullptr; // THIS SHOULD BE FREED
+ clearHostlist();
+ struct curl_slist *hostlist = nullptr;
// url = http://hostname.enzo/url
string host4=extractHostFromURL(str);
hostlist = curl_slist_append(hostlist, hcode.c_str());
}
- curl_easy_setopt(d_curl, CURLOPT_RESOLVE, hostlist);
+ d_host_list = hostlist;
+ curl_easy_setopt(d_curl, CURLOPT_RESOLVE, d_host_list);
}
if(src) {
curl_easy_setopt(d_curl, CURLOPT_INTERFACE, src->toString().c_str());
}
}
+void MiniCurl::clearHostlist()
+{
+ if (d_curl && d_host_list) {
+ curl_easy_setopt(d_curl, CURLOPT_RESOLVE, NULL);
+ curl_slist_free_all(d_host_list);
+ d_host_list = nullptr;
+ }
+}
+
void MiniCurl::setHeaders(const MiniCurlHeaders& headers)
{
if (d_curl) {
static size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata);
std::string d_data;
struct curl_slist* d_header_list = nullptr;
+ struct curl_slist* d_host_list = nullptr;
void setupURL(const std::string& str, const ComboAddress* rem, const ComboAddress* src, int timeout, bool fastopen, bool verify);
void setHeaders(const MiniCurlHeaders& headers);
void clearHeaders();
+ void clearHostlist();
};