about summary refs log tree commit diff
path: root/src/engine/shared/network_conn.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/engine/shared/network_conn.cpp')
-rw-r--r--src/engine/shared/network_conn.cpp30
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());