Browse Source

Add server.ini support to Internal builds

Co-Authored-By: Michael Hansen <zrax0111@gmail.com>
Co-Authored-By: Adam Johnson <AdamJohnso@gmail.com>
Co-Authored-By: Florian Meißner <developer@mystler.eu>
ticket/56
Darryl Pogue 5 months ago
parent
commit
0717a9e792
  1. 6
      Build/VS2010/Plasma/NucleusLib/pnNetBase/pnNetBase.vcxproj
  2. 18
      Build/VS2010/Plasma/NucleusLib/pnNetBase/pnNetBase.vcxproj.filters
  3. 67
      Sources/Plasma/Apps/plClient/winmain.cpp
  4. 333
      Sources/Plasma/FeatureLib/pfConsole/pfConsoleCommandsNet.cpp
  5. 116
      Sources/Plasma/FeatureLib/pfConsole/pfConsoleEngine.cpp
  6. 2
      Sources/Plasma/FeatureLib/pfConsole/pfConsoleEngine.h
  7. 1
      Sources/Plasma/NucleusLib/pnNetBase/Private/pnNbAllIncludes.h
  8. 141
      Sources/Plasma/NucleusLib/pnNetBase/Private/pnNbKeys.cpp
  9. 47
      Sources/Plasma/NucleusLib/pnNetBase/Private/pnNbKeys.h
  10. 77
      Sources/Plasma/NucleusLib/pnNetBase/Private/pnNbSrvs.cpp
  11. 14
      Sources/Plasma/NucleusLib/pnNetBase/Private/pnNbSrvs.h
  12. 4
      Sources/Plasma/NucleusLib/pnNetBase/pnNbConst.h
  13. 74
      Sources/Plasma/NucleusLib/pnNetBase/pnNbGameKey.hpp
  14. 8
      Sources/Plasma/NucleusLib/pnSimpleNet/pnSimpleNet.cpp
  15. 2
      Sources/Plasma/NucleusLib/pnUtils/Private/pnUtBase64.cpp
  16. 9
      Sources/Plasma/NucleusLib/pnUtils/Private/pnUtBase64.h
  17. 13
      Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglAuth.cpp
  18. 13
      Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglCsr.cpp
  19. 8
      Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglFile.cpp
  20. 9
      Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglGame.cpp
  21. 13
      Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglGateKeeper.cpp

6
Build/VS2010/Plasma/NucleusLib/pnNetBase/pnNetBase.vcxproj

@ -167,20 +167,18 @@
<ItemGroup> <ItemGroup>
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Intern.h" /> <ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Intern.h" />
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Pch.h" /> <ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Pch.h" />
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\pnNbAuthKey.hpp" />
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\pnNbCsrKey.hpp" />
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\pnNbGameKey.hpp" />
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\pnNbGateKeeperKey.hpp" />
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\pnNetBase.h" /> <ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\pnNetBase.h" />
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbAllIncludes.h" /> <ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbAllIncludes.h" />
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\pnNbConst.h" /> <ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\pnNbConst.h" />
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbEchoMsgs.h" /> <ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbEchoMsgs.h" />
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbError.h" /> <ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbError.h" />
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbKeys.h" />
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbProtocol.h" /> <ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbProtocol.h" />
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbSrvs.h" /> <ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbSrvs.h" />
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbError.cpp" /> <ClCompile Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbError.cpp" />
<ClCompile Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbKeys.cpp" />
<ClCompile Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbProtocol.cpp" /> <ClCompile Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbProtocol.cpp" />
<ClCompile Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbSrvs.cpp" /> <ClCompile Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbSrvs.cpp" />
</ItemGroup> </ItemGroup>

18
Build/VS2010/Plasma/NucleusLib/pnNetBase/pnNetBase.vcxproj.filters

@ -20,18 +20,6 @@
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Pch.h"> <ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Pch.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\pnNbAuthKey.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\pnNbCsrKey.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\pnNbGameKey.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\pnNbGateKeeperKey.hpp">
<Filter>Header Files</Filter>
</ClInclude>
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\pnNetBase.h"> <ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\pnNetBase.h">
<Filter>Header Files</Filter> <Filter>Header Files</Filter>
</ClInclude> </ClInclude>
@ -53,6 +41,9 @@
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbSrvs.h"> <ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbSrvs.h">
<Filter>Private</Filter> <Filter>Private</Filter>
</ClInclude> </ClInclude>
<ClInclude Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbKeys.h">
<Filter>Private</Filter>
</ClInclude>
</ItemGroup> </ItemGroup>
<ItemGroup> <ItemGroup>
<ClCompile Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbError.cpp"> <ClCompile Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbError.cpp">
@ -64,5 +55,8 @@
<ClCompile Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbSrvs.cpp"> <ClCompile Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbSrvs.cpp">
<Filter>Private</Filter> <Filter>Private</Filter>
</ClCompile> </ClCompile>
<ClCompile Include="..\..\..\..\..\Sources\Plasma\NucleusLib\pnNetBase\Private\pnNbKeys.cpp">
<Filter>Private</Filter>
</ClCompile>
</ItemGroup> </ItemGroup>
</Project> </Project>

67
Sources/Plasma/Apps/plClient/winmain.cpp

@ -72,6 +72,8 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "../plPhysX/plSimulationMgr.h" #include "../plPhysX/plSimulationMgr.h"
#include "pfConsole/pfConsoleEngine.h"
#include "res\resource.h" #include "res\resource.h"
#include <shellapi.h> #include <shellapi.h>
@ -112,6 +114,7 @@ enum
kArgAuthSrv, kArgAuthSrv,
kArgFileSrv, kArgFileSrv,
kArgGateKeeperSrv, kArgGateKeeperSrv,
kArgServerIni,
kArgLocalData, kArgLocalData,
kArgBackgroundDownloader, kArgBackgroundDownloader,
}; };
@ -122,6 +125,7 @@ static const CmdArgDef s_cmdLineArgs[] = {
{ kCmdArgFlagged | kCmdTypeString, L"AuthSrv", kArgAuthSrv }, { kCmdArgFlagged | kCmdTypeString, L"AuthSrv", kArgAuthSrv },
{ kCmdArgFlagged | kCmdTypeString, L"FileSrv", kArgFileSrv }, { kCmdArgFlagged | kCmdTypeString, L"FileSrv", kArgFileSrv },
{ kCmdArgFlagged | kCmdTypeString, L"GateKeeperSrv", kArgGateKeeperSrv }, { kCmdArgFlagged | kCmdTypeString, L"GateKeeperSrv", kArgGateKeeperSrv },
{ kCmdArgFlagged | kCmdTypeString, L"ServerIni", kArgServerIni },
{ kCmdArgFlagged | kCmdTypeBool, L"LocalData", kArgLocalData }, { kCmdArgFlagged | kCmdTypeBool, L"LocalData", kArgLocalData },
{ kCmdArgFlagged | kCmdTypeBool, L"BGDownload", kArgBackgroundDownloader }, { kCmdArgFlagged | kCmdTypeBool, L"BGDownload", kArgBackgroundDownloader },
}; };
@ -1321,7 +1325,7 @@ void StatusCallback(void *param)
while(s_loginDlgRunning) while(s_loginDlgRunning)
{ {
// get status message from webpage and display in status area. // get status message from webpage and display in status area.
const wchar *path = BuildTypeServerStatusPath(); const wchar *path = GetServerStatusUrl();
if(path) if(path)
{ {
HINTERNET hSession = 0; HINTERNET hSession = 0;
@ -1336,22 +1340,51 @@ void StatusCallback(void *param)
); );
if(hSession) if(hSession)
{ {
HINTERNET hConnect = WinHttpConnect( hSession, STATUS_PATH, INTERNET_DEFAULT_HTTP_PORT, 0); INTERNET_PORT port = INTERNET_DEFAULT_HTTP_PORT;
const wchar* truncpath = path;
if (wcsncmp(path, L"http:", 5) == 0) {
truncpath += 7;
} else if (wcsncmp(path, L"https:", 6) == 0) {
port = INTERNET_DEFAULT_HTTPS_PORT;
truncpath += 8;
}
const wchar* pathval = wcschr(truncpath, L'/');
const wchar* portnum = wcschr(truncpath, L':');
wchar host[256];
if (portnum != nil && portnum < pathval) {
int count = wcslen(truncpath) - wcslen(portnum);
wcsncpy(host, truncpath, count);
host[count] = L'\0';
unsigned long parsedport = wcstoul(portnum + 1, nil, 10);
if (parsedport != 0) {
port = (INTERNET_PORT)parsedport;
}
} else {
int count = wcslen(truncpath) - wcslen(pathval);
wcsncpy(host, truncpath, count);
host[count] = L'\0';
}
HINTERNET hConnect = WinHttpConnect( hSession, host, port, 0);
if(hConnect) if(hConnect)
{ {
HINTERNET hRequest = WinHttpOpenRequest( HINTERNET hRequest = WinHttpOpenRequest(
hConnect, hConnect,
L"GET", L"GET",
path, pathval,
NULL, NULL,
WINHTTP_NO_REFERER, WINHTTP_NO_REFERER,
WINHTTP_DEFAULT_ACCEPT_TYPES, WINHTTP_DEFAULT_ACCEPT_TYPES,
0 (port == INTERNET_DEFAULT_HTTPS_PORT ? WINHTTP_FLAG_SECURE : 0)
); );
if(hRequest) if(hRequest)
{ {
static char data[256] = {0}; static char data[256] = {0};
DWORD bytesRead; DWORD bytesRead = 0;
if( if(
WinHttpSendRequest( WinHttpSendRequest(
hRequest, hRequest,
@ -1528,7 +1561,8 @@ BOOL CALLBACK UruLoginDialogProc( HWND hwndDlg, UINT uMsg, WPARAM wParam, LPARAM
} }
else if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_URULOGIN_GAMETAPLINK) else if (HIWORD(wParam) == BN_CLICKED && LOWORD(wParam) == IDC_URULOGIN_GAMETAPLINK)
{ {
ShellExecute(NULL, "open", "http://www.mystonline.com/signup.html", NULL, NULL, SW_SHOWNORMAL); const wchar *signupurl = GetServerSignupUrl();
ShellExecuteW(NULL, L"open", signupurl, NULL, NULL, SW_SHOWNORMAL);
return TRUE; return TRUE;
} }
@ -1708,6 +1742,13 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nC
if(cmdParser.IsSpecified(kArgBackgroundDownloader)) if(cmdParser.IsSpecified(kArgBackgroundDownloader))
gUseBackgroundDownloader = true; gUseBackgroundDownloader = true;
#endif #endif
const wchar *serverIni = nil;
if(cmdParser.IsSpecified(kArgServerIni))
{
serverIni = cmdParser.GetString(kArgServerIni);
}
if(cmdParser.IsSpecified(kArgAuthSrv)) if(cmdParser.IsSpecified(kArgAuthSrv))
{ {
SetAuthSrvHostname(cmdParser.GetString(kArgAuthSrv)); SetAuthSrvHostname(cmdParser.GetString(kArgAuthSrv));
@ -1810,6 +1851,20 @@ int WINAPI WinMain(HINSTANCE hInst, HINSTANCE hPrevInst, LPSTR lpCmdLine, int nC
return PARABLE_NORMAL_EXIT; return PARABLE_NORMAL_EXIT;
} }
#ifndef PLASMA_EXTERNAL_RELEASE
/////////<<<<<<<<
if (serverIni) {
FILE *serverIniFile = _wfopen(serverIni, L"rb");
if (serverIniFile)
{
fclose(serverIniFile);
pfConsoleEngine tempConsole;
tempConsole.ExecuteFile(serverIni);
}
}
/////////<<<<<<<<
#endif
NetCliAuthAutoReconnectEnable(false); NetCliAuthAutoReconnectEnable(false);
NetCommSetReadIniAccountInfo(!doIntroDialogs); NetCommSetReadIniAccountInfo(!doIntroDialogs);

333
Sources/Plasma/FeatureLib/pfConsole/pfConsoleCommandsNet.cpp

@ -1071,3 +1071,336 @@ PF_CONSOLE_CMD(
#endif #endif
/////////////////////////////////////// ///////////////////////////////////////
/*****************************************************************************
*
* Server
*
***/
#ifndef LIMIT_CONSOLE_COMMANDS
//TODO: Fix Plasma to use OpenSSL's byte order (or better yet, to use OpenSSL),
// so this hack isn't needed
static void swap_key_bytes(byte keyData[])
{
for (size_t i = 0; i < (kNetDiffieHellmanKeyBits / 16); ++i)
std::swap(keyData[i], keyData[ (kNetDiffieHellmanKeyBits / 8) - i - 1 ]);
}
//============================================================================
// Server group
PF_CONSOLE_GROUP(Server)
//============================================================================
PF_CONSOLE_CMD(
Server,
Status,
"string url",
"Set the server's status URL"
) {
wchar_t *wurl = hsStringToWString((const char *)params[0]);
SetServerStatusUrl(wurl);
delete [] wurl;
}
//============================================================================
PF_CONSOLE_CMD(
Server,
Signup,
"string url",
"Set the server's new user sign-up URL"
) {
wchar_t *wurl = hsStringToWString((const char *)params[0]);
SetServerSignupUrl(wurl);
delete [] wurl;
}
//============================================================================
PF_CONSOLE_CMD(
Server,
DispName,
"string name",
"Set the displayable server name"
) {
wchar_t *wname = hsStringToWString((const char *)params[0]);
SetServerDisplayName(wname);
delete [] wname;
}
//============================================================================
PF_CONSOLE_CMD(
Server,
Port,
"int port",
"Set the server's port"
) {
SetClientPort((int)params[0]);
}
//============================================================================
// Server.File group
PF_CONSOLE_SUBGROUP(Server, File)
//============================================================================
PF_CONSOLE_CMD(
Server_File,
Host,
"string address",
"Set the File Server address"
) {
wchar_t *wHost = hsStringToWString((const char *)params[0]);
SetFileSrvHostname(wHost);
delete [] wHost;
}
//============================================================================
// Server.Auth group
PF_CONSOLE_SUBGROUP(Server, Auth)
//============================================================================
PF_CONSOLE_CMD(
Server_Auth,
Host,
"string address",
"Set the Auth Server address"
) {
wchar_t *wHost = hsStringToWString((const char *)params[0]);
SetAuthSrvHostname(wHost);
delete [] wHost;
}
//============================================================================
PF_CONSOLE_CMD(
Server_Auth,
N,
"string base64Key",
"Set the Auth Server N key"
) {
int baseLength = hsStrlen((const char *)params[0]);
if ((kNetDiffieHellmanKeyBits / 8) != Base64DecodeSize(baseLength, (const char *)params[0])) {
PrintStringF(PrintString, "Invalid key: should be exactly %u bytes",
kNetDiffieHellmanKeyBits / 8);
return;
}
Base64Decode(hsStrlen((const char *)params[0]), (const char *)params[0],
kNetDiffieHellmanKeyBits / 8, kAuthDhNData);
swap_key_bytes(kAuthDhNData);
}
//============================================================================
PF_CONSOLE_CMD(
Server_Auth,
X,
"string base64Key",
"Set the Auth Server X key"
) {
int baseLength = hsStrlen((const char *)params[0]);
if ((kNetDiffieHellmanKeyBits / 8) != Base64DecodeSize(baseLength, (const char *)params[0])) {
PrintStringF(PrintString, "Invalid key: should be exactly %u bytes",
kNetDiffieHellmanKeyBits / 8);
return;
}
Base64Decode(hsStrlen((const char *)params[0]), (const char *)params[0],
kNetDiffieHellmanKeyBits / 8, kAuthDhXData);
swap_key_bytes(kAuthDhXData);
}
//============================================================================
PF_CONSOLE_CMD(
Server_Auth,
G,
"int GValue",
"Set the Auth Server G value"
) {
kAuthDhGValue = (int)params[0];
}
//============================================================================
// Server.Csr group
PF_CONSOLE_SUBGROUP(Server, Csr)
//============================================================================
PF_CONSOLE_CMD(
Server_Csr,
Host,
"string address",
"Set the Csr Server address"
) {
wchar_t *wHost = hsStringToWString((const char *)params[0]);
SetCsrSrvHostname(wHost);
delete [] wHost;
}
//============================================================================
PF_CONSOLE_CMD(
Server_Csr,
N,
"string base64Key",
"Set the Csr Server N key"
) {
int baseLength = hsStrlen((const char *)params[0]);
if ((kNetDiffieHellmanKeyBits / 8) != Base64DecodeSize(baseLength, (const char *)params[0])) {
PrintStringF(PrintString, "Invalid key: should be exactly %u bytes",
kNetDiffieHellmanKeyBits / 8);
return;
}
Base64Decode(hsStrlen((const char *)params[0]), (const char *)params[0],
kNetDiffieHellmanKeyBits / 8, kCsrDhNData);
swap_key_bytes(kCsrDhNData);
}
//============================================================================
PF_CONSOLE_CMD(
Server_Csr,
X,
"string base64Key",
"Set the Csr Server X key"
) {
int baseLength = hsStrlen((const char *)params[0]);
if ((kNetDiffieHellmanKeyBits / 8) != Base64DecodeSize(baseLength, (const char *)params[0])) {
PrintStringF(PrintString, "Invalid key: should be exactly %u bytes",
kNetDiffieHellmanKeyBits / 8);
return;
}
Base64Decode(hsStrlen((const char *)params[0]), (const char *)params[0],
kNetDiffieHellmanKeyBits / 8, kCsrDhXData);
swap_key_bytes(kCsrDhXData);
}
//============================================================================
PF_CONSOLE_CMD(
Server_Csr,
G,
"int GValue",
"Set the Csr Server G value"
) {
kCsrDhGValue = (int)params[0];
}
//============================================================================
// Server.Game group
PF_CONSOLE_SUBGROUP(Server, Game)
//============================================================================
PF_CONSOLE_CMD(
Server_Game,
N,
"string base64Key",
"Set the Game Server N key"
) {
int baseLength = hsStrlen((const char *)params[0]);
if ((kNetDiffieHellmanKeyBits / 8) != Base64DecodeSize(baseLength, (const char *)params[0])) {
PrintStringF(PrintString, "Invalid key: should be exactly %u bytes",
kNetDiffieHellmanKeyBits / 8);
return;
}
Base64Decode(hsStrlen((const char *)params[0]), (const char *)params[0],
kNetDiffieHellmanKeyBits / 8, kGameDhNData);
swap_key_bytes(kGameDhNData);
}
//============================================================================
PF_CONSOLE_CMD(
Server_Game,
X,
"string base64Key",
"Set the Game Server X key"
) {
int baseLength = hsStrlen((const char *)params[0]);
if ((kNetDiffieHellmanKeyBits / 8) != Base64DecodeSize(baseLength, (const char *)params[0])) {
PrintStringF(PrintString, "Invalid key: should be exactly %u bytes",
kNetDiffieHellmanKeyBits / 8);
return;
}
Base64Decode(hsStrlen((const char *)params[0]), (const char *)params[0],
kNetDiffieHellmanKeyBits / 8, kGameDhXData);
swap_key_bytes(kGameDhXData);
}
//============================================================================
PF_CONSOLE_CMD(
Server_Game,
G,
"int GValue",
"Set the Game Server G value"
) {
kGameDhGValue = (int)params[0];
}
//============================================================================
// Server.Gate group
PF_CONSOLE_SUBGROUP(Server, Gate)
//============================================================================
PF_CONSOLE_CMD(
Server_Gate,
Host,
"string address",
"Set the GateKeeper Server address"
) {
wchar_t *wHost = hsStringToWString((const char *)params[0]);
SetGateKeeperSrvHostname(wHost);
delete [] wHost;
}
//============================================================================
PF_CONSOLE_CMD(
Server_Gate,
N,
"string base64Key",
"Set the GateKeeper Server N key"
) {
int baseLength = hsStrlen((const char *)params[0]);
if ((kNetDiffieHellmanKeyBits / 8) != Base64DecodeSize(baseLength, (const char *)params[0])) {
PrintStringF(PrintString, "Invalid key: should be exactly %u bytes",
kNetDiffieHellmanKeyBits / 8);
return;
}
Base64Decode(hsStrlen((const char *)params[0]), (const char *)params[0],
kNetDiffieHellmanKeyBits / 8, kGateKeeperDhNData);
swap_key_bytes(kGateKeeperDhNData);
}
//============================================================================
PF_CONSOLE_CMD(
Server_Gate,
X,
"string base64Key",
"Set the GateKeeper Server X key"
) {
int baseLength = hsStrlen((const char *)params[0]);
if ((kNetDiffieHellmanKeyBits / 8) != Base64DecodeSize(baseLength, (const char *)params[0])) {
PrintStringF(PrintString, "Invalid key: should be exactly %u bytes",
kNetDiffieHellmanKeyBits / 8);
return;
}
Base64Decode(hsStrlen((const char *)params[0]), (const char *)params[0],
kNetDiffieHellmanKeyBits / 8, kGateKeeperDhXData);
swap_key_bytes(kGateKeeperDhXData);
}
//============================================================================
PF_CONSOLE_CMD(
Server_Gate,
G,
"int GValue",
"Set the GateKeeper Server G value"
) {
kGateKeeperDhGValue = (int)params[0];
}
#endif

116
Sources/Plasma/FeatureLib/pfConsole/pfConsoleEngine.cpp

@ -53,9 +53,56 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
const Int32 pfConsoleEngine::fMaxNumParams = 16; const Int32 pfConsoleEngine::fMaxNumParams = 16;
const char pfConsoleEngine::fTokenSeparators[] = " =\r\n\t,";
const char pfConsoleEngine::fTokenGrpSeps[] = " =\r\n._\t,";
static const char kTokenSeparators[] = " =\r\n\t,";
static const char kTokenGrpSeps[] = " =\r\n._\t,";
static char *console_strtok( char *&line, hsBool haveCommand )
{
char *begin = line;
while (*begin && isspace(*begin))
++begin;
for (line = begin; *line; ++line) {
if (!haveCommand) {
for (const char *sep = kTokenGrpSeps; *sep; ++sep) {
if (*line == *sep) {
*line = 0;
while (*++line && (*line == *sep))
/* skip duplicate delimiters */;
return begin;
}
}
} else {
if (*begin == '"' || *begin == '\'') {
// Handle strings as a single token
char *endptr = strchr(line + 1, *line);
if (endptr == nil) {
// Bad string token sentry
return "\xFF";
}
*endptr = 0;
line = endptr + 1;
return begin + 1;
}
for (const char *sep = kTokenSeparators; *sep; ++sep) {
if (*line == *sep) {
*line = 0;
while (*++line && (*line == *sep))
/* skip duplicate delimiters */;
return begin;
}
}
}
}
if (begin == line)
return nil;
line = line + strlen(line);
return begin;
}
//// Constructor & Destructor //////////////////////////////////////////////// //// Constructor & Destructor ////////////////////////////////////////////////
@ -82,7 +129,7 @@ hsBool pfConsoleEngine::PrintCmdHelp( char *name, void (*PrintFn)( const char *
/// Scan for subgroups. This can be an empty loop /// Scan for subgroups. This can be an empty loop
group = pfConsoleCmdGroup::GetBaseGroup(); group = pfConsoleCmdGroup::GetBaseGroup();
ptr = strtok( name, fTokenGrpSeps ); ptr = console_strtok( name, false );
while( ptr != nil ) while( ptr != nil )
{ {
// Take this token and check to see if it's a group // Take this token and check to see if it's a group
@ -91,7 +138,7 @@ hsBool pfConsoleEngine::PrintCmdHelp( char *name, void (*PrintFn)( const char *
else else
break; break;
ptr = strtok( nil, fTokenGrpSeps ); ptr = console_strtok( name, false );
} }
if( ptr == nil ) if( ptr == nil )
@ -159,7 +206,7 @@ const char *pfConsoleEngine::GetCmdSignature( char *name )
/// Scan for subgroups. This can be an empty loop /// Scan for subgroups. This can be an empty loop
group = pfConsoleCmdGroup::GetBaseGroup(); group = pfConsoleCmdGroup::GetBaseGroup();
ptr = strtok( name, fTokenGrpSeps ); ptr = console_strtok( name, false );
while( ptr != nil ) while( ptr != nil )
{ {
// Take this token and check to see if it's a group // Take this token and check to see if it's a group
@ -168,7 +215,7 @@ const char *pfConsoleEngine::GetCmdSignature( char *name )
else else
break; break;
ptr = strtok( nil, fTokenGrpSeps ); ptr = console_strtok( name, false );
} }
if( ptr == nil ) if( ptr == nil )
@ -262,7 +309,7 @@ hsBool pfConsoleEngine::RunCommand( char *line, void (*PrintFn)( const char * )
/// Loop #1: Scan for subgroups. This can be an empty loop /// Loop #1: Scan for subgroups. This can be an empty loop
group = pfConsoleCmdGroup::GetBaseGroup(); group = pfConsoleCmdGroup::GetBaseGroup();
ptr = strtok( line, fTokenGrpSeps ); ptr = console_strtok( line, false );
while( ptr != nil ) while( ptr != nil )
{ {
// Take this token and check to see if it's a group // Take this token and check to see if it's a group
@ -271,7 +318,7 @@ hsBool pfConsoleEngine::RunCommand( char *line, void (*PrintFn)( const char * )
else else
break; break;
ptr = strtok( nil, fTokenGrpSeps ); ptr = console_strtok( line, false );
} }
if( ptr == nil ) if( ptr == nil )
@ -293,59 +340,15 @@ hsBool pfConsoleEngine::RunCommand( char *line, void (*PrintFn)( const char * )
/// params /// params
for( numParams = numQuotedParams = 0; numParams < fMaxNumParams for( numParams = numQuotedParams = 0; numParams < fMaxNumParams
&& ( ptr = strtok( nil, fTokenSeparators ) ) != nil && ( ptr = console_strtok( line, true ) ) != nil
&& valid; numParams++ ) && valid; numParams++ )
{ {
if( ptr[ 0 ] == '\'' || ptr[ 0 ] == '"' ) if( ptr[ 0 ] == '\xFF' )
{
// String parameter--keep getting tokens until we hit the other end
// Note: since params take pointers to strings, we have to have unique temp strings
// for each quoted param we parse. So we have a static array here to a) do so, b)
// avoid having to delete them afterwards, and thus c) reduce overhead.
static char tempStrings[ fMaxNumParams ][ 512 ];
char *tempStr = tempStrings[ numQuotedParams++ ], toSearch[ 2 ] = "'";
toSearch[ 0 ] = ptr[ 0 ];
if( strlen( ptr ) >= sizeof( tempStrings[ 0 ] ) ) // They're all the same, after all...
{
ISetErrorMsg( "Invalid syntax: quoted parameter too long" );
return false;
}
if( strlen( ptr ) > 1 && ptr[ strlen( ptr ) - 1 ] == toSearch[ 0 ] )
{
// Single word string
strcpy( tempStr, ptr + 1 );
tempStr[ strlen( tempStr ) - 1 ] = 0;
}
else
{
// Multiple word string
sprintf( tempStr, "%s ", ptr + 1 ); // Not perfect, but close
ptr = strtok( nil, toSearch );
if( ptr == nil )
{ {
ISetErrorMsg( "Invalid syntax: unterminated quoted parameter" ); ISetErrorMsg( "Invalid syntax: unterminated quoted parameter" );
return false; return false;
} }
if( strlen( ptr ) + strlen( tempStr ) >= sizeof( tempStrings[ 0 ] ) ) // They're all the same, after all...
{
ISetErrorMsg( "Invalid syntax: quoted parameter too long" );
return false;
}
strcat( tempStr, ptr );
}
valid = IConvertToParam( cmd->GetSigEntry( (UInt8)numParams ), tempStr, &paramArray[ numParams ] );
}
else
{
// Normal parameter
// Special case for context variables--if we're specifying one, we want to just grab // Special case for context variables--if we're specifying one, we want to just grab
// the value of it and return that instead // the value of it and return that instead
valid = false; valid = false;
@ -371,7 +374,6 @@ hsBool pfConsoleEngine::RunCommand( char *line, void (*PrintFn)( const char * )
if( !valid ) if( !valid )
valid = IConvertToParam( cmd->GetSigEntry( (UInt8)numParams ), ptr, &paramArray[ numParams ] ); valid = IConvertToParam( cmd->GetSigEntry( (UInt8)numParams ), ptr, &paramArray[ numParams ] );
} }
}
for( i = numParams; i < fMaxNumParams + 1; i++ ) for( i = numParams; i < fMaxNumParams + 1; i++ )
paramArray[ i ].SetNone(); paramArray[ i ].SetNone();
@ -493,7 +495,7 @@ hsBool pfConsoleEngine::FindPartialCmd( char *line, hsBool findAgain, hsBool pre
/// Loop #1: Scan for subgroups. This can be an empty loop /// Loop #1: Scan for subgroups. This can be an empty loop
lastParentGroup = group = pfConsoleCmdGroup::GetBaseGroup(); lastParentGroup = group = pfConsoleCmdGroup::GetBaseGroup();
ptr = strtok( line, fTokenGrpSeps ); ptr = console_strtok( line, false );
while( ptr != nil ) while( ptr != nil )
{ {
// Take this token and check to see if it's a group // Take this token and check to see if it's a group
@ -508,7 +510,7 @@ hsBool pfConsoleEngine::FindPartialCmd( char *line, hsBool findAgain, hsBool pre
else else
break; break;
ptr = strtok( nil, fTokenGrpSeps ); ptr = console_strtok( line, false );
strcat( newStr, "." ); strcat( newStr, "." );
insertLoc++; insertLoc++;
} }

2
Sources/Plasma/FeatureLib/pfConsole/pfConsoleEngine.h

@ -68,8 +68,6 @@ class pfConsoleEngine
private: private:
static const Int32 fMaxNumParams; static const Int32 fMaxNumParams;
static const char fTokenSeparators[];
static const char fTokenGrpSeps[];
hsBool IConvertToParam( UInt8 type, char *string, pfConsoleCmdParam *param ); hsBool IConvertToParam( UInt8 type, char *string, pfConsoleCmdParam *param );

1
Sources/Plasma/NucleusLib/pnNetBase/Private/pnNbAllIncludes.h

@ -53,6 +53,7 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "pnNbConst.h" #include "pnNbConst.h"
#include "pnNbError.h" #include "pnNbError.h"
#include "pnNbKeys.h"
#include "pnNbProtocol.h" #include "pnNbProtocol.h"
#include "pnNbSrvs.h" #include "pnNbSrvs.h"

141
Sources/Plasma/NucleusLib/pnNetBase/Private/pnNbKeys.cpp

@ -0,0 +1,141 @@
/*==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 <http://www.gnu.org/licenses/>.
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/pnNetBase/Private/pnNbKeys.cpp
*
***/
#include "../Pch.h"
#pragma hdrstop
// Auth Server
unsigned kAuthDhGValue = 41;
byte kAuthDhNData[kNetDiffieHellmanKeyBits / 8] = {
0x2d, 0x17, 0x19, 0x42, 0xeb, 0x71, 0x8f, 0x91,
0x29, 0x7c, 0x61, 0x88, 0x43, 0x75, 0xe5, 0xee,
0x72, 0xfe, 0x45, 0x1b, 0x43, 0xc3, 0x8e, 0xb9,
0x47, 0x5e, 0x03, 0xc8, 0x0c, 0x78, 0xb7, 0xe4,
0x4d, 0x31, 0x5b, 0xcb, 0x66, 0xc2, 0x54, 0x1a,
0x0a, 0x61, 0x11, 0x57, 0x38, 0x66, 0x9b, 0x34,
0x6b, 0xab, 0x6d, 0x12, 0x12, 0x38, 0x87, 0xc5,
0x3f, 0x20, 0xbe, 0x97, 0xa3, 0xa6, 0x56, 0x8f
};
byte kAuthDhXData[kNetDiffieHellmanKeyBits / 8] = {
0x21, 0xcf, 0x1d, 0xc6, 0x08, 0xc0, 0x23, 0xad,
0x53, 0x36, 0xce, 0x61, 0x25, 0xdd, 0xb9, 0x55,
0x05, 0xc1, 0xbb, 0x8f, 0xf4, 0x0d, 0x59, 0xf9,
0x20, 0x27, 0x9a, 0xee, 0xfb, 0x23, 0x5b, 0xeb,
0xe5, 0xec, 0x01, 0x55, 0x2e, 0xd5, 0x64, 0xef,
0xea, 0x43, 0xb1, 0x9e, 0xb9, 0x8c, 0x75, 0x3f,
0xda, 0xb2, 0xbb, 0xb3, 0x6a, 0x3d, 0xcd, 0xbc,
0xfa, 0x6f, 0x03, 0xf3, 0x55, 0xd8, 0xe9, 0x1b
};
// CSR Server
unsigned kCsrDhGValue = 97;
byte kCsrDhNData[kNetDiffieHellmanKeyBits / 8] = {
0xbd, 0xf8, 0x03, 0x17, 0xed, 0x27, 0x74, 0x0d,
0x76, 0x8e, 0x7a, 0x8c, 0x88, 0xeb, 0xec, 0xde,
0xd7, 0x73, 0x37, 0x8f, 0x4b, 0xbc, 0xae, 0x75,
0xf8, 0xda, 0x22, 0xee, 0x50, 0xc9, 0xb3, 0x69,
0x97, 0x0b, 0xe5, 0x28, 0x98, 0x91, 0xf7, 0x44,
0x97, 0xdf, 0x70, 0xf1, 0x86, 0x6c, 0xfa, 0x03,
0x7c, 0x47, 0x73, 0xb1, 0x62, 0x00, 0x42, 0x99,
0xf0, 0xc6, 0xe7, 0x05, 0xd8, 0xcd, 0xd6, 0x6d
};
byte kCsrDhXData[kNetDiffieHellmanKeyBits / 8] = {
0x03, 0x1d, 0x83, 0x62, 0x36, 0x92, 0x63, 0xa6,
0xa8, 0x66, 0x31, 0xbe, 0x28, 0x42, 0xc2, 0xe6,
0x86, 0x98, 0x3a, 0x81, 0x13, 0x0e, 0xb7, 0x96,
0x5e, 0x27, 0x87, 0x6a, 0x06, 0x68, 0x51, 0x21,
0xf3, 0x74, 0xe9, 0x11, 0xe9, 0x73, 0x5f, 0xdb,
0x37, 0x2a, 0x2d, 0x49, 0xa4, 0x76, 0x12, 0x06,
0x58, 0x36, 0x59, 0x6d, 0xbb, 0x59, 0x57, 0x2c,
0x34, 0xe4, 0x5e, 0xd4, 0x2c, 0x78, 0xc3, 0x34
};
// Game Server
unsigned kGameDhGValue = 73;
byte kGameDhNData[kNetDiffieHellmanKeyBits / 8] = {
0x38, 0xa4, 0xf7, 0x69, 0x43, 0xd7, 0xa6, 0xc7,
0x27, 0x72, 0x3b, 0x12, 0x6a, 0x76, 0x09, 0x5d,
0xaa, 0x9a, 0x38, 0x44, 0xde, 0x84, 0x22, 0xc4,
0xde, 0x3f, 0xfd, 0x50, 0x26, 0xea, 0xbb, 0x20,
0xd6, 0xad, 0x2e, 0xcd, 0xfe, 0xf2, 0x70, 0x1b,
0x19, 0xd1, 0x82, 0x15, 0xd7, 0xcb, 0x33, 0x60,
0x20, 0xbc, 0x43, 0xc9, 0x55, 0x0b, 0xc9, 0x20,
0xd9, 0x24, 0xd2, 0x49, 0xd0, 0x28, 0x4b, 0x90
};
byte kGameDhXData[kNetDiffieHellmanKeyBits / 8] = {
0xf9, 0xb2, 0x93, 0xbd, 0x02, 0xbd, 0x72, 0x48,
0xa9, 0x21, 0xbd, 0x09, 0x3e, 0x44, 0x65, 0x3e,
0xc2, 0xfd, 0x5a, 0xf0, 0x99, 0x3b, 0x3f, 0x5c,
0x47, 0x76, 0x5c, 0x1f, 0x84, 0xd8, 0x01, 0x68,
0xdc, 0x5f, 0xb6, 0xba, 0xc8, 0xfd, 0x79, 0x98,
0x62, 0x93, 0x36, 0x7f, 0x14, 0xcf, 0x33, 0x67,
0x84, 0x04, 0xcf, 0xa3, 0x7a, 0x65, 0xe9, 0x68,
0x4f, 0x58, 0x58, 0xb3, 0x8f, 0x3d, 0xdb, 0x3d
};
// GateKeeper Server
unsigned kGateKeeperDhGValue = 4;
byte kGateKeeperDhNData[kNetDiffieHellmanKeyBits / 8] = {
0x8d, 0xfa, 0x35, 0xe6, 0xf8, 0x7a, 0x50, 0x50,
0xab, 0x25, 0x4b, 0x81, 0xd1, 0xd7, 0x7a, 0x23,
0xa3, 0x9a, 0x21, 0x0f, 0x34, 0xab, 0x66, 0x2e,
0x16, 0x98, 0x55, 0xb6, 0xfc, 0x49, 0xd5, 0x50,
0xdc, 0xb8, 0x4c, 0x4d, 0xc7, 0xdb, 0xf1, 0x1c,
0x15, 0x4c, 0x55, 0xf5, 0x92, 0x0d, 0x6a, 0xec,
0x60, 0xbc, 0x55, 0xfa, 0x29, 0x2f, 0x6f, 0xc3,
0xd7, 0x21, 0x80, 0xa3, 0x6b, 0x44, 0x23, 0xb5,
};
byte kGateKeeperDhXData[kNetDiffieHellmanKeyBits / 8] = {
0xb3, 0x88, 0xff, 0x0b, 0x90, 0x70, 0x2b, 0x2e,
0x07, 0xbc, 0x62, 0x98, 0x83, 0x9d, 0x0f, 0x05,
0x39, 0xfa, 0x35, 0x39, 0xa9, 0xf3, 0xb3, 0xfc,
0xcd, 0x5e, 0xa9, 0xa6, 0x61, 0x0f, 0x9b, 0x38,
0x0f, 0x9c, 0xbe, 0xa0, 0xbe, 0x6f, 0x7f, 0xe4,
0x7c, 0xcb, 0xc4, 0x09, 0x6c, 0x8d, 0xce, 0x47,
0x68, 0x82, 0x32, 0xc5, 0x89, 0x94, 0xf9, 0xca,
0x69, 0x69, 0xd0, 0x60, 0x19, 0xb7, 0xf3, 0x1a,
};

47
Sources/Plasma/NucleusLib/pnNetBase/pnNbAuthKey.hpp → Sources/Plasma/NucleusLib/pnNetBase/Private/pnNbKeys.h

@ -39,36 +39,33 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
Mead, WA 99021 Mead, WA 99021
*==LICENSE==*/ *==LICENSE==*/
/************************************************************* /*****************************************************************************
* *
* This file was auto-generated by plDhKeyGen.exe * $/Plasma20/Sources/Plasma/NucleusLib/pnNetBase/Private/pnNbKeys.h
* *
***/ ***/
static const unsigned kDhGValue = 41; #ifdef PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETBASE_PRIVATE_PNNBKEYS_H
#error "Header $/Plasma20/Sources/Plasma/NucleusLib/pnNetBase/Private/pnNbKeys.h included more than once"
#endif
#define PLASMA20_SOURCES_PLASMA_NUCLEUSLIB_PNNETBASE_PRIVATE_PNNBKEYS_H
static const byte kDhNData[] = { // Auth Server
0x2d, 0x17, 0x19, 0x42, 0xeb, 0x71, 0x8f, 0x91, extern unsigned kAuthDhGValue;
0x29, 0x7c, 0x61, 0x88, 0x43, 0x75, 0xe5, 0xee, extern byte kAuthDhNData[kNetDiffieHellmanKeyBits / 8];
0x72, 0xfe, 0x45, 0x1b, 0x43, 0xc3, 0x8e, 0xb9, extern byte kAuthDhXData[kNetDiffieHellmanKeyBits / 8];
0x47, 0x5e, 0x03, 0xc8, 0x0c, 0x78, 0xb7, 0xe4,
0x4d, 0x31, 0x5b, 0xcb, 0x66, 0xc2, 0x54, 0x1a,
0x0a, 0x61, 0x11, 0x57, 0x38, 0x66, 0x9b, 0x34,
0x6b, 0xab, 0x6d, 0x12, 0x12, 0x38, 0x87, 0xc5,
0x3f, 0x20, 0xbe, 0x97, 0xa3, 0xa6, 0x56, 0x8f
};
COMPILER_ASSERT(sizeof(kDhNData) == kNetDiffieHellmanKeyBits / 8);
static const byte kDhXData[] = { // CSR Server
0x21, 0xcf, 0x1d, 0xc6, 0x08, 0xc0, 0x23, 0xad, extern unsigned kCsrDhGValue;
0x53, 0x36, 0xce, 0x61, 0x25, 0xdd, 0xb9, 0x55, extern byte kCsrDhNData[kNetDiffieHellmanKeyBits / 8];
0x05, 0xc1, 0xbb, 0x8f, 0xf4, 0x0d, 0x59, 0xf9, extern byte kCsrDhXData[kNetDiffieHellmanKeyBits / 8];
0x20, 0x27, 0x9a, 0xee, 0xfb, 0x23, 0x5b, 0xeb,
0xe5, 0xec, 0x01, 0x55, 0x2e, 0xd5, 0x64, 0xef,
0xea, 0x43, 0xb1, 0x9e, 0xb9, 0x8c, 0x75, 0x3f,
0xda, 0xb2, 0xbb, 0xb3, 0x6a, 0x3d, 0xcd, 0xbc,
0xfa, 0x6f, 0x03, 0xf3, 0x55, 0xd8, 0xe9, 0x1b
};
COMPILER_ASSERT(sizeof(kDhXData) == kNetDiffieHellmanKeyBits / 8);
// Game Server
extern unsigned kGameDhGValue;
extern byte kGameDhNData[kNetDiffieHellmanKeyBits / 8];
extern byte kGameDhXData[kNetDiffieHellmanKeyBits / 8];
// GateKeeper Server
extern unsigned kGateKeeperDhGValue;
extern byte kGateKeeperDhNData[kNetDiffieHellmanKeyBits / 8];
extern byte kGateKeeperDhXData[kNetDiffieHellmanKeyBits / 8];

77
Sources/Plasma/NucleusLib/pnNetBase/Private/pnNbSrvs.cpp

@ -162,6 +162,9 @@ static const wchar * s_gateKeeperAddrsOverride[] = {
s_gateKeeperAddrCmdLine s_gateKeeperAddrCmdLine
}; };
static unsigned s_clientPort = 14617;
static unsigned s_serverPort = 14618;
static unsigned s_simpleNetPort = 14620;
/***************************************************************************** /*****************************************************************************
* *
@ -276,3 +279,77 @@ bool GateKeeperSrvHostnameOverride () {
return s_gateKeeperAddrCmdLine[0]; return s_gateKeeperAddrCmdLine[0];
} }
//============================================================================
// Client Port
//============================================================================
unsigned GetClientPort() {
return s_clientPort;
}
//============================================================================
void SetClientPort(unsigned port) {
s_clientPort = port;
}
//============================================================================
unsigned GetServerPort() {
return s_serverPort;
}
//============================================================================
unsigned GetSimpleNetPort() {
return s_simpleNetPort;
}
//============================================================================
// User-visible Server
//============================================================================
static const wchar* kDefaultStatusUrl = L"http://account.mystonline.com/serverstatus/moullive.php";
static const wchar* kDefaultSignupUrl = L"http://www.mystonline.com/signup.html";
static const wchar* kDefaultServerName = L"MOULagain";
static wchar s_serverStatusUrl[256];
static wchar s_serverSignupUrl[256];
static wchar s_serverName[256];
//============================================================================
const wchar *GetServerStatusUrl () {
if (s_serverStatusUrl[0]) {
return s_serverStatusUrl;
}
return kDefaultStatusUrl;
}
//============================================================================
void SetServerStatusUrl (const wchar url[]) {
StrCopy(s_serverStatusUrl, url, arrsize(s_serverStatusUrl));
}
//============================================================================
const wchar *GetServerSignupUrl () {
if (s_serverSignupUrl[0]) {
return s_serverSignupUrl;
}
return kDefaultSignupUrl;
}
//============================================================================
void SetServerSignupUrl (const wchar url[]) {
StrCopy(s_serverSignupUrl, url, arrsize(s_serverSignupUrl));
}
//============================================================================
const wchar *GetServerDisplayName () {
if (s_serverName[0]) {
return s_serverName;
}
return kDefaultServerName;
}
//============================================================================
void SetServerDisplayName (const wchar name[]) {
StrCopy(s_serverName, name, arrsize(s_serverName));
}

14
Sources/Plasma/NucleusLib/pnNetBase/Private/pnNbSrvs.h

@ -104,3 +104,17 @@ bool CsrSrvHostnameOverride ();
unsigned GetGateKeeperSrvHostnames (const wchar *** addrs); // returns addrCount unsigned GetGateKeeperSrvHostnames (const wchar *** addrs); // returns addrCount
void SetGateKeeperSrvHostname (const wchar addr[]); void SetGateKeeperSrvHostname (const wchar addr[]);
bool GateKeeperSrvHostnameOverride (); bool GateKeeperSrvHostnameOverride ();
unsigned GetClientPort();
void SetClientPort(unsigned port);
unsigned GetServerPort();
unsigned GetSimpleNetPort();
const wchar *GetServerStatusUrl ();
void SetServerStatusUrl (const wchar url[]);
const wchar *GetServerSignupUrl ();
void SetServerSignupUrl (const wchar url[]);
const wchar *GetServerDisplayName ();
void SetServerDisplayName (const wchar name[]);

4
Sources/Plasma/NucleusLib/pnNetBase/pnNbConst.h

@ -60,10 +60,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
//============================================================================ //============================================================================
// Network constants // Network constants
//============================================================================ //============================================================================
const unsigned kNetLegacyClientPort = 80;
const unsigned kNetDefaultClientPort = 14617;
const unsigned kNetDefaultServerPort = 14618;
const unsigned kNetDefaultSimpleNetPort = 14620;
const unsigned kMaxTcpPacketSize = 1460; const unsigned kMaxTcpPacketSize = 1460;
//============================================================================ //============================================================================

74
Sources/Plasma/NucleusLib/pnNetBase/pnNbGameKey.hpp

@ -1,74 +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 <http://www.gnu.org/licenses/>.
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==*/
/*************************************************************
*
* This file was auto-generated by plDhKeyGen.exe
*
***/
static const unsigned kDhGValue = 73;
static const byte kDhNData[] = {
0x38, 0xa4, 0xf7, 0x69, 0x43, 0xd7, 0xa6, 0xc7,
0x27, 0x72, 0x3b, 0x12, 0x6a, 0x76, 0x09, 0x5d,
0xaa, 0x9a, 0x38, 0x44, 0xde, 0x84, 0x22, 0xc4,
0xde, 0x3f, 0xfd, 0x50, 0x26, 0xea, 0xbb, 0x20,
0xd6, 0xad, 0x2e, 0xcd, 0xfe, 0xf2, 0x70, 0x1b,
0x19, 0xd1, 0x82, 0x15, 0xd7, 0xcb, 0x33, 0x60,
0x20, 0xbc, 0x43, 0xc9, 0x55, 0x0b, 0xc9, 0x20,
0xd9, 0x24, 0xd2, 0x49, 0xd0, 0x28, 0x4b, 0x90
};
COMPILER_ASSERT(sizeof(kDhNData) == kNetDiffieHellmanKeyBits / 8);
static const byte kDhXData[] = {
0xf9, 0xb2, 0x93, 0xbd, 0x02, 0xbd, 0x72, 0x48,
0xa9, 0x21, 0xbd, 0x09, 0x3e, 0x44, 0x65, 0x3e,
0xc2, 0xfd, 0x5a, 0xf0, 0x99, 0x3b, 0x3f, 0x5c,
0x47, 0x76, 0x5c, 0x1f, 0x84, 0xd8, 0x01, 0x68,
0xdc, 0x5f, 0xb6, 0xba, 0xc8, 0xfd, 0x79, 0x98,
0x62, 0x93, 0x36, 0x7f, 0x14, 0xcf, 0x33, 0x67,
0x84, 0x04, 0xcf, 0xa3, 0x7a, 0x65, 0xe9, 0x68,
0x4f, 0x58, 0x58, 0xb3, 0x8f, 0x3d, 0xdb, 0x3d
};
COMPILER_ASSERT(sizeof(kDhXData) == kNetDiffieHellmanKeyBits / 8);

8
Sources/Plasma/NucleusLib/pnSimpleNet/pnSimpleNet.cpp

@ -488,7 +488,7 @@ bool SimpleNetStartListening (
s_queryAcceptParam = param; s_queryAcceptParam = param;
NetAddress addr; NetAddress addr;
NetAddressFromNode(0, kNetDefaultSimpleNetPort, &addr); NetAddressFromNode(0, GetSimpleNetPort(), &addr);
return (0 != AsyncSocketStartListening(addr, nil)); return (0 != AsyncSocketStartListening(addr, nil));
} }
@ -498,7 +498,7 @@ void SimpleNetStopListening () {
ASSERT(s_running); ASSERT(s_running);
NetAddress addr; NetAddress addr;
NetAddressFromNode(0, kNetDefaultSimpleNetPort, &addr); NetAddressFromNode(0, GetSimpleNetPort(), &addr);
AsyncSocketStopListening(addr, nil); AsyncSocketStopListening(addr, nil);
s_queryAccept = nil; s_queryAccept = nil;
@ -591,7 +591,7 @@ void SimpleNetStartConnecting (
&cancelId, &cancelId,
AsyncLookupCallback, AsyncLookupCallback,
addr, addr,
kNetDefaultSimpleNetPort, GetSimpleNetPort(),
cp cp
); );
break; break;
@ -599,7 +599,7 @@ void SimpleNetStartConnecting (
} }
if (!name[0]) { if (!name[0]) {
NetAddress netAddr; NetAddress netAddr;
NetAddressFromString(&netAddr, addr, kNetDefaultSimpleNetPort); NetAddressFromString(&netAddr, addr, GetSimpleNetPort());
Connect(netAddr, cp); Connect(netAddr, cp);
} }
} }

2
Sources/Plasma/NucleusLib/pnUtils/Private/pnUtBase64.cpp

@ -150,7 +150,7 @@ unsigned Base64Decode (
byte * dstData byte * dstData
) { ) {
ASSERT(srcData); ASSERT(srcData);
ASSERT(dstChars >= Base64DecodeSize(srcChars)); ASSERT(dstChars >= Base64DecodeSize(srcChars, srcData));
ASSERT(dstData); ASSERT(dstData);
REF(dstChars); REF(dstChars);

9
Sources/Plasma/NucleusLib/pnUtils/Private/pnUtBase64.h

@ -62,7 +62,8 @@ const unsigned kBase64EncodeBlock = 4;
const unsigned kBase64EncodeMultiple = 3; const unsigned kBase64EncodeMultiple = 3;
inline unsigned Base64EncodeSize (unsigned srcChars) { inline unsigned Base64EncodeSize (unsigned srcChars) {
return srcChars * kBase64EncodeBlock / kBase64EncodeMultiple + kBase64EncodeBlock; return (srcChars + kBase64EncodeMultiple - 1) / kBase64EncodeMultiple
* kBase64EncodeBlock;
} }
unsigned Base64Encode ( unsigned Base64Encode (
unsigned srcChars, unsigned srcChars,
@ -71,8 +72,10 @@ unsigned Base64Encode (
char * dstData char * dstData
); );
inline unsigned Base64DecodeSize (unsigned srcChars) { inline unsigned Base64DecodeSize (unsigned srcChars, const char srcData[]) {
return srcChars * kBase64EncodeMultiple / kBase64EncodeBlock + kBase64EncodeMultiple; return srcChars * kBase64EncodeMultiple / kBase64EncodeBlock
- ((srcChars >= 1 && srcData[srcChars - 1] == '=') ? 1 : 0)
- ((srcChars >= 2 && srcData[srcChars - 2] == '=') ? 1 : 0);
} }
unsigned Base64Decode ( unsigned Base64Decode (
unsigned srcChars, unsigned srcChars,

13
Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglAuth.cpp

@ -48,9 +48,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "../Pch.h" #include "../Pch.h"
#pragma hdrstop #pragma hdrstop
// This file excluded from pre-compiled header because it is auto-generated by the build server.
#include "pnNetBase/pnNbAuthKey.hpp"
namespace Ngl { namespace Auth { namespace Ngl { namespace Auth {
/***************************************************************************** /*****************************************************************************
* *
@ -5089,9 +5086,9 @@ void AuthInitialize () {
false, false,
s_send, arrsize(s_send), s_send, arrsize(s_send),
s_recv, arrsize(s_recv), s_recv, arrsize(s_recv),
kDhGValue, kAuthDhGValue,
BigNum(sizeof(kDhXData), kDhXData), BigNum(sizeof(kAuthDhXData), kAuthDhXData),
BigNum(sizeof(kDhNData), kDhNData) BigNum(sizeof(kAuthDhNData), kAuthDhNData)
); );
} }
@ -5201,7 +5198,7 @@ void NetCliAuthStartConnect (
&cancelId, &cancelId,
AsyncLookupCallback, AsyncLookupCallback,
authAddrList[i], authAddrList[i],
kNetDefaultClientPort, GetClientPort(),
nil nil
); );
break; break;
@ -5209,7 +5206,7 @@ void NetCliAuthStartConnect (
} }
if (!name[0]) { if (!name[0]) {
NetAddress addr; NetAddress addr;
NetAddressFromString(&addr, authAddrList[i], kNetDefaultClientPort); NetAddressFromString(&addr, authAddrList[i], GetClientPort());
Connect(authAddrList[i], addr); Connect(authAddrList[i], addr);
} }
} }

13
Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglCsr.cpp

@ -48,9 +48,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "../Pch.h" #include "../Pch.h"
#pragma hdrstop #pragma hdrstop
// This file excluded from pre-compiled header because it is auto-generated by the build server.
#include "pnNetBase/pnNbCsrKey.hpp"
namespace Ngl { namespace Csr { namespace Ngl { namespace Csr {
/***************************************************************************** /*****************************************************************************
@ -764,9 +761,9 @@ void CsrInitialize () {
false, false,
s_send, arrsize(s_send), s_send, arrsize(s_send),
s_recv, arrsize(s_recv), s_recv, arrsize(s_recv),
kDhGValue, kCsrDhGValue,
BigNum(sizeof(kDhXData), kDhXData), BigNum(sizeof(kCsrDhXData), kCsrDhXData),
BigNum(sizeof(kDhNData), kDhNData) BigNum(sizeof(kCsrDhNData), kCsrDhNData)
); );
} }
@ -860,7 +857,7 @@ void NetCliCsrStartConnect (
&cancelId, &cancelId,
AsyncLookupCallback, AsyncLookupCallback,
addrList[i], addrList[i],
kNetDefaultClientPort, GetClientPort(),
cp cp
); );
break; break;
@ -868,7 +865,7 @@ void NetCliCsrStartConnect (
} }
if (!name[0]) { if (!name[0]) {
NetAddress addr; NetAddress addr;
NetAddressFromString(&addr, addrList[i], kNetDefaultClientPort); NetAddressFromString(&addr, addrList[i], GetClientPort());
ConnectParam * cp = NEW(ConnectParam); ConnectParam * cp = NEW(ConnectParam);
cp->callback = callback; cp->callback = callback;

8
Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglFile.cpp

@ -1361,7 +1361,7 @@ void NetCliFileStartConnect (
&cancelId, &cancelId,
AsyncLookupCallback, AsyncLookupCallback,
fileAddrList[i], fileAddrList[i],
kNetDefaultClientPort, GetClientPort(),
nil nil
); );
break; break;
@ -1369,7 +1369,7 @@ void NetCliFileStartConnect (
} }
if (!name[0]) { if (!name[0]) {
NetAddress addr; NetAddress addr;
NetAddressFromString(&addr, fileAddrList[i], kNetDefaultClientPort); NetAddressFromString(&addr, fileAddrList[i], GetClientPort());
Connect(fileAddrList[i], addr); Connect(fileAddrList[i], addr);
} }
} }
@ -1399,7 +1399,7 @@ void NetCliFileStartConnectAsServer (
&cancelId, &cancelId,
AsyncLookupCallback, AsyncLookupCallback,
fileAddrList[i], fileAddrList[i],
kNetDefaultClientPort, GetClientPort(),
nil nil
); );
break; break;
@ -1407,7 +1407,7 @@ void NetCliFileStartConnectAsServer (
} }
if (!name[0]) { if (!name[0]) {
NetAddress addr; NetAddress addr;
NetAddressFromString(&addr, fileAddrList[i], kNetDefaultServerPort); NetAddressFromString(&addr, fileAddrList[i], GetServerPort());
Connect(fileAddrList[i], addr); Connect(fileAddrList[i], addr);
} }
} }

9
Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglGame.cpp

@ -48,9 +48,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "../Pch.h" #include "../Pch.h"
#pragma hdrstop #pragma hdrstop
// This file excluded from pre-compiled header because it is auto-generated by the build server.
#include "pnNetBase/pnNbGameKey.hpp"
namespace Ngl { namespace Game { namespace Ngl { namespace Game {
/***************************************************************************** /*****************************************************************************
* *
@ -665,9 +662,9 @@ void GameInitialize () {
false, false,
s_send, arrsize(s_send), s_send, arrsize(s_send),
s_recv, arrsize(s_recv), s_recv, arrsize(s_recv),
kDhGValue, kGameDhGValue,
BigNum(sizeof(kDhXData), kDhXData), BigNum(sizeof(kGameDhXData), kGameDhXData),
BigNum(sizeof(kDhNData), kDhNData) BigNum(sizeof(kGameDhNData), kGameDhNData)
); );
} }

13
Sources/Plasma/PubUtilLib/plNetGameLib/Private/plNglGateKeeper.cpp

@ -48,9 +48,6 @@ You can contact Cyan Worlds, Inc. by email legal@cyan.com
#include "../Pch.h" #include "../Pch.h"
#pragma hdrstop #pragma hdrstop
// This file excluded from pre-compiled header because it is auto-generated by the build server.
#include "pnNetBase/pnNbGateKeeperKey.hpp"
namespace Ngl { namespace GateKeeper { namespace Ngl { namespace GateKeeper {
/***************************************************************************** /*****************************************************************************
@ -1005,9 +1002,9 @@ void GateKeeperInitialize () {
false, false,
s_send, arrsize(s_send), s_send, arrsize(s_send),
s_recv, arrsize(s_recv), s_recv, arrsize(s_recv),
kDhGValue, kGateKeeperDhGValue,
BigNum(sizeof(kDhXData), kDhXData), BigNum(sizeof(kGateKeeperDhXData), kGateKeeperDhXData),
BigNum(sizeof(kDhNData), kDhNData) BigNum(sizeof(kGateKeeperDhNData), kGateKeeperDhNData)
); );
} }
@ -1091,7 +1088,7 @@ void NetCliGateKeeperStartConnect (
&cancelId, &cancelId,
AsyncLookupCallback, AsyncLookupCallback,
gateKeeperAddrList[i], gateKeeperAddrList[i],
kNetDefaultClientPort, GetClientPort(),
nil nil
); );
break; break;
@ -1099,7 +1096,7 @@ void NetCliGateKeeperStartConnect (
} }
if (!name[0]) { if (!name[0]) {
NetAddress addr; NetAddress addr;
NetAddressFromString(&addr, gateKeeperAddrList[i], kNetDefaultClientPort); NetAddressFromString(&addr, gateKeeperAddrList[i], GetClientPort());
Connect(gateKeeperAddrList[i], addr); Connect(gateKeeperAddrList[i], addr);
} }
} }

Loading…
Cancel
Save