@@ -138,7 +138,8 @@ struct CurlWriteCallbackContext
138138 m_request (request),
139139 m_response (response),
140140 m_rateLimiter (rateLimiter),
141- m_numBytesResponseReceived (0 )
141+ m_numBytesResponseReceived (0 ),
142+ m_headersReceivedEventFired (false )
142143 {}
143144
144145 const CurlHttpClient* m_client;
@@ -147,6 +148,7 @@ struct CurlWriteCallbackContext
147148 HttpResponse* m_response;
148149 Aws::Utils::RateLimits::RateLimiterInterface* m_rateLimiter;
149150 int64_t m_numBytesResponseReceived;
151+ bool m_headersReceivedEventFired;
150152};
151153
152154static const char * CURL_HTTP_CLIENT_TAG = " CurlHttpClient" ;
@@ -194,11 +196,6 @@ static size_t WriteData(char* ptr, size_t size, size_t nmemb, void* userdata)
194196 }
195197
196198 HttpResponse* response = context->m_response ;
197- auto & headersHandler = context->m_request ->GetHeadersReceivedEventHandler ();
198- if (context->m_numBytesResponseReceived == 0 && headersHandler)
199- {
200- headersHandler (context->m_request , context->m_response );
201- }
202199
203200 size_t sizeToWrite = size * nmemb;
204201 if (context->m_rateLimiter )
@@ -284,6 +281,16 @@ static size_t WriteHeader(char* ptr, size_t size, size_t nmemb, void* userdata)
284281 curl_easy_getinfo (context->m_curlHandle , CURLINFO_RESPONSE_CODE, &responseCode);
285282 response->SetResponseCode (static_cast <HttpResponseCode>(responseCode));
286283 AWS_LOGSTREAM_DEBUG (CURL_HTTP_CLIENT_TAG, " Returned http response code " << responseCode);
284+
285+ if (!context->m_headersReceivedEventFired )
286+ {
287+ auto & headersHandler = context->m_request ->GetHeadersReceivedEventHandler ();
288+ if (headersHandler)
289+ {
290+ headersHandler (context->m_request , context->m_response );
291+ }
292+ context->m_headersReceivedEventFired = true ;
293+ }
287294 }
288295
289296 return size * nmemb;
0 commit comments