diff options
| author | oy <Tom_Adams@web.de> | 2015-03-19 09:57:47 +0100 |
|---|---|---|
| committer | Learath <learath2@gmail.com> | 2018-08-20 15:27:59 +0300 |
| commit | 3f3abebebf20e8901376b929e2afcc6bdb404a3b (patch) | |
| tree | 6e8f5c8c46f73487d62fa3e12ff89e969d0ea8e8 /src/engine/shared/network_conn.cpp | |
| parent | fc6d8b4d154049e6e3d6df9039669580f8ff747c (diff) | |
| download | zcatch-3f3abebebf20e8901376b929e2afcc6bdb404a3b.tar.gz zcatch-3f3abebebf20e8901376b929e2afcc6bdb404a3b.zip | |
force vital check on essential cl/srv messages and added additional sequence checking
Diffstat (limited to 'src/engine/shared/network_conn.cpp')
| -rw-r--r-- | src/engine/shared/network_conn.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/src/engine/shared/network_conn.cpp b/src/engine/shared/network_conn.cpp index cd2df048..7d76d585 100644 --- a/src/engine/shared/network_conn.cpp +++ b/src/engine/shared/network_conn.cpp @@ -13,6 +13,7 @@ void CNetConnection::Reset() { m_Sequence = 0; m_Ack = 0; + m_PeerAck = 0; m_RemoteClosed = 0; m_State = NET_CONNSTATE_OFFLINE; @@ -196,6 +197,19 @@ void CNetConnection::Disconnect(const char *pReason) int CNetConnection::Feed(CNetPacketConstruct *pPacket, NETADDR *pAddr) { + // check if actual ack value is valid(own sequence..latest peer ack) + if(m_Sequence >= m_PeerAck) + { + if(pPacket->m_Ack < m_PeerAck || pPacket->m_Ack > m_Sequence) + return 0; + } + else + { + if(pPacket->m_Ack < m_PeerAck && pPacket->m_Ack > m_Sequence) + return 0; + } + m_PeerAck = pPacket->m_Ack; + int64 Now = time_get(); // check if resend is requested |