mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-05-23 02:47:04 +02:00
[net] support SCTP protocols (+all base FBSD protos), ban more NS domains (#3955)
bans more NS domains making hb dns check pass also fixes bogus "SCTP is not implemented" assertion for translate protocol Signed-off-by: lizzie <lizzie@eden-emu.dev> Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3955 Reviewed-by: MaranBr <maranbr@eden-emu.dev> Reviewed-by: crueter <crueter@eden-emu.dev>
This commit is contained in:
parent
889545e1ee
commit
46cfd9b6f3
5 changed files with 604 additions and 96 deletions
|
|
@ -1,3 +1,6 @@
|
||||||
|
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
|
||||||
|
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||||
|
|
||||||
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
// SPDX-FileCopyrightText: Copyright 2022 yuzu Emulator Project
|
||||||
// SPDX-License-Identifier: GPL-2.0-or-later
|
// SPDX-License-Identifier: GPL-2.0-or-later
|
||||||
|
|
||||||
|
|
@ -28,9 +31,118 @@ enum class Type {
|
||||||
/// Protocol values for sockets
|
/// Protocol values for sockets
|
||||||
enum class Protocol : u8 {
|
enum class Protocol : u8 {
|
||||||
Unspecified, ///< Represents 0, usable in various places
|
Unspecified, ///< Represents 0, usable in various places
|
||||||
|
IP,
|
||||||
ICMP,
|
ICMP,
|
||||||
TCP,
|
TCP,
|
||||||
UDP,
|
UDP,
|
||||||
|
IPV6,
|
||||||
|
RAW,
|
||||||
|
IGMP,
|
||||||
|
GGP,
|
||||||
|
IPV4,
|
||||||
|
ST,
|
||||||
|
EGP,
|
||||||
|
PIGP,
|
||||||
|
RCCMON,
|
||||||
|
NVPII,
|
||||||
|
PUP,
|
||||||
|
ARGUS,
|
||||||
|
EMCON,
|
||||||
|
XNET,
|
||||||
|
CHAOS,
|
||||||
|
MUX,
|
||||||
|
MEAS,
|
||||||
|
HMP,
|
||||||
|
PRM,
|
||||||
|
IDP,
|
||||||
|
TRUNK1,
|
||||||
|
TRUNK2,
|
||||||
|
LEAF1,
|
||||||
|
LEAF2,
|
||||||
|
RDP,
|
||||||
|
IRTP,
|
||||||
|
TP,
|
||||||
|
BLT,
|
||||||
|
NSP,
|
||||||
|
INP,
|
||||||
|
DCCP,
|
||||||
|
//TODO: 3PC,
|
||||||
|
IDPR,
|
||||||
|
XTP,
|
||||||
|
DDP,
|
||||||
|
CMTP,
|
||||||
|
TPXX,
|
||||||
|
IL,
|
||||||
|
SDRP,
|
||||||
|
ROUTING,
|
||||||
|
FRAGMENT,
|
||||||
|
IDRP,
|
||||||
|
RSVP,
|
||||||
|
GRE,
|
||||||
|
MHRP,
|
||||||
|
BHA,
|
||||||
|
ESP,
|
||||||
|
AH,
|
||||||
|
INLSP,
|
||||||
|
SWIPE,
|
||||||
|
NHRP,
|
||||||
|
MOBILE,
|
||||||
|
TLSP,
|
||||||
|
SKIP,
|
||||||
|
ICMPV6,
|
||||||
|
NONE,
|
||||||
|
DSTOPTS,
|
||||||
|
AHIP,
|
||||||
|
CFTP,
|
||||||
|
HELLO,
|
||||||
|
SATEXPAK,
|
||||||
|
KRYPTOLAN,
|
||||||
|
RVD,
|
||||||
|
IPPC,
|
||||||
|
ADFS,
|
||||||
|
SATMON,
|
||||||
|
VISA,
|
||||||
|
IPCV,
|
||||||
|
CPNX,
|
||||||
|
CPHB,
|
||||||
|
WSN,
|
||||||
|
PVP,
|
||||||
|
BRSATMON,
|
||||||
|
ND,
|
||||||
|
WBMON,
|
||||||
|
WBEXPAK,
|
||||||
|
EON,
|
||||||
|
VMTP,
|
||||||
|
SVMTP,
|
||||||
|
VINES,
|
||||||
|
TTP,
|
||||||
|
IGP,
|
||||||
|
DGP,
|
||||||
|
TCF,
|
||||||
|
IGRP,
|
||||||
|
OSPFIGP,
|
||||||
|
SRPC,
|
||||||
|
LARP,
|
||||||
|
MTP,
|
||||||
|
AX25,
|
||||||
|
IPEIP,
|
||||||
|
MICP,
|
||||||
|
SCCSP,
|
||||||
|
ETHERIP,
|
||||||
|
ENCAP,
|
||||||
|
APES,
|
||||||
|
GMTP,
|
||||||
|
IPCOMP,
|
||||||
|
SCTP,
|
||||||
|
MH,
|
||||||
|
UDPLITE,
|
||||||
|
HIP,
|
||||||
|
SHIM6,
|
||||||
|
PIM,
|
||||||
|
CARP,
|
||||||
|
PGM,
|
||||||
|
MPLS,
|
||||||
|
PFSYNC
|
||||||
};
|
};
|
||||||
|
|
||||||
/// Shutdown mode
|
/// Shutdown mode
|
||||||
|
|
|
||||||
|
|
@ -55,6 +55,37 @@ enum class NetDbError : s32 {
|
||||||
|
|
||||||
static const constexpr std::array blockedDomains = {
|
static const constexpr std::array blockedDomains = {
|
||||||
"srv.nintendo.net", //obvious
|
"srv.nintendo.net", //obvious
|
||||||
|
"nintendo.es",
|
||||||
|
"nintendowifi.net",
|
||||||
|
"nintendo-europe.com",
|
||||||
|
"nintendo.com.hk",
|
||||||
|
"nintendo.com.au",
|
||||||
|
"nintendo.co.kr",
|
||||||
|
"nintendo.co.uk",
|
||||||
|
"nintendo.co.jp",
|
||||||
|
"nintendo.co.nz",
|
||||||
|
"nintendo.co.za",
|
||||||
|
"nintendo.com",
|
||||||
|
"nintendo.jp",
|
||||||
|
"nintendo.tw",
|
||||||
|
"nintendo.at",
|
||||||
|
"nintendo.be",
|
||||||
|
"nintendo.dk",
|
||||||
|
"nintendo.de",
|
||||||
|
"nintendo.fi",
|
||||||
|
"nintendo.fr",
|
||||||
|
"nintendo.gr",
|
||||||
|
"nintendo.hu",
|
||||||
|
"nintendo.it",
|
||||||
|
"nintendo.nl",
|
||||||
|
"nintendo.no",
|
||||||
|
"nintendo.pt",
|
||||||
|
"nintendo.ru",
|
||||||
|
"nintendo.ch",
|
||||||
|
"nintendo.se",
|
||||||
|
"nintendoswitch.com.cn",
|
||||||
|
"nintendoswitch.com",
|
||||||
|
"sun.hac.lp1.d4c.nintendo.net",
|
||||||
"phoenix-api.wbagora.com", //hogwarts legacy
|
"phoenix-api.wbagora.com", //hogwarts legacy
|
||||||
"battle.net",
|
"battle.net",
|
||||||
"microsoft.com", //minecraft dungeons + other games
|
"microsoft.com", //minecraft dungeons + other games
|
||||||
|
|
|
||||||
|
|
@ -65,10 +65,121 @@ enum class Type : u32 {
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class Protocol : u32 {
|
enum class Protocol : u32 {
|
||||||
Unspecified = 0,
|
IP = 0,
|
||||||
ICMP = 1,
|
ICMP = 1,
|
||||||
TCP = 6,
|
TCP = 6,
|
||||||
UDP = 17,
|
UDP = 17,
|
||||||
|
//
|
||||||
|
IPV6 = 41,
|
||||||
|
RAW = 255,
|
||||||
|
//
|
||||||
|
HOPOPTS = 0,
|
||||||
|
IGMP = 2,
|
||||||
|
GGP = 3,
|
||||||
|
IPV4 = 4,
|
||||||
|
ST = 7,
|
||||||
|
EGP = 8,
|
||||||
|
PIGP = 9,
|
||||||
|
RCCMON = 10,
|
||||||
|
NVPII = 11,
|
||||||
|
PUP = 12,
|
||||||
|
ARGUS = 13,
|
||||||
|
EMCON = 14,
|
||||||
|
XNET = 15,
|
||||||
|
CHAOS = 16,
|
||||||
|
MUX = 18,
|
||||||
|
MEAS = 19,
|
||||||
|
HMP = 20,
|
||||||
|
PRM = 21,
|
||||||
|
IDP = 22,
|
||||||
|
TRUNK1 = 23,
|
||||||
|
TRUNK2 = 24,
|
||||||
|
LEAF1 = 25,
|
||||||
|
LEAF2 = 26,
|
||||||
|
RDP = 27,
|
||||||
|
IRTP = 28,
|
||||||
|
TP = 29,
|
||||||
|
BLT = 30,
|
||||||
|
NSP = 31,
|
||||||
|
INP = 32,
|
||||||
|
DCCP = 33,
|
||||||
|
//3PC = 34,
|
||||||
|
IDPR = 35,
|
||||||
|
XTP = 36,
|
||||||
|
DDP = 37,
|
||||||
|
CMTP = 38,
|
||||||
|
TPXX = 39,
|
||||||
|
IL = 40,
|
||||||
|
SDRP = 42,
|
||||||
|
ROUTING = 43,
|
||||||
|
FRAGMENT = 44,
|
||||||
|
IDRP = 45,
|
||||||
|
RSVP = 46,
|
||||||
|
GRE = 47,
|
||||||
|
MHRP = 48,
|
||||||
|
BHA = 49,
|
||||||
|
ESP = 50,
|
||||||
|
AH = 51,
|
||||||
|
INLSP = 52,
|
||||||
|
SWIPE = 53,
|
||||||
|
NHRP = 54,
|
||||||
|
MOBILE = 55,
|
||||||
|
TLSP = 56,
|
||||||
|
SKIP = 57,
|
||||||
|
ICMPV6 = 58,
|
||||||
|
NONE = 59,
|
||||||
|
DSTOPTS = 60,
|
||||||
|
AHIP = 61,
|
||||||
|
CFTP = 62,
|
||||||
|
HELLO = 63,
|
||||||
|
SATEXPAK = 64,
|
||||||
|
KRYPTOLAN = 65,
|
||||||
|
RVD = 66,
|
||||||
|
IPPC = 67,
|
||||||
|
ADFS = 68,
|
||||||
|
SATMON = 69,
|
||||||
|
VISA = 70,
|
||||||
|
IPCV = 71,
|
||||||
|
CPNX = 72,
|
||||||
|
CPHB = 73,
|
||||||
|
WSN = 74,
|
||||||
|
PVP = 75,
|
||||||
|
BRSATMON = 76,
|
||||||
|
ND = 77,
|
||||||
|
WBMON = 78,
|
||||||
|
WBEXPAK = 79,
|
||||||
|
EON = 80,
|
||||||
|
VMTP = 81,
|
||||||
|
SVMTP = 82,
|
||||||
|
VINES = 83,
|
||||||
|
TTP = 84,
|
||||||
|
IGP = 85,
|
||||||
|
DGP = 86,
|
||||||
|
TCF = 87,
|
||||||
|
IGRP = 88,
|
||||||
|
OSPFIGP = 89,
|
||||||
|
SRPC = 90,
|
||||||
|
LARP = 91,
|
||||||
|
MTP = 92,
|
||||||
|
AX25 = 93,
|
||||||
|
IPEIP = 94,
|
||||||
|
MICP = 95,
|
||||||
|
SCCSP = 96,
|
||||||
|
ETHERIP = 97,
|
||||||
|
ENCAP = 98,
|
||||||
|
APES = 99,
|
||||||
|
GMTP = 100,
|
||||||
|
IPCOMP = 108,
|
||||||
|
SCTP = 132,
|
||||||
|
MH = 135,
|
||||||
|
UDPLITE = 136,
|
||||||
|
HIP = 139,
|
||||||
|
SHIM6 = 140,
|
||||||
|
PIM = 103,
|
||||||
|
CARP = 112,
|
||||||
|
PGM = 113,
|
||||||
|
MPLS = 137,
|
||||||
|
PFSYNC = 240,
|
||||||
};
|
};
|
||||||
|
|
||||||
enum class SocketLevel : u32 {
|
enum class SocketLevel : u32 {
|
||||||
|
|
|
||||||
|
|
@ -175,49 +175,151 @@ Network::Type Translate(Type type) {
|
||||||
|
|
||||||
Type Translate(Network::Type type) {
|
Type Translate(Network::Type type) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case Network::Type::Unspecified:
|
case Network::Type::Unspecified: return Type::Unspecified;
|
||||||
return Type::Unspecified;
|
case Network::Type::STREAM: return Type::STREAM;
|
||||||
case Network::Type::STREAM:
|
case Network::Type::DGRAM: return Type::DGRAM;
|
||||||
return Type::STREAM;
|
case Network::Type::RAW: return Type::RAW;
|
||||||
case Network::Type::DGRAM:
|
case Network::Type::SEQPACKET: return Type::SEQPACKET;
|
||||||
return Type::DGRAM;
|
|
||||||
case Network::Type::RAW:
|
|
||||||
return Type::RAW;
|
|
||||||
case Network::Type::SEQPACKET:
|
|
||||||
return Type::SEQPACKET;
|
|
||||||
default:
|
default:
|
||||||
UNIMPLEMENTED_MSG("Unimplemented type={}", type);
|
UNIMPLEMENTED_MSG("Unimplemented type={}", type);
|
||||||
return Type{};
|
return Type{};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Network::Protocol Translate(Protocol protocol) {
|
#define NETWORK_PROTOCOL_TRANSLATE_LIST \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ICMP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TCP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(UDP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IPV6) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(RAW) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IGMP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(GGP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IPV4) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ST) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(EGP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PIGP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(RCCMON) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(NVPII) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PUP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ARGUS) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(EMCON) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(XNET) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(CHAOS) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(MUX) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(MEAS) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(HMP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PRM) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IDP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TRUNK1) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TRUNK2) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(LEAF1) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(LEAF2) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(RDP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IRTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(BLT) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(NSP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(INP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(DCCP) \
|
||||||
|
/*NETWORK_PROTOCOL_TRANSLATE_ELEM(3PC)*/ \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IDPR) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(XTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(DDP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(CMTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TPXX) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IL) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SDRP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ROUTING) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(FRAGMENT) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IDRP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(RSVP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(GRE) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(MHRP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(BHA) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ESP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(AH) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(INLSP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SWIPE) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(NHRP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(MOBILE) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TLSP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SKIP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ICMPV6) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(NONE) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(DSTOPTS) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(AHIP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(CFTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(HELLO) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SATEXPAK) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(KRYPTOLAN) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(RVD) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IPPC) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ADFS) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SATMON) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(VISA) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IPCV) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(CPNX) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(CPHB) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(WSN) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PVP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(BRSATMON) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ND) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(WBMON) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(WBEXPAK) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(EON) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(VMTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SVMTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(VINES) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IGP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(DGP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TCF) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IGRP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(OSPFIGP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SRPC) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(LARP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(MTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(AX25) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IPEIP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(MICP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SCCSP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ETHERIP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ENCAP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(APES) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(GMTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IPCOMP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SCTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(MH) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(UDPLITE) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(HIP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SHIM6) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PIM) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(CARP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PGM) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(MPLS) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PFSYNC)
|
||||||
|
[[nodiscard]] Network::Protocol Translate(Protocol protocol) {
|
||||||
switch (protocol) {
|
switch (protocol) {
|
||||||
case Protocol::Unspecified:
|
#define NETWORK_PROTOCOL_TRANSLATE_ELEM(name) case Protocol::name: return Network::Protocol::name;
|
||||||
return Network::Protocol::Unspecified;
|
NETWORK_PROTOCOL_TRANSLATE_LIST
|
||||||
case Protocol::TCP:
|
#undef NETWORK_PROTOCOL_TRANSLATE_ELEM
|
||||||
return Network::Protocol::TCP;
|
|
||||||
case Protocol::UDP:
|
|
||||||
return Network::Protocol::UDP;
|
|
||||||
default:
|
default:
|
||||||
UNIMPLEMENTED_MSG("Unimplemented protocol={}", protocol);
|
UNIMPLEMENTED_MSG("Unimplemented protocol={}", protocol);
|
||||||
return Network::Protocol::Unspecified;
|
return {};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
[[nodiscard]] Protocol Translate(Network::Protocol protocol) {
|
||||||
Protocol Translate(Network::Protocol protocol) {
|
|
||||||
switch (protocol) {
|
switch (protocol) {
|
||||||
case Network::Protocol::Unspecified:
|
#define NETWORK_PROTOCOL_TRANSLATE_ELEM(name) case Network::Protocol::name: return Protocol::name;
|
||||||
return Protocol::Unspecified;
|
NETWORK_PROTOCOL_TRANSLATE_LIST
|
||||||
case Network::Protocol::TCP:
|
#undef NETWORK_PROTOCOL_TRANSLATE_ELEM
|
||||||
return Protocol::TCP;
|
|
||||||
case Network::Protocol::UDP:
|
|
||||||
return Protocol::UDP;
|
|
||||||
default:
|
default:
|
||||||
UNIMPLEMENTED_MSG("Unimplemented protocol={}", protocol);
|
UNIMPLEMENTED_MSG("Unimplemented protocol={}", protocol);
|
||||||
return Protocol::Unspecified;
|
return {};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#undef NETWORK_PROTOCOL_TRANSLATE_LIST
|
||||||
|
|
||||||
Network::PollEvents Translate(PollEvents flags) {
|
Network::PollEvents Translate(PollEvents flags) {
|
||||||
Network::PollEvents result{};
|
Network::PollEvents result{};
|
||||||
|
|
|
||||||
|
|
@ -326,52 +326,37 @@ Errno GetAndLogLastError(CallType call_type = CallType::Other) {
|
||||||
|
|
||||||
GetAddrInfoError TranslateGetAddrInfoErrorFromNative(int gai_err) {
|
GetAddrInfoError TranslateGetAddrInfoErrorFromNative(int gai_err) {
|
||||||
switch (gai_err) {
|
switch (gai_err) {
|
||||||
case 0:
|
case 0: return GetAddrInfoError::SUCCESS;
|
||||||
return GetAddrInfoError::SUCCESS;
|
case EAI_AGAIN: return GetAddrInfoError::AGAIN;
|
||||||
|
case EAI_BADFLAGS: return GetAddrInfoError::BADFLAGS;
|
||||||
|
case EAI_FAIL: return GetAddrInfoError::FAIL;
|
||||||
|
case EAI_FAMILY: return GetAddrInfoError::FAMILY;
|
||||||
|
case EAI_MEMORY: return GetAddrInfoError::MEMORY;
|
||||||
|
case EAI_NONAME: return GetAddrInfoError::NONAME;
|
||||||
|
case EAI_SERVICE: return GetAddrInfoError::SERVICE;
|
||||||
|
case EAI_SOCKTYPE: return GetAddrInfoError::SOCKTYPE;
|
||||||
|
// These codes may not be defined on all systems:
|
||||||
#ifdef EAI_ADDRFAMILY
|
#ifdef EAI_ADDRFAMILY
|
||||||
case EAI_ADDRFAMILY:
|
case EAI_ADDRFAMILY: return GetAddrInfoError::ADDRFAMILY;
|
||||||
return GetAddrInfoError::ADDRFAMILY;
|
|
||||||
#endif
|
#endif
|
||||||
case EAI_AGAIN:
|
|
||||||
return GetAddrInfoError::AGAIN;
|
|
||||||
case EAI_BADFLAGS:
|
|
||||||
return GetAddrInfoError::BADFLAGS;
|
|
||||||
case EAI_FAIL:
|
|
||||||
return GetAddrInfoError::FAIL;
|
|
||||||
case EAI_FAMILY:
|
|
||||||
return GetAddrInfoError::FAMILY;
|
|
||||||
case EAI_MEMORY:
|
|
||||||
return GetAddrInfoError::MEMORY;
|
|
||||||
case EAI_NONAME:
|
|
||||||
return GetAddrInfoError::NONAME;
|
|
||||||
case EAI_SERVICE:
|
|
||||||
return GetAddrInfoError::SERVICE;
|
|
||||||
case EAI_SOCKTYPE:
|
|
||||||
return GetAddrInfoError::SOCKTYPE;
|
|
||||||
// These codes may not be defined on all systems:
|
|
||||||
#ifdef EAI_SYSTEM
|
#ifdef EAI_SYSTEM
|
||||||
case EAI_SYSTEM:
|
case EAI_SYSTEM: return GetAddrInfoError::SYSTEM;
|
||||||
return GetAddrInfoError::SYSTEM;
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef EAI_BADHINTS
|
#ifdef EAI_BADHINTS
|
||||||
case EAI_BADHINTS:
|
case EAI_BADHINTS: return GetAddrInfoError::BADHINTS;
|
||||||
return GetAddrInfoError::BADHINTS;
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef EAI_PROTOCOL
|
#ifdef EAI_PROTOCOL
|
||||||
case EAI_PROTOCOL:
|
case EAI_PROTOCOL: return GetAddrInfoError::PROTOCOL;
|
||||||
return GetAddrInfoError::PROTOCOL;
|
|
||||||
#endif
|
#endif
|
||||||
#ifdef EAI_OVERFLOW
|
#ifdef EAI_OVERFLOW
|
||||||
case EAI_OVERFLOW:
|
case EAI_OVERFLOW: return GetAddrInfoError::OVERFLOW_;
|
||||||
return GetAddrInfoError::OVERFLOW_;
|
|
||||||
#endif
|
#endif
|
||||||
default:
|
default:
|
||||||
#ifdef EAI_NODATA
|
#ifdef EAI_NODATA
|
||||||
// This can't be a case statement because it would create a duplicate
|
// This can't be a case statement because it would create a duplicate
|
||||||
// case on Windows where EAI_NODATA is an alias for EAI_NONAME.
|
// case on Windows where EAI_NODATA is an alias for EAI_NONAME.
|
||||||
if (gai_err == EAI_NODATA) {
|
if (gai_err == EAI_NODATA)
|
||||||
return GetAddrInfoError::NODATA;
|
return GetAddrInfoError::NODATA;
|
||||||
}
|
|
||||||
#endif
|
#endif
|
||||||
return GetAddrInfoError::OTHER;
|
return GetAddrInfoError::OTHER;
|
||||||
}
|
}
|
||||||
|
|
@ -405,14 +390,10 @@ Type TranslateTypeFromNative(int type) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case 0:
|
case 0:
|
||||||
return Type::Unspecified;
|
return Type::Unspecified;
|
||||||
case SOCK_STREAM:
|
case SOCK_STREAM: return Type::STREAM;
|
||||||
return Type::STREAM;
|
case SOCK_DGRAM: return Type::DGRAM;
|
||||||
case SOCK_DGRAM:
|
case SOCK_RAW: return Type::RAW;
|
||||||
return Type::DGRAM;
|
case SOCK_SEQPACKET: return Type::SEQPACKET;
|
||||||
case SOCK_RAW:
|
|
||||||
return Type::RAW;
|
|
||||||
case SOCK_SEQPACKET:
|
|
||||||
return Type::SEQPACKET;
|
|
||||||
default:
|
default:
|
||||||
UNIMPLEMENTED_MSG("Unimplemented type={}", type);
|
UNIMPLEMENTED_MSG("Unimplemented type={}", type);
|
||||||
return Type::STREAM;
|
return Type::STREAM;
|
||||||
|
|
@ -423,55 +404,227 @@ int TranslateTypeToNative(Type type) {
|
||||||
switch (type) {
|
switch (type) {
|
||||||
case Type::Unspecified:
|
case Type::Unspecified:
|
||||||
return 0;
|
return 0;
|
||||||
case Type::STREAM:
|
case Type::STREAM: return SOCK_STREAM;
|
||||||
return SOCK_STREAM;
|
case Type::DGRAM: return SOCK_DGRAM;
|
||||||
case Type::DGRAM:
|
case Type::RAW: return SOCK_RAW;
|
||||||
return SOCK_DGRAM;
|
case Type::SEQPACKET: return SOCK_SEQPACKET;
|
||||||
case Type::RAW:
|
|
||||||
return SOCK_RAW;
|
|
||||||
default:
|
default:
|
||||||
UNIMPLEMENTED_MSG("Unimplemented type={}", type);
|
UNIMPLEMENTED_MSG("Unimplemented type={}", type);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
Protocol TranslateProtocolFromNative(int protocol) {
|
// Some of those protocols may not be supported on some platforms
|
||||||
|
// It doesn't really matter, except that some homebrew may not work correctly
|
||||||
|
// Official software uses TCP & UDP mainly, SCTP is used by some homebrew as well
|
||||||
|
#ifdef __FreeBSD__
|
||||||
|
#define NETWORK_PROTOCOL_TRANSLATE_LIST \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ICMP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TCP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(UDP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IPV6) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(RAW) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IGMP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(GGP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IPV4) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ST) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(EGP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PIGP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(RCCMON) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(NVPII) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PUP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ARGUS) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(EMCON) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(XNET) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(CHAOS) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(MUX) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(MEAS) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(HMP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PRM) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IDP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TRUNK1) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TRUNK2) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(LEAF1) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(LEAF2) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(RDP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IRTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(BLT) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(NSP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(INP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(DCCP) \
|
||||||
|
/*NETWORK_PROTOCOL_TRANSLATE_ELEM(3PC)*/ \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IDPR) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(XTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(DDP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(CMTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TPXX) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IL) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SDRP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ROUTING) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(FRAGMENT) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IDRP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(RSVP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(GRE) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(MHRP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(BHA) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ESP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(AH) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(INLSP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SWIPE) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(NHRP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(MOBILE) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TLSP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SKIP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ICMPV6) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(NONE) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(DSTOPTS) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(AHIP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(CFTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(HELLO) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SATEXPAK) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(KRYPTOLAN) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(RVD) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IPPC) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ADFS) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SATMON) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(VISA) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IPCV) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(CPNX) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(CPHB) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(WSN) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PVP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(BRSATMON) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ND) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(WBMON) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(WBEXPAK) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(EON) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(VMTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SVMTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(VINES) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IGP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(DGP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TCF) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IGRP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(OSPFIGP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SRPC) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(LARP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(MTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(AX25) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IPEIP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(MICP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SCCSP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ETHERIP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ENCAP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(APES) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(GMTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IPCOMP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SCTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(MH) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(UDPLITE) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(HIP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SHIM6) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PIM) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(CARP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PGM) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(MPLS) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PFSYNC)
|
||||||
|
#elif defined(__linux__)
|
||||||
|
// Other platforms get fucked
|
||||||
|
#define NETWORK_PROTOCOL_TRANSLATE_LIST \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IP) \
|
||||||
|
/*NETWORK_PROTOCOL_TRANSLATE_ELEM(HOPOPTS)*/ \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ICMP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IGMP) \
|
||||||
|
/*NETWORK_PROTOCOL_TRANSLATE_ELEM(IPIP)*/ \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TCP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(EGP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PUP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(UDP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IDP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(DCCP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IPV6) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ROUTING) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(FRAGMENT) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(RSVP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(GRE) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ESP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(AH) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ICMPV6) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(NONE) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(DSTOPTS) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(MTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ENCAP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PIM) \
|
||||||
|
/*NETWORK_PROTOCOL_TRANSLATE_ELEM(COMP)*/ \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SCTP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(UDPLITE)
|
||||||
|
#elif defined(_WIN32)
|
||||||
|
#define NETWORK_PROTOCOL_TRANSLATE_LIST \
|
||||||
|
/*NETWORK_PROTOCOL_TRANSLATE_ELEM(HOPOPTS)*/ \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ICMP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IGMP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(GGP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IPV4) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ST) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TCP) \
|
||||||
|
/*NETWORK_PROTOCOL_TRANSLATE_ELEM(CBT)*/ \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(EGP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IGP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PUP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(UDP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IDP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(RDP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(IPV6) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ROUTING) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(FRAGMENT) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ESP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(AH) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ICMPV6) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(NONE) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(DSTOPTS) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(ND) \
|
||||||
|
/*NETWORK_PROTOCOL_TRANSLATE_ELEM(ICLFXBM)*/ \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PIM) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(PGM) \
|
||||||
|
/*NETWORK_PROTOCOL_TRANSLATE_ELEM(L2TP)*/ \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SCTP)
|
||||||
|
#else
|
||||||
|
#define NETWORK_PROTOCOL_TRANSLATE_LIST \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(TCP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(UDP) \
|
||||||
|
NETWORK_PROTOCOL_TRANSLATE_ELEM(SCTP)
|
||||||
|
#endif
|
||||||
|
[[nodiscard]] Protocol TranslateProtocolFromNative(u32 protocol) {
|
||||||
switch (protocol) {
|
switch (protocol) {
|
||||||
case 0:
|
#define NETWORK_PROTOCOL_TRANSLATE_ELEM(x) case IPPROTO_##x: return Protocol::x;
|
||||||
return Protocol::Unspecified;
|
NETWORK_PROTOCOL_TRANSLATE_LIST
|
||||||
case IPPROTO_TCP:
|
#undef NETWORK_PROTOCOL_TRANSLATE_ELEM
|
||||||
return Protocol::TCP;
|
|
||||||
case IPPROTO_UDP:
|
|
||||||
return Protocol::UDP;
|
|
||||||
default:
|
default:
|
||||||
UNIMPLEMENTED_MSG("Unimplemented protocol={}", protocol);
|
UNIMPLEMENTED_MSG("Unimplemented protocol={}", protocol);
|
||||||
return Protocol::Unspecified;
|
return Protocol::IP;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
[[nodiscard]] u32 TranslateProtocolToNative(Protocol protocol) {
|
||||||
int TranslateProtocolToNative(Protocol protocol) {
|
|
||||||
switch (protocol) {
|
switch (protocol) {
|
||||||
case Protocol::Unspecified:
|
#define NETWORK_PROTOCOL_TRANSLATE_ELEM(x) case Protocol::x: return IPPROTO_##x;
|
||||||
return 0;
|
NETWORK_PROTOCOL_TRANSLATE_LIST
|
||||||
case Protocol::TCP:
|
#undef NETWORK_PROTOCOL_TRANSLATE_ELEM
|
||||||
return IPPROTO_TCP;
|
|
||||||
case Protocol::UDP:
|
|
||||||
return IPPROTO_UDP;
|
|
||||||
default:
|
default:
|
||||||
UNIMPLEMENTED_MSG("Unimplemented protocol={}", protocol);
|
UNIMPLEMENTED_MSG("Unimplemented protocol={}", protocol);
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
#undef NETWORK_PROTOCOL_TRANSLATE_LIST
|
||||||
|
|
||||||
SockAddrIn TranslateToSockAddrIn(sockaddr_in input, size_t input_len) {
|
SockAddrIn TranslateToSockAddrIn(sockaddr_in input, size_t input_len) {
|
||||||
SockAddrIn result;
|
SockAddrIn result{};
|
||||||
|
|
||||||
result.family = TranslateDomainFromNative(input.sin_family);
|
result.family = TranslateDomainFromNative(input.sin_family);
|
||||||
|
|
||||||
result.portno = ntohs(input.sin_port);
|
result.portno = ntohs(input.sin_port);
|
||||||
|
|
||||||
result.ip = TranslateIPv4(input.sin_addr);
|
result.ip = TranslateIPv4(input.sin_addr);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
@ -685,8 +838,7 @@ Errno Socket::SetSockOpt(SOCKET fd_so, int option, T value) {
|
||||||
}
|
}
|
||||||
|
|
||||||
Errno Socket::Initialize(Domain domain, Type type, Protocol protocol) {
|
Errno Socket::Initialize(Domain domain, Type type, Protocol protocol) {
|
||||||
fd = socket(TranslateDomainToNative(domain), TranslateTypeToNative(type),
|
fd = socket(TranslateDomainToNative(domain), TranslateTypeToNative(type), TranslateProtocolToNative(protocol));
|
||||||
TranslateProtocolToNative(protocol));
|
|
||||||
if (fd != INVALID_SOCKET) {
|
if (fd != INVALID_SOCKET) {
|
||||||
return Errno::SUCCESS;
|
return Errno::SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue