diff --git a/Libraries/LibCore/SockAddr-Win.h b/Libraries/LibCore/SockAddr-Win.h new file mode 100644 index 00000000000..c1ab6543bc1 --- /dev/null +++ b/Libraries/LibCore/SockAddr-Win.h @@ -0,0 +1,136 @@ +/* + * Copyright (c) 2024, stasoid + * + * SPDX-License-Identifier: BSD-2-Clause + */ + +#pragma once + +typedef int INT; +typedef unsigned long ULONG; +typedef unsigned short USHORT; +typedef char CHAR; +typedef unsigned char UCHAR; +typedef const CHAR* PCSTR; +typedef USHORT ADDRESS_FAMILY; + +#define WINAPI_FAMILY_PARTITION(x) 1 +#define FAR +#include +#undef WINAPI_FAMILY_PARTITION + +#include + +#define AF_UNSPEC 0 +#define AF_LOCAL 1 // AF_UNIX +#define AF_INET 2 +#define AF_INET6 23 + +#define SOCK_STREAM 1 +#define SOCK_DGRAM 2 + +#define INADDR_LOOPBACK 0x7f000001 + +enum IPPROTO { + IPPROTO_TCP = 6 +}; + +#define INET_ADDRSTRLEN 22 +#define INET6_ADDRSTRLEN 65 + +struct in6_addr { + union { + UCHAR Byte[16]; + USHORT Word[8]; + } u; +}; + +struct SCOPE_ID { + union { + struct { + ULONG Zone : 28; + ULONG Level : 4; + } u; + ULONG Value; + } u; +}; + +struct sockaddr_in6 { + ADDRESS_FAMILY sin6_family; + USHORT sin6_port; + ULONG sin6_flowinfo; + in6_addr sin6_addr; + union { + ULONG sin6_scope_id; + SCOPE_ID sin6_scope_struct; + }; +}; + +struct sockaddr_in { + ADDRESS_FAMILY sin_family; + USHORT sin_port; + IN_ADDR sin_addr; + CHAR sin_zero[8]; +}; + +struct sockaddr { + ADDRESS_FAMILY sa_family; + CHAR sa_data[14]; +}; +using SOCKADDR = sockaddr; +using LPSOCKADDR = sockaddr*; + +struct addrinfo { + int ai_flags; + int ai_family; + int ai_socktype; + int ai_protocol; + size_t ai_addrlen; + char* ai_canonname; + sockaddr* ai_addr; + addrinfo* ai_next; +}; +using ADDRINFOA = addrinfo; +using PADDRINFOA = addrinfo*; + +struct SOCKET_ADDRESS { + sockaddr* lpSockaddr; + INT iSockaddrLength; +}; + +struct SOCKET_ADDRESS_LIST { + INT iAddressCount; + SOCKET_ADDRESS Address[1]; +}; +using PSOCKET_ADDRESS_LIST = SOCKET_ADDRESS_LIST*; + +struct CSADDR_INFO { + SOCKET_ADDRESS LocalAddr; + SOCKET_ADDRESS RemoteAddr; + INT iSocketType; + INT iProtocol; +}; +using LPCSADDR_INFO = CSADDR_INFO*; + +struct WSABUF { + ULONG len; + CHAR* buf; +}; +using LPWSABUF = WSABUF*; + +struct WSAMSG { + LPSOCKADDR name; + INT namelen; + LPWSABUF lpBuffers; + ULONG dwBufferCount; + WSABUF Control; + ULONG dwFlags; +}; +using LPWSAMSG = WSAMSG*; + +extern "C" __stdcall INT getaddrinfo(PCSTR pNodeName, PCSTR pServiceName, const ADDRINFOA* pHints, PADDRINFOA* ppResult); +extern "C" __stdcall void freeaddrinfo(PADDRINFOA pAddrInfo); +extern "C" __stdcall PCSTR inet_ntop(int Family, void const* pAddr, char* pStringBuf, size_t StringBufSize); +extern "C" __stdcall USHORT htons(USHORT hostshort); + +#define _WS2DEF_ // don't include ws2def.h diff --git a/Libraries/LibCore/SocketAddress.h b/Libraries/LibCore/SocketAddress.h index 337fe700c85..956d804a046 100644 --- a/Libraries/LibCore/SocketAddress.h +++ b/Libraries/LibCore/SocketAddress.h @@ -9,11 +9,15 @@ #include #include -#include -#include -#include -#include -#include + +#ifndef AK_OS_WINDOWS +# include +# include +# include +# include +#else +# include "SockAddr-Win.h" +#endif namespace Core {