Ejemplo n.º 1
0
    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 );
    }