26 #include <boost/shared_array.hpp> 28 #include <boost/asio/signal_set.hpp> 29 #include <boost/asio/steady_timer.hpp> 37 server(
int port,
bool keep_alive,
const std::string& config_file, std::size_t, std::size_t);
46 void handle_login(
socket_ptr socket, std::shared_ptr<simple_wml::document> doc, std::string version, std::string source);
48 bool authenticate(
socket_ptr socket,
const std::string& username,
const std::string&
password,
const std::string& version,
const std::string& source,
bool name_taken,
bool& registered);
50 const std::string& user,
const std::string& version,
const std::string& source,
const char* error_code =
"",
bool force_confirmation =
false);
93 login_log(std::string _ip,
int _attempts, std::time_t _first_attempt) :
94 ip(_ip), attempts(_attempts), first_attempt(_first_attempt) {}
109 std::map<socket_ptr::element_type*, std::string>
seeds_;
112 std::deque<std::shared_ptr<game>>
games() {
113 std::deque<std::shared_ptr<game>> result;
114 for(
const auto& iter : player_connections_.get<
game_t>())
115 if(result.empty() || iter.get_game() != result.back())
116 result.push_back(iter.get_game());
117 if(!result.empty() && result.front() == 0)
175 void dump_stats(
const boost::system::error_code& ec);
180 void delete_game(
int,
const std::string& reason=
"");
192 typedef std::function<void(const std::string&, const std::string&, std::string&, std::ostringstream *)>
cmd_handler;
195 void shut_down_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
196 void restart_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
197 void sample_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
198 void help_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
199 void stats_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
200 void metrics_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
201 void requests_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
202 void games_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
203 void wml_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
204 void netstats_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
205 void adminmsg_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
206 void pm_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
207 void version_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
208 void msg_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
209 void lobbymsg_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
210 void status_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
211 void clones_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
212 void bans_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
213 void ban_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
214 void unban_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
215 void ungban_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
216 void kick_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
217 void kickban_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
218 void gban_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
219 void motd_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
220 void searchlog_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
221 void dul_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
222 void stopgame(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
void handle_nickserv(socket_ptr socket, simple_wml::node &nickserv)
void handle_whisper(socket_ptr socket, simple_wml::node &whisper)
void shut_down_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
simple_wml::document games_and_users_list_
std::deque< login_log >::size_type failed_login_buffer_size_
void handle_version(socket_ptr socket)
void status_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
std::string join(const T &v, const std::string &s=",")
Generates a new string joining container items in a list.
void games_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
static l_noret error(LoadState *S, const char *why)
std::function< void(const std::string &, const std::string &, std::string &, std::ostringstream *)> cmd_handler
void kickban_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
void handle_query(socket_ptr socket, simple_wml::node &query)
void start_lan_server_timer()
std::unique_ptr< user_handler > user_handler_
bool accepting_connections() const
bool is_login_allowed(socket_ptr socket, const simple_wml::node *const login, const std::string &version, const std::string &source)
void help_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
void wml_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
void login(socket_ptr socket, std::string version, std::string source)
void stats_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
std::deque< std::shared_ptr< game > > games()
login_log(std::string _ip, int _attempts, std::time_t _first_attempt)
void handle_read_from_fifo(const boost::system::error_code &error, std::size_t bytes_transferred)
void update_game_in_lobby(const wesnothd::game &g, const socket_ptr &exclude=socket_ptr())
static void msg(const char *act, debug_info &i, const char *to="", const char *result="")
std::size_t default_time_period_
void requests_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
std::vector< std::string > accepted_versions_
std::size_t default_max_messages_
void send_server_message_to_lobby(const std::string &message, socket_ptr exclude=socket_ptr()) const
void ban_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
Definitions for the interface to Wesnoth Markup Language (WML).
void handle_sighup(const boost::system::error_code &error, int signal_number)
void handle_read_from_player(socket_ptr socket, std::shared_ptr< simple_wml::document > doc)
void handle_create_game(socket_ptr socket, simple_wml::node &create_game)
bool deny_unregistered_login_
void handle_graceful_timeout(const boost::system::error_code &error)
void gban_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
bool operator==(const connection_log &c) const
std::string recommended_version_
bool player_is_in_game(socket_ptr socket) const
simple_wml::document login_response_
bool allow_remote_shutdown_
std::map< std::string, config > proxy_versions_
void msg_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
void add_player(socket_ptr socket, const wesnothd::player &)
std::map< socket_ptr::element_type *, std::string > seeds_
void remove_player(socket_ptr socket)
void handle_lan_server_shutdown(const boost::system::error_code &error)
std::string restart_command
void handle_player_in_lobby(socket_ptr socket, std::shared_ptr< simple_wml::document > doc)
void clones_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
bool ip_exceeds_connection_limit(const std::string &ip) const
std::string input_path_
server socket/fifo.
boost::asio::deadline_timer timer_
void motd_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
std::vector< std::string > tor_ip_list_
void bans_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
void searchlog_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
simple_wml::document version_query_response_
std::string replay_save_path_
void kick_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
void send_to_lobby(simple_wml::document &data, socket_ptr exclude=socket_ptr()) const
void send_to_player(socket_ptr socket, simple_wml::document &doc)
void netstats_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
boost::asio::steady_timer dump_stats_timer_
void cleanup_game(game *)
connection_log(std::string _nick, std::string _ip, std::time_t _log_off)
void sample_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
bool authenticate(socket_ptr socket, const std::string &username, const std::string &password, const std::string &version, const std::string &source, bool name_taken, bool ®istered)
boost::asio::steady_timer lan_server_timer_
void send_server_message_to_all(const std::string &message, socket_ptr exclude=socket_ptr()) const
void read_from_player(socket_ptr socket)
std::size_t concurrent_connections_
void unban_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
const std::string config_file_
void delete_game(int, const std::string &reason="")
std::time_t failed_login_ban_
std::string password(const std::string &server, const std::string &login)
std::string admin_passwd_
wesnothd::ban_manager ban_manager_
std::deque< login_log > failed_logins_
void adminmsg_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
void stopgame(const std::string &, const std::string &, std::string &, std::ostringstream *)
std::time_t first_attempt
bool operator==(const login_log &l) const
void handle_player_in_game(socket_ptr socket, std::shared_ptr< simple_wml::document > doc)
std::map< std::string, config > redirected_versions_
void dump_stats(const boost::system::error_code &ec)
void handle_message(socket_ptr socket, simple_wml::node &message)
void restart_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
void version_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
std::string is_ip_banned(const std::string &ip)
server(int port, bool keep_alive, const std::string &config_file, std::size_t, std::size_t)
void handle_join_game(socket_ptr socket, simple_wml::node &join)
bmi::multi_index_container< player_record, bmi::indexed_by< bmi::ordered_unique< bmi::tag< socket_t >, bmi::const_mem_fun< player_record, const socket_ptr, &player_record::socket > >, bmi::hashed_unique< bmi::tag< name_t >, bmi::const_mem_fun< player_record, const std::string &, &player_record::name > >, bmi::ordered_non_unique< bmi::tag< game_t >, bmi::const_mem_fun< player_record, int, &player_record::game_id > > > > player_connections
std::map< std::string, cmd_handler > cmd_handlers_
void dul_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
std::shared_ptr< boost::asio::ip::tcp::socket > socket_ptr
player_connections player_connections_
void load_config()
Parse the server config into local variables.
simple_wml::document join_lobby_response_
void read_version(socket_ptr socket, std::shared_ptr< simple_wml::document > doc)
std::deque< connection_log > ip_log_
void handle_new_client(socket_ptr socket)
void ungban_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
std::string process_command(std::string cmd, std::string issuer_name)
Process commands from admins and users.
config read_config() const
Read the server config from file 'config_file_'.
void send_password_request(socket_ptr socket, const std::string &msg, const std::string &user, const std::string &version, const std::string &source, const char *error_code="", bool force_confirmation=false)
void metrics_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
A config object defines a single node in a WML file, with access to child nodes.
void lobbymsg_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
void pm_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
void create_game(player_record &host, simple_wml::node &create_game)
void abort_lan_server_timer()
std::size_t max_ip_log_size_
void send_server_message(socket_ptr socket, const std::string &message)
std::time_t last_user_seen_time_
std::vector< std::string > disallowed_names_
Base class for servers using Wesnoth's WML over TCP protocol.
void handle_login(socket_ptr socket, std::shared_ptr< simple_wml::document > doc, std::string version, std::string source)