Skip to content

Commit 6bedf17

Browse files
committed
update to test changes
1 parent 0c2c2bd commit 6bedf17

File tree

2 files changed

+39
-13
lines changed

2 files changed

+39
-13
lines changed

src/aws-cpp-sdk-core/source/http/windows/WinHttpSyncHttpClient.cpp

Lines changed: 34 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -627,29 +627,51 @@ void WinHttpSyncHttpClient::DoAddHeaders(void* hHttpRequest, Aws::String& header
627627

628628
uint64_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

642666
uint64_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

src/aws-cpp-sdk-core/source/http/windows/WinSyncHttpClient.cpp

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -101,6 +101,10 @@ bool WinSyncHttpClient::StreamPayloadToRequest(const std::shared_ptr<HttpRequest
101101
auto payloadStream = request->GetContentBody();
102102
if(payloadStream)
103103
{
104+
// Check if this is AWS chunked encoding
105+
bool isChunked = request->HasHeader("content-encoding") &&
106+
request->GetHeaderValue("content-encoding").find("aws-chunked") != Aws::String::npos;
107+
104108
uint64_t bytesWritten;
105109
uint64_t bytesToRead = HTTP_REQUEST_WRITE_BUFFER_LENGTH;
106110
auto startingPos = payloadStream->tellg();
@@ -115,7 +119,7 @@ bool WinSyncHttpClient::StreamPayloadToRequest(const std::shared_ptr<HttpRequest
115119
bytesWritten = 0;
116120
if (bytesRead > 0)
117121
{
118-
bytesWritten = DoWriteData(hHttpRequest, streamBuffer, bytesRead, false);
122+
bytesWritten = DoWriteData(hHttpRequest, streamBuffer, bytesRead, isChunked);
119123
if (!bytesWritten)
120124
{
121125
success = false;

0 commit comments

Comments
 (0)