mirror of
https://github.com/gnif/LookingGlass.git
synced 2026-11-13 07:17:28 +00:00
[build] msquic: add static network dependency
This commit is contained in:
138
cmake/toolchains/msquic-clangcl-mingw64.cmake
Normal file
138
cmake/toolchains/msquic-clangcl-mingw64.cmake
Normal file
@@ -0,0 +1,138 @@
|
||||
set(CMAKE_SYSTEM_NAME Windows)
|
||||
set(CMAKE_SYSTEM_PROCESSOR AMD64)
|
||||
|
||||
set(MSQUIC_MINGW_TRIPLE x86_64-w64-mingw32 CACHE STRING
|
||||
"MinGW-w64 target triple")
|
||||
set(MSQUIC_MINGW_ROOT "/usr/${MSQUIC_MINGW_TRIPLE}" CACHE PATH
|
||||
"MinGW-w64 target root")
|
||||
set(MSQUIC_CLANG_CL clang-cl CACHE FILEPATH
|
||||
"clang-cl used to build the static MsQuic archive")
|
||||
set(MSQUIC_LLVM_LIB llvm-lib CACHE FILEPATH
|
||||
"llvm-lib used to create the static MsQuic archive")
|
||||
set(MSQUIC_WINDRES "${MSQUIC_MINGW_TRIPLE}-windres" CACHE FILEPATH
|
||||
"MinGW-w64 resource compiler")
|
||||
set(MSQUIC_MINGW_GCC "${MSQUIC_MINGW_TRIPLE}-gcc" CACHE FILEPATH
|
||||
"MinGW-w64 compiler used to locate compatibility headers")
|
||||
|
||||
if(NOT MSQUIC_CLANG_RESOURCE_DIR)
|
||||
execute_process(
|
||||
COMMAND "${MSQUIC_CLANG_CL}" /clang:-print-resource-dir
|
||||
RESULT_VARIABLE MSQUIC_CLANG_RESOURCE_RESULT
|
||||
OUTPUT_VARIABLE MSQUIC_CLANG_RESOURCE_ROOT
|
||||
ERROR_VARIABLE MSQUIC_CLANG_RESOURCE_ERROR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(NOT MSQUIC_CLANG_RESOURCE_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR
|
||||
"Unable to locate the clang resource headers: "
|
||||
"${MSQUIC_CLANG_RESOURCE_ERROR}")
|
||||
endif()
|
||||
|
||||
set(MSQUIC_CLANG_RESOURCE_DIR
|
||||
"${MSQUIC_CLANG_RESOURCE_ROOT}/include" CACHE PATH
|
||||
"clang resource headers used by the MsQuic cross-build")
|
||||
endif()
|
||||
|
||||
if(NOT MSQUIC_MINGW_GCC_INCLUDE)
|
||||
execute_process(
|
||||
COMMAND "${MSQUIC_MINGW_GCC}" -print-file-name=include
|
||||
RESULT_VARIABLE MSQUIC_MINGW_GCC_INCLUDE_RESULT
|
||||
OUTPUT_VARIABLE MSQUIC_MINGW_GCC_INCLUDE
|
||||
ERROR_VARIABLE MSQUIC_MINGW_GCC_INCLUDE_ERROR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(NOT MSQUIC_MINGW_GCC_INCLUDE_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR
|
||||
"Unable to locate the MinGW-w64 compiler headers: "
|
||||
"${MSQUIC_MINGW_GCC_INCLUDE_ERROR}")
|
||||
endif()
|
||||
|
||||
set(MSQUIC_MINGW_GCC_INCLUDE "${MSQUIC_MINGW_GCC_INCLUDE}" CACHE PATH
|
||||
"MinGW-w64 compiler headers used by the MsQuic cross-build")
|
||||
endif()
|
||||
|
||||
if(NOT MSQUIC_MINGW_GCC_INCLUDE_FIXED)
|
||||
execute_process(
|
||||
COMMAND "${MSQUIC_MINGW_GCC}" -print-file-name=include-fixed
|
||||
RESULT_VARIABLE MSQUIC_MINGW_GCC_FIXED_RESULT
|
||||
OUTPUT_VARIABLE MSQUIC_MINGW_GCC_INCLUDE_FIXED
|
||||
ERROR_VARIABLE MSQUIC_MINGW_GCC_FIXED_ERROR
|
||||
OUTPUT_STRIP_TRAILING_WHITESPACE)
|
||||
if(NOT MSQUIC_MINGW_GCC_FIXED_RESULT EQUAL 0)
|
||||
message(FATAL_ERROR
|
||||
"Unable to locate the fixed MinGW-w64 compiler headers: "
|
||||
"${MSQUIC_MINGW_GCC_FIXED_ERROR}")
|
||||
endif()
|
||||
|
||||
set(MSQUIC_MINGW_GCC_INCLUDE_FIXED
|
||||
"${MSQUIC_MINGW_GCC_INCLUDE_FIXED}" CACHE PATH
|
||||
"Fixed MinGW-w64 compiler headers used by the MsQuic cross-build")
|
||||
endif()
|
||||
|
||||
foreach(MSQUIC_REQUIRED_INCLUDE
|
||||
"${MSQUIC_MINGW_ROOT}/include"
|
||||
"${MSQUIC_CLANG_RESOURCE_DIR}"
|
||||
"${MSQUIC_MINGW_GCC_INCLUDE}")
|
||||
if(NOT IS_DIRECTORY "${MSQUIC_REQUIRED_INCLUDE}")
|
||||
message(FATAL_ERROR
|
||||
"Required MsQuic cross-build headers are missing: "
|
||||
"${MSQUIC_REQUIRED_INCLUDE}")
|
||||
endif()
|
||||
endforeach()
|
||||
|
||||
set(CMAKE_C_COMPILER "${MSQUIC_CLANG_CL}")
|
||||
set(CMAKE_CXX_COMPILER "${MSQUIC_CLANG_CL}")
|
||||
set(CMAKE_C_COMPILER_TARGET "${MSQUIC_MINGW_TRIPLE}")
|
||||
set(CMAKE_CXX_COMPILER_TARGET "${MSQUIC_MINGW_TRIPLE}")
|
||||
set(CMAKE_AR "${MSQUIC_LLVM_LIB}")
|
||||
set(CMAKE_RC_COMPILER "${MSQUIC_WINDRES}")
|
||||
|
||||
set(MSQUIC_COMPAT_HEADER
|
||||
"${CMAKE_CURRENT_LIST_DIR}/msquic-mingw-compat.h")
|
||||
set(MSQUIC_CLANG_CL_OPTIONS
|
||||
"/clang:-nostdinc"
|
||||
"/clang:-isystem"
|
||||
"/clang:${MSQUIC_MINGW_ROOT}/include"
|
||||
"/clang:-isystem"
|
||||
"/clang:${MSQUIC_CLANG_RESOURCE_DIR}"
|
||||
"/clang:-isystem"
|
||||
"/clang:${MSQUIC_MINGW_GCC_INCLUDE}")
|
||||
|
||||
if(IS_DIRECTORY "${MSQUIC_MINGW_GCC_INCLUDE_FIXED}")
|
||||
list(APPEND MSQUIC_CLANG_CL_OPTIONS
|
||||
"/clang:-isystem"
|
||||
"/clang:${MSQUIC_MINGW_GCC_INCLUDE_FIXED}")
|
||||
endif()
|
||||
|
||||
list(APPEND MSQUIC_CLANG_CL_OPTIONS
|
||||
"/clang:-fms-extensions"
|
||||
"/clang:-Wno-unknown-pragmas"
|
||||
"/clang:-Wno-microsoft-anon-tag"
|
||||
"/clang:-Wno-missing-field-initializers"
|
||||
"/clang:-Wno-sign-compare"
|
||||
"/clang:-Wno-int-conversion"
|
||||
"/clang:-Wno-unused-function"
|
||||
"/clang:-Wno-incompatible-pointer-types"
|
||||
"/FI${MSQUIC_COMPAT_HEADER}")
|
||||
list(JOIN MSQUIC_CLANG_CL_OPTIONS " " MSQUIC_CLANG_CL_FLAGS)
|
||||
|
||||
set(CMAKE_C_FLAGS "${MSQUIC_CLANG_CL_FLAGS}" CACHE STRING "" FORCE)
|
||||
set(CMAKE_CXX_FLAGS "${MSQUIC_CLANG_CL_FLAGS}" CACHE STRING "" FORCE)
|
||||
set(CMAKE_C_FLAGS_DEBUG "/clang:-O0 /Zi" CACHE STRING "" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_DEBUG "/clang:-O0 /Zi" CACHE STRING "" FORCE)
|
||||
set(CMAKE_C_FLAGS_RELEASE "/clang:-O3 /DNDEBUG" CACHE STRING "" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_RELEASE "/clang:-O3 /DNDEBUG" CACHE STRING "" FORCE)
|
||||
set(CMAKE_C_FLAGS_RELWITHDEBINFO
|
||||
"/clang:-O2 /Zi /DNDEBUG" CACHE STRING "" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO
|
||||
"/clang:-O2 /Zi /DNDEBUG" CACHE STRING "" FORCE)
|
||||
set(CMAKE_C_FLAGS_MINSIZEREL "/clang:-Os /DNDEBUG" CACHE STRING "" FORCE)
|
||||
set(CMAKE_CXX_FLAGS_MINSIZEREL
|
||||
"/clang:-Os /DNDEBUG" CACHE STRING "" FORCE)
|
||||
|
||||
set(CMAKE_USER_MAKE_RULES_OVERRIDE
|
||||
"${CMAKE_CURRENT_LIST_DIR}/msquic-clangcl-rules.cmake")
|
||||
|
||||
set(CMAKE_FIND_ROOT_PATH "${MSQUIC_MINGW_ROOT}")
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PROGRAM NEVER)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_LIBRARY ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_INCLUDE ONLY)
|
||||
set(CMAKE_FIND_ROOT_PATH_MODE_PACKAGE ONLY)
|
||||
21
cmake/toolchains/msquic-clangcl-rules.cmake
Normal file
21
cmake/toolchains/msquic-clangcl-rules.cmake
Normal file
@@ -0,0 +1,21 @@
|
||||
set(CMAKE_DEPFILE_FLAGS_C
|
||||
"-clang:-MD -clang:-MT<DEP_TARGET> -clang:-MF<DEP_FILE>")
|
||||
set(CMAKE_DEPFILE_FLAGS_CXX
|
||||
"-clang:-MD -clang:-MT<DEP_TARGET> -clang:-MF<DEP_FILE>")
|
||||
|
||||
set(CMAKE_C_COMPILE_OBJECT
|
||||
"<CMAKE_C_COMPILER> <DEFINES> <INCLUDES> <FLAGS> /Fo<OBJECT> /Fd<TARGET_COMPILE_PDB> /c -- <SOURCE>")
|
||||
set(CMAKE_CXX_COMPILE_OBJECT
|
||||
"<CMAKE_CXX_COMPILER> <DEFINES> <INCLUDES> <FLAGS> /Fo<OBJECT> /Fd<TARGET_COMPILE_PDB> /c -- <SOURCE>")
|
||||
set(CMAKE_C_CREATE_STATIC_LIBRARY
|
||||
"<CMAKE_AR> /nologo <LINK_FLAGS> /out:<TARGET> <OBJECTS>")
|
||||
set(CMAKE_CXX_CREATE_STATIC_LIBRARY
|
||||
"<CMAKE_AR> /nologo <LINK_FLAGS> /out:<TARGET> <OBJECTS>")
|
||||
|
||||
set(CMAKE_STATIC_LIBRARY_PREFIX "")
|
||||
set(CMAKE_STATIC_LIBRARY_SUFFIX ".lib")
|
||||
set(CMAKE_IMPORT_LIBRARY_PREFIX "")
|
||||
set(CMAKE_IMPORT_LIBRARY_SUFFIX ".lib")
|
||||
|
||||
set(CMAKE_C_USE_RESPONSE_FILE_FOR_OBJECTS 1)
|
||||
set(CMAKE_CXX_USE_RESPONSE_FILE_FOR_OBJECTS 1)
|
||||
322
cmake/toolchains/msquic-mingw-compat.h
Normal file
322
cmake/toolchains/msquic-mingw-compat.h
Normal file
@@ -0,0 +1,322 @@
|
||||
/**
|
||||
* Looking Glass
|
||||
* Copyright © 2017-2026 The Looking Glass Authors
|
||||
* https://looking-glass.io
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify it
|
||||
* under the terms of the GNU General Public License as published by the Free
|
||||
* Software Foundation; either version 2 of the License, or (at your option)
|
||||
* any later version.
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful, but WITHOUT
|
||||
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
|
||||
* FITNESS FOR A PARTICULAR PURPOSE. See the GNU General Public License for
|
||||
* more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License along
|
||||
* with this program; if not, write to the Free Software Foundation, Inc., 59
|
||||
* Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*/
|
||||
|
||||
#ifndef _H_LG_MSQUIC_MINGW_COMPAT_
|
||||
#define _H_LG_MSQUIC_MINGW_COMPAT_
|
||||
|
||||
#ifndef FORCEINLINE
|
||||
#define FORCEINLINE __inline__ __attribute__((__always_inline__))
|
||||
#endif
|
||||
|
||||
#ifndef EXTERN_C_START
|
||||
#ifdef __cplusplus
|
||||
#define EXTERN_C_START extern "C" {
|
||||
#define EXTERN_C_END }
|
||||
#else
|
||||
#define EXTERN_C_START
|
||||
#define EXTERN_C_END
|
||||
#endif
|
||||
#endif
|
||||
|
||||
#include <winsock2.h>
|
||||
#include <ws2tcpip.h>
|
||||
#include <windows.h>
|
||||
#include <mswsock.h>
|
||||
#include <mstcpip.h>
|
||||
|
||||
#include <string.h>
|
||||
|
||||
#undef UNREFERENCED_PARAMETER
|
||||
#define UNREFERENCED_PARAMETER(parameter) ((void)(parameter))
|
||||
|
||||
#undef DBG_UNREFERENCED_LOCAL_VARIABLE
|
||||
#define DBG_UNREFERENCED_LOCAL_VARIABLE(variable) ((void)(variable))
|
||||
|
||||
#ifndef _Interlocked_operand_
|
||||
#define _Interlocked_operand_
|
||||
#endif
|
||||
|
||||
#ifndef DECLSPEC_ALLOCATOR
|
||||
#define DECLSPEC_ALLOCATOR
|
||||
#endif
|
||||
|
||||
#ifndef FAST_FAIL_INVALID_REFERENCE_COUNT
|
||||
#define FAST_FAIL_INVALID_REFERENCE_COUNT 14
|
||||
#endif
|
||||
|
||||
#ifndef PASSIVE_LEVEL
|
||||
#define PASSIVE_LEVEL 0
|
||||
#endif
|
||||
|
||||
#ifndef IFI_UNSPECIFIED
|
||||
#define IFI_UNSPECIFIED 0
|
||||
#endif
|
||||
|
||||
#ifndef __kernel_entry
|
||||
#define __kernel_entry
|
||||
#endif
|
||||
|
||||
#ifndef __noop
|
||||
#define __noop(expression) ((void)(0 && (expression)))
|
||||
#endif
|
||||
|
||||
#ifndef __annotation
|
||||
#define __annotation(...) ((void)0)
|
||||
#endif
|
||||
|
||||
#ifndef __analysis_assert
|
||||
#define __analysis_assert(expression) ((void)(0 && (expression)))
|
||||
#endif
|
||||
|
||||
#ifndef InterlockedAnd8
|
||||
#define InterlockedAnd8 _InterlockedAnd8
|
||||
#endif
|
||||
|
||||
#ifndef InterlockedOr8
|
||||
#define InterlockedOr8 _InterlockedOr8
|
||||
#endif
|
||||
|
||||
#ifndef InterlockedIncrementNoFence64
|
||||
#define InterlockedIncrementNoFence64 _InterlockedIncrement64
|
||||
#endif
|
||||
|
||||
#ifndef InterlockedDecrementRelease64
|
||||
#define InterlockedDecrementRelease64 _InterlockedDecrement64
|
||||
#endif
|
||||
|
||||
#ifndef InterlockedCompareExchangeNoFence64
|
||||
#define InterlockedCompareExchangeNoFence64 _InterlockedCompareExchange64
|
||||
#endif
|
||||
|
||||
#ifndef ReadNoFence64
|
||||
#define ReadNoFence64(target) (*(volatile __int64 *)(target))
|
||||
#endif
|
||||
|
||||
#ifndef ReadPointerNoFence
|
||||
#define ReadPointerNoFence(target) (*(void * volatile *)(target))
|
||||
#endif
|
||||
|
||||
#ifndef ReadUInt32Acquire
|
||||
#define ReadUInt32Acquire(source) \
|
||||
__atomic_load_n((source), __ATOMIC_ACQUIRE)
|
||||
#endif
|
||||
|
||||
#ifndef WriteUInt32Release
|
||||
#define WriteUInt32Release(destination, value) \
|
||||
__atomic_store_n((destination), (value), __ATOMIC_RELEASE)
|
||||
#endif
|
||||
|
||||
#ifndef WSA_FLAG_REGISTERED_IO
|
||||
#define WSA_FLAG_REGISTERED_IO 0x100
|
||||
#endif
|
||||
|
||||
#ifndef SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER
|
||||
#define SIO_GET_MULTIPLE_EXTENSION_FUNCTION_POINTER _WSAIORW(IOC_WS2, 36)
|
||||
#endif
|
||||
|
||||
#ifndef SIO_QUERY_RSS_PROCESSOR_INFO
|
||||
#define SIO_QUERY_RSS_PROCESSOR_INFO _WSAIOR(IOC_WS2, 37)
|
||||
|
||||
typedef struct _SOCKET_PROCESSOR_AFFINITY
|
||||
{
|
||||
PROCESSOR_NUMBER Processor;
|
||||
USHORT NumaNodeId;
|
||||
USHORT Reserved;
|
||||
}
|
||||
SOCKET_PROCESSOR_AFFINITY, *PSOCKET_PROCESSOR_AFFINITY;
|
||||
#endif
|
||||
|
||||
#ifndef SIO_QUERY_RSS_SCALABILITY_INFO
|
||||
#define SIO_QUERY_RSS_SCALABILITY_INFO _WSAIOR(IOC_VENDOR, 210)
|
||||
|
||||
typedef struct _RSS_SCALABILITY_INFO
|
||||
{
|
||||
BOOLEAN RssEnabled;
|
||||
}
|
||||
RSS_SCALABILITY_INFO, *PRSS_SCALABILITY_INFO;
|
||||
#endif
|
||||
|
||||
#ifndef GAA_FLAG_SKIP_DNS_INFO
|
||||
#define GAA_FLAG_SKIP_DNS_INFO 0x0800
|
||||
#endif
|
||||
|
||||
#ifndef WSAID_MULTIPLE_RIO
|
||||
#define WSAID_MULTIPLE_RIO \
|
||||
{ 0x8509e081, 0x96dd, 0x4005, \
|
||||
{ 0xb1, 0x65, 0x9e, 0x2e, 0xe8, 0xc7, 0x9e, 0x3f } }
|
||||
#endif
|
||||
|
||||
#ifndef RIO_INVALID_CQ
|
||||
typedef struct RIO_BUFFERID_t *RIO_BUFFERID, **PRIO_BUFFERID;
|
||||
typedef struct RIO_CQ_t *RIO_CQ, **PRIO_CQ;
|
||||
typedef struct RIO_RQ_t *RIO_RQ, **PRIO_RQ;
|
||||
|
||||
typedef struct _RIORESULT
|
||||
{
|
||||
LONG Status;
|
||||
ULONG BytesTransferred;
|
||||
ULONGLONG SocketContext;
|
||||
ULONGLONG RequestContext;
|
||||
}
|
||||
RIORESULT, *PRIORESULT;
|
||||
|
||||
typedef struct _RIO_BUF
|
||||
{
|
||||
RIO_BUFFERID BufferId;
|
||||
ULONG Offset;
|
||||
ULONG Length;
|
||||
}
|
||||
RIO_BUF, *PRIO_BUF;
|
||||
|
||||
#define RIO_MSG_DONT_NOTIFY 0x00000001
|
||||
#define RIO_MSG_DEFER 0x00000002
|
||||
#define RIO_MSG_WAITALL 0x00000004
|
||||
#define RIO_MSG_COMMIT_ONLY 0x00000008
|
||||
|
||||
#define RIO_INVALID_BUFFERID ((RIO_BUFFERID)(ULONG_PTR)0xFFFFFFFF)
|
||||
#define RIO_INVALID_CQ ((RIO_CQ)0)
|
||||
#define RIO_INVALID_RQ ((RIO_RQ)0)
|
||||
#define RIO_MAX_CQ_SIZE 0x08000000
|
||||
#define RIO_CORRUPT_CQ 0xFFFFFFFF
|
||||
|
||||
typedef struct _RIO_CMSG_BUFFER
|
||||
{
|
||||
ULONG TotalLength;
|
||||
}
|
||||
RIO_CMSG_BUFFER, *PRIO_CMSG_BUFFER;
|
||||
|
||||
#define RIO_CMSG_BASE_SIZE WSA_CMSGHDR_ALIGN(sizeof(RIO_CMSG_BUFFER))
|
||||
|
||||
typedef BOOL (WINAPI *LPFN_RIORECEIVE)(
|
||||
RIO_RQ, PRIO_BUF, ULONG, DWORD, PVOID);
|
||||
typedef BOOL (WINAPI *LPFN_RIORECEIVEEX)(
|
||||
RIO_RQ, PRIO_BUF, ULONG, PRIO_BUF, PRIO_BUF, PRIO_BUF, PRIO_BUF,
|
||||
DWORD, PVOID);
|
||||
typedef BOOL (WINAPI *LPFN_RIOSEND)(
|
||||
RIO_RQ, PRIO_BUF, ULONG, DWORD, PVOID);
|
||||
typedef BOOL (WINAPI *LPFN_RIOSENDEX)(
|
||||
RIO_RQ, PRIO_BUF, ULONG, PRIO_BUF, PRIO_BUF, PRIO_BUF, PRIO_BUF,
|
||||
DWORD, PVOID);
|
||||
typedef VOID (WINAPI *LPFN_RIOCLOSECOMPLETIONQUEUE)(RIO_CQ);
|
||||
|
||||
typedef enum _RIO_NOTIFICATION_COMPLETION_TYPE
|
||||
{
|
||||
RIO_EVENT_COMPLETION = 1,
|
||||
RIO_IOCP_COMPLETION = 2,
|
||||
}
|
||||
RIO_NOTIFICATION_COMPLETION_TYPE, *PRIO_NOTIFICATION_COMPLETION_TYPE;
|
||||
|
||||
typedef struct _RIO_NOTIFICATION_COMPLETION
|
||||
{
|
||||
RIO_NOTIFICATION_COMPLETION_TYPE Type;
|
||||
union
|
||||
{
|
||||
struct
|
||||
{
|
||||
HANDLE EventHandle;
|
||||
BOOL NotifyReset;
|
||||
}
|
||||
Event;
|
||||
struct
|
||||
{
|
||||
HANDLE IocpHandle;
|
||||
PVOID CompletionKey;
|
||||
PVOID Overlapped;
|
||||
}
|
||||
Iocp;
|
||||
};
|
||||
}
|
||||
RIO_NOTIFICATION_COMPLETION, *PRIO_NOTIFICATION_COMPLETION;
|
||||
|
||||
typedef RIO_CQ (WINAPI *LPFN_RIOCREATECOMPLETIONQUEUE)(
|
||||
DWORD, PRIO_NOTIFICATION_COMPLETION);
|
||||
typedef RIO_RQ (WINAPI *LPFN_RIOCREATEREQUESTQUEUE)(
|
||||
SOCKET, ULONG, ULONG, ULONG, ULONG, RIO_CQ, RIO_CQ, PVOID);
|
||||
typedef ULONG (WINAPI *LPFN_RIODEQUEUECOMPLETION)(
|
||||
RIO_CQ, PRIORESULT, ULONG);
|
||||
typedef VOID (WINAPI *LPFN_RIODEREGISTERBUFFER)(RIO_BUFFERID);
|
||||
typedef INT (WINAPI *LPFN_RIONOTIFY)(RIO_CQ);
|
||||
typedef RIO_BUFFERID (WINAPI *LPFN_RIOREGISTERBUFFER)(PCHAR, DWORD);
|
||||
typedef BOOL (WINAPI *LPFN_RIORESIZECOMPLETIONQUEUE)(RIO_CQ, DWORD);
|
||||
typedef BOOL (WINAPI *LPFN_RIORESIZEREQUESTQUEUE)(RIO_RQ, DWORD, DWORD);
|
||||
|
||||
typedef struct _RIO_EXTENSION_FUNCTION_TABLE
|
||||
{
|
||||
DWORD cbSize;
|
||||
LPFN_RIORECEIVE RIOReceive;
|
||||
LPFN_RIORECEIVEEX RIOReceiveEx;
|
||||
LPFN_RIOSEND RIOSend;
|
||||
LPFN_RIOSENDEX RIOSendEx;
|
||||
LPFN_RIOCLOSECOMPLETIONQUEUE RIOCloseCompletionQueue;
|
||||
LPFN_RIOCREATECOMPLETIONQUEUE RIOCreateCompletionQueue;
|
||||
LPFN_RIOCREATEREQUESTQUEUE RIOCreateRequestQueue;
|
||||
LPFN_RIODEQUEUECOMPLETION RIODequeueCompletion;
|
||||
LPFN_RIODEREGISTERBUFFER RIODeregisterBuffer;
|
||||
LPFN_RIONOTIFY RIONotify;
|
||||
LPFN_RIOREGISTERBUFFER RIORegisterBuffer;
|
||||
LPFN_RIORESIZECOMPLETIONQUEUE RIOResizeCompletionQueue;
|
||||
LPFN_RIORESIZEREQUESTQUEUE RIOResizeRequestQueue;
|
||||
}
|
||||
RIO_EXTENSION_FUNCTION_TABLE, *PRIO_EXTENSION_FUNCTION_TABLE;
|
||||
#endif
|
||||
|
||||
#ifndef IN6ADDR_SETV4MAPPED
|
||||
static inline void lgMsQuicSetV4MappedAddress(
|
||||
SOCKADDR_IN6 *address,
|
||||
const IN_ADDR *ipv4,
|
||||
SCOPE_ID scope,
|
||||
USHORT port)
|
||||
{
|
||||
memset(address, 0, sizeof(*address));
|
||||
address->sin6_family = AF_INET6;
|
||||
address->sin6_port = port;
|
||||
address->sin6_scope_struct = scope;
|
||||
address->sin6_addr.s6_bytes[10] = 0xff;
|
||||
address->sin6_addr.s6_bytes[11] = 0xff;
|
||||
memcpy(&address->sin6_addr.s6_bytes[12], ipv4, sizeof(*ipv4));
|
||||
}
|
||||
|
||||
#define IN6ADDR_SETV4MAPPED(address, ipv4, scope, port) \
|
||||
lgMsQuicSetV4MappedAddress((address), (ipv4), (scope), (port))
|
||||
#endif
|
||||
|
||||
#ifndef IN6_GET_ADDR_V4MAPPED
|
||||
#define IN6_GET_ADDR_V4MAPPED(address) (&(address)->s6_bytes[12])
|
||||
#endif
|
||||
|
||||
#ifndef IN6ADDR_ISV4MAPPED
|
||||
#define IN6ADDR_ISV4MAPPED(address) \
|
||||
IN6_IS_ADDR_V4MAPPED(&(address)->sin6_addr)
|
||||
#endif
|
||||
|
||||
#ifndef IN4_IS_ADDR_LOOPBACK
|
||||
#define IN4_IS_ADDR_LOOPBACK(address) \
|
||||
(((const unsigned char *)&(address)->s_addr)[0] == 127)
|
||||
#endif
|
||||
|
||||
#ifndef PIN_PKTINFO
|
||||
typedef IN_PKTINFO *PIN_PKTINFO;
|
||||
#endif
|
||||
|
||||
#ifndef PIN6_PKTINFO
|
||||
typedef IN6_PKTINFO *PIN6_PKTINFO;
|
||||
#endif
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user