Added new keys to server config;

'max_messages', 'messages_time_period', and 'connections_allowed'.
This commit is contained in:
Dominic Bolin 2006-02-15 16:38:49 +00:00
parent f15a9ab3c2
commit 0a646f9de7
3 changed files with 14 additions and 12 deletions

View file

@ -15,7 +15,7 @@
#include "player.hpp"
player::player(const std::string& n, config& cfg) : name_(n), cfg_(cfg), flood_start_(0), messages_since_flood_start_(0)
player::player(const std::string& n, config& cfg,size_t max_messages,size_t time_period) : name_(n), cfg_(cfg), flood_start_(0), messages_since_flood_start_(0), MaxMessages(max_messages), TimePeriod(time_period)
{
cfg_["name"] = n;
mark_available(true,"");
@ -37,12 +37,6 @@ config* player::config_address()
return &cfg_;
}
namespace
{
const size_t MaxMessages = 4;
const size_t TimePeriod = 10;
}
bool player::silenced() const
{

View file

@ -23,7 +23,7 @@
class player
{
public:
player(const std::string& n, config& cfg);
player(const std::string& n, config& cfg,size_t max_messages=4,size_t time_period=10);
void mark_available(bool val,std::string location);
@ -40,6 +40,8 @@ private:
time_t flood_start_;
int messages_since_flood_start_;
size_t MaxMessages;
size_t TimePeriod;
};
#endif

View file

@ -127,7 +127,11 @@ private:
metrics metrics_;
const config& cfg_;
size_t default_max_messages_;
size_t default_time_period_;
size_t concurrent_connections_;
std::set<std::string> accepted_versions_;
std::map<std::string,config> redirected_versions_;
std::map<std::string,config> proxy_versions_;
@ -153,6 +157,9 @@ server::server(int port, input_stream& input, const config& cfg, size_t nthreads
login_response_.add_child("mustlogin");
disallowed_names_ = utils::split(cfg_["disallow_names"]);
default_max_messages_ = lexical_cast_default<int>(cfg_["max_messages"]);
default_time_period_ = lexical_cast_default<int>(cfg_["messages_time_period"]);
concurrent_connections_ = lexical_cast_default<int>(cfg_["connections_allowed"]);
const std::string& versions = cfg_["versions_accepted"];
if(versions.empty() == false) {
@ -185,7 +192,6 @@ server::server(int port, input_stream& input, const config& cfg, size_t nthreads
bool server::ip_exceeds_connection_limit(const std::string& ip)
{
const size_t MaxConnections = 5;
size_t connections = 0;
for(player_map::const_iterator i = players_.begin(); i != players_.end(); ++i) {
if(network::ip_address(i->first) == ip) {
@ -193,7 +199,7 @@ bool server::ip_exceeds_connection_limit(const std::string& ip)
}
}
return connections > MaxConnections;
return connections > concurrent_connections_;
}
bool server::is_ip_banned(const std::string& ip)
@ -580,7 +586,7 @@ void server::process_login(const network::connection sock, const config& data, c
config* const player_cfg = &initial_response_.add_child("user");
const player new_player(username,*player_cfg);
const player new_player(username,*player_cfg,default_max_messages_,default_time_period_);
players_.insert(std::pair<network::connection,player>(sock,new_player));