diff options
| author | oy <Tom_Adams@web.de> | 2012-04-20 21:39:49 +0200 |
|---|---|---|
| committer | oy <Tom_Adams@web.de> | 2013-02-24 17:32:48 +0100 |
| commit | f1fc3337f5cc5ac3b89da80a1fdff5251f130cb5 (patch) | |
| tree | 58cd41b26fdeacb48dc63b72a09b9fbc7dac7521 /src/engine/shared/network_conn.cpp | |
| parent | 4d36c0f77e03475b4057f2de3383105283653230 (diff) | |
| download | zcatch-f1fc3337f5cc5ac3b89da80a1fdff5251f130cb5.tar.gz zcatch-f1fc3337f5cc5ac3b89da80a1fdff5251f130cb5.zip | |
prevent that the server uses close messages from clients. Closes #950
Diffstat (limited to 'src/engine/shared/network_conn.cpp')
| -rw-r--r-- | src/engine/shared/network_conn.cpp | 30 |
1 files changed, 17 insertions, 13 deletions
diff --git a/src/engine/shared/network_conn.cpp b/src/engine/shared/network_conn.cpp index 6531f5aa..32fa159f 100644 --- a/src/engine/shared/network_conn.cpp +++ b/src/engine/shared/network_conn.cpp @@ -37,12 +37,13 @@ void CNetConnection::SetError(const char *pString) str_copy(m_ErrorString, pString, sizeof(m_ErrorString)); } -void CNetConnection::Init(NETSOCKET Socket) +void CNetConnection::Init(NETSOCKET Socket, bool BlockCloseMsg) { Reset(); ResetStats(); m_Socket = Socket; + m_BlockCloseMsg = BlockCloseMsg; mem_zero(m_ErrorString, sizeof(m_ErrorString)); } @@ -213,21 +214,24 @@ int CNetConnection::Feed(CNetPacketConstruct *pPacket, NETADDR *pAddr) m_State = NET_CONNSTATE_ERROR; m_RemoteClosed = 1; - if(pPacket->m_DataSize) + if(!m_BlockCloseMsg) { - // make sure to sanitize the error string form the other party - char Str[128]; - if(pPacket->m_DataSize < 128) - str_copy(Str, (char *)pPacket->m_aChunkData, pPacket->m_DataSize); + if(pPacket->m_DataSize) + { + // make sure to sanitize the error string form the other party + char Str[128]; + if(pPacket->m_DataSize < 128) + str_copy(Str, (char *)pPacket->m_aChunkData, pPacket->m_DataSize); + else + str_copy(Str, (char *)pPacket->m_aChunkData, sizeof(Str)); + str_sanitize_strong(Str); + + // set the error string + SetError(Str); + } else - str_copy(Str, (char *)pPacket->m_aChunkData, sizeof(Str)); - str_sanitize_strong(Str); - - // set the error string - SetError(Str); + SetError("No reason given"); } - else - SetError("No reason given"); if(g_Config.m_Debug) dbg_msg("conn", "closed reason='%s'", ErrorString()); |