summaryrefslogtreecommitdiff
path: root/sys/source
diff options
context:
space:
mode:
authorEugen Wissner <belka@caraus.de>2019-03-05 20:25:26 +0100
committerEugen Wissner <belka@caraus.de>2019-03-05 20:47:02 +0100
commitb458c6a38097d6165edf52f84176a5178d053ac9 (patch)
tree9ce8863424365499b73342eb11deaace970bc321 /sys/source
parent5b850d532edebf83d8988ff413cbd2a988011630 (diff)
downloadtanya-b458c6a38097d6165edf52f84176a5178d053ac9.tar.gz
Make subpackages of os, sys and encoding
Diffstat (limited to 'sys/source')
-rw-r--r--sys/source/tanya/sys/linux/syscall.d61
-rw-r--r--sys/source/tanya/sys/posix/ioctl.d78
-rw-r--r--sys/source/tanya/sys/posix/mman.d31
-rw-r--r--sys/source/tanya/sys/posix/net/if_.d27
-rw-r--r--sys/source/tanya/sys/posix/socket.d152
-rw-r--r--sys/source/tanya/sys/windows/def.d66
-rw-r--r--sys/source/tanya/sys/windows/ifdef.d30
-rw-r--r--sys/source/tanya/sys/windows/iphlpapi.d39
-rw-r--r--sys/source/tanya/sys/windows/package.d21
-rw-r--r--sys/source/tanya/sys/windows/winbase.d55
-rw-r--r--sys/source/tanya/sys/windows/winsock2.d219
11 files changed, 779 insertions, 0 deletions
diff --git a/sys/source/tanya/sys/linux/syscall.d b/sys/source/tanya/sys/linux/syscall.d
new file mode 100644
index 0000000..ccc3fee
--- /dev/null
+++ b/sys/source/tanya/sys/linux/syscall.d
@@ -0,0 +1,61 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ * Copyright: Eugene Wissner 2018-2019.
+ * License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/,
+ * Mozilla Public License, v. 2.0).
+ * Authors: $(LINK2 mailto:info@caraus.de, Eugene Wissner)
+ * Source: $(LINK2 https://github.com/caraus-ecms/tanya/blob/master/source/tanya/sys/linux/syscall.d,
+ * tanya/sys/linux/syscall.d)
+ */
+module tanya.sys.linux.syscall;
+
+version (TanyaNative):
+
+extern ptrdiff_t syscall(ptrdiff_t, ptrdiff_t)
+@nogc nothrow @system;
+
+extern ptrdiff_t syscall(ptrdiff_t, ptrdiff_t, ptrdiff_t)
+@nogc nothrow @system;
+
+extern ptrdiff_t syscall(ptrdiff_t, ptrdiff_t, ptrdiff_t, ptrdiff_t)
+@nogc nothrow @system;
+
+extern ptrdiff_t syscall(ptrdiff_t,
+ ptrdiff_t,
+ ptrdiff_t,
+ ptrdiff_t,
+ ptrdiff_t,
+ ptrdiff_t,
+ ptrdiff_t) @nogc nothrow @system;
+
+// Same syscalls as above but pure.
+private template getOverloadMangling(size_t n)
+{
+ enum string getOverloadMangling = __traits(getOverloads,
+ tanya.sys.linux.syscall,
+ "syscall")[n].mangleof;
+}
+
+pragma(mangle, getOverloadMangling!0)
+extern ptrdiff_t syscall_(ptrdiff_t, ptrdiff_t)
+@nogc nothrow pure @system;
+
+pragma(mangle, getOverloadMangling!1)
+extern ptrdiff_t syscall_(ptrdiff_t, ptrdiff_t, ptrdiff_t)
+@nogc nothrow pure @system;
+
+pragma(mangle, getOverloadMangling!2)
+extern ptrdiff_t syscall_(ptrdiff_t, ptrdiff_t, ptrdiff_t, ptrdiff_t)
+@nogc nothrow pure @system;
+
+pragma(mangle, getOverloadMangling!3)
+extern ptrdiff_t syscall_(ptrdiff_t,
+ ptrdiff_t,
+ ptrdiff_t,
+ ptrdiff_t,
+ ptrdiff_t,
+ ptrdiff_t,
+ ptrdiff_t) @nogc nothrow pure @system;
diff --git a/sys/source/tanya/sys/posix/ioctl.d b/sys/source/tanya/sys/posix/ioctl.d
new file mode 100644
index 0000000..86d1465
--- /dev/null
+++ b/sys/source/tanya/sys/posix/ioctl.d
@@ -0,0 +1,78 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ * Copyright: Eugene Wissner 2018-2019.
+ * License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/,
+ * Mozilla Public License, v. 2.0).
+ * Authors: $(LINK2 mailto:info@caraus.de, Eugene Wissner)
+ * Source: $(LINK2 https://github.com/caraus-ecms/tanya/blob/master/source/tanya/sys/posix/ioctl.d,
+ * tanya/sys/posix/ioctl.d)
+ */
+module tanya.sys.posix.ioctl;
+
+version (TanyaNative):
+
+enum
+{
+ SIOCADDRT = 0x890B, // Add routing table entry.
+ SIOCDELRT = 0x890C, // Delete routing table entry.
+ SIOCRTMSG = 0x890D, // Call to routing system.
+
+ SIOCGIFNAME = 0x8910, // Get iface name.
+ SIOCSIFLINK = 0x8911, // Set iface channel.
+ SIOCGIFCONF = 0x8912, // Get iface list.
+ SIOCGIFFLAGS = 0x8913, // Get flags.
+ SIOCSIFFLAGS = 0x8914, // Set flags.
+ SIOCGIFADDR = 0x8915, // Get PA address.
+ SIOCSIFADDR = 0x8916, // Set PA address.
+ SIOCGIFDSTADDR = 0x8917, // Get remote PA address.
+ SIOCSIFDSTADDR = 0x8918, // Set remote PA address.
+ SIOCGIFBRDADDR = 0x8919, // Get broadcast PA address.
+ SIOCSIFBRDADDR = 0x891a, // Set broadcast PA address.
+ SIOCGIFNETMASK = 0x891b, // Get network PA mask.
+ SIOCSIFNETMASK = 0x891c, // Set network PA mask.
+ SIOCGIFMETRIC = 0x891d, // Get metric.
+ SIOCSIFMETRIC = 0x891e, // Set metric.
+ SIOCGIFMEM = 0x891f, // Get memory address (BSD).
+ SIOCSIFMEM = 0x8920, // Set memory address (BSD).
+ SIOCGIFMTU = 0x8921, // Get MTU size.
+ SIOCSIFMTU = 0x8922, // Set MTU size.
+ SIOCSIFNAME = 0x8923, // Set interface name.
+ SIOCSIFHWADDR = 0x8924, // Set hardware address.
+ SIOCGIFENCAP = 0x8925, // Get/set encapsulations.
+ SIOCSIFENCAP = 0x8926,
+ SIOCGIFHWADDR = 0x8927, // Get hardware address.
+ SIOCGIFSLAVE = 0x8929, // Driver slaving support.
+ SIOCSIFSLAVE = 0x8930,
+ SIOCADDMULTI = 0x8931, // Multicast address lists.
+ SIOCDELMULTI = 0x8932,
+ SIOCGIFINDEX = 0x8933, // Name -> if_index mapping.
+ SIOGIFINDEX = SIOCGIFINDEX, // Misprint compatibility.
+ SIOCSIFPFLAGS = 0x8934, // Set/get extended flags set.
+ SIOCGIFPFLAGS = 0x8935,
+ SIOCDIFADDR = 0x8936, // Delete PA address.
+ SIOCSIFHWBROADCAST = 0x8937, // Set hardware broadcast address.
+ SIOCGIFCOUNT = 0x8938, // Get number of devices.
+
+ SIOCGIFBR = 0x8940, // Bridging support.
+ SIOCSIFBR = 0x8941, // Set bridging options.
+
+ SIOCGIFTXQLEN = 0x8942, // Get the tx queue length.
+ SIOCSIFTXQLEN = 0x8943, // Set the tx queue length.
+
+ SIOCDARP = 0x8953, // Delete ARP table entry.
+ SIOCGARP = 0x8954, // Get ARP table entry.
+ SIOCSARP = 0x8955, // Set ARP table entry.
+
+ SIOCDRARP = 0x8960, // Delete RARP table entry.
+ SIOCGRARP = 0x8961, // Get RARP table entry.
+ SIOCSRARP = 0x8962, // Set RARP table entry.
+
+ SIOCGIFMAP = 0x8970, // Get device parameters.
+ SIOCSIFMAP = 0x8971, // Set device parameters.
+
+ SIOCADDDLCI = 0x8980, // Create new DLCI device.
+ SIOCDELDLCI = 0x8981, // Delete DLCI device.
+}
diff --git a/sys/source/tanya/sys/posix/mman.d b/sys/source/tanya/sys/posix/mman.d
new file mode 100644
index 0000000..24a4701
--- /dev/null
+++ b/sys/source/tanya/sys/posix/mman.d
@@ -0,0 +1,31 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ * Copyright: Eugene Wissner 2018-2019.
+ * License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/,
+ * Mozilla Public License, v. 2.0).
+ * Authors: $(LINK2 mailto:info@caraus.de, Eugene Wissner)
+ * Source: $(LINK2 https://github.com/caraus-ecms/tanya/blob/master/source/tanya/sys/posix/mman.d,
+ * tanya/sys/posix/mman.d)
+ */
+module tanya.sys.posix.mman;
+
+version (TanyaNative):
+
+enum
+{
+ PROT_EXEC = 0x4, // Page can be executed.
+ PROT_NONE = 0x0, // Page cannot be accessed.
+ PROT_READ = 0x1, // Page can be read.
+ PROT_WRITE = 0x2, // Page can be written.
+}
+
+enum
+{
+ MAP_FIXED = 0x10, // Interpret addr exactly.
+ MAP_PRIVATE = 0x02, // Changes are private.
+ MAP_SHARED = 0x01, // Share changes.
+ MAP_ANONYMOUS = 0x20, // Don't use a file.
+}
diff --git a/sys/source/tanya/sys/posix/net/if_.d b/sys/source/tanya/sys/posix/net/if_.d
new file mode 100644
index 0000000..1cb5b43
--- /dev/null
+++ b/sys/source/tanya/sys/posix/net/if_.d
@@ -0,0 +1,27 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ * Copyright: Eugene Wissner 2018-2019.
+ * License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/,
+ * Mozilla Public License, v. 2.0).
+ * Authors: $(LINK2 mailto:info@caraus.de, Eugene Wissner)
+ * Source: $(LINK2 https://github.com/caraus-ecms/tanya/blob/master/source/tanya/sys/posix/net/if_.d,
+ * tanya/sys/posix/net/if_.d)
+ */
+module tanya.sys.posix.net.if_;
+
+version (TanyaNative):
+
+enum size_t IF_NAMESIZE = 16;
+
+struct ifreq
+{
+ char[IF_NAMESIZE] ifr_name;
+
+ union
+ {
+ int ifr_ifindex;
+ }
+}
diff --git a/sys/source/tanya/sys/posix/socket.d b/sys/source/tanya/sys/posix/socket.d
new file mode 100644
index 0000000..8924a8d
--- /dev/null
+++ b/sys/source/tanya/sys/posix/socket.d
@@ -0,0 +1,152 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/*
+ * Copyright: Eugene Wissner 2018-2019.
+ * License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/,
+ * Mozilla Public License, v. 2.0).
+ * Authors: $(LINK2 mailto:info@caraus.de, Eugene Wissner)
+ * Source: $(LINK2 https://github.com/caraus-ecms/tanya/blob/master/source/tanya/sys/posix/socket.d,
+ * tanya/sys/posix/socket.d)
+ */
+module tanya.sys.posix.socket;
+
+version (TanyaNative):
+
+/*
+ * Protocol families.
+ */
+enum
+{
+ PF_UNSPEC = 0, // Unspecified.
+ PF_LOCAL = 1, // Local to host (pipes and file-domain).
+ PF_UNIX = PF_LOCAL, // POSIX name for PF_LOCAL.
+ PF_FILE = PF_LOCAL, // Another non-standard name for PF_LOCAL.
+ PF_INET = 2, // IP protocol family.
+ PF_AX25 = 3, // Amateur Radio AX.25.
+ PF_IPX = 4, // Novell Internet Protocol.
+ PF_APPLETALK = 5, // Appletalk DDP.
+ PF_NETROM = 6, // Amateur radio NetROM.
+ PF_BRIDGE = 7, // Multiprotocol bridge.
+ PF_ATMPVC = 8, // ATM PVCs.
+ PF_X25 = 9, // Reserved for X.25 project.
+ PF_INET6 = 10, // IP version 6.
+ PF_ROSE = 11, // Amateur Radio X.25 PLP.
+ PF_DECnet = 12, // Reserved for DECnet project.
+ PF_NETBEUI = 13, // Reserved for 802.2LLC project.
+ PF_SECURITY = 14, // Security callback pseudo AF.
+ PF_KEY = 15, // PF_KEY key management API.
+ PF_NETLINK = 16, // Kernel user interface device.
+ PF_ROUTE = PF_NETLINK, // Alias to emulate 4.4BSD.
+ PF_PACKET = 17, // Packet family.
+ PF_ASH = 18, // Ash.
+ PF_ECONET = 19, // Acorn Econet.
+ PF_ATMSVC = 20, // ATM SVCs.
+ PF_RDS = 21, // RDS sockets.
+ PF_SNA = 22, // Linux SNA Project.
+ PF_IRDA = 23, // IRDA sockets.
+ PF_PPPOX = 24, // PPPoX sockets.
+ PF_WANPIPE = 25, // Wanpipe API sockets.
+ PF_LLC = 26, // Linux LLC.
+ PF_IB = 27, // Native InfiniBand address.
+ PF_MPLS = 28, // MPLS.
+ PF_CAN = 29, // Controller Area Network.
+ PF_TIPC = 30, // TIPC sockets.
+ PF_BLUETOOTH = 31, // Bluetooth sockets.
+ PF_IUCV = 32, // IUCV sockets.
+ PF_RXRPC = 33, // RxRPC sockets.
+ PF_ISDN = 34, // mISDN sockets.
+ PF_PHONET = 35, // Phonet sockets.
+ PF_IEEE802154 = 36, // IEEE 802.15.4 sockets.
+ PF_CAIF = 37, // CAIF sockets.
+ PF_ALG = 38, // Algorithm sockets.
+ PF_NFC = 39, // NFC sockets.
+ PF_VSOCK = 40, // vSockets.
+ PF_MAX = 41, // For now.
+}
+
+/*
+ * Address families.
+ */
+enum
+{
+ AF_UNSPEC = PF_UNSPEC,
+ AF_LOCAL = PF_LOCAL,
+ AF_UNIX = PF_UNIX,
+ AF_FILE = PF_FILE,
+ AF_INET = PF_INET,
+ AF_AX25 = PF_AX25,
+ AF_IPX = PF_IPX,
+ AF_APPLETALK = PF_APPLETALK,
+ AF_NETROM = PF_NETROM,
+ AF_BRIDGE = PF_BRIDGE,
+ AF_ATMPVC = PF_ATMPVC,
+ AF_X25 = PF_X25,
+ AF_INET6 = PF_INET6,
+ AF_ROSE = PF_ROSE,
+ AF_DECnet = PF_DECnet,
+ AF_NETBEUI = PF_NETBEUI,
+ AF_SECURITY = PF_SECURITY,
+ AF_KEY = PF_KEY,
+ AF_NETLINK = PF_NETLINK,
+ AF_ROUTE = PF_ROUTE,
+ AF_PACKET = PF_PACKET,
+ AF_ASH = PF_ASH,
+ AF_ECONET = PF_ECONET,
+ AF_ATMSVC = PF_ATMSVC,
+ AF_RDS = PF_RDS,
+ AF_SNA = PF_SNA,
+ AF_IRDA = PF_IRDA,
+ AF_PPPOX = PF_PPPOX,
+ AF_WANPIPE = PF_WANPIPE,
+ AF_LLC = PF_LLC,
+ AF_IB = PF_IB,
+ AF_MPLS = PF_MPLS,
+ AF_CAN = PF_CAN,
+ AF_TIPC = PF_TIPC,
+ AF_BLUETOOTH = PF_BLUETOOTH,
+ AF_IUCV = PF_IUCV,
+ AF_RXRPC = PF_RXRPC,
+ AF_ISDN = PF_ISDN,
+ AF_PHONET = PF_PHONET,
+ AF_IEEE802154 = PF_IEEE802154,
+ AF_CAIF = PF_CAIF,
+ AF_ALG = PF_ALG,
+ AF_NFC = PF_NFC,
+ AF_VSOCK = PF_VSOCK,
+ AF_MAX = PF_MAX,
+}
+
+/*
+ * Types of sockets.
+ */
+enum
+{
+ // Sequenced, reliable, connection-based byte streams.
+ SOCK_STREAM = 1,
+ // Connectionless, unreliable datagrams of fixed maximum length.
+ SOCK_DGRAM = 2,
+ // Raw protocol interface.
+ SOCK_RAW = 3,
+ // Reliably-delivered messages.
+ SOCK_RDM = 4,
+ // Sequenced, reliable, connection-based, datagrams of fixed maximum
+ // length.
+ SOCK_SEQPACKET = 5,
+ // Datagram Congestion Control Protocol.
+ SOCK_DCCP = 6,
+ // Linux specific way of getting packets at the dev level. For writing rarp
+ // and other similar things on the user level.
+ SOCK_PACKET = 10,
+}
+
+/*
+ * Flags to be ORed into the type parameter of socket and socketpair and used
+ * for the flags parameter of paccept.
+ */
+enum
+{
+ SOCK_CLOEXEC = 0x80000, // Atomically set close-on-exec flag for the new descriptor(s).
+ SOCK_NONBLOCK = 0x800, // Atomically mark descriptor(s) as non-blocking.
+}
diff --git a/sys/source/tanya/sys/windows/def.d b/sys/source/tanya/sys/windows/def.d
new file mode 100644
index 0000000..84b4864
--- /dev/null
+++ b/sys/source/tanya/sys/windows/def.d
@@ -0,0 +1,66 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Base type definitions and aliases.
+ *
+ * This module doesn't provide aliases for all types used by Windows, but only
+ * for types that can vary on different platforms. For example there is no
+ * need to define `INT32` alias for D, since $(D_KEYWORD int) is always a
+ * 32-bit signed integer. But `int` and its Windows alias `INT` is not the
+ * same on all platforms in C, so its size can be something differen than
+ * 32 bit, therefore an $(D_PSYMBOL INT) alias is available in this module.
+ * $(D_PARAM TCHAR) can be a $(D_KEYWORD char) if Unicode isn't supported or
+ * $(D_KEYWORD wchar) if Unicode is supported, so $(D_PSYMBOL TCHAR) is
+ * defined here.
+ * Also aliases for specific types like $(D_PSYMBOL SOCKET) are defined here.
+ *
+ * Copyright: Eugene Wissner 2017-2019.
+ * License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/,
+ * Mozilla Public License, v. 2.0).
+ * Authors: $(LINK2 mailto:info@caraus.de, Eugene Wissner)
+ * Source: $(LINK2 https://github.com/caraus-ecms/tanya/blob/master/source/tanya/sys/windows/def.d,
+ * tanya/sys/windows/def.d)
+ */
+module tanya.sys.windows.def;
+
+version (Windows):
+
+alias BYTE = ubyte;
+alias TBYTE = wchar; // If Unicode, otherwise char.
+alias CHAR = char; // Signed or unsigned char.
+alias WCHAR = wchar;
+alias TCHAR = wchar; // If Unicode, otherwise char.
+alias SHORT = short;
+alias USHORT = ushort;
+alias WORD = ushort;
+alias INT = int;
+alias UINT = uint;
+alias LONG = int;
+alias ULONG = uint;
+alias DWORD = uint;
+alias LONGLONG = long; // Or double.
+alias ULONGLONG = ulong; // Or double.
+alias DWORDLONG = ulong;
+alias FLOAT = float;
+alias BOOL = int;
+alias BOOLEAN = BYTE;
+
+alias HANDLE = void*;
+enum HANDLE INVALID_HANDLE_VALUE = cast(HANDLE) -1;
+
+enum TRUE = 1;
+enum FALSE = 0;
+
+alias PSTR = CHAR*;
+alias PWSTR = WCHAR*;
+alias PTSTR = TCHAR*;
+
+align(1) struct GUID
+{
+ uint Data1;
+ ushort Data2;
+ ushort Data3;
+ char[8] Data4;
+}
diff --git a/sys/source/tanya/sys/windows/ifdef.d b/sys/source/tanya/sys/windows/ifdef.d
new file mode 100644
index 0000000..f091427
--- /dev/null
+++ b/sys/source/tanya/sys/windows/ifdef.d
@@ -0,0 +1,30 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Copyright: Eugene Wissner 2018-2019.
+ * License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/,
+ * Mozilla Public License, v. 2.0).
+ * Authors: $(LINK2 mailto:info@caraus.de, Eugene Wissner)
+ * Source: $(LINK2 https://github.com/caraus-ecms/tanya/blob/master/source/tanya/sys/windows/ifdef.d,
+ * tanya/sys/windows/ifdef.d)
+ */
+module tanya.sys.windows.ifdef;
+
+version (Windows):
+
+import tanya.sys.windows.def;
+
+union NET_LUID_LH
+{
+ ulong Value;
+ ulong Info;
+}
+
+alias NET_LUID = NET_LUID_LH;
+alias IF_LUID = NET_LUID_LH;
+
+alias NET_IFINDEX = ULONG;
+
+enum size_t IF_MAX_STRING_SIZE = 256;
diff --git a/sys/source/tanya/sys/windows/iphlpapi.d b/sys/source/tanya/sys/windows/iphlpapi.d
new file mode 100644
index 0000000..37d0f16
--- /dev/null
+++ b/sys/source/tanya/sys/windows/iphlpapi.d
@@ -0,0 +1,39 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Copyright: Eugene Wissner 2018-2019.
+ * License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/,
+ * Mozilla Public License, v. 2.0).
+ * Authors: $(LINK2 mailto:info@caraus.de, Eugene Wissner)
+ * Source: $(LINK2 https://github.com/caraus-ecms/tanya/blob/master/source/tanya/sys/windows/iphlpapi.d,
+ * tanya/sys/windows/iphlpapi.d)
+ */
+module tanya.sys.windows.iphlpapi;
+
+version (Windows):
+
+import tanya.sys.windows.def;
+import tanya.sys.windows.ifdef;
+
+extern(Windows)
+DWORD ConvertInterfaceNameToLuidA(const(CHAR)* InterfaceName,
+ NET_LUID* InterfaceLuid)
+@nogc nothrow @system;
+
+extern(Windows)
+DWORD ConvertInterfaceLuidToIndex(const(NET_LUID)* InterfaceLuid,
+ NET_IFINDEX* InterfaceIndex)
+@nogc nothrow @system;
+
+extern(Windows)
+DWORD ConvertInterfaceIndexToLuid(NET_IFINDEX InterfaceIndex,
+ NET_LUID* InterfaceLuid)
+@nogc nothrow @system;
+
+extern(Windows)
+DWORD ConvertInterfaceLuidToNameA(const(NET_LUID)* InterfaceLuid,
+ PSTR InterfaceName,
+ size_t Length)
+@nogc nothrow @system;
diff --git a/sys/source/tanya/sys/windows/package.d b/sys/source/tanya/sys/windows/package.d
new file mode 100644
index 0000000..5e9b396
--- /dev/null
+++ b/sys/source/tanya/sys/windows/package.d
@@ -0,0 +1,21 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Copyright: Eugene Wissner 2017-2019.
+ * License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/,
+ * Mozilla Public License, v. 2.0).
+ * Authors: $(LINK2 mailto:info@caraus.de, Eugene Wissner)
+ * Source: $(LINK2 https://github.com/caraus-ecms/tanya/blob/master/source/tanya/sys/windows/package.d,
+ * tanya/sys/windows/package.d)
+ */
+module tanya.sys.windows;
+
+version (Windows):
+
+public import tanya.sys.windows.def;
+public import tanya.sys.windows.ifdef;
+public import tanya.sys.windows.iphlpapi;
+public import tanya.sys.windows.winbase;
+public import tanya.sys.windows.winsock2;
diff --git a/sys/source/tanya/sys/windows/winbase.d b/sys/source/tanya/sys/windows/winbase.d
new file mode 100644
index 0000000..407b6d2
--- /dev/null
+++ b/sys/source/tanya/sys/windows/winbase.d
@@ -0,0 +1,55 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Definitions from winbase.h.
+ *
+ * Copyright: Eugene Wissner 2017-2019.
+ * License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/,
+ * Mozilla Public License, v. 2.0).
+ * Authors: $(LINK2 mailto:info@caraus.de, Eugene Wissner)
+ * Source: $(LINK2 https://github.com/caraus-ecms/tanya/blob/master/source/tanya/sys/windows/winbase.d,
+ * tanya/sys/windows/winbase.d)
+ */
+module tanya.sys.windows.winbase;
+
+version (Windows):
+
+public import tanya.sys.windows.def;
+
+struct OVERLAPPED
+{
+ size_t Internal;
+ size_t InternalHigh;
+ union
+ {
+ struct
+ {
+ DWORD Offset;
+ DWORD OffsetHigh;
+ }
+ void* Pointer;
+ }
+ HANDLE hEvent;
+}
+
+extern(Windows)
+HANDLE CreateIoCompletionPort(HANDLE FileHandle,
+ HANDLE ExistingCompletionPort,
+ size_t CompletionKey,
+ DWORD NumberOfConcurrentThreads)
+nothrow @system @nogc;
+
+extern(Windows)
+BOOL GetQueuedCompletionStatus(HANDLE CompletionPort,
+ DWORD* lpNumberOfBytes,
+ size_t* lpCompletionKey,
+ OVERLAPPED** lpOverlapped,
+ DWORD dwMilliseconds) nothrow @system @nogc;
+
+extern(Windows)
+BOOL GetOverlappedResult(HANDLE hFile,
+ OVERLAPPED* lpOverlapped,
+ DWORD* lpNumberOfBytesTransferred,
+ BOOL bWait) nothrow @system @nogc;
diff --git a/sys/source/tanya/sys/windows/winsock2.d b/sys/source/tanya/sys/windows/winsock2.d
new file mode 100644
index 0000000..931e76b
--- /dev/null
+++ b/sys/source/tanya/sys/windows/winsock2.d
@@ -0,0 +1,219 @@
+/* This Source Code Form is subject to the terms of the Mozilla Public
+ * License, v. 2.0. If a copy of the MPL was not distributed with this
+ * file, You can obtain one at http://mozilla.org/MPL/2.0/. */
+
+/**
+ * Definitions from winsock2.h, ws2def.h and MSWSock.h.
+ *
+ * Copyright: Eugene Wissner 2017-2019.
+ * License: $(LINK2 https://www.mozilla.org/en-US/MPL/2.0/,
+ * Mozilla Public License, v. 2.0).
+ * Authors: $(LINK2 mailto:info@caraus.de, Eugene Wissner)
+ * Source: $(LINK2 https://github.com/caraus-ecms/tanya/blob/master/source/tanya/sys/windows/winsock2.d,
+ * tanya/sys/windows/winsock2.d)
+ */
+module tanya.sys.windows.winsock2;
+
+version (Windows):
+
+public import tanya.sys.windows.def;
+public import tanya.sys.windows.winbase;
+
+alias SOCKET = size_t;
+enum SOCKET INVALID_SOCKET = ~0;
+enum SOCKET_ERROR = -1;
+
+enum
+{
+ IOC_UNIX = 0x00000000,
+ IOC_WS2 = 0x08000000,
+ IOC_PROTOCOL = 0x10000000,
+ IOC_VOID = 0x20000000, // No parameters.
+ IOC_OUT = 0x40000000, // Copy parameters back.
+ IOC_IN = 0x80000000, // Copy parameters into.
+ IOC_VENDOR = 0x18000000,
+ IOC_WSK = (IOC_WS2 | 0x07000000), // _WIN32_WINNT >= 0x0600.
+ IOC_INOUT = (IOC_IN | IOC_OUT), // Copy parameter into and get back.
+}
+
+template _WSAIO(int x, int y)
+{
+ enum _WSAIO = IOC_VOID | x | y;
+}
+template _WSAIOR(int x, int y)
+{
+ enum _WSAIOR = IOC_OUT | x | y;
+}
+template _WSAIOW(int x, int y)
+{
+ enum _WSAIOW = IOC_IN | x | y;
+}
+template _WSAIORW(int x, int y)
+{
+ enum _WSAIORW = IOC_INOUT | x | y;
+}
+
+alias SIO_ASSOCIATE_HANDLE = _WSAIOW!(IOC_WS2, 1);
+alias SIO_ENABLE_CIRCULAR_QUEUEING = _WSAIO!(IOC_WS2, 2);
+alias SIO_FIND_ROUTE = _WSAIOR!(IOC_WS2, 3);
+alias SIO_FLUSH = _WSAIO!(IOC_WS2, 4);
+alias SIO_GET_BROADCAST_ADDRESS = _WSAIOR!(IOC_WS2, 5);
+alias SIO_GET_EXTENSION_FUNCTION_POINTER = _WSAIORW!(IOC_WS2, 6);
+alias SIO_GET_QOS = _WSAIORW!(IOC_WS2, 7);
+alias SIO_GET_GROUP_QOS = _WSAIORW!(IOC_WS2, 8);
+alias SIO_MULTIPOINT_LOOPBACK = _WSAIOW!(IOC_WS2, 9);
+alias SIO_MULTICAST_SCOPE = _WSAIOW!(IOC_WS2, 10);
+alias SIO_SET_QOS = _WSAIOW!(IOC_WS2, 11);
+alias SIO_SET_GROUP_QOS = _WSAIOW!(IOC_WS2, 12);
+alias SIO_TRANSLATE_HANDLE = _WSAIORW!(IOC_WS2, 13);
+alias SIO_ROUTING_INTERFACE_QUERY = _WSAIORW!(IOC_WS2, 20);
+alias SIO_ROUTING_INTERFACE_CHANGE = _WSAIOW!(IOC_WS2, 21);
+alias SIO_ADDRESS_LIST_QUERY = _WSAIOR!(IOC_WS2, 22);
+alias SIO_ADDRESS_LIST_CHANGE = _WSAIO!(IOC_WS2, 23);
+alias SIO_QUERY_TARGET_PNP_HANDLE = _WSAIOR!(IOC_WS2, 24);
+alias SIO_NSP_NOTIFY_CHANGE = _WSAIOW!(IOC_WS2, 25);
+
+alias GROUP = uint;
+
+enum
+{
+ WSA_FLAG_OVERLAPPED = 0x01,
+ WSA_FLAG_MULTIPOINT_C_ROOT = 0x02,
+ WSA_FLAG_MULTIPOINT_C_LEAF = 0x04,
+ WSA_FLAG_MULTIPOINT_D_ROOT = 0x08,
+ WSA_FLAG_MULTIPOINT_D_LEAF = 0x10,
+ WSA_FLAG_ACCESS_SYSTEM_SECURITY = 0x40,
+ WSA_FLAG_NO_HANDLE_INHERIT = 0x80,
+ WSA_FLAG_REGISTERED_IO = 0x100,
+}
+
+enum MAX_PROTOCOL_CHAIN = 7;
+enum BASE_PROTOCOL = 1;
+enum LAYERED_PROTOCOL = 0;
+enum WSAPROTOCOL_LEN = 255;
+
+struct WSAPROTOCOLCHAIN
+{
+ int ChainLen;
+ DWORD[MAX_PROTOCOL_CHAIN] ChainEntries;
+}
+
+struct WSABUF
+{
+ ULONG len;
+ CHAR* buf;
+}
+
+struct WSAPROTOCOL_INFO
+{
+ DWORD dwServiceFlags1;
+ DWORD dwServiceFlags2;
+ DWORD dwServiceFlags3;
+ DWORD dwServiceFlags4;
+ DWORD dwProviderFlags;
+ GUID ProviderId;
+ DWORD dwCatalogEntryId;
+ WSAPROTOCOLCHAIN ProtocolChain;
+ int iVersion;
+ int iAddressFamily;
+ int iMaxSockAddr;
+ int iMinSockAddr;
+ int iSocketType;
+ int iProtocol;
+ int iProtocolMaxOffset;
+ int iNetworkByteOrder;
+ int iSecurityScheme;
+ DWORD dwMessageSize;
+ DWORD dwProviderReserved;
+ TCHAR[WSAPROTOCOL_LEN + 1] szProtocol;
+}
+
+const GUID WSAID_GETACCEPTEXSOCKADDRS = {
+ 0xb5367df2, 0xcbac, 0x11cf,
+ [0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92],
+};
+
+const GUID WSAID_ACCEPTEX = {
+ 0xb5367df1, 0xcbac, 0x11cf,
+ [0x95, 0xca, 0x00, 0x80, 0x5f, 0x48, 0xa1, 0x92],
+};
+
+alias LPWSAOVERLAPPED_COMPLETION_ROUTINE = void function(DWORD dwError,
+ DWORD cbTransferred,
+ OVERLAPPED* lpOverlapped,
+ DWORD dwFlags) nothrow @nogc;
+
+extern(Windows)
+SOCKET WSASocket(int af,
+ int type,
+ int protocol,
+ WSAPROTOCOL_INFO* lpProtocolInfo,
+ GROUP g,
+ DWORD dwFlags) nothrow @system @nogc;
+
+extern(Windows)
+int WSARecv(SOCKET s,
+ WSABUF* lpBuffers,
+ DWORD dwBufferCount,
+ DWORD* lpNumberOfBytesRecvd,
+ DWORD* lpFlags,
+ OVERLAPPED* lpOverlapped,
+ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
+nothrow @system @nogc;
+
+extern(Windows)
+int WSASend(SOCKET s,
+ WSABUF* lpBuffers,
+ DWORD dwBufferCount,
+ DWORD* lpNumberOfBytesRecvd,
+ DWORD lpFlags,
+ OVERLAPPED* lpOverlapped,
+ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
+nothrow @system @nogc;
+
+extern(Windows)
+int WSAIoctl(SOCKET s,
+ uint dwIoControlCode,
+ void* lpvInBuffer,
+ uint cbInBuffer,
+ void* lpvOutBuffer,
+ uint cbOutBuffer,
+ uint* lpcbBytesReturned,
+ OVERLAPPED* lpOverlapped,
+ LPWSAOVERLAPPED_COMPLETION_ROUTINE lpCompletionRoutine)
+nothrow @system @nogc;
+
+alias ADDRESS_FAMILY = USHORT;
+
+struct SOCKADDR
+{
+ ADDRESS_FAMILY sa_family; // Address family.
+ CHAR[14] sa_data; // Up to 14 bytes of direct address.
+}
+
+alias LPFN_GETACCEPTEXSOCKADDRS = void function(void*,
+ DWORD,
+ DWORD,
+ DWORD,
+ SOCKADDR**,
+ INT*,
+ SOCKADDR**,
+ INT*) nothrow @nogc;
+
+alias LPFN_ACCEPTEX = extern(Windows) BOOL function(SOCKET,
+ SOCKET,
+ void*,
+ DWORD,
+ DWORD,
+ DWORD,
+ DWORD*,
+ OVERLAPPED*) @nogc nothrow;
+
+enum
+{
+ SO_MAXDG = 0x7009,
+ SO_MAXPATHDG = 0x700A,
+ SO_UPDATE_ACCEPT_CONTEXT = 0x700B,
+ SO_CONNECT_TIME = 0x700C,
+ SO_UPDATE_CONNECT_CONTEXT = 0x7010,
+}