@@ -627,29 +627,51 @@ void WinHttpSyncHttpClient::DoAddHeaders(void* hHttpRequest, Aws::String& header
627627
628628uint64_t WinHttpSyncHttpClient::DoWriteData (void * hHttpRequest, char * streamBuffer, uint64_t bytesRead, bool isChunked) const
629629{
630- AWS_UNREFERENCED_PARAM (isChunked);
631630 DWORD bytesWritten = 0 ;
632- if (!WinHttpWriteData (hHttpRequest, streamBuffer, (DWORD)bytesRead, &bytesWritten))
631+ uint64_t totalBytesWritten = 0 ;
632+ const char CRLF[] = " \r\n " ;
633+
634+ if (isChunked)
633635 {
634- DWORD lastError = GetLastError ();
635- AWS_LOGSTREAM_ERROR (GetLogTag (), " WinHttpWriteData failed. Error: " << lastError << " (0x" << std::hex << lastError << std::dec << " ), bytesToWrite: " << bytesRead);
636- AzWinHttpLogLastError (" WinHttpWriteData" );
637- return 0 ;
636+ Aws::String chunkSizeHexString = StringUtils::ToHexString (bytesRead) + CRLF;
637+
638+ if (!AzCallWinHttp (" WinHttpWriteData" , WinHttpWriteData, hHttpRequest, chunkSizeHexString.c_str (), (DWORD)chunkSizeHexString.size (), &bytesWritten))
639+ {
640+ return totalBytesWritten;
641+ }
642+ totalBytesWritten += bytesWritten;
643+ if (!AzCallWinHttp (" WinHttpWriteData" , WinHttpWriteData, hHttpRequest, streamBuffer, (DWORD)bytesRead, &bytesWritten))
644+ {
645+ return totalBytesWritten;
646+ }
647+ totalBytesWritten += bytesWritten;
648+ if (!AzCallWinHttp (" WinHttpWriteData" , WinHttpWriteData, hHttpRequest, CRLF, (DWORD)(sizeof (CRLF) - 1 ), &bytesWritten))
649+ {
650+ return totalBytesWritten;
651+ }
652+ totalBytesWritten += bytesWritten;
638653 }
639- return bytesWritten;
654+ else
655+ {
656+ if (!AzCallWinHttp (" WinHttpWriteData" , WinHttpWriteData, hHttpRequest, streamBuffer, (DWORD)bytesRead, &bytesWritten))
657+ {
658+ return totalBytesWritten;
659+ }
660+ totalBytesWritten += bytesWritten;
661+ }
662+
663+ return totalBytesWritten;
640664}
641665
642666uint64_t WinHttpSyncHttpClient::FinalizeWriteData (void * hHttpRequest) const
643667{
644- // For chunked requests, signal end of data by writing 0 bytes
645668 DWORD bytesWritten = 0 ;
646- if (!WinHttpWriteData (hHttpRequest, NULL , 0 , &bytesWritten))
669+ const char trailingCRLF[] = " 0\r\n\r\n " ;
670+ if (!AzCallWinHttp (" WinHttpWriteData" , WinHttpWriteData, hHttpRequest, trailingCRLF, (DWORD)(sizeof (trailingCRLF) - 1 ), &bytesWritten))
647671 {
648- DWORD lastError = GetLastError ();
649- AWS_LOGSTREAM_ERROR (GetLogTag (), " WinHttpWriteData finalize failed. Error: " << lastError << " (0x" << std::hex << lastError << std::dec << " )" );
650- AzWinHttpLogLastError (" WinHttpWriteData-Finalize" );
651672 return 0 ;
652673 }
674+
653675 return bytesWritten;
654676}
655677
0 commit comments