Skip to content

Commit 28c93dd

Browse files
committed
- Cleanup of network transport and header code
1 parent 310767f commit 28c93dd

3 files changed

Lines changed: 207 additions & 200 deletions

File tree

GeneralsMD/Code/GameEngine/Include/GameNetwork/GeneralsOnline/NGMP_include.h

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,12 @@ enum class ELogVerbosity
77
LOG_RELEASE = 1
88
};
99

10+
enum class ENetworkChannel : BYTE
11+
{
12+
NETWORK_CHANNEL_GAME = 0,
13+
NETWORK_CHANNEL_AC = 1
14+
};
15+
1016
#define CHECK_MAIN_THREAD assert(std::this_thread::get_id() == NGMP_OnlineServicesManager::g_MainThreadID);
1117
#define CHECK_WORKER_THREAD assert(std::this_thread::get_id() != NGMP_OnlineServicesManager::g_MainThreadID);
1218

GeneralsMD/Code/GameEngine/Source/GameNetwork/GeneralsOnline/NetworkMesh.cpp

Lines changed: 18 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -1065,30 +1065,26 @@ void PlayerConnection::LiteUpdateForAC()
10651065
memcpy(vecData.data(), msg->GetData(), numBytes);
10661066

10671067
// Check minimum packet size for AC header
1068-
if (numBytes >= 3)
1068+
if (numBytes >= sizeof(ENetworkChannel))
10691069
{
1070-
BYTE b1 = (BYTE)vecData[0];
1071-
BYTE b2 = (BYTE)vecData[1];
1072-
BYTE b3 = (BYTE)vecData[2];
1073-
if (b1 == 9
1074-
&& b2 == 1
1075-
&& b3 == 2)
1070+
ENetworkChannel netChannel = (ENetworkChannel)vecData[0];
1071+
if (netChannel == ENetworkChannel::NETWORK_CHANNEL_AC)
10761072
{
10771073
NetworkLog(ELogVerbosity::LOG_RELEASE, "[AC PACKET] Received AC message of size %u from user %lld", numBytes, static_cast<long long>(m_userID));
10781074

10791075

10801076
// remove header
10811077
// TODO_AC: Optimize this
10821078
std::vector<byte> vecDataAC;
1083-
vecDataAC.resize(numBytes - 3);
1084-
memcpy(vecDataAC.data(), (char*)msg->GetData() + 3, numBytes - 3);
1079+
vecDataAC.resize(numBytes - sizeof(ENetworkChannel));
1080+
memcpy(vecDataAC.data(), (char*)msg->GetData() + sizeof(ENetworkChannel), numBytes - sizeof(ENetworkChannel));
10851081

1086-
AnticheatPlugInterface::AC_NetworkMessageArrived(m_userID, vecDataAC.data(), numBytes - 3);
1082+
AnticheatPlugInterface::AC_NetworkMessageArrived(m_userID, vecDataAC.data(), numBytes - sizeof(ENetworkChannel));
10871083
msg->Release();
10881084
continue;
10891085
}
10901086
}
1091-
else if (numBytes > 0 && numBytes < 3)
1087+
else if (numBytes != -1 && numBytes < sizeof(ENetworkChannel))
10921088
{
10931089
// Malformed AC packet - too small for header
10941090
NetworkLog(ELogVerbosity::LOG_RELEASE, "[AC PACKET] Dropping malformed AC packet - size %u is less than header size 3 from user %lld", numBytes, static_cast<long long>(m_userID));
@@ -1168,9 +1164,15 @@ int PlayerConnection::SendGamePacket(void* pBuffer, uint32_t totalDataSize)
11681164
}
11691165
}
11701166

1167+
ENetworkChannel netChannel = ENetworkChannel::NETWORK_CHANNEL_GAME;
1168+
std::vector<BYTE> vecData;
1169+
vecData.resize(totalDataSize + sizeof(ENetworkChannel));
1170+
memcpy(vecData.data() + sizeof(ENetworkChannel), pBuffer, totalDataSize);
1171+
vecData[0] = (BYTE)netChannel;
1172+
11711173
NetworkLog(ELogVerbosity::LOG_DEBUG, "[GAME PACKET] Sending msg of size %ld to user %lld\n", totalDataSize, m_userID);
11721174
EResult r = SteamNetworkingSockets()->SendMessageToConnection(
1173-
m_hSteamConnection, pBuffer, (int)totalDataSize, sendFlags, nullptr);
1175+
m_hSteamConnection, vecData.data(), vecData.size(), sendFlags, nullptr);
11741176

11751177
if (r != k_EResultOK)
11761178
{
@@ -1195,13 +1197,11 @@ void PlayerConnection::SendACPacket(const void* pData, uint32_t dataLen)
11951197
return;
11961198
}
11971199

1200+
ENetworkChannel netChannel = ENetworkChannel::NETWORK_CHANNEL_AC;
11981201
std::vector<BYTE> vecData;
1199-
vecData.resize(dataLen + 3);
1200-
memcpy(vecData.data() + 3, pData, dataLen);
1201-
1202-
vecData[0] = 9;
1203-
vecData[1] = 1;
1204-
vecData[2] = 2;
1202+
vecData.resize(dataLen + sizeof(ENetworkChannel));
1203+
memcpy(vecData.data() + sizeof(ENetworkChannel), pData, dataLen);
1204+
vecData[0] = (BYTE)netChannel;
12051205

12061206
NetworkLog(ELogVerbosity::LOG_RELEASE, "[AC PACKET] Sending AC msg of size %ld to user %ld\n", dataLen, m_userID);
12071207
EResult r = SteamNetworkingSockets()->SendMessageToConnection(m_hSteamConnection, vecData.data(), vecData.size(), k_nSteamNetworkingSend_Reliable, nullptr);

0 commit comments

Comments
 (0)