diff --git a/Sources/Plasma/NucleusLib/CMakeLists.txt b/Sources/Plasma/NucleusLib/CMakeLists.txt index 315f923f..bbaebdea 100644 --- a/Sources/Plasma/NucleusLib/CMakeLists.txt +++ b/Sources/Plasma/NucleusLib/CMakeLists.txt @@ -17,7 +17,6 @@ add_subdirectory(pnModifier) add_subdirectory(pnNetBase) add_subdirectory(pnNetCli) add_subdirectory(pnNetCommon) -add_subdirectory(pnNetDiag) add_subdirectory(pnNetProtocol) add_subdirectory(pnProduct) add_subdirectory(pnSceneObject) diff --git a/Sources/Plasma/NucleusLib/pnNetDiag/CMakeLists.txt b/Sources/Plasma/NucleusLib/pnNetDiag/CMakeLists.txt deleted file mode 100644 index 476a185f..00000000 --- a/Sources/Plasma/NucleusLib/pnNetDiag/CMakeLists.txt +++ /dev/null @@ -1,21 +0,0 @@ -include_directories("../../CoreLib") -include_directories("../../NucleusLib") - -set(pnNetDiag_HEADERS - Intern.h - Pch.h - pnNetDiag.h -) - -set(pnNetDiag_SOURCES - pnNdDns.cpp - pnNdIcmp.cpp - pnNdTcp.cpp - pnNetDiag.cpp - pnNetSys.cpp -) - -add_library(pnNetDiag STATIC ${pnNetDiag_HEADERS} ${pnNetDiag_SOURCES}) - -source_group("Header Files" FILES ${pnNetDiag_HEADERS}) -source_group("Source Files" FILES ${pnNetDiag_SOURCES}) diff --git a/Sources/Plasma/NucleusLib/pnNetDiag/Intern.h b/Sources/Plasma/NucleusLib/pnNetDiag/Intern.h deleted file mode 100644 index f6b8fe36..00000000 --- a/Sources/Plasma/NucleusLib/pnNetDiag/Intern.h +++ /dev/null @@ -1,143 +0,0 @@ -/*==LICENSE==* - -CyanWorlds.com Engine - MMOG client, server and tools -Copyright (C) 2011 Cyan Worlds, Inc. - -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 3 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, see . - -Additional permissions under GNU GPL version 3 section 7 - -If you modify this Program, or any covered work, by linking or -combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, -NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent -JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK -(or a modified version of those libraries), -containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, -PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG -JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the -licensors of this Program grant you additional -permission to convey the resulting work. Corresponding Source for a -non-source form of such a combination shall include the source code for -the parts of OpenSSL and IJG JPEG Library used as well as that of the covered -work. - -You can contact Cyan Worlds, Inc. by email legal@cyan.com - or by snail mail at: - Cyan Worlds, Inc. - 14617 N Newport Hwy - Mead, WA 99021 - -*==LICENSE==*/ -/***************************************************************************** -* -* $/Plasma20/Sources/Plasma/NucleusLib/pnNetDiag/Intern.h -* -***/ - -#ifdef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETDIAG_INTERN_H -#error "Header $/Plasma20/Sources/Plasma/NucleusLib/pnNetDiag/Intern.h included more than once" -#endif -#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETDIAG_INTERN_H - - -namespace ND { - -extern HMODULE g_lib; -extern const wchar_t g_version[]; - - -//============================================================================ -enum { - kDiagSrvAuth, - kDiagSrvFile, - kNumDiagSrvs -}; - -//============================================================================ -inline unsigned NetProtocolToSrv (ENetProtocol protocol) { - - switch (protocol) { - case kNetProtocolCli2Auth: return kDiagSrvAuth; - case kNetProtocolCli2File: return kDiagSrvFile; - default: return kNumDiagSrvs; - } -} - -//============================================================================ -inline const wchar_t * SrvToString (unsigned srv) { - - switch (srv) { - case kDiagSrvAuth: return L"Auth"; - case kDiagSrvFile: return L"File"; - DEFAULT_FATAL(srv); - } -} - -} using namespace ND; - - -//============================================================================ -struct NetDiag : AtomicRef { - - bool destroyed; - CCritSect critsect; - wchar_t * hosts[kNumDiagSrvs]; - unsigned nodes[kNumDiagSrvs]; - - ~NetDiag (); - - void Destroy (); - void SetHost (unsigned srv, const wchar_t host[]); -}; - - -/***************************************************************************** -* -* SYS -* -***/ - -void SysStartup (); -void SysShutdown (); - - -/***************************************************************************** -* -* DNS -* -***/ - -void DnsStartup (); -void DnsShutdown (); - - -/***************************************************************************** -* -* ICMP -* -***/ - -void IcmpStartup (); -void IcmpShutdown (); - - -/***************************************************************************** -* -* TCP -* -***/ - -void TcpStartup (); -void TcpShutdown (); - diff --git a/Sources/Plasma/NucleusLib/pnNetDiag/Pch.h b/Sources/Plasma/NucleusLib/pnNetDiag/Pch.h deleted file mode 100644 index 21d1cb19..00000000 --- a/Sources/Plasma/NucleusLib/pnNetDiag/Pch.h +++ /dev/null @@ -1,68 +0,0 @@ -/*==LICENSE==* - -CyanWorlds.com Engine - MMOG client, server and tools -Copyright (C) 2011 Cyan Worlds, Inc. - -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 3 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, see . - -Additional permissions under GNU GPL version 3 section 7 - -If you modify this Program, or any covered work, by linking or -combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, -NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent -JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK -(or a modified version of those libraries), -containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, -PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG -JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the -licensors of this Program grant you additional -permission to convey the resulting work. Corresponding Source for a -non-source form of such a combination shall include the source code for -the parts of OpenSSL and IJG JPEG Library used as well as that of the covered -work. - -You can contact Cyan Worlds, Inc. by email legal@cyan.com - or by snail mail at: - Cyan Worlds, Inc. - 14617 N Newport Hwy - Mead, WA 99021 - -*==LICENSE==*/ -/***************************************************************************** -* -* $/Plasma20/Sources/Plasma/NucleusLib/pnNetDiag/Pch.h -* -***/ - -#ifdef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETDIAG_PCH_H -#error "Header $/Plasma20/Sources/Plasma/NucleusLib/pnNetDiag/Pch.h included more than once" -#endif -#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETDIAG_PCH_H - -#include "pnUtils/pnUtils.h" -#include "pnNetBase/pnNetBase.h" -#include "pnAsyncCore/pnAsyncCore.h" -#include "pnProduct/pnProduct.h" -#include "pnNetCli/pnNetCli.h" - -#define USES_PROTOCOL_CLI2AUTH -#define USES_PROTOCOL_CLI2FILE -#include "pnNetProtocol/pnNetProtocol.h" - -#include "pnNetDiag.h" -#include "Intern.h" - -#include -#include -#include diff --git a/Sources/Plasma/NucleusLib/pnNetDiag/pnNdDns.cpp b/Sources/Plasma/NucleusLib/pnNetDiag/pnNdDns.cpp deleted file mode 100644 index 1cf8dca5..00000000 --- a/Sources/Plasma/NucleusLib/pnNetDiag/pnNdDns.cpp +++ /dev/null @@ -1,194 +0,0 @@ -/*==LICENSE==* - -CyanWorlds.com Engine - MMOG client, server and tools -Copyright (C) 2011 Cyan Worlds, Inc. - -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 3 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, see . - -Additional permissions under GNU GPL version 3 section 7 - -If you modify this Program, or any covered work, by linking or -combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, -NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent -JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK -(or a modified version of those libraries), -containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, -PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG -JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the -licensors of this Program grant you additional -permission to convey the resulting work. Corresponding Source for a -non-source form of such a combination shall include the source code for -the parts of OpenSSL and IJG JPEG Library used as well as that of the covered -work. - -You can contact Cyan Worlds, Inc. by email legal@cyan.com - or by snail mail at: - Cyan Worlds, Inc. - 14617 N Newport Hwy - Mead, WA 99021 - -*==LICENSE==*/ -/***************************************************************************** -* -* $/Plasma20/Sources/Plasma/NucleusLib/pnNetDiag/pnNdDns.cpp -* -***/ - -#include "Pch.h" -#pragma hdrstop - - -/***************************************************************************** -* -* Internal types -* -***/ - -struct DNSParam { - NetDiag * diag; - FNetDiagDumpProc dump; - FNetDiagTestCallback callback; - void * param; - ENetProtocol protocol; - unsigned srv; -}; - - -/***************************************************************************** -* -* Internal functions -* -***/ - -//============================================================================ -static void LookupCallback ( - void * param, - const wchar_t name[], - unsigned addrCount, - const NetAddress addrs[] -) { - DNSParam * p = (DNSParam *)param; - if (addrCount) { - unsigned node = addrs[0].GetHost(); - p->diag->critsect.Enter(); - { - p->diag->nodes[p->srv] = node; - } - p->diag->critsect.Leave(); - wchar_t nodeStr[64]; - NetAddressNodeToString(p->diag->nodes[p->srv], nodeStr, arrsize(nodeStr)); - p->dump(L"[DNS] Success. %s --> %s", name, nodeStr); - p->callback( - p->diag, - p->protocol, - kNetSuccess, - p->param - ); - } - else { - p->diag->critsect.Enter(); - { - // if the hostname still matches, then clear the node - if (p->diag->hosts[p->srv] && 0 == StrCmp(p->diag->hosts[p->srv], name)) - p->diag->nodes[p->srv] = 0; - } - p->diag->critsect.Leave(); - p->dump(L"[DNS] Failed to resolve hostname %s", name); - p->callback( - p->diag, - p->protocol, - kNetErrNameLookupFailed, - p->param - ); - } - p->diag->DecRef("DNS"); - delete p; -} - - -/***************************************************************************** -* -* Module functions -* -***/ - -//============================================================================ -void DnsStartup () { -} - -//============================================================================ -void DnsShutdown () { -} - - -/***************************************************************************** -* -* Exports -* -***/ - -//============================================================================ -void NetDiagDns ( - NetDiag * diag, - ENetProtocol protocol, - FNetDiagDumpProc dump, - FNetDiagTestCallback callback, - void * param -) { - ASSERT(diag); - ASSERT(dump); - ASSERT(callback); - - unsigned srv = NetProtocolToSrv(protocol); - if (srv == kNumDiagSrvs) { - dump(L"[DNS] Unsupported protocol: %s", NetProtocolToString(protocol)); - callback(diag, protocol, kNetErrNotSupported, param); - return; - } - - wchar_t * host = nil; - diag->critsect.Enter(); - { - if (diag->hosts[srv]) - host = StrDup(diag->hosts[srv]); - } - diag->critsect.Leave(); - - if (!host) { - dump(L"[DNS] No hostname set for protocol: %s", NetProtocolToString(protocol)); - callback(diag, protocol, kNetSuccess, param); - return; - } - - diag->IncRef("DNS"); - dump(L"[DNS] Looking up %s...", host); - - DNSParam * dnsParam = NEWZERO(DNSParam); - dnsParam->diag = diag; - dnsParam->srv = srv; - dnsParam->protocol = protocol; - dnsParam->dump = dump; - dnsParam->callback = callback; - dnsParam->param = param; - - AsyncCancelId cancelId; - AsyncAddressLookupName( - &cancelId, - LookupCallback, - host, - 0, - dnsParam - ); - free(host); -} diff --git a/Sources/Plasma/NucleusLib/pnNetDiag/pnNdIcmp.cpp b/Sources/Plasma/NucleusLib/pnNetDiag/pnNdIcmp.cpp deleted file mode 100644 index b3a5ba30..00000000 --- a/Sources/Plasma/NucleusLib/pnNetDiag/pnNdIcmp.cpp +++ /dev/null @@ -1,262 +0,0 @@ -/*==LICENSE==* - -CyanWorlds.com Engine - MMOG client, server and tools -Copyright (C) 2011 Cyan Worlds, Inc. - -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 3 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, see . - -Additional permissions under GNU GPL version 3 section 7 - -If you modify this Program, or any covered work, by linking or -combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, -NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent -JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK -(or a modified version of those libraries), -containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, -PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG -JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the -licensors of this Program grant you additional -permission to convey the resulting work. Corresponding Source for a -non-source form of such a combination shall include the source code for -the parts of OpenSSL and IJG JPEG Library used as well as that of the covered -work. - -You can contact Cyan Worlds, Inc. by email legal@cyan.com - or by snail mail at: - Cyan Worlds, Inc. - 14617 N Newport Hwy - Mead, WA 99021 - -*==LICENSE==*/ -/***************************************************************************** -* -* $/Plasma20/Sources/Plasma/NucleusLib/pnNetDiag/pnNdIcmp.cpp -* -***/ - -#include "Pch.h" -#pragma hdrstop - - -/***************************************************************************** -* -* Local types -* -***/ - -typedef HANDLE (PASCAL FAR * FIcmpCreateFile) (); -typedef DWORD (PASCAL FAR * FIcmpSendEcho) ( - HANDLE icmpHandle, - DWORD destinationAddress, - LPVOID requestData, - WORD requestSize, - PIP_OPTION_INFORMATION options, - LPVOID replyBuffer, - DWORD replySize, - DWORD timeoutMs -); - -struct PingParam { - NetDiag * diag; - FNetDiagDumpProc dump; - FNetDiagTestCallback callback; - void * param; - ENetProtocol protocol; - unsigned srv; -}; - - - -/***************************************************************************** -* -* Local data -* -***/ - -static const unsigned kPingCount = 5; -static const unsigned kPayloadBytes = 32; - -static FIcmpCreateFile IcmpCreateFile; -static FIcmpSendEcho IcmpSendEcho; - -static uint8_t s_payload[kPayloadBytes]; - - -/***************************************************************************** -* -* Local functions -* -***/ - -//============================================================================ -static const wchar_t * IpStatusToString (ULONG status) { - - switch (status) { - case IP_SUCCESS: return L"IP_SUCCESS"; - case IP_BUF_TOO_SMALL: return L"IP_BUF_TOO_SMALL"; - case IP_DEST_NET_UNREACHABLE: return L"IP_DEST_NET_UNREACHABLE"; - case IP_DEST_HOST_UNREACHABLE: return L"IP_DEST_HOST_UNREACHABLE"; - case IP_DEST_PROT_UNREACHABLE: return L"IP_DEST_PROT_UNREACHABLE"; - case IP_DEST_PORT_UNREACHABLE: return L"IP_DEST_PORT_UNREACHABLE"; - case IP_NO_RESOURCES: return L"IP_NO_RESOURCES"; - case IP_BAD_OPTION: return L"IP_BAD_OPTION"; - case IP_HW_ERROR: return L"IP_HW_ERROR"; - case IP_PACKET_TOO_BIG: return L"IP_PACKET_TOO_BIG"; - case IP_REQ_TIMED_OUT: return L"IP_REQ_TIMED_OUT"; - case IP_BAD_REQ: return L"IP_BAD_REQ"; - case IP_BAD_ROUTE: return L"IP_BAD_ROUTE"; - case IP_TTL_EXPIRED_TRANSIT: return L"IP_TTL_EXPIRED_TRANSIT"; - case IP_TTL_EXPIRED_REASSEM: return L"IP_TTL_EXPIRED_REASSEM"; - case IP_PARAM_PROBLEM: return L"IP_PARAM_PROBLEM"; - case IP_SOURCE_QUENCH: return L"IP_SOURCE_QUENCH"; - case IP_OPTION_TOO_BIG: return L"IP_OPTION_TOO_BIG"; - case IP_BAD_DESTINATION: return L"IP_BAD_DESTINATION"; - default: return L"Unknown error"; - } -} - - -//============================================================================ -static void __cdecl PingThreadProc (void * param) { - - PingParam * p = (PingParam *)param; - - HANDLE icmp = IcmpCreateFile(); - if (!icmp) { - p->dump(L"[ICMP] Failed to create ICMP handle"); - p->callback(p->diag, p->protocol, kNetErrFileNotFound, p->param); - return; - } - - char addr[64]; - wchar_t waddr[64]; - NetAddressNodeToString(p->diag->nodes[p->srv], waddr, arrsize(waddr)); - StrToAnsi(addr, waddr, arrsize(addr)); - - ENetError result = kNetSuccess; - - uint8_t reply[kPayloadBytes + sizeof(ICMP_ECHO_REPLY)]; - - for (unsigned i = 0; i < kPingCount; ++i) { - DWORD retval = IcmpSendEcho( - icmp, - inet_addr(addr), - s_payload, - sizeof(s_payload), - NULL, - reply, - sizeof(reply), - 4000 - ); - - PICMP_ECHO_REPLY pEchoReply = (PICMP_ECHO_REPLY)reply; - - if (retval) { - p->dump(L"[ICMP] Reply from %s. ms=%u", waddr, pEchoReply->RoundTripTime); - } - else { - result = kNetErrConnectFailed; - p->dump(L"[ICMP] No reply from %s. %s", waddr, IpStatusToString(pEchoReply->Status)); - } - } - - p->callback(p->diag, p->protocol, result, p->param); - p->diag->DecRef("ICMP"); - delete p; -} - - -/***************************************************************************** -* -* Module functions -* -***/ - -//============================================================================ -void IcmpStartup () { - - if (g_lib) { - IcmpCreateFile = (FIcmpCreateFile)GetProcAddress(g_lib, "IcmpCreateFile"); - IcmpSendEcho = (FIcmpSendEcho)GetProcAddress(g_lib, "IcmpSendEcho"); - } - memset(s_payload, (uint8_t)((uintptr_t)&s_payload >> 4), arrsize(s_payload)); -} - -//============================================================================ -void IcmpShutdown () { - - IcmpCreateFile = nil; - IcmpSendEcho = nil; -} - - -/***************************************************************************** -* -* Exports -* -***/ - -//============================================================================ -void NetDiagIcmp ( - NetDiag * diag, - ENetProtocol protocol, - FNetDiagDumpProc dump, - FNetDiagTestCallback callback, - void * param -) { - ASSERT(diag); - ASSERT(dump); - ASSERT(callback); - - if (!IcmpCreateFile || !IcmpSendEcho) { - dump(L"[ICMP] Failed to load IP helper API"); - callback(diag, protocol, kNetErrNotSupported, param); - return; - } - - unsigned srv = NetProtocolToSrv(protocol); - if (srv == kNumDiagSrvs) { - dump(L"[ICMP] Unsupported protocol: %s", NetProtocolToString(protocol)); - callback(diag, protocol, kNetErrNotSupported, param); - return; - } - - unsigned node = 0; - diag->critsect.Enter(); - { - node = diag->nodes[srv]; - } - diag->critsect.Leave(); - - if (!node) { - dump(L"[ICMP] No address set for protocol: %s", NetProtocolToString(protocol)); - callback(diag, protocol, kNetSuccess, param); - return; - } - - wchar_t nodeStr[64]; - NetAddressNodeToString(node, nodeStr, arrsize(nodeStr)); - dump(L"[ICMP] Pinging %s with %u bytes of data...", nodeStr, kPayloadBytes); - - PingParam * pingParam = NEWZERO(PingParam); - pingParam->diag = diag; - pingParam->srv = srv; - pingParam->protocol = protocol; - pingParam->dump = dump; - pingParam->callback = callback; - pingParam->param = param; - - diag->IncRef("ICMP"); - _beginthread(PingThreadProc, 0, pingParam); -} diff --git a/Sources/Plasma/NucleusLib/pnNetDiag/pnNdTcp.cpp b/Sources/Plasma/NucleusLib/pnNetDiag/pnNdTcp.cpp deleted file mode 100644 index 576acdc9..00000000 --- a/Sources/Plasma/NucleusLib/pnNetDiag/pnNdTcp.cpp +++ /dev/null @@ -1,857 +0,0 @@ -/*==LICENSE==* - -CyanWorlds.com Engine - MMOG client, server and tools -Copyright (C) 2011 Cyan Worlds, Inc. - -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 3 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, see . - -Additional permissions under GNU GPL version 3 section 7 - -If you modify this Program, or any covered work, by linking or -combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, -NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent -JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK -(or a modified version of those libraries), -containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, -PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG -JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the -licensors of this Program grant you additional -permission to convey the resulting work. Corresponding Source for a -non-source form of such a combination shall include the source code for -the parts of OpenSSL and IJG JPEG Library used as well as that of the covered -work. - -You can contact Cyan Worlds, Inc. by email legal@cyan.com - or by snail mail at: - Cyan Worlds, Inc. - 14617 N Newport Hwy - Mead, WA 99021 - -*==LICENSE==*/ -/***************************************************************************** -* -* $/Plasma20/Sources/Plasma/NucleusLib/pnNetDiag/pnNdTcp.cpp -* -***/ - -#include "Pch.h" -#pragma hdrstop - -/***************************************************************************** -* -* Local types -* -***/ - -struct AuthConn : AtomicRef { - NetDiag * diag; - FNetDiagDumpProc dump; - FNetDiagTestCallback callback; - void * param; - AsyncSocket sock; - AsyncCancelId cancelId; - NetCli * cli; - long pingsInRoute; - long pingsCompleted; - bool done; - ENetError error; - - ~AuthConn (); -}; - -struct AuthTrans : THashKeyVal { - HASHLINK(AuthTrans) link; - AuthConn * conn; - unsigned pingAtMs; - - AuthTrans (AuthConn * conn); - ~AuthTrans (); -}; - -struct FileConn : AtomicRef { - NetDiag * diag; - FNetDiagDumpProc dump; - FNetDiagTestCallback callback; - void * param; - AsyncSocket sock; - AsyncCancelId cancelId; - ARRAY(uint8_t) recvBuffer; - long pingsInRoute; - long pingsCompleted; - bool done; - ENetError error; - - ~FileConn (); -}; - -struct FileTrans : THashKeyVal { - HASHLINK(FileTrans) link; - FileConn * conn; - unsigned pingAtMs; - - FileTrans (FileConn * conn); - ~FileTrans (); -}; - - - -/***************************************************************************** -* -* Local data -* -***/ - -static const unsigned kPingTimeoutMs = 5000; -static const unsigned kTimeoutCheckMs = 100; -static const unsigned kMaxPings = 15; - - -static long s_authProtocolRegistered; -static unsigned s_transId; -static CCritSect s_critsect; -static bool s_shutdown; -static uint8_t s_payload[32]; -static AsyncTimer * s_timer; - -static HASHTABLEDECL( - AuthTrans, - THashKeyVal, - link -) s_authTrans; - -static HASHTABLEDECL( - FileTrans, - THashKeyVal, - link -) s_fileTrans; - - -/***************************************************************************** -* -* Cli2Auth protocol -* -***/ - -//============================================================================ -static bool Recv_PingReply ( - const uint8_t msg[], - unsigned bytes, - void * -) { - const Auth2Cli_PingReply & reply = *(const Auth2Cli_PingReply *)msg; - - AuthTrans * trans; - s_critsect.Enter(); - { - if (bytes < sizeof(Auth2Cli_PingReply)) { - // beta6 compatibility - if (nil != (trans = s_authTrans.Tail())) - s_authTrans.Unlink(trans); - } - else if (nil != (trans = s_authTrans.Find(reply.transId))) - s_authTrans.Unlink(trans); - } - s_critsect.Leave(); - - if (trans) { - unsigned replyAtMs = TimeGetMs(); - trans->conn->dump(L"[TCP] Reply from SrvAuth. ms=%u", replyAtMs - trans->pingAtMs); - delete trans; - return true; - } - else { - return false; - } -} - -//============================================================================ -#define MSG(s) kNetMsg_Cli2Auth_##s -static NetMsgInitSend s_send[] = { - { MSG(PingRequest) }, -}; - -#undef MSG -#define MSG(s) kNetMsg_Auth2Cli_##s, Recv_##s -static NetMsgInitRecv s_recv[] = { - { MSG(PingReply) }, -}; -#undef MSG - - -/***************************************************************************** -* -* Local functions -* -***/ - -//============================================================================ -static unsigned TimerCallback (void *) { - - unsigned timeMs = TimeGetMs(); - s_critsect.Enter(); - { - ENetError error = kNetErrTimeout; - {for (AuthTrans * next, * curr = s_authTrans.Head(); curr; curr = next) { - next = s_authTrans.Next(curr); - unsigned diff = timeMs - curr->pingAtMs; - if (diff > kPingTimeoutMs) { - if (!curr->conn->error) - curr->conn->error = error; - curr->conn->dump(L"[TCP] No reply from SrvAuth: %u, %s (ms=%u)", error, NetErrorToString(error), diff); - delete curr; - } - }} - {for (FileTrans * next, * curr = s_fileTrans.Head(); curr; curr = next) { - next = s_fileTrans.Next(curr); - unsigned diff = timeMs - curr->pingAtMs; - if (diff > kPingTimeoutMs) { - if (!curr->conn->error) - curr->conn->error = error; - curr->conn->dump(L"[TCP] No reply from SrvFile: %u, %s (ms=%u)", error, NetErrorToString(error), diff); - delete curr; - } - }} - } - s_critsect.Leave(); - - return kTimeoutCheckMs; -} - -//============================================================================ -static void AuthPingProc (void * param) { - - AuthConn * conn = (AuthConn *)param; - - while (!conn->done && conn->pingsCompleted < kMaxPings) { - - if (!conn->pingsInRoute) { - - AuthTrans * trans = new AuthTrans(conn); - trans->pingAtMs = TimeGetMs(); - - s_critsect.Enter(); - for (;;) { - if (conn->done) { - conn->pingsCompleted = kMaxPings; - delete trans; - break; - } - while (++s_transId == 0) - NULL_STMT; - trans->SetValue(s_transId); - s_authTrans.Add(trans); - - const uintptr_t msg[] = { - kCli2Auth_PingRequest, - trans->pingAtMs, - trans->GetValue(), - sizeof(s_payload), - (uintptr_t) s_payload, - }; - - NetCliSend(conn->cli, msg, arrsize(msg)); - NetCliFlush(conn->cli); - break; - } - s_critsect.Leave(); - } - AsyncSleep(10); - } - - s_critsect.Enter(); - { - conn->done = true; - AsyncSocketDisconnect(conn->sock, true); - NetCliDelete(conn->cli, false); - conn->cli = nil; - } - s_critsect.Leave(); - - conn->DecRef("Pinging"); -} - -//============================================================================ -static bool AuthConnEncrypt (ENetError error, void * param) { - - AuthConn * conn = (AuthConn *)param; - - if (IS_NET_SUCCESS(error)) { - conn->dump(L"[TCP] SrvAuth stream encrypted."); - conn->dump(L"[TCP] Pinging SrvAuth with 32 bytes of data..."); - conn->IncRef("Pinging"); - _beginthread(AuthPingProc, 0, conn); - } - else { - conn->dump(L"[TCP] SrvAuth stream encryption failed: %u, %s", error, NetErrorToString(error)); - } - - return IS_NET_SUCCESS(error); -} - -//============================================================================ -static void NotifyAuthConnSocketConnect (AuthConn * conn) { - - conn->dump(L"[TCP] SrvAuth socket established, encrypting stream..."); - - conn->TransferRef("Connecting", "Connected"); - conn->cli = NetCliConnectAccept( - conn->sock, - kNetProtocolCli2Auth, - false, - AuthConnEncrypt, - 0, - nil, - conn - ); -} - -//============================================================================ -static void NotifyAuthConnSocketConnectFailed (AuthConn * conn) { - - conn->error = kNetErrConnectFailed; - - conn->cancelId = 0; - conn->dump(L"[TCP] SrvAuth socket connection failed %u, %s", conn->error, NetErrorToString(conn->error)); - - conn->DecRef("Connecting"); -} - -//============================================================================ -static void NotifyAuthConnSocketDisconnect (AuthConn * conn) { - - if (!conn->done && !conn->error) - conn->error = kNetErrDisconnected; - - conn->cancelId = 0; - conn->dump(L"[TCP] SrvAuth socket closed: %u, %s", conn->error, NetErrorToString(conn->error)); - - HASHTABLEDECL( - AuthTrans, - THashKeyVal, - link - ) authTrans; - - s_critsect.Enter(); - { - conn->done = true; - while (AuthTrans * trans = s_authTrans.Head()) - authTrans.Add(trans); - } - s_critsect.Leave(); - - while (AuthTrans * trans = authTrans.Head()) { - conn->dump(L"[TCP] No reply from SrvAuth: %u, %s", conn->error, NetErrorToString(conn->error)); - delete trans; - } - - conn->DecRef("Connected"); -} - -//============================================================================ -static bool NotifyAuthConnSocketRead (AuthConn * conn, AsyncNotifySocketRead * read) { - - NetCliDispatch(conn->cli, read->buffer, read->bytes, conn); - read->bytesProcessed += read->bytes; - - return true; -} - -//============================================================================ -static bool AuthSocketNotifyCallback ( - AsyncSocket sock, - EAsyncNotifySocket code, - AsyncNotifySocket * notify, - void ** userState -) { - bool result = true; - AuthConn * conn; - - switch (code) { - case kNotifySocketConnectSuccess: - conn = (AuthConn *) notify->param; - *userState = conn; - conn->sock = sock; - conn->cancelId = 0; - NotifyAuthConnSocketConnect(conn); - break; - - case kNotifySocketConnectFailed: - conn = (AuthConn *) notify->param; - NotifyAuthConnSocketConnectFailed(conn); - break; - - case kNotifySocketDisconnect: - conn = (AuthConn *) *userState; - NotifyAuthConnSocketDisconnect(conn); - break; - - case kNotifySocketRead: - conn = (AuthConn *) *userState; - result = NotifyAuthConnSocketRead(conn, (AsyncNotifySocketRead *) notify); - break; - } - - return result; -} - -//============================================================================ -static bool Recv_File2Cli_ManifestReply (FileConn * conn, const File2Cli_ManifestReply & msg) { - - FileTrans * trans; - s_critsect.Enter(); - { - if (nil != (trans = s_fileTrans.Find(msg.transId))) - s_fileTrans.Unlink(trans); - } - s_critsect.Leave(); - - if (trans) { - unsigned replyAtMs = TimeGetMs(); - trans->conn->dump(L"[TCP] Reply from SrvFile. ms=%u", replyAtMs - trans->pingAtMs); - delete trans; - return true; - } - else { - return false; - } -} - -//============================================================================ -static void FilePingProc (void * param) { - - FileConn * conn = (FileConn *)param; - - while (!conn->done && conn->pingsCompleted < kMaxPings) { - - if (!conn->pingsInRoute) { - - FileTrans * trans = new FileTrans(conn); - trans->pingAtMs = TimeGetMs(); - - s_critsect.Enter(); - for (;;) { - if (conn->done) { - conn->pingsCompleted = kMaxPings; - delete trans; - break; - } - while (++s_transId == 0) - NULL_STMT; - trans->SetValue(s_transId); - s_fileTrans.Add(trans); - - Cli2File_ManifestRequest msg; - StrCopy(msg.group, L"External", arrsize(msg.group)); - msg.messageId = kCli2File_ManifestRequest; - msg.transId = trans->GetValue(); - msg.messageBytes = sizeof(msg); - msg.buildId = 0; - - AsyncSocketSend(conn->sock, &msg, sizeof(msg)); - break; - } - s_critsect.Leave(); - } - AsyncSleep(10); - } - - s_critsect.Enter(); - { - conn->done = true; - AsyncSocketDisconnect(conn->sock, true); - } - s_critsect.Leave(); - - conn->DecRef("Pinging"); -} - -//============================================================================ -static void NotifyFileConnSocketConnect (FileConn * conn) { - - conn->TransferRef("Connecting", "Connected"); - - conn->dump(L"[TCP] SrvFile socket established"); - conn->dump(L"[TCP] Pinging SrvFile..."); - conn->IncRef("Pinging"); - _beginthread(FilePingProc, 0, conn); -} - -//============================================================================ -static void NotifyFileConnSocketConnectFailed (FileConn * conn) { - - conn->error = kNetErrConnectFailed; - - conn->cancelId = 0; - conn->dump(L"[TCP] SrvFile socket connection failed %u, %s", conn->error, NetErrorToString(conn->error)); - - conn->DecRef("Connecting"); -} - -//============================================================================ -static void NotifyFileConnSocketDisconnect (FileConn * conn) { - - if (!conn->done && !conn->error) - conn->error = kNetErrDisconnected; - - conn->cancelId = 0; - conn->dump(L"[TCP] SrvFile socket closed: %u, %s", conn->error, NetErrorToString(conn->error)); - - HASHTABLEDECL( - FileTrans, - THashKeyVal, - link - ) fileTrans; - - s_critsect.Enter(); - { - conn->done = true; - while (FileTrans * trans = s_fileTrans.Head()) - fileTrans.Add(trans); - } - s_critsect.Leave(); - - while (FileTrans * trans = fileTrans.Head()) { - conn->dump(L"[TCP] No reply from SrvFile: %u, %s", conn->error, NetErrorToString(conn->error)); - delete trans; - } - - conn->DecRef("Connected"); -} - -//============================================================================ -static bool NotifyFileConnSocketRead (FileConn * conn, AsyncNotifySocketRead * read) { - - conn->recvBuffer.Add(read->buffer, read->bytes); - read->bytesProcessed += read->bytes; - - for (;;) { - if (conn->recvBuffer.Count() < sizeof(uint32_t)) - return true; - - uint32_t msgSize = *(uint32_t *)conn->recvBuffer.Ptr(); - if (conn->recvBuffer.Count() < msgSize) - return true; - - const Cli2File_MsgHeader * msg = (const Cli2File_MsgHeader *) conn->recvBuffer.Ptr(); - - if (msg->messageId != kFile2Cli_ManifestReply) { - conn->dump(L"[TCP] SrvFile received unexpected message. id: %u", msg->messageId); - return false; - } - - if (!Recv_File2Cli_ManifestReply(conn, *(const File2Cli_ManifestReply *)msg)) - return false; - - conn->recvBuffer.Move(0, msgSize, conn->recvBuffer.Count() - msgSize); - conn->recvBuffer.ShrinkBy(msgSize); - } -} - -//============================================================================ -static bool FileSocketNotifyCallback ( - AsyncSocket sock, - EAsyncNotifySocket code, - AsyncNotifySocket * notify, - void ** userState -) { - bool result = true; - FileConn * conn; - - switch (code) { - case kNotifySocketConnectSuccess: - conn = (FileConn *) notify->param; - *userState = conn; - conn->sock = sock; - conn->cancelId = 0; - NotifyFileConnSocketConnect(conn); - break; - - case kNotifySocketConnectFailed: - conn = (FileConn *) notify->param; - NotifyFileConnSocketConnectFailed(conn); - break; - - case kNotifySocketDisconnect: - conn = (FileConn *) *userState; - NotifyFileConnSocketDisconnect(conn); - break; - - case kNotifySocketRead: - conn = (FileConn *) *userState; - result = NotifyFileConnSocketRead(conn, (AsyncNotifySocketRead *) notify); - break; - } - - return result; -} - -//============================================================================ -static void StartAuthTcpTest ( - NetDiag * diag, - const NetAddress & addr, - FNetDiagDumpProc dump, - FNetDiagTestCallback callback, - void * param -) { - if (0 == AtomicSet(&s_authProtocolRegistered, 1)) { - memset( - s_payload, - (uint8_t)((uintptr_t)&s_payload >> 4), - sizeof(s_payload) - ); - NetMsgProtocolRegister( - kNetProtocolCli2Auth, - false, - s_send, arrsize(s_send), - s_recv, arrsize(s_recv), - kAuthDhGValue, - plBigNum(sizeof(kAuthDhXData), kAuthDhXData), - plBigNum(sizeof(kAuthDhNData), kAuthDhNData) - ); - } - - wchar_t addrStr[128]; - NetAddressToString(addr, addrStr, arrsize(addrStr), kNetAddressFormatAll); - dump(L"[TCP] Connecting to SrvAuth at %s...", addrStr); - - diag->IncRef("TCP"); - - AuthConn * conn = NEWZERO(AuthConn); - conn->diag = diag; - conn->dump = dump; - conn->callback = callback; - conn->param = param; - conn->IncRef("Connecting"); - - Cli2Auth_Connect connect; - connect.hdr.connType = (uint8_t) kConnTypeCliToAuth; - connect.hdr.hdrBytes = sizeof(connect.hdr); - connect.hdr.buildId = BuildId(); - connect.hdr.buildType = BUILD_TYPE_LIVE; - connect.hdr.branchId = BranchId(); - connect.hdr.productId = ProductId(); - connect.data.token = kNilGuid; - connect.data.dataBytes = sizeof(connect.data); - - AsyncSocketConnect( - &conn->cancelId, - addr, - AuthSocketNotifyCallback, - conn, - &connect, - sizeof(connect), - 0, - 0 - ); -} - -//============================================================================ -static void StartFileTcpTest ( - NetDiag * diag, - const NetAddress & addr, - FNetDiagDumpProc dump, - FNetDiagTestCallback callback, - void * param -) { - wchar_t addrStr[128]; - NetAddressToString(addr, addrStr, arrsize(addrStr), kNetAddressFormatAll); - dump(L"[TCP] Connecting to SrvFile at %s...", addrStr); - - diag->IncRef("TCP"); - - FileConn * conn = NEWZERO(FileConn); - conn->diag = diag; - conn->dump = dump; - conn->callback = callback; - conn->param = param; - conn->IncRef("Connecting"); - - Cli2File_Connect connect; - connect.hdr.connType = kConnTypeCliToFile; - connect.hdr.hdrBytes = sizeof(connect.hdr); - connect.hdr.buildId = 0; - connect.hdr.buildType = BUILD_TYPE_LIVE; - connect.hdr.branchId = BranchId(); - connect.hdr.productId = ProductId(); - connect.data.buildId = BuildId(); - connect.data.serverType = kSrvTypeNone; - connect.data.dataBytes = sizeof(connect.data); - - AsyncSocketConnect( - &conn->cancelId, - addr, - FileSocketNotifyCallback, - conn, - &connect, - sizeof(connect), - 0, - 0 - ); - -} - - -/***************************************************************************** -* -* AuthConn -* -***/ - -//============================================================================ -AuthConn::~AuthConn () { - if (cli) - NetCliDelete(cli, false); - if (sock) - AsyncSocketDelete(sock); - callback(diag, kNetProtocolCli2Auth, error, param); - diag->DecRef("TCP"); -} - - -/***************************************************************************** -* -* AuthTrans -* -***/ - -//============================================================================ -AuthTrans::AuthTrans (AuthConn * conn) -: conn(conn) -{ - conn->IncRef("Ping"); - AtomicAdd(&conn->pingsInRoute, 1); -} - -//============================================================================ -AuthTrans::~AuthTrans () { - - AtomicAdd(&conn->pingsCompleted, 1); - AtomicAdd(&conn->pingsInRoute, -1); - conn->DecRef("Ping"); -} - - -/***************************************************************************** -* -* FileConn -* -***/ - -//============================================================================ -FileConn::~FileConn () { - if (sock) - AsyncSocketDelete(sock); - callback(diag, kNetProtocolCli2File, error, param); - diag->DecRef("TCP"); -} - - -/***************************************************************************** -* -* FileTrans -* -***/ - -//============================================================================ -FileTrans::FileTrans (FileConn * conn) -: conn(conn) -{ - conn->IncRef("Ping"); - AtomicAdd(&conn->pingsInRoute, 1); -} - -//============================================================================ -FileTrans::~FileTrans () { - - AtomicAdd(&conn->pingsCompleted, 1); - AtomicAdd(&conn->pingsInRoute, -1); - conn->DecRef("Ping"); -} - - -/***************************************************************************** -* -* Module functions -* -***/ - -//============================================================================ -void TcpStartup () { - - s_shutdown = false; - AsyncTimerCreate(&s_timer, TimerCallback, 0, nil); -} - -//============================================================================ -void TcpShutdown () { - - s_shutdown = true; - AsyncTimerDeleteCallback(s_timer, TimerCallback); - s_timer = nil; -} - - -/***************************************************************************** -* -* Exports -* -***/ - -//============================================================================ -void NetDiagTcp ( - NetDiag * diag, - ENetProtocol protocol, - unsigned port, - FNetDiagDumpProc dump, - FNetDiagTestCallback callback, - void * param -) { - ASSERT(diag); - ASSERT(dump); - ASSERT(callback); - - unsigned srv = NetProtocolToSrv(protocol); - if (srv == kNumDiagSrvs) { - dump(L"[TCP] Unsupported protocol: %s", NetProtocolToString(protocol)); - callback(diag, protocol, kNetErrNotSupported, param); - return; - } - - unsigned node; - diag->critsect.Enter(); - { - node = diag->nodes[srv]; - } - diag->critsect.Leave(); - - if (!node) { - dump(L"[TCP] No address set for protocol: %s", NetProtocolToString(protocol)); - callback(diag, protocol, kNetSuccess, param); - return; - } - - plNetAddress addr(node, port); - - switch (protocol) { - case kNetProtocolCli2Auth: - StartAuthTcpTest(diag, addr, dump, callback, param); - break; - - case kNetProtocolCli2File: - StartFileTcpTest(diag, addr, dump, callback, param); - break; - - DEFAULT_FATAL(protocol); - } -} diff --git a/Sources/Plasma/NucleusLib/pnNetDiag/pnNetDiag.cpp b/Sources/Plasma/NucleusLib/pnNetDiag/pnNetDiag.cpp deleted file mode 100644 index 14a77572..00000000 --- a/Sources/Plasma/NucleusLib/pnNetDiag/pnNetDiag.cpp +++ /dev/null @@ -1,167 +0,0 @@ -/*==LICENSE==* - -CyanWorlds.com Engine - MMOG client, server and tools -Copyright (C) 2011 Cyan Worlds, Inc. - -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 3 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, see . - -Additional permissions under GNU GPL version 3 section 7 - -If you modify this Program, or any covered work, by linking or -combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, -NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent -JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK -(or a modified version of those libraries), -containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, -PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG -JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the -licensors of this Program grant you additional -permission to convey the resulting work. Corresponding Source for a -non-source form of such a combination shall include the source code for -the parts of OpenSSL and IJG JPEG Library used as well as that of the covered -work. - -You can contact Cyan Worlds, Inc. by email legal@cyan.com - or by snail mail at: - Cyan Worlds, Inc. - 14617 N Newport Hwy - Mead, WA 99021 - -*==LICENSE==*/ -/***************************************************************************** -* -* $/Plasma20/Sources/Plasma/NucleusLib/pnNetDiag/pnNetDiag.cpp -* -***/ - -#include "Pch.h" -#pragma hdrstop - - -namespace ND { - -/***************************************************************************** -* -* Local data -* -***/ - - -/***************************************************************************** -* -* Module data -* -***/ - -HMODULE g_lib; -//const wchar_t g_version[] = L"miasma"; -//const wchar_t g_version[] = L"ectomorph"; -const wchar_t g_version[] = L"solvent"; - -} // namespace ND - - -/***************************************************************************** -* -* NetDiag -* -***/ - -//============================================================================ -NetDiag::~NetDiag () { - - for (unsigned srv = 0; srv < kNumDiagSrvs; ++srv) - free(hosts[srv]); -} - -//============================================================================ -void NetDiag::SetHost (unsigned srv, const wchar_t host[]) { - - critsect.Enter(); - { - free(hosts[srv]); - - if (host) - hosts[srv] = StrDup(host); - else - hosts[srv] = nil; - - nodes[srv] = 0; - } - critsect.Leave(); -} - - -/***************************************************************************** -* -* Exports -* -***/ - -//============================================================================ -void NetDiagInitialize () { - - g_lib = LoadLibrary("Iphlpapi.dll"); - - SysStartup(); - DnsStartup(); - IcmpStartup(); - TcpStartup(); - -} - -//============================================================================ -void NetDiagDestroy () { - - TcpShutdown(); - IcmpShutdown(); - DnsShutdown(); - SysShutdown(); - - if (g_lib) { - FreeLibrary(g_lib); - g_lib = nil; - } -} - -//============================================================================ -NetDiag * NetDiagCreate () { - - NetDiag * diag = NEWZERO(NetDiag); - diag->IncRef("Lifetime"); - return diag; -} - -//============================================================================ -void NetDiagDelete (NetDiag * diag) { - - ASSERT(!diag->destroyed); - diag->destroyed = true; - diag->DecRef("Lifetime"); -} - -//============================================================================ -void NetDiagSetHost ( - NetDiag * diag, - ENetProtocol protocol, - const wchar_t host[] -) { - ASSERT(diag); - - unsigned srv = NetProtocolToSrv(protocol); - if (srv == kNumDiagSrvs) - return; - - diag->SetHost(srv, host); -} diff --git a/Sources/Plasma/NucleusLib/pnNetDiag/pnNetDiag.h b/Sources/Plasma/NucleusLib/pnNetDiag/pnNetDiag.h deleted file mode 100644 index 00f59ac2..00000000 --- a/Sources/Plasma/NucleusLib/pnNetDiag/pnNetDiag.h +++ /dev/null @@ -1,145 +0,0 @@ -/*==LICENSE==* - -CyanWorlds.com Engine - MMOG client, server and tools -Copyright (C) 2011 Cyan Worlds, Inc. - -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 3 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, see . - -Additional permissions under GNU GPL version 3 section 7 - -If you modify this Program, or any covered work, by linking or -combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, -NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent -JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK -(or a modified version of those libraries), -containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, -PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG -JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the -licensors of this Program grant you additional -permission to convey the resulting work. Corresponding Source for a -non-source form of such a combination shall include the source code for -the parts of OpenSSL and IJG JPEG Library used as well as that of the covered -work. - -You can contact Cyan Worlds, Inc. by email legal@cyan.com - or by snail mail at: - Cyan Worlds, Inc. - 14617 N Newport Hwy - Mead, WA 99021 - -*==LICENSE==*/ -/***************************************************************************** -* -* $/Plasma20/Sources/Plasma/NucleusLib/pnNetDiag/pnNetDiag.h -* -***/ - -#ifndef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETDIAG_PNNETDIAG_H -#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETDIAG_PNNETDIAG_H - -#define PNNETDIAG_INCLUDED - -#ifdef PLNETGAMELIB_INCLUDED -#error "pnNetDiag and plNetGameLib libraries may not be included in the same project because they invalidate each other's pnNetCli settings" -#endif - - -/***************************************************************************** -* -* Module -* -***/ - -void NetDiagInitialize (); -void NetDiagDestroy (); - - -/***************************************************************************** -* -* NetDiag -* -***/ - -struct NetDiag; - -NetDiag * NetDiagCreate (); -void NetDiagDelete (NetDiag * diag); -void NetDiagSetHost ( - NetDiag * diag, - ENetProtocol protocol, - const wchar_t name[] -); - -typedef void ( __cdecl * FNetDiagDumpProc)( - const wchar_t fmt[], - ... -); -typedef void (*FNetDiagTestCallback)( - NetDiag * diag, - ENetProtocol protocol, - ENetError result, - void * param -); - - -//============================================================================ -// Test: SYS -// Gather system information -//============================================================================ -void NetDiagSys ( - NetDiag * diag, - FNetDiagDumpProc dump, - FNetDiagTestCallback callback, - void * param -); - -//============================================================================ -// Test: DNS -// Lookup server address -//============================================================================ -void NetDiagDns ( - NetDiag * diag, - ENetProtocol protocol, - FNetDiagDumpProc dump, - FNetDiagTestCallback callback, - void * param -); - -//============================================================================ -// Test: ICMP -// Send out 5 sequential ICMP ping packets to the server -//============================================================================ -void NetDiagIcmp ( - NetDiag * diag, - ENetProtocol protocol, - FNetDiagDumpProc dump, - FNetDiagTestCallback callback, - void * param -); - -//============================================================================ -// Test: TCP -// Connect to server and measure bandwidth -//============================================================================ -void NetDiagTcp ( - NetDiag * diag, - ENetProtocol protocol, - unsigned port, // 0 --> use default client port - FNetDiagDumpProc dump, - FNetDiagTestCallback callback, - void * param -); - - -#endif // PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETDIAG_PNNETDIAG_H diff --git a/Sources/Plasma/NucleusLib/pnNetDiag/pnNetSys.cpp b/Sources/Plasma/NucleusLib/pnNetDiag/pnNetSys.cpp deleted file mode 100644 index 3949cf30..00000000 --- a/Sources/Plasma/NucleusLib/pnNetDiag/pnNetSys.cpp +++ /dev/null @@ -1,166 +0,0 @@ -/*==LICENSE==* - -CyanWorlds.com Engine - MMOG client, server and tools -Copyright (C) 2011 Cyan Worlds, Inc. - -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 3 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, see . - -Additional permissions under GNU GPL version 3 section 7 - -If you modify this Program, or any covered work, by linking or -combining it with any of RAD Game Tools Bink SDK, Autodesk 3ds Max SDK, -NVIDIA PhysX SDK, Microsoft DirectX SDK, OpenSSL library, Independent -JPEG Group JPEG library, Microsoft Windows Media SDK, or Apple QuickTime SDK -(or a modified version of those libraries), -containing parts covered by the terms of the Bink SDK EULA, 3ds Max EULA, -PhysX SDK EULA, DirectX SDK EULA, OpenSSL and SSLeay licenses, IJG -JPEG Library README, Windows Media SDK EULA, or QuickTime SDK EULA, the -licensors of this Program grant you additional -permission to convey the resulting work. Corresponding Source for a -non-source form of such a combination shall include the source code for -the parts of OpenSSL and IJG JPEG Library used as well as that of the covered -work. - -You can contact Cyan Worlds, Inc. by email legal@cyan.com - or by snail mail at: - Cyan Worlds, Inc. - 14617 N Newport Hwy - Mead, WA 99021 - -*==LICENSE==*/ -/***************************************************************************** -* -* $/Plasma20/Sources/Plasma/NucleusLib/pnNetDiag/pnNetSys.cpp -* -***/ - -#include "Pch.h" -#pragma hdrstop - - -/***************************************************************************** -* -* Local types -* -***/ - -typedef DWORD (PASCAL FAR * FGetAdaptersInfo)( - PIP_ADAPTER_INFO pAdapterInfo, - PULONG pOutBufLen -); - - - -/***************************************************************************** -* -* Local data -* -***/ - -static FGetAdaptersInfo getAdaptersInfo; - - -/***************************************************************************** -* -* Module functions -* -***/ - -//============================================================================ -void SysStartup () { - - if (g_lib) { - getAdaptersInfo = (FGetAdaptersInfo)GetProcAddress(g_lib, "GetAdaptersInfo"); - } -} - -//============================================================================ -void SysShutdown () { - - getAdaptersInfo = nil; -} - - -/***************************************************************************** -* -* Exports -* -***/ - -//============================================================================ -void NetDiagSys ( - NetDiag * diag, - FNetDiagDumpProc dump, - FNetDiagTestCallback callback, - void * param -) { - ASSERT(diag); - ASSERT(dump); - ASSERT(callback); - - { // Timestamp - wchar_t str[256]; - uint64_t time = TimeGetTime(); - TimePrettyPrint(time, arrsize(str), str); - dump(L"[SYS] Time: %s UTC", str); - } - - { // Command line - dump(L"[SYS] Cmdline: %s", AppGetCommandLine()); - } - - { // Product - wchar_t product[128]; - ProductString(product, arrsize(product)); - dump(L"[SYS] Product: %s", product); - } - - { // pnNetDiag version - dump(L"[SYS] Cognomen: '%s'", g_version); - } - - { // OS - OSVERSIONINFOEX info; - info.dwOSVersionInfoSize = sizeof(info); - GetVersionEx((OSVERSIONINFO*)&info); - dump(L"[SYS] OS Version: %u.%u", info.dwMajorVersion, info.dwMinorVersion); - dump(L"[SYS] OS Patch: %u.%u (%S)", info.wServicePackMajor, info.wServicePackMinor, info.szCSDVersion); - } - - { // Adapters - if (!getAdaptersInfo) { - dump(L"[SYS] Failed to load IP helper API"); - callback(diag, kNetProtocolNil, kNetErrNotSupported, param); - return; - } - - ULONG ulOutBufLen = 0; - getAdaptersInfo(nil, &ulOutBufLen); - PIP_ADAPTER_INFO pInfo = (PIP_ADAPTER_INFO)malloc(ulOutBufLen); - PIP_ADAPTER_INFO pAdapter; - if (getAdaptersInfo(pInfo, &ulOutBufLen) == NO_ERROR) { - pAdapter = pInfo; - while (pAdapter) { - dump(L"[SYS] NIC: %S", pAdapter->Description); - pAdapter = pAdapter->Next; - } - callback(diag, kNetProtocolNil, kNetSuccess, param); - } - else { - dump(L"[SYS] Error getting adaper list"); - callback(diag, kNetProtocolNil, kNetErrFileNotFound, param); - } - free(pInfo); - } -}