diff options
Diffstat (limited to 'sys/source')
| -rw-r--r-- | sys/source/tanya/sys/linux/syscall.d | 61 | ||||
| -rw-r--r-- | sys/source/tanya/sys/posix/ioctl.d | 78 | ||||
| -rw-r--r-- | sys/source/tanya/sys/posix/mman.d | 31 | ||||
| -rw-r--r-- | sys/source/tanya/sys/posix/net/if_.d | 27 | ||||
| -rw-r--r-- | sys/source/tanya/sys/posix/socket.d | 152 | ||||
| -rw-r--r-- | sys/source/tanya/sys/windows/def.d | 66 | ||||
| -rw-r--r-- | sys/source/tanya/sys/windows/ifdef.d | 30 | ||||
| -rw-r--r-- | sys/source/tanya/sys/windows/iphlpapi.d | 39 | ||||
| -rw-r--r-- | sys/source/tanya/sys/windows/package.d | 21 | ||||
| -rw-r--r-- | sys/source/tanya/sys/windows/winbase.d | 55 | ||||
| -rw-r--r-- | sys/source/tanya/sys/windows/winsock2.d | 219 |
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, +} |
