26 #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 const std::string& user,
const char* error_code =
"",
bool force_confirmation =
false);
71 return player->get_game() !=
nullptr;
106 std::map<socket_ptr::element_type*, std::string>
seeds_;
112 std::deque<std::shared_ptr<game>>
games()
const 114 std::deque<std::shared_ptr<game>> result;
116 for(
const auto& iter : player_connections_.get<
game_t>()) {
117 if(result.empty() || iter.get_game() != result.back()) {
118 result.push_back(iter.get_game());
122 if(!result.empty() && result.front() ==
nullptr) {
186 void dump_stats(
const boost::system::error_code& ec);
195 void delete_game(
int,
const std::string& reason=
"");
207 typedef std::function<void(const std::string&, const std::string&, std::string&, std::ostringstream *)>
cmd_handler;
210 void shut_down_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
211 void restart_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
212 void sample_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
213 void help_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
214 void stats_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
215 void metrics_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
216 void requests_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
217 void roll_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
218 void games_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
219 void wml_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
220 void adminmsg_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
221 void pm_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
222 void version_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
223 void msg_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
224 void lobbymsg_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
225 void status_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
226 void clones_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
227 void bans_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
228 void ban_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
229 void unban_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
230 void ungban_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
231 void kick_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
232 void kickban_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
233 void gban_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
234 void motd_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
235 void searchlog_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
236 void dul_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
237 void stopgame(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
void handle_player(boost::asio::yield_context yield, socket_ptr socket, const player &player)
std::set< std::string > client_sources_
void handle_whisper(player_iterator player, 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 send_to_lobby(simple_wml::document &data, std::optional< player_iterator > exclude={})
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 *)
void refresh_tournaments(const boost::system::error_code &ec)
void remove_player(player_iterator player)
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 start_lan_server_timer()
std::string announcements_
std::unique_ptr< user_handler > user_handler_
bool accepting_connections() const
void help_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
void send_server_message(player_iterator player, const std::string &message, const std::string &type)
void wml_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
void stats_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
void handle_read_from_fifo(const boost::system::error_code &error, std::size_t bytes_transferred)
void handle_message(player_iterator player, simple_wml::node &message)
static void msg(const char *act, debug_info &i, const char *to="", const char *result="")
std::size_t default_time_period_
void handle_join_game(player_iterator player, simple_wml::node &join)
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 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)
player_connections::const_iterator player_iterator
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_
void start_tournaments_timer()
simple_wml::document login_response_
void login_client(boost::asio::yield_context yield, socket_ptr socket)
bool allow_remote_shutdown_
std::map< std::string, config > proxy_versions_
void msg_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
std::map< socket_ptr::element_type *, std::string > seeds_
void handle_lan_server_shutdown(const boost::system::error_code &error)
bool is_login_allowed(socket_ptr socket, const simple_wml::node *const login, const std::string &username, bool ®istered, bool &is_moderator)
std::string restart_command
void handle_player_in_game(player_iterator player, simple_wml::document &doc)
bool player_is_in_game(player_iterator player) const
boost::asio::steady_timer timer_
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.
void send_server_message_to_all(const std::string &message, std::optional< player_iterator > exclude={})
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 *)
void send_password_request(socket_ptr socket, const std::string &msg, const std::string &user, const char *error_code="", bool force_confirmation=false)
simple_wml::document version_query_response_
std::string replay_save_path_
void kick_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
boost::asio::steady_timer dump_stats_timer_
void cleanup_game(game *)
void sample_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
boost::asio::steady_timer lan_server_timer_
std::size_t concurrent_connections_
void unban_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
const std::string config_file_
void roll_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
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)
bool authenticate(socket_ptr socket, const std::string &username, const std::string &password, bool name_taken, bool ®istered)
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 *)
boost::asio::steady_timer tournaments_timer_
void stopgame(const std::string &, const std::string &, std::string &, std::ostringstream *)
std::time_t first_attempt
bool operator==(const login_log &l) const
std::map< std::string, config > redirected_versions_
void handle_query(player_iterator player, simple_wml::node &query)
void dump_stats(const boost::system::error_code &ec)
void restart_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
void send_server_message(socket_ptr socket, const std::string &message, const std::string &type)
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_create_game(player_iterator player, simple_wml::node &create_game)
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.
std::deque< std::shared_ptr< game > > games() const
void update_game_in_lobby(const game &g, std::optional< player_iterator > exclude={})
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 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 handle_player_in_lobby(player_iterator player, simple_wml::document &doc)
void abort_lan_server_timer()
std::size_t max_ip_log_size_
void disconnect_player(player_iterator player)
void handle_nickserv(player_iterator player, simple_wml::node &nickserv)
void send_server_message_to_lobby(const std::string &message, std::optional< player_iterator > exclude={})
std::time_t last_user_seen_time_
std::vector< std::string > disallowed_names_
Base class for servers using Wesnoth's WML over TCP protocol.