Networking Overhaul: Modern packets, buffers, handshake, dispatch & security hardening

See Readme
This commit is contained in:
rtw1x1
2026-02-08 07:36:07 +00:00
parent 058589ca1b
commit cda1c73bd3
72 changed files with 3612 additions and 6155 deletions

View File

@@ -6,64 +6,7 @@
// Login ---------------------------------------------------------------------------
void CPythonNetworkStream::LoginPhase()
{
TPacketHeader header;
if (!CheckPacket(&header))
return;
switch (header)
{
case HEADER_GC_PHASE:
if (RecvPhasePacket())
return;
break;
case HEADER_GC_LOGIN_SUCCESS3:
if (__RecvLoginSuccessPacket3())
return;
break;
case HEADER_GC_LOGIN_SUCCESS4:
if (__RecvLoginSuccessPacket4())
return;
break;
case HEADER_GC_LOGIN_FAILURE:
if (__RecvLoginFailurePacket())
return;
break;
case HEADER_GC_EMPIRE:
if (__RecvEmpirePacket())
return;
break;
case HEADER_GC_LOGIN_KEY:
if (__RecvLoginKeyPacket())
return;
break;
case HEADER_GC_PING:
if (RecvPingPacket())
return;
break;
case HEADER_GC_KEY_CHALLENGE:
RecvKeyChallenge();
return;
break;
case HEADER_GC_KEY_COMPLETE:
RecvKeyComplete();
return;
break;
default:
if (RecvDefaultPacket(header))
return;
break;
}
RecvErrorPacket(header);
DispatchPacket(m_loginHandlers);
}
void CPythonNetworkStream::SetLoginPhase()
@@ -71,6 +14,7 @@ void CPythonNetworkStream::SetLoginPhase()
if ("Login" != m_strPhase)
m_phaseLeaveFunc.Run();
Tracef("[PHASE] Entering phase: Login\n");
Tracen("");
Tracen("## Network - Login Phase ##");
Tracen("");
@@ -84,7 +28,6 @@ void CPythonNetworkStream::SetLoginPhase()
if (0 == m_dwLoginKey)
{
TraceError("SetLoginPhase: no login key - cannot login without auth server");
ClearLoginInfo();
return;
}
@@ -166,10 +109,7 @@ bool CPythonNetworkStream::__RecvLoginSuccessPacket4()
m_kMarkAuth.m_dwHandle=kPacketLoginSuccess.handle;
m_kMarkAuth.m_dwRandomKey=kPacketLoginSuccess.random_key;
if (__DirectEnterMode_IsSet())
{
}
else
if (!__DirectEnterMode_IsSet())
{
PyCallClassMemberFunc(m_apoPhaseWnd[PHASE_WINDOW_SELECT], "Refresh", Py_BuildValue("()"));
}
@@ -205,7 +145,8 @@ bool CPythonNetworkStream::__RecvLoginFailurePacket()
bool CPythonNetworkStream::SendLoginPacketNew(const char * c_szName, const char * c_szPassword)
{
TPacketCGLogin2 LoginPacket;
LoginPacket.header = HEADER_CG_LOGIN2;
LoginPacket.header = CG::LOGIN2;
LoginPacket.length = sizeof(LoginPacket);
LoginPacket.login_key = m_dwLoginKey;
strncpy(LoginPacket.name, c_szName, sizeof(LoginPacket.name)-1);
@@ -217,12 +158,6 @@ bool CPythonNetworkStream::SendLoginPacketNew(const char * c_szName, const char
return false;
}
if (!SendSequence())
{
Tracen("SendLogin Error");
return false;
}
__SendInternalBuffer();
return true;