mirror of
https://github.com/ddnet/ddnet.git
synced 2024-11-10 10:08:18 +00:00
Merge #2299
2299: Disable timeout for 0.7 clients r=def- a=Learath2 Turns out there is no way to influence `m_LocalClientID` anymore. Another thing changed for the sake of change. Removing the check whether an `m_LocalClientID` has already been set allows 0.7 clients to reclaim their tees after clientinfo is resent. It should be fairly trivial for custom clients to send an extended message to enable timeout protection. Co-authored-by: Learath <learath2@gmail.com>
This commit is contained in:
commit
5ca6e9ced6
|
@ -3589,6 +3589,8 @@ bool CServer::SetTimedOut(int ClientID, int OrigID)
|
|||
{
|
||||
return false;
|
||||
}
|
||||
m_aClients[ClientID].m_Sixup = m_aClients[OrigID].m_Sixup;
|
||||
|
||||
DelClientCallback(OrigID, "Timeout Protection used", this);
|
||||
m_aClients[ClientID].m_Authed = AUTHED_NO;
|
||||
m_aClients[ClientID].m_Flags = m_aClients[OrigID].m_Flags;
|
||||
|
|
|
@ -234,7 +234,7 @@ public:
|
|||
int SecurityToken() const { return m_SecurityToken; }
|
||||
TStaticRingBuffer<CNetChunkResend, NET_CONN_BUFFERSIZE> *ResendBuffer() { return &m_Buffer; };
|
||||
|
||||
void SetTimedOut(const NETADDR *pAddr, int Sequence, int Ack, SECURITY_TOKEN SecurityToken, TStaticRingBuffer<CNetChunkResend, NET_CONN_BUFFERSIZE> *pResendBuffer);
|
||||
void SetTimedOut(const NETADDR *pAddr, int Sequence, int Ack, SECURITY_TOKEN SecurityToken, TStaticRingBuffer<CNetChunkResend, NET_CONN_BUFFERSIZE> *pResendBuffer, bool Sixup);
|
||||
|
||||
// anti spoof
|
||||
void DirectInit(NETADDR &Addr, SECURITY_TOKEN SecurityToken, SECURITY_TOKEN Token, bool Sixup);
|
||||
|
|
|
@ -472,7 +472,7 @@ int CNetConnection::Update()
|
|||
return 0;
|
||||
}
|
||||
|
||||
void CNetConnection::SetTimedOut(const NETADDR *pAddr, int Sequence, int Ack, SECURITY_TOKEN SecurityToken, TStaticRingBuffer<CNetChunkResend, NET_CONN_BUFFERSIZE> *pResendBuffer)
|
||||
void CNetConnection::SetTimedOut(const NETADDR *pAddr, int Sequence, int Ack, SECURITY_TOKEN SecurityToken, TStaticRingBuffer<CNetChunkResend, NET_CONN_BUFFERSIZE> *pResendBuffer, bool Sixup)
|
||||
{
|
||||
int64 Now = time_get();
|
||||
|
||||
|
@ -487,6 +487,7 @@ void CNetConnection::SetTimedOut(const NETADDR *pAddr, int Sequence, int Ack, SE
|
|||
m_LastRecvTime = Now;
|
||||
m_LastUpdateTime = Now;
|
||||
m_SecurityToken = SecurityToken;
|
||||
m_Sixup = Sixup;
|
||||
|
||||
// copy resend buffer
|
||||
m_Buffer.Init();
|
||||
|
|
|
@ -813,7 +813,7 @@ bool CNetServer::SetTimedOut(int ClientID, int OrigID)
|
|||
if (m_aSlots[ClientID].m_Connection.State() != NET_CONNSTATE_ERROR)
|
||||
return false;
|
||||
|
||||
m_aSlots[ClientID].m_Connection.SetTimedOut(ClientAddr(OrigID), m_aSlots[OrigID].m_Connection.SeqSequence(), m_aSlots[OrigID].m_Connection.AckSequence(), m_aSlots[OrigID].m_Connection.SecurityToken(), m_aSlots[OrigID].m_Connection.ResendBuffer());
|
||||
m_aSlots[ClientID].m_Connection.SetTimedOut(ClientAddr(OrigID), m_aSlots[OrigID].m_Connection.SeqSequence(), m_aSlots[OrigID].m_Connection.AckSequence(), m_aSlots[OrigID].m_Connection.SecurityToken(), m_aSlots[OrigID].m_Connection.ResendBuffer(), m_aSlots[OrigID].m_Connection.m_Sixup);
|
||||
m_aSlots[OrigID].m_Connection.Reset();
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -574,17 +574,28 @@ void CGameContext::ConTimeout(IConsole::IResult *pResult, void *pUserData)
|
|||
|
||||
const char* pTimeout = pResult->NumArguments() > 0 ? pResult->GetString(0) : pPlayer->m_TimeoutCode;
|
||||
|
||||
for(int i = 0; i < pSelf->Server()->MaxClients(); i++)
|
||||
if(!pSelf->Server()->IsSixup(pResult->m_ClientID))
|
||||
{
|
||||
if (i == pResult->m_ClientID) continue;
|
||||
if (!pSelf->m_apPlayers[i]) continue;
|
||||
if (str_comp(pSelf->m_apPlayers[i]->m_TimeoutCode, pTimeout)) continue;
|
||||
if (pSelf->Server()->SetTimedOut(i, pResult->m_ClientID)) {
|
||||
if (pSelf->m_apPlayers[i]->GetCharacter())
|
||||
pSelf->SendTuningParams(i, pSelf->m_apPlayers[i]->GetCharacter()->m_TuneZone);
|
||||
return;
|
||||
for(int i = 0; i < pSelf->Server()->MaxClients(); i++)
|
||||
{
|
||||
if (i == pResult->m_ClientID) continue;
|
||||
if (!pSelf->m_apPlayers[i]) continue;
|
||||
if (str_comp(pSelf->m_apPlayers[i]->m_TimeoutCode, pTimeout)) continue;
|
||||
if (pSelf->Server()->SetTimedOut(i, pResult->m_ClientID))
|
||||
{
|
||||
if (pSelf->m_apPlayers[i]->GetCharacter())
|
||||
pSelf->SendTuningParams(i, pSelf->m_apPlayers[i]->GetCharacter()->m_TuneZone);
|
||||
/*if(pSelf->Server()->IsSixup(i))
|
||||
pSelf->SendClientInfo(i, i);*/
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
pSelf->Console()->Print(IConsole::OUTPUT_LEVEL_STANDARD, "print",
|
||||
"Your timeout code has been set. 0.7 clients can not reclaim their tees on timeout; however, a 0.6 client can claim your tee ");
|
||||
}
|
||||
|
||||
pSelf->Server()->SetTimeoutProtected(pResult->m_ClientID);
|
||||
str_copy(pPlayer->m_TimeoutCode, pResult->GetString(0), sizeof(pPlayer->m_TimeoutCode));
|
||||
|
|
Loading…
Reference in a new issue