summaryrefslogtreecommitdiff
path: root/chat/licq-core/patches/patch-ab
blob: 96c62c06fa20a070b22f5f61ff4d414b8b7de777 (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
$NetBSD: patch-ab,v 1.3 2008/05/11 04:12:34 tonnerre Exp $

--- src/icqd-chat.cpp.orig	2007-09-09 14:05:24.000000000 +0200
+++ src/icqd-chat.cpp
@@ -23,6 +23,7 @@
 // Localization
 #include "gettext.h"
 
+#define MAX_CONNECTS  256
 #define DEBUG_THREADS(x)
 
 
@@ -2383,16 +2384,24 @@ void *ChatManager_tep(void *arg)
         // Connection on the server port ---------------------------------------
         else if (nCurrentSocket == chatman->chatServer.Descriptor())
         {
-          CChatUser *u = new CChatUser;
-          u->m_pClient = new CChatClient;
-
-          chatman->chatServer.RecvConnection(u->sock);
-          chatman->sockman.AddSocket(&u->sock);
-          chatman->sockman.DropSocket(&u->sock);
-
-          u->state = CHAT_STATE_HANDSHAKE;
-          chatman->chatUsers.push_back(u);
-          gLog.Info(tr("%sChat: Received connection.\n"), L_TCPxSTR);
+	  if (chatman->sockman.Num() >= MAX_CONNECTS)
+	  {
+	    // Too many sockets, drop this one
+	    gLog.Warn(tr("%sToo many connected clients, rejecting new connection.\n"), L_WARNxSTR);
+	  }
+	  else
+	  {
+            CChatUser *u = new CChatUser;
+            u->m_pClient = new CChatClient;
+
+            chatman->chatServer.RecvConnection(u->sock);
+            chatman->sockman.AddSocket(&u->sock);
+            chatman->sockman.DropSocket(&u->sock);
+
+            u->state = CHAT_STATE_HANDSHAKE;
+            chatman->chatUsers.push_back(u);
+            gLog.Info(tr("%sChat: Received connection.\n"), L_TCPxSTR);
+	  }
         }
 
         // Message from connected socket----------------------------------------