예제 #1
0
파일: cc_easy.cpp 프로젝트: Jerryang/cdec
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;
 }