| Server IP : 209.209.40.120 / Your IP : 216.73.217.112 Web Server : Microsoft-IIS/10.0 System : Windows NT NEWWWW 10.0 build 17763 (Windows Server 2019) i586 User : NEWWWW$ ( 0) PHP Version : 8.3.30 Disable Function : NONE MySQL : OFF | cURL : ON | WGET : OFF | Perl : OFF | Python : OFF | Sudo : OFF | Pkexec : OFF Directory : C:/Program Files (x86)/Windows Kits/10/Include/10.0.19041.0/um/ |
Upload File : |
/*
Copyright (c) Microsoft Corporation. All rights reserved.
Module Name:
websocket.h
Abstract:
Header files for WebSocket Protocol Component.
--*/
#ifndef __WEBSOCKET_H__
#define __WEBSOCKET_H__
#ifdef _MSC_VER
#pragma once
#endif
#ifdef __cplusplus
extern "C"
{
#endif
#include <winapifamily.h>
#pragma region Desktop Family or OneCore Family
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
#if NTDDI_VERSION >= NTDDI_WIN8
DECLARE_HANDLE(WEB_SOCKET_HANDLE);
#define WEB_SOCKET_MAX_CLOSE_REASON_LENGTH 123
typedef enum _WEB_SOCKET_CLOSE_STATUS
{
WEB_SOCKET_SUCCESS_CLOSE_STATUS = 1000,
WEB_SOCKET_ENDPOINT_UNAVAILABLE_CLOSE_STATUS = 1001,
WEB_SOCKET_PROTOCOL_ERROR_CLOSE_STATUS = 1002,
WEB_SOCKET_INVALID_DATA_TYPE_CLOSE_STATUS = 1003,
WEB_SOCKET_EMPTY_CLOSE_STATUS = 1005,
WEB_SOCKET_ABORTED_CLOSE_STATUS = 1006,
WEB_SOCKET_INVALID_PAYLOAD_CLOSE_STATUS = 1007,
WEB_SOCKET_POLICY_VIOLATION_CLOSE_STATUS = 1008,
WEB_SOCKET_MESSAGE_TOO_BIG_CLOSE_STATUS = 1009,
WEB_SOCKET_UNSUPPORTED_EXTENSIONS_CLOSE_STATUS = 1010,
WEB_SOCKET_SERVER_ERROR_CLOSE_STATUS = 1011,
WEB_SOCKET_SECURE_HANDSHAKE_ERROR_CLOSE_STATUS = 1015,
} WEB_SOCKET_CLOSE_STATUS;
typedef enum _WEB_SOCKET_PROPERTY_TYPE
{
WEB_SOCKET_RECEIVE_BUFFER_SIZE_PROPERTY_TYPE = 0,
WEB_SOCKET_SEND_BUFFER_SIZE_PROPERTY_TYPE = 1,
WEB_SOCKET_DISABLE_MASKING_PROPERTY_TYPE = 2,
WEB_SOCKET_ALLOCATED_BUFFER_PROPERTY_TYPE = 3,
WEB_SOCKET_DISABLE_UTF8_VERIFICATION_PROPERTY_TYPE = 4,
WEB_SOCKET_KEEPALIVE_INTERVAL_PROPERTY_TYPE = 5,
WEB_SOCKET_SUPPORTED_VERSIONS_PROPERTY_TYPE = 6,
} WEB_SOCKET_PROPERTY_TYPE;
typedef enum _WEB_SOCKET_ACTION_QUEUE
{
WEB_SOCKET_SEND_ACTION_QUEUE = 0x1,
WEB_SOCKET_RECEIVE_ACTION_QUEUE = 0x2,
WEB_SOCKET_ALL_ACTION_QUEUE = WEB_SOCKET_SEND_ACTION_QUEUE | WEB_SOCKET_RECEIVE_ACTION_QUEUE
} WEB_SOCKET_ACTION_QUEUE;
typedef enum _WEB_SOCKET_BUFFER_TYPE
{
WEB_SOCKET_UTF8_MESSAGE_BUFFER_TYPE = 0x80000000,
WEB_SOCKET_UTF8_FRAGMENT_BUFFER_TYPE = 0x80000001,
WEB_SOCKET_BINARY_MESSAGE_BUFFER_TYPE = 0x80000002,
WEB_SOCKET_BINARY_FRAGMENT_BUFFER_TYPE = 0x80000003,
WEB_SOCKET_CLOSE_BUFFER_TYPE = 0x80000004,
WEB_SOCKET_PING_PONG_BUFFER_TYPE = 0x80000005,
WEB_SOCKET_UNSOLICITED_PONG_BUFFER_TYPE = 0x80000006,
} WEB_SOCKET_BUFFER_TYPE;
typedef enum _WEB_SOCKET_ACTION
{
WEB_SOCKET_NO_ACTION = 0,
WEB_SOCKET_SEND_TO_NETWORK_ACTION = 1,
WEB_SOCKET_INDICATE_SEND_COMPLETE_ACTION = 2,
WEB_SOCKET_RECEIVE_FROM_NETWORK_ACTION = 3,
WEB_SOCKET_INDICATE_RECEIVE_COMPLETE_ACTION = 4,
} WEB_SOCKET_ACTION, *PWEB_SOCKET_ACTION;
typedef struct _WEB_SOCKET_PROPERTY
{
WEB_SOCKET_PROPERTY_TYPE Type;
PVOID pvValue;
ULONG ulValueSize;
} WEB_SOCKET_PROPERTY, *PWEB_SOCKET_PROPERTY;
typedef struct _WEB_SOCKET_HTTP_HEADER
{
PCHAR pcName;
ULONG ulNameLength;
PCHAR pcValue;
ULONG ulValueLength;
} WEB_SOCKET_HTTP_HEADER, *PWEB_SOCKET_HTTP_HEADER;
typedef union _WEB_SOCKET_BUFFER
{
struct
{
_Field_size_bytes_(ulBufferLength) PBYTE pbBuffer;
ULONG ulBufferLength;
} Data;
struct
{
_Field_size_bytes_(ulReasonLength) PBYTE pbReason;
_Field_range_(0, WEB_SOCKET_MAX_CLOSE_REASON_LENGTH) ULONG ulReasonLength;
USHORT usStatus;
} CloseStatus;
} WEB_SOCKET_BUFFER, *PWEB_SOCKET_BUFFER;
HRESULT WINAPI WebSocketCreateClientHandle(
_In_reads_(ulPropertyCount) const PWEB_SOCKET_PROPERTY pProperties,
_In_ ULONG ulPropertyCount,
_Out_ WEB_SOCKET_HANDLE *phWebSocket);
HRESULT WINAPI WebSocketBeginClientHandshake(
_In_ WEB_SOCKET_HANDLE hWebSocket,
_In_reads_opt_(ulSubprotocolCount) PCSTR *pszSubprotocols,
_In_ ULONG ulSubprotocolCount,
_In_reads_opt_(ulExtensionCount) PCSTR *pszExtensions,
_In_ ULONG ulExtensionCount,
_In_reads_opt_(ulInitialHeaderCount) const PWEB_SOCKET_HTTP_HEADER pInitialHeaders,
_In_ ULONG ulInitialHeaderCount,
_Out_writes_(*pulAdditionalHeaderCount) PWEB_SOCKET_HTTP_HEADER *pAdditionalHeaders,
_Out_ ULONG *pulAdditionalHeaderCount);
HRESULT WINAPI WebSocketEndClientHandshake(
_In_ WEB_SOCKET_HANDLE hWebSocket,
_In_reads_(ulReponseHeaderCount) const PWEB_SOCKET_HTTP_HEADER pResponseHeaders,
_In_ ULONG ulReponseHeaderCount,
_Inout_updates_to_opt_(*pulSelectedExtensionCount, *pulSelectedExtensionCount) ULONG *pulSelectedExtensions,
_Inout_opt_ ULONG *pulSelectedExtensionCount,
_Inout_opt_ ULONG *pulSelectedSubprotocol);
HRESULT WINAPI WebSocketCreateServerHandle(
_In_reads_(ulPropertyCount) const PWEB_SOCKET_PROPERTY pProperties,
_In_ ULONG ulPropertyCount,
_Out_ WEB_SOCKET_HANDLE *phWebSocket);
HRESULT WINAPI WebSocketBeginServerHandshake(
_In_ WEB_SOCKET_HANDLE hWebSocket,
_In_opt_ PCSTR pszSubprotocolSelected,
_In_reads_opt_(ulExtensionSelectedCount) PCSTR *pszExtensionSelected,
_In_ ULONG ulExtensionSelectedCount,
_In_reads_(ulRequestHeaderCount) const PWEB_SOCKET_HTTP_HEADER pRequestHeaders,
_In_ ULONG ulRequestHeaderCount,
_Out_writes_(*pulResponseHeaderCount) PWEB_SOCKET_HTTP_HEADER *pResponseHeaders,
_Out_ ULONG* pulResponseHeaderCount);
HRESULT WINAPI WebSocketEndServerHandshake(
_In_ WEB_SOCKET_HANDLE hWebSocket);
HRESULT WINAPI WebSocketSend(
_In_ WEB_SOCKET_HANDLE hWebSocket,
_In_ WEB_SOCKET_BUFFER_TYPE BufferType,
_In_opt_ WEB_SOCKET_BUFFER *pBuffer,
_In_opt_ PVOID Context);
HRESULT WINAPI WebSocketReceive(
_In_ WEB_SOCKET_HANDLE hWebSocket,
_In_opt_ WEB_SOCKET_BUFFER *pBuffer,
_In_opt_ PVOID pvContext);
HRESULT WINAPI WebSocketGetAction(
_In_ WEB_SOCKET_HANDLE hWebSocket,
_In_ WEB_SOCKET_ACTION_QUEUE eActionQueue,
_Inout_updates_to_(*pulDataBufferCount, *pulDataBufferCount) WEB_SOCKET_BUFFER *pDataBuffers,
_Inout_ ULONG *pulDataBufferCount,
_Out_ WEB_SOCKET_ACTION *pAction,
_Out_ WEB_SOCKET_BUFFER_TYPE *pBufferType,
_Out_opt_ PVOID *pvApplicationContext,
_Out_ PVOID *pvActionContext);
VOID WINAPI WebSocketCompleteAction(
_In_ WEB_SOCKET_HANDLE hWebSocket,
_In_ PVOID pvActionContext,
_In_ ULONG ulBytesTransferred);
VOID WINAPI WebSocketAbortHandle(
_In_ WEB_SOCKET_HANDLE hWebSocket);
VOID WINAPI WebSocketDeleteHandle(
_In_ WEB_SOCKET_HANDLE hWebSocket);
HRESULT WINAPI WebSocketGetGlobalProperty(
_In_ WEB_SOCKET_PROPERTY_TYPE eType,
_Inout_updates_to_(*ulSize, *ulSize) PVOID pvValue,
_Inout_ ULONG* ulSize);
#endif //NTDDI_VERSION >= NTDDI_WIN8
#endif /* WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) */
#pragma endregion
#ifdef __cplusplus
}
#endif
#endif //__WEBSOCKET_H__