void CurlEasy::Request(ref<ICurlResponseWriter> response) { int code = 0; // Write headers struct curl_slist *headers = NULL; if (m_headers.size() != 0) { typedef std::vector<std::string>::iterator headers_it; foreach_it (headers_it, it, m_headers.begin(), m_headers.end()) headers = curl_slist_append(headers, it->c_str()); code = curl_easy_setopt(m_curl, CURLOPT_HTTPHEADER, headers); VERIFY_CURL_CODE(code); } // Set response receiver ref<ICurlContentWriter> cntwr = response->GetContentWriter(); cntwr->Reset(); code = curl_easy_setopt(m_curl, CURLOPT_WRITEFUNCTION, CurlDataWriteCallback); VERIFY_CURL_CODE(code); code = curl_easy_setopt(m_curl, CURLOPT_WRITEDATA, cntwr.__GetPointer()); VERIFY_CURL_CODE(code); // Set response header receiver if (m_ops & CCO_ResponseHeaders) { int code = curl_easy_setopt(m_curl, CURLOPT_HEADERFUNCTION, CurlHeaderWriteCallback); VERIFY_CURL_CODE(code); code = curl_easy_setopt(m_curl, CURLOPT_WRITEHEADER, response.__GetPointer()); VERIFY_CURL_CODE(code); } // Perform action code = curl_easy_perform(m_curl); VERIFY_CURL_CODE(code); // Read response information long responseCode = 0; code = curl_easy_getinfo(m_curl, CURLINFO_RESPONSE_CODE, &responseCode); VERIFY_CURL_CODE(code); response->SetResponseCode((int)responseCode); double speed; code = curl_easy_getinfo(m_curl, CURLINFO_SPEED_DOWNLOAD, &speed); VERIFY_CURL_CODE(code); response->SetSpeedDownload(speed); code = curl_easy_getinfo(m_curl, CURLINFO_SPEED_UPLOAD, &speed); VERIFY_CURL_CODE(code); response->SetSpeedUpload(speed); // Clean up if (headers != NULL) curl_slist_free_all(headers); // free the header list }
SiftObjectDetector :: ~SiftObjectDetector() { if (m_sift_indexer) delete m_sift_indexer; foreach_it(it, m_image_sift_points, std::vector<LocatedFeature*>) delete *it; }