From 098a79b2f417366296b3f3bff310cc64fbf3f3d7 Mon Sep 17 00:00:00 2001 From: pandaemonium <pandae@pvpgn.org> Date: Sat, 11 Nov 2006 20:30:04 +0000 Subject: [PATCH] commited Patch #1595 from JEBs with additional comments to bnetd.conf --- pvpgn/conf/bnetd.conf.in | 1 + pvpgn/conf/bnetd.conf.win32 | 1 + pvpgn/src/bnetd/handle_init.cpp | 8 ++++++++ pvpgn/src/bnetd/server.cpp | 8 -------- 4 files changed, 10 insertions(+), 8 deletions(-) diff --git a/pvpgn/conf/bnetd.conf.in b/pvpgn/conf/bnetd.conf.in index 3c44865..cfcc071 100644 --- a/pvpgn/conf/bnetd.conf.in +++ b/pvpgn/conf/bnetd.conf.in @@ -463,6 +463,7 @@ use_keepalive = false # Limit maximum number of connections per IP (0 = unlimited) # this feature is new, so no recommended value so far +# (d2cs connections are exempted from this limitation) max_conns_per_IP = 0 # This is a comma delimited list of hostnames that the server should diff --git a/pvpgn/conf/bnetd.conf.win32 b/pvpgn/conf/bnetd.conf.win32 index c9725c3..7ce6ac3 100644 --- a/pvpgn/conf/bnetd.conf.win32 +++ b/pvpgn/conf/bnetd.conf.win32 @@ -441,6 +441,7 @@ use_keepalive = false # Limit maximum number of connections per IP (0 = unlimited) # this feature is new, so no recommended value so far +# (d2cs connections are exempted from this limitation) max_conns_per_IP = 0 # This is a comma delimited list of hostnames that the server should diff --git a/pvpgn/src/bnetd/handle_init.cpp b/pvpgn/src/bnetd/handle_init.cpp index 7d80115..b57851e 100644 --- a/pvpgn/src/bnetd/handle_init.cpp +++ b/pvpgn/src/bnetd/handle_init.cpp @@ -24,6 +24,7 @@ #include "common/bn_type.h" #include "common/addr.h" +#include "prefs.h" #include "connection.h" #include "realm.h" #include "handle_d2cs.h" @@ -53,6 +54,13 @@ extern int handle_init_packet(t_connection * c, t_packet const * const packet) eventlog(eventlog_level_error,__FUNCTION__,"[%d] got bad packet (class %d)",conn_get_socket(c),(int)packet_get_class(packet)); return -1; } + if ((prefs_get_max_conns_per_IP()!=0) && + bn_byte_get(packet->u.client_initconn.cclass)!=CLIENT_INITCONN_CLASS_D2CS_BNETD && + (connlist_count_connections(conn_get_addr(c)) > prefs_get_max_conns_per_IP())) + { + eventlog(eventlog_level_error,__FUNCTION__,"[%d] too many connections from address %s (closing connection)",conn_get_socket(c),addr_num_to_addr_str(conn_get_addr(c),conn_get_port(c))); + return -1; + } switch (packet_get_type(packet)) { diff --git a/pvpgn/src/bnetd/server.cpp b/pvpgn/src/bnetd/server.cpp index 5499206..da069d6 100644 --- a/pvpgn/src/bnetd/server.cpp +++ b/pvpgn/src/bnetd/server.cpp @@ -271,14 +271,6 @@ static int sd_accept(t_addr const * curr_laddr, t_laddr_info const * laddr_info, return -1; } - if ((prefs_get_max_conns_per_IP()!=0) && - (connlist_count_connections(ntohl(caddr.sin_addr.s_addr)) > prefs_get_max_conns_per_IP())) - { - eventlog(eventlog_level_error,__FUNCTION__,"[%d] too many connections from address %s (closing connection)",csocket,inet_ntoa(caddr.sin_addr)); - psock_close(csocket); - return -1; - } - eventlog(eventlog_level_info,__FUNCTION__,"[%d] accepted connection from %s on %s",csocket,addr_num_to_addr_str(ntohl(caddr.sin_addr.s_addr),ntohs(caddr.sin_port)),tempa); if (prefs_get_use_keepalive())