Skip to content

Commit 62530ae

Browse files
committed
refactor out chunk framing
1 parent 62dbcf0 commit 62530ae

File tree

1 file changed

+39
-6
lines changed

1 file changed

+39
-6
lines changed

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

Lines changed: 39 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -161,19 +161,52 @@ void WinINetSyncHttpClient::DoAddHeaders(void* hHttpRequest, Aws::String& header
161161

162162
uint64_t WinINetSyncHttpClient::DoWriteData(void* hHttpRequest, char* streamBuffer, uint64_t bytesRead, bool isChunked) const
163163
{
164-
AWS_UNREFERENCED_PARAM(isChunked);
165164
DWORD bytesWritten = 0;
166-
if (!InternetWriteFile(hHttpRequest, streamBuffer, (DWORD)bytesRead, &bytesWritten))
165+
uint64_t totalBytesWritten = 0;
166+
const char CRLF[] = "\r\n";
167+
168+
if (isChunked)
167169
{
168-
return 0;
170+
Aws::String chunkSizeHexString = StringUtils::ToHexString(bytesRead) + CRLF;
171+
172+
if (!InternetWriteFile(hHttpRequest, chunkSizeHexString.c_str(), (DWORD)chunkSizeHexString.size(), &bytesWritten))
173+
{
174+
return totalBytesWritten;
175+
}
176+
totalBytesWritten += bytesWritten;
177+
if (!InternetWriteFile(hHttpRequest, streamBuffer, (DWORD)bytesRead, &bytesWritten))
178+
{
179+
return totalBytesWritten;
180+
}
181+
totalBytesWritten += bytesWritten;
182+
if (!InternetWriteFile(hHttpRequest, CRLF, (DWORD)(sizeof(CRLF) - 1), &bytesWritten))
183+
{
184+
return totalBytesWritten;
185+
}
186+
totalBytesWritten += bytesWritten;
169187
}
170-
return bytesWritten;
188+
else
189+
{
190+
if (!InternetWriteFile(hHttpRequest, streamBuffer, (DWORD)bytesRead, &bytesWritten))
191+
{
192+
return totalBytesWritten;
193+
}
194+
totalBytesWritten += bytesWritten;
195+
}
196+
197+
return totalBytesWritten;
171198
}
172199

173200
uint64_t WinINetSyncHttpClient::FinalizeWriteData(void* hHttpRequest) const
174201
{
175-
AWS_UNREFERENCED_PARAM(hHttpRequest);
176-
return 0;
202+
DWORD bytesWritten = 0;
203+
const char trailingCRLF[] = "0\r\n\r\n";
204+
if (!InternetWriteFile(hHttpRequest, trailingCRLF, (DWORD)(sizeof(trailingCRLF) - 1), &bytesWritten))
205+
{
206+
return 0;
207+
}
208+
209+
return bytesWritten;
177210
}
178211

179212
bool WinINetSyncHttpClient::DoReceiveResponse(void* hHttpRequest) const

0 commit comments

Comments
 (0)