HttpTransactionHandle CreateRequest( const HttpRequest& request, const HttpTransaction::RequestCompleteCallback& callback, bool autoRelease=true ) { std::lock_guard<std::mutex> lock(s_mutex); auto transaction = new HttpTransaction( callback, autoRelease ); CURL* curl = transaction->GetCurl(); curl_easy_setopt(curl, CURLOPT_URL, request.GetUrl() ); curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, &HttpClient::_OnResponse ); curl_easy_setopt(curl, CURLOPT_WRITEDATA, transaction ); if( 0 < request.GetTimeout() ) { curl_easy_setopt(curl, CURLOPT_TIMEOUT_MS, static_cast<long>(request.GetTimeout() * 1000) ); } switch( request.GetMethodType() ) { case HttpRequest::POST: curl_easy_setopt(curl, CURLOPT_POSTFIELDS, request.GetPostField()); break; case HttpRequest::GET: default: break; } curl_multi_add_handle(m_MultiHandle, curl); auto handle = _CreateHandle(); m_Handles[handle] = transaction; return HttpTransactionHandle( handle ); }