(svn r9038) -Fix [FS#115]: inactive connections are not automatically kicked, i.e. people who only open a telnet (or similar) connection to a server.

pull/155/head
rubidium 18 years ago
parent 6b329f2728
commit 4b75a29766

@ -544,6 +544,7 @@ DEF_CONSOLE_CMD(ConStatus)
{ {
static const char* const stat_str[] = { static const char* const stat_str[] = {
"inactive", "inactive",
"authorizing",
"authorized", "authorized",
"waiting", "waiting",
"loading map", "loading map",

@ -73,6 +73,7 @@ typedef struct CommandPacket {
/** Status of a client */ /** Status of a client */
typedef enum { typedef enum {
STATUS_INACTIVE, ///< The client is not connected nor active STATUS_INACTIVE, ///< The client is not connected nor active
STATUS_AUTHORIZING,///< The client is authorizing
STATUS_AUTH, ///< The client is authorized STATUS_AUTH, ///< The client is authorized
STATUS_MAP_WAIT, ///< The client is waiting as someone else is downloading the map STATUS_MAP_WAIT, ///< The client is waiting as someone else is downloading the map
STATUS_MAP, ///< The client is downloading the map STATUS_MAP, ///< The client is downloading the map

@ -214,6 +214,11 @@ DEF_SERVER_SEND_COMMAND_PARAM(PACKET_SERVER_NEED_PASSWORD)(NetworkTCPSocketHandl
// uint8: Type of password // uint8: Type of password
// //
/* Invalid packet when status is AUTH or higher */
if (cs->status >= STATUS_AUTH) return;
cs->status = STATUS_AUTHORIZING;
Packet *p = NetworkSend_Init(PACKET_SERVER_NEED_PASSWORD); Packet *p = NetworkSend_Init(PACKET_SERVER_NEED_PASSWORD);
p->Send_uint8(type); p->Send_uint8(type);
cs->Send_Packet(p); cs->Send_Packet(p);
@ -1533,6 +1538,12 @@ void NetworkServer_Tick(bool send_frame)
IConsolePrintF(_icolour_err,"Client #%d is dropped because it took longer than %d ticks for him to join", cs->index, _network_max_join_time); IConsolePrintF(_icolour_err,"Client #%d is dropped because it took longer than %d ticks for him to join", cs->index, _network_max_join_time);
NetworkCloseClient(cs); NetworkCloseClient(cs);
} }
} else if (cs->status == STATUS_INACTIVE) {
int lag = NetworkCalculateLag(cs);
if (lag > 4 * DAY_TICKS) {
IConsolePrintF(_icolour_err,"Client #%d is dropped because it took longer than %d ticks to start the joining process", cs->index, 4 * DAY_TICKS);
NetworkCloseClient(cs);
}
} }
if (cs->status >= STATUS_PRE_ACTIVE) { if (cs->status >= STATUS_PRE_ACTIVE) {

Loading…
Cancel
Save