27 #include <boost/asio/steady_timer.hpp> 38 server(
int port,
bool keep_alive,
const std::string& config_file, std::size_t, std::size_t);
51 template<
class SocketPtr>
void login_client(boost::asio::yield_context yield, SocketPtr socket);
52 template<
class SocketPtr>
bool is_login_allowed(boost::asio::yield_context yield, SocketPtr socket,
const simple_wml::node*
const login,
const std::string& username,
bool& registered,
bool& is_moderator);
53 template<
class SocketPtr>
bool authenticate(SocketPtr socket,
const std::string& username,
const std::string&
password,
bool name_taken,
bool& registered);
54 template<
class SocketPtr>
void send_password_request(SocketPtr socket,
const std::string&
msg,
const char* error_code =
"",
bool force_confirmation =
false);
71 template<
class SocketPtr>
void send_server_message(SocketPtr socket,
const std::string& message,
const std::string&
type);
89 return player->get_game() !=
nullptr;
103 return c.
nick == nick && c.
ip ==
ip;
185 std::deque<std::shared_ptr<game>>
games()
const 187 std::deque<std::shared_ptr<game>> result;
189 for(
const auto& iter : player_connections_.get<
game_t>()) {
190 if(result.empty() || iter.get_game() != result.back()) {
191 result.push_back(iter.get_game());
195 if(!result.empty() && result.front() ==
nullptr) {
204 void dump_stats(
const boost::system::error_code& ec);
213 void delete_game(
int,
const std::string& reason=
"");
225 typedef std::function<void(const std::string&, const std::string&, std::string&, std::ostringstream *)>
cmd_handler;
228 void shut_down_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
229 void restart_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
230 void sample_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
231 void help_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
232 void stats_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
233 void metrics_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
234 void requests_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
235 void roll_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
236 void games_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
237 void wml_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
238 void adminmsg_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
239 void pm_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
240 void version_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
241 void msg_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
242 void lobbymsg_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
243 void status_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
244 void clones_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
245 void bans_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
246 void ban_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
247 void unban_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
248 void ungban_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
249 void kick_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
250 void kickban_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
251 void gban_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
252 void motd_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
253 void searchlog_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
254 void dul_handler(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
255 void stopgame(
const std::string &,
const std::string &, std::string &, std::ostringstream *);
258 void handle_sighup(
const boost::system::error_code& error,
int signal_number);
std::set< std::string > client_sources_
void handle_whisper(player_iterator player, simple_wml::node &whisper)
bool authenticate(SocketPtr socket, const std::string &username, const std::string &password, bool name_taken, bool ®istered)
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)
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)
bool is_login_allowed(boost::asio::yield_context yield, SocketPtr socket, const simple_wml::node *const login, const std::string &username, bool ®istered, bool &is_moderator)
void requests_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
Base class for implementing servers that use gzipped-WML network protocol.
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_
bmi::multi_index_container< player_record, bmi::indexed_by< bmi::ordered_unique< bmi::tag< socket_t >, bmi::const_mem_fun< player_record, const any_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
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 handle_lan_server_shutdown(const boost::system::error_code &error)
std::string restart_command
void handle_player_in_game(player_iterator player, simple_wml::document &doc)
int dummy_player_timer_interval_
void handle_player(boost::asio::yield_context yield, SocketPtr socket, const player &player)
bool player_is_in_game(player_iterator player) const
boost::asio::steady_timer timer_
void async_send_doc_queued(SocketPtr socket, simple_wml::document &doc)
High level wrapper for sending a WML document.
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 *)
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 send_to_player(player_iterator player, simple_wml::document &data)
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)
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)
boost::asio::steady_timer dummy_player_timer_
void dump_stats(const boost::system::error_code &ec)
void restart_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
void dummy_player_updates(const boost::system::error_code &ec)
void version_handler(const std::string &, const std::string &, std::string &, std::ostringstream *)
std::string is_ip_banned(const std::string &ip)
void login_client(boost::asio::yield_context yield, SocketPtr socket)
void start_dummy_player_updates()
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)
std::shared_ptr< boost::asio::ssl::stream< socket_ptr::element_type > > tls_socket_ptr
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 *)
void send_server_message(SocketPtr socket, const std::string &message, const std::string &type)
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.
void send_password_request(SocketPtr socket, const std::string &msg, const char *error_code="", bool force_confirmation=false)