[K/N] KT-39747

Add a WinHTTP platform library.
This commit is contained in:
Sergey Bogolepov
2022-08-09 12:17:29 +03:00
committed by Space
parent bb38690273
commit 5152966aa0
@@ -0,0 +1,135 @@
package = platform.winhttp
headers = wtypes.h winhttp.h
headerFilter = winhttp.h
compilerOpts = -DUNICODE
linkerOpts = -lwinhttp
depends = posix windows
---
// Note that some of definitions can overlap with definitions from platform.windows
// Some of them have the same value (e.g. SECURITY_FLAG_IGNORE_UNKNOWN_CA),
// Others do not (INTERNET_SCHEME_HTTP).
// To make things simple and correct, we don't try to undefine them.
// In case of collision, users can import declaration explicitly
// For example, `import platform.windows.INTERNET_SCHEME_HTTP`.
// These WebSocket declarations are not present in our sysroots,
// so we add them here.
#define WINHTTP_OPTION_UPGRADE_TO_WEB_SOCKET 114
typedef enum _WINHTTP_WEB_SOCKET_OPERATION
{
WINHTTP_WEB_SOCKET_SEND_OPERATION = 0,
WINHTTP_WEB_SOCKET_RECEIVE_OPERATION = 1,
WINHTTP_WEB_SOCKET_CLOSE_OPERATION = 2,
WINHTTP_WEB_SOCKET_SHUTDOWN_OPERATION = 3
} WINHTTP_WEB_SOCKET_OPERATION;
typedef enum _WINHTTP_WEB_SOCKET_BUFFER_TYPE
{
WINHTTP_WEB_SOCKET_BINARY_MESSAGE_BUFFER_TYPE = 0,
WINHTTP_WEB_SOCKET_BINARY_FRAGMENT_BUFFER_TYPE = 1,
WINHTTP_WEB_SOCKET_UTF8_MESSAGE_BUFFER_TYPE = 2,
WINHTTP_WEB_SOCKET_UTF8_FRAGMENT_BUFFER_TYPE = 3,
WINHTTP_WEB_SOCKET_CLOSE_BUFFER_TYPE = 4
} WINHTTP_WEB_SOCKET_BUFFER_TYPE;
typedef enum _WINHTTP_WEB_SOCKET_CLOSE_STATUS
{
WINHTTP_WEB_SOCKET_SUCCESS_CLOSE_STATUS = 1000,
WINHTTP_WEB_SOCKET_ENDPOINT_TERMINATED_CLOSE_STATUS = 1001,
WINHTTP_WEB_SOCKET_PROTOCOL_ERROR_CLOSE_STATUS = 1002,
WINHTTP_WEB_SOCKET_INVALID_DATA_TYPE_CLOSE_STATUS = 1003,
WINHTTP_WEB_SOCKET_EMPTY_CLOSE_STATUS = 1005,
WINHTTP_WEB_SOCKET_ABORTED_CLOSE_STATUS = 1006,
WINHTTP_WEB_SOCKET_INVALID_PAYLOAD_CLOSE_STATUS = 1007,
WINHTTP_WEB_SOCKET_POLICY_VIOLATION_CLOSE_STATUS = 1008,
WINHTTP_WEB_SOCKET_MESSAGE_TOO_BIG_CLOSE_STATUS = 1009,
WINHTTP_WEB_SOCKET_UNSUPPORTED_EXTENSIONS_CLOSE_STATUS = 1010,
WINHTTP_WEB_SOCKET_SERVER_ERROR_CLOSE_STATUS = 1011,
WINHTTP_WEB_SOCKET_SECURE_HANDSHAKE_ERROR_CLOSE_STATUS = 1015
} WINHTTP_WEB_SOCKET_CLOSE_STATUS;
typedef struct _WINHTTP_WEB_SOCKET_ASYNC_RESULT
{
WINHTTP_ASYNC_RESULT AsyncResult;
WINHTTP_WEB_SOCKET_OPERATION Operation;
} WINHTTP_WEB_SOCKET_ASYNC_RESULT;
typedef struct _WINHTTP_WEB_SOCKET_STATUS
{
DWORD dwBytesTransferred;
WINHTTP_WEB_SOCKET_BUFFER_TYPE eBufferType;
} WINHTTP_WEB_SOCKET_STATUS;
#define WINHTTP_WEB_SOCKET_MAX_CLOSE_REASON_LENGTH 123
#define WINHTTP_WEB_SOCKET_MIN_KEEPALIVE_VALUE 15000
#define WINHTTP_CALLBACK_STATUS_CLOSE_COMPLETE 0x02000000
#define WINHTTP_CALLBACK_STATUS_SHUTDOWN_COMPLETE 0x04000000
WINHTTPAPI
HINTERNET
WINAPI
WinHttpWebSocketCompleteUpgrade
(
_In_ HINTERNET hRequest,
_In_opt_ DWORD_PTR pContext
);
WINHTTPAPI
DWORD
WINAPI
WinHttpWebSocketSend
(
_In_ HINTERNET hWebSocket,
_In_ WINHTTP_WEB_SOCKET_BUFFER_TYPE eBufferType,
_In_reads_opt_(dwBufferLength) PVOID pvBuffer,
_In_ DWORD dwBufferLength
);
WINHTTPAPI
DWORD
WINAPI
WinHttpWebSocketReceive
(
_In_ HINTERNET hWebSocket,
_Out_writes_bytes_to_(dwBufferLength, *pdwBytesRead) PVOID pvBuffer,
_In_ DWORD dwBufferLength,
_Out_range_(0, dwBufferLength) DWORD *pdwBytesRead,
_Out_ WINHTTP_WEB_SOCKET_BUFFER_TYPE *peBufferType
);
WINHTTPAPI
DWORD
WINAPI
WinHttpWebSocketShutdown
(
_In_ HINTERNET hWebSocket,
_In_ USHORT usStatus,
_In_reads_bytes_opt_(dwReasonLength) PVOID pvReason,
_In_range_(0, WINHTTP_WEB_SOCKET_MAX_CLOSE_REASON_LENGTH) DWORD dwReasonLength
);
WINHTTPAPI
DWORD
WINAPI
WinHttpWebSocketClose
(
_In_ HINTERNET hWebSocket,
_In_ USHORT usStatus,
_In_reads_bytes_opt_(dwReasonLength) PVOID pvReason,
_In_range_(0, WINHTTP_WEB_SOCKET_MAX_CLOSE_REASON_LENGTH) DWORD dwReasonLength
);
WINHTTPAPI
DWORD
WINAPI
WinHttpWebSocketQueryCloseStatus
(
_In_ HINTERNET hWebSocket,
_Out_ USHORT *pusStatus,
_Out_writes_bytes_to_opt_(dwReasonLength, *pdwReasonLengthConsumed) PVOID pvReason,
_In_range_(0, WINHTTP_WEB_SOCKET_MAX_CLOSE_REASON_LENGTH) DWORD dwReasonLength,
_Out_range_(0, WINHTTP_WEB_SOCKET_MAX_CLOSE_REASON_LENGTH) DWORD *pdwReasonLengthConsumed
);