Textractor_test/extensions/network.h

40 lines
948 B
C
Raw Normal View History

2019-02-11 10:46:39 +08:00
#pragma once
#include "util.h"
#include <winhttp.h>
using InternetHandle = AutoHandle<Functor<WinHttpCloseHandle>>;
2019-02-13 12:54:33 +08:00
inline std::optional<std::wstring> ReceiveHttpRequest(HINTERNET request)
2019-02-11 10:46:39 +08:00
{
WinHttpReceiveResponse(request, NULL);
std::string data;
DWORD dwSize, dwDownloaded;
do
{
dwSize = 0;
WinHttpQueryDataAvailable(request, &dwSize);
if (!dwSize) break;
std::vector<char> buffer(dwSize);
WinHttpReadData(request, buffer.data(), dwSize, &dwDownloaded);
2019-02-13 12:54:33 +08:00
data.append(buffer.data(), dwDownloaded);
2019-02-11 10:46:39 +08:00
} while (dwSize > 0);
if (data.empty()) return {};
return StringToWideString(data);
}
2019-02-13 12:54:33 +08:00
inline void Escape(std::wstring& text)
2019-02-11 10:46:39 +08:00
{
for (int i = 0; i < text.size(); ++i)
{
if (text[i] == L'\\')
{
text[i] = 0x200b;
if (text[i + 1] == L'r') text[i + 1] = 0x200b; // for some reason \r gets displayed as a newline
if (text[i + 1] == L'n') text[i + 1] = L'\n';
if (text[i + 1] == L't') text[i + 1] = L'\t';
}
}
}