mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-19 22:48:18 +00:00
some token polishing
This commit is contained in:
parent
3010a3ad54
commit
7b51a1f03e
|
@ -182,9 +182,9 @@ public:
|
||||||
|
|
||||||
void GenerateSeed();
|
void GenerateSeed();
|
||||||
|
|
||||||
int ProcessMessage(const NETADDR *pAddr, const CNetPacketConstruct *pPacket, bool Notify);
|
int ProcessMessage(const NETADDR *pAddr, const CNetPacketConstruct *pPacket);
|
||||||
|
|
||||||
bool CheckToken(const NETADDR *pAddr, TOKEN Token, TOKEN ResponseToken, bool Notify, bool *BroadcastResponse);
|
bool CheckToken(const NETADDR *pAddr, TOKEN Token, TOKEN ResponseToken, bool *BroadcastResponse);
|
||||||
TOKEN GenerateToken(const NETADDR *pAddr) const;
|
TOKEN GenerateToken(const NETADDR *pAddr) const;
|
||||||
static TOKEN GenerateToken(const NETADDR *pAddr, int64 Seed);
|
static TOKEN GenerateToken(const NETADDR *pAddr, int64 Seed);
|
||||||
|
|
||||||
|
|
|
@ -90,7 +90,7 @@ int CNetClient::Recv(CNetChunk *pChunk, TOKEN *pResponseToken)
|
||||||
}
|
}
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
int Accept = m_TokenManager.ProcessMessage(&Addr, &m_RecvUnpacker.m_Data, true);
|
int Accept = m_TokenManager.ProcessMessage(&Addr, &m_RecvUnpacker.m_Data);
|
||||||
if(!Accept)
|
if(!Accept)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
|
|
@ -159,7 +159,7 @@ int CNetServer::Recv(CNetChunk *pChunk, TOKEN *pResponseToken)
|
||||||
if(Found)
|
if(Found)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
int Accept = m_TokenManager.ProcessMessage(&Addr, &m_RecvUnpacker.m_Data, true);
|
int Accept = m_TokenManager.ProcessMessage(&Addr, &m_RecvUnpacker.m_Data);
|
||||||
if(Accept <= 0)
|
if(Accept <= 0)
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
@ -199,7 +199,6 @@ int CNetServer::Recv(CNetChunk *pChunk, TOKEN *pResponseToken)
|
||||||
Found = true;
|
Found = true;
|
||||||
m_aSlots[i].m_Connection.SetToken(m_RecvUnpacker.m_Data.m_Token);
|
m_aSlots[i].m_Connection.SetToken(m_RecvUnpacker.m_Data.m_Token);
|
||||||
m_aSlots[i].m_Connection.Feed(&m_RecvUnpacker.m_Data, &Addr);
|
m_aSlots[i].m_Connection.Feed(&m_RecvUnpacker.m_Data, &Addr);
|
||||||
m_aSlots[i].m_Connection.SetToken(m_RecvUnpacker.m_Data.m_Token); // HACK!
|
|
||||||
if(m_pfnNewClient)
|
if(m_pfnNewClient)
|
||||||
m_pfnNewClient(i, m_UserPtr);
|
m_pfnNewClient(i, m_UserPtr);
|
||||||
break;
|
break;
|
||||||
|
@ -212,8 +211,6 @@ int CNetServer::Recv(CNetChunk *pChunk, TOKEN *pResponseToken)
|
||||||
CNetBase::SendControlMsg(m_Socket, &Addr, m_RecvUnpacker.m_Data.m_ResponseToken, 0, NET_CTRLMSG_CLOSE, FullMsg, sizeof(FullMsg));
|
CNetBase::SendControlMsg(m_Socket, &Addr, m_RecvUnpacker.m_Data.m_ResponseToken, 0, NET_CTRLMSG_CLOSE, FullMsg, sizeof(FullMsg));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
else if(m_RecvUnpacker.m_Data.m_aChunkData[0] == NET_CTRLMSG_TOKEN)
|
|
||||||
m_TokenCache.AddToken(&Addr, m_RecvUnpacker.m_Data.m_ResponseToken, false);
|
|
||||||
}
|
}
|
||||||
else if(m_RecvUnpacker.m_Data.m_Flags&NET_PACKETFLAG_CONNLESS)
|
else if(m_RecvUnpacker.m_Data.m_Flags&NET_PACKETFLAG_CONNLESS)
|
||||||
{
|
{
|
||||||
|
|
|
@ -35,11 +35,11 @@ void CNetTokenManager::Update()
|
||||||
GenerateSeed();
|
GenerateSeed();
|
||||||
}
|
}
|
||||||
|
|
||||||
int CNetTokenManager::ProcessMessage(const NETADDR *pAddr, const CNetPacketConstruct *pPacket, bool Notify)
|
int CNetTokenManager::ProcessMessage(const NETADDR *pAddr, const CNetPacketConstruct *pPacket)
|
||||||
{
|
{
|
||||||
bool BroadcastResponse = false;
|
bool BroadcastResponse = false;
|
||||||
if(pPacket->m_Token != NET_TOKEN_NONE
|
if(pPacket->m_Token != NET_TOKEN_NONE
|
||||||
&& !CheckToken(pAddr, pPacket->m_Token, pPacket->m_ResponseToken, Notify, &BroadcastResponse))
|
&& !CheckToken(pAddr, pPacket->m_Token, pPacket->m_ResponseToken, &BroadcastResponse))
|
||||||
return 0; // wrong token, silent ignore
|
return 0; // wrong token, silent ignore
|
||||||
|
|
||||||
bool Verified = pPacket->m_Token != NET_TOKEN_NONE;
|
bool Verified = pPacket->m_Token != NET_TOKEN_NONE;
|
||||||
|
@ -113,7 +113,7 @@ TOKEN CNetTokenManager::GenerateToken(const NETADDR *pAddr, int64 Seed)
|
||||||
return Result;
|
return Result;
|
||||||
}
|
}
|
||||||
|
|
||||||
bool CNetTokenManager::CheckToken(const NETADDR *pAddr, TOKEN Token, TOKEN ResponseToken, bool Notify, bool *BroadcastResponse)
|
bool CNetTokenManager::CheckToken(const NETADDR *pAddr, TOKEN Token, TOKEN ResponseToken, bool *BroadcastResponse)
|
||||||
{
|
{
|
||||||
TOKEN CurrentToken = GenerateToken(pAddr, m_Seed);
|
TOKEN CurrentToken = GenerateToken(pAddr, m_Seed);
|
||||||
if(CurrentToken == Token)
|
if(CurrentToken == Token)
|
||||||
|
@ -121,10 +121,7 @@ bool CNetTokenManager::CheckToken(const NETADDR *pAddr, TOKEN Token, TOKEN Respo
|
||||||
|
|
||||||
if(GenerateToken(pAddr, m_PrevSeed) == Token)
|
if(GenerateToken(pAddr, m_PrevSeed) == Token)
|
||||||
{
|
{
|
||||||
if(Notify)
|
// no need to notify the peer, just a one time thing
|
||||||
CNetBase::SendControlMsgWithToken(m_Socket, (NETADDR *)pAddr,
|
|
||||||
ResponseToken, 0, NET_CTRLMSG_TOKEN, CurrentToken);
|
|
||||||
// notify the peer about the new token
|
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
else if(Token == m_GlobalToken)
|
else if(Token == m_GlobalToken)
|
||||||
|
|
Loading…
Reference in a new issue