Use human readable ip for ban list
And update MapUserConfigParam to use initializer_list default value
This commit is contained in:
parent
e5c66d541b
commit
52dc38d03b
@ -334,26 +334,12 @@ MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
||||
// ----------------------------------------------------------------------------
|
||||
template<typename T, typename U>
|
||||
MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
||||
const char* comment,
|
||||
int nb_elements,
|
||||
...)
|
||||
const char* comment, std::map<T, U> default_value)
|
||||
{
|
||||
m_param_name = param_name;
|
||||
all_params.push_back(this);
|
||||
if (comment != NULL) m_comment = comment;
|
||||
|
||||
// add the default list
|
||||
va_list arguments;
|
||||
va_start(arguments, nb_elements);
|
||||
|
||||
struct pair_type { T key; U value; };
|
||||
|
||||
for (int i = 0; i < nb_elements; i++)
|
||||
{
|
||||
pair_type key_value_pair = va_arg(arguments, pair_type);
|
||||
m_elements.insert(std::pair<T, U>(key_value_pair.key, key_value_pair.value));
|
||||
}
|
||||
va_end(arguments); // Cleans up the list
|
||||
m_elements = default_value;
|
||||
} // MapUserConfigParam
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
@ -370,27 +356,14 @@ MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
||||
// ----------------------------------------------------------------------------
|
||||
template<typename T, typename U>
|
||||
MapUserConfigParam<T, U>::MapUserConfigParam(const char* param_name,
|
||||
GroupUserConfigParam* group,
|
||||
const char* comment,
|
||||
int nb_elements,
|
||||
...)
|
||||
GroupUserConfigParam* group, const char* comment,
|
||||
std::map<T, U> default_value)
|
||||
{
|
||||
m_param_name = param_name;
|
||||
group->addChild(this);
|
||||
if (comment != NULL) m_comment = comment;
|
||||
|
||||
// add the default list
|
||||
va_list arguments;
|
||||
va_start(arguments, nb_elements);
|
||||
|
||||
struct pair_type { T key; U value; };
|
||||
|
||||
for (int i = 0; i < nb_elements; i++)
|
||||
{
|
||||
pair_type key_value_pair = va_arg(arguments, pair_type);
|
||||
m_elements.insert(std::pair<T, U>(key_value_pair.key, key_value_pair.value));
|
||||
}
|
||||
va_end(arguments); // Cleans up the list
|
||||
m_elements = default_value;
|
||||
} // MapUserConfigParam
|
||||
|
||||
// ----------------------------------------------------------------------------
|
||||
|
@ -146,16 +146,14 @@ public:
|
||||
const char* comment = NULL);
|
||||
MapUserConfigParam(const char* param_name,
|
||||
const char* comment,
|
||||
int nb_elts,
|
||||
...);
|
||||
std::map<T, U> default_value);
|
||||
MapUserConfigParam(const char* param_name,
|
||||
GroupUserConfigParam* group,
|
||||
const char* comment = NULL);
|
||||
MapUserConfigParam(const char* param_name,
|
||||
GroupUserConfigParam* group,
|
||||
const char* comment,
|
||||
int nb_elts,
|
||||
...);
|
||||
std::map<T, U> default_value);
|
||||
|
||||
void write(std::ofstream& stream) const;
|
||||
void findYourDataInAChildOf(const XMLNode* node);
|
||||
@ -185,6 +183,7 @@ public:
|
||||
}
|
||||
}; // ListUserConfigParam
|
||||
typedef MapUserConfigParam<uint32_t, uint32_t> UIntToUIntUserConfigParam;
|
||||
typedef MapUserConfigParam<std::string, uint32_t> StringToUIntUserConfigParam;
|
||||
// ============================================================================
|
||||
class IntUserConfigParam : public UserConfigParam
|
||||
{
|
||||
@ -735,8 +734,14 @@ namespace UserConfigParams
|
||||
PARAM_PREFIX UIntToUIntUserConfigParam m_num_karts_per_gamemode
|
||||
PARAM_DEFAULT(UIntToUIntUserConfigParam("num_karts_per_gamemode",
|
||||
"The Number of karts per gamemode.",
|
||||
1,
|
||||
std::make_pair(1100u, 4u)
|
||||
{
|
||||
{ 0u, 4u },
|
||||
{ 1002u, 5u },
|
||||
{ 1100u, 4u },
|
||||
{ 1101u, 4u },
|
||||
{ 2000u, 4u },
|
||||
{ 2001u, 4u },
|
||||
}
|
||||
));
|
||||
|
||||
// ---- Network
|
||||
@ -756,12 +761,11 @@ namespace UserConfigParams
|
||||
PARAM_DEFAULT(FloatUserConfigParam(10.0f, "voting-timeout",
|
||||
&m_network_group, "Timeout in seconds for voting tracks in server."));
|
||||
// ---- Gamemode setup
|
||||
PARAM_PREFIX UIntToUIntUserConfigParam m_server_ban_list
|
||||
PARAM_DEFAULT(UIntToUIntUserConfigParam("server_ban_list",
|
||||
"LHS: IP in 32bit format, RHS: online id, if 0 than all players "
|
||||
PARAM_PREFIX StringToUIntUserConfigParam m_server_ban_list
|
||||
PARAM_DEFAULT(StringToUIntUserConfigParam("server_ban_list",
|
||||
"LHS: IP in x.x.x.x format, RHS: online id, if 0 than all players "
|
||||
"from this IP will be banned.",
|
||||
1,
|
||||
std::make_pair(0u, 0u)
|
||||
{ { "0.0.0.0", 0u } }
|
||||
));
|
||||
|
||||
// ---- Graphic Quality
|
||||
@ -769,18 +773,6 @@ namespace UserConfigParams
|
||||
PARAM_DEFAULT( GroupUserConfigParam("GFX",
|
||||
"Graphics Quality Settings") );
|
||||
|
||||
// On OSX 10.4 and before there may be driver issues with FBOs, so to be
|
||||
// safe disable them by default
|
||||
#ifdef __APPLE__
|
||||
#if MAC_OS_X_VERSION_MIN_REQUIRED < MAC_OS_X_VERSION_10_5
|
||||
#define FBO_DEFAULT false
|
||||
#else
|
||||
#define FBO_DEFAULT true
|
||||
#endif
|
||||
#else
|
||||
#define FBO_DEFAULT true
|
||||
#endif
|
||||
|
||||
PARAM_PREFIX IntUserConfigParam m_particles_effects
|
||||
PARAM_DEFAULT( IntUserConfigParam(2, "particles-effecs",
|
||||
&m_graphics_quality, "Particles effects: 0 disabled, 1 only important, 2 enabled") );
|
||||
|
@ -21,6 +21,7 @@
|
||||
#include "network/network_player_profile.hpp"
|
||||
#include "network/stk_host.hpp"
|
||||
#include "network/stk_peer.hpp"
|
||||
#include "network/protocols/server_lobby.hpp"
|
||||
#include "utils/time.hpp"
|
||||
#include "utils/vs.hpp"
|
||||
#include "main_loop.hpp"
|
||||
@ -87,7 +88,8 @@ void mainLoop(STKHost* host)
|
||||
{
|
||||
peer->kick();
|
||||
UserConfigParams::m_server_ban_list
|
||||
[peer->getAddress().getIP()] = 0;
|
||||
[peer->getAddress().toString(false/*show_port*/)] = 0;
|
||||
LobbyProtocol::get<ServerLobby>()->updateBanList();
|
||||
}
|
||||
else
|
||||
std::cout << "Unknown host id: " << number << std::endl;
|
||||
@ -105,15 +107,13 @@ void mainLoop(STKHost* host)
|
||||
}
|
||||
else if (str == "listban")
|
||||
{
|
||||
std::map<uint32_t, uint32_t> ban_list =
|
||||
std::map<std::string, uint32_t> ban_list =
|
||||
UserConfigParams::m_server_ban_list;
|
||||
for (auto& ban : ban_list)
|
||||
{
|
||||
if (ban.first == 0)
|
||||
if (ban.first == "0.0.0.0")
|
||||
continue;
|
||||
TransportAddress a;
|
||||
a.setIP(ban.first);
|
||||
std::cout << "IP: " << a.toString(false) << " online id: " <<
|
||||
std::cout << "IP: " << ban.first << " online id: " <<
|
||||
ban.second << std::endl;
|
||||
}
|
||||
}
|
||||
|
@ -89,6 +89,7 @@ ServerLobby::ServerLobby() : LobbyProtocol(NULL)
|
||||
m_has_created_server_id_file = false;
|
||||
setHandleDisconnections(true);
|
||||
m_state = SET_PUBLIC_ADDRESS;
|
||||
updateBanList();
|
||||
} // ServerLobby
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
@ -821,7 +822,29 @@ void ServerLobby::connectionRequested(Event* event)
|
||||
per_player_difficulty));
|
||||
}
|
||||
|
||||
if (peer->isBanned())
|
||||
bool is_banned = false;
|
||||
auto ret = m_ban_list.find(peer->getAddress().getIP());
|
||||
if (ret != m_ban_list.end())
|
||||
{
|
||||
// Ban all players
|
||||
if (ret->second == 0)
|
||||
{
|
||||
is_banned = true;
|
||||
}
|
||||
else
|
||||
{
|
||||
for (auto& p : peer->getPlayerProfiles())
|
||||
{
|
||||
if (ret->second == p->getOnlineId())
|
||||
{
|
||||
is_banned = true;
|
||||
break;
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
if (is_banned)
|
||||
{
|
||||
NetworkString *message = getNetworkString(2);
|
||||
message->addUInt8(LE_CONNECTION_REFUSED).addUInt8(RR_BANNED);
|
||||
@ -1215,3 +1238,12 @@ void ServerLobby::playerFinishedResult(Event *event)
|
||||
} // playerFinishedResult
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
void ServerLobby::updateBanList()
|
||||
{
|
||||
std::lock_guard<std::mutex> lock(m_connection_mutex);
|
||||
m_ban_list.clear();
|
||||
std::map<std::string, uint32_t> ban_list =
|
||||
UserConfigParams::m_server_ban_list;
|
||||
for (auto& ban : ban_list)
|
||||
m_ban_list[TransportAddress(ban.first).getIP()] = ban.second;
|
||||
} // updateBanList
|
||||
|
@ -75,6 +75,9 @@ private:
|
||||
* starting race. */
|
||||
std::mutex m_connection_mutex;
|
||||
|
||||
/** Ban list ip (in decimal) with online user id. */
|
||||
std::map<uint32_t, uint32_t> m_ban_list;
|
||||
|
||||
// connection management
|
||||
void clientDisconnected(Event* event);
|
||||
void connectionRequested(Event* event);
|
||||
@ -111,6 +114,7 @@ public:
|
||||
void checkRaceFinished();
|
||||
void finishedLoadingWorld() OVERRIDE;
|
||||
ServerState getCurrentState() const { return m_state.load(); }
|
||||
void updateBanList();
|
||||
virtual bool waitingForPlayers() const OVERRIDE
|
||||
{ return m_state.load() == ACCEPTING_CLIENTS; }
|
||||
|
||||
|
@ -121,30 +121,3 @@ bool STKPeer::isSamePeer(const ENetPeer* peer) const
|
||||
{
|
||||
return peer==m_enet_peer;
|
||||
} // isSamePeer
|
||||
|
||||
//-----------------------------------------------------------------------------
|
||||
/** Returns true if this peer should be banned.
|
||||
*/
|
||||
bool STKPeer::isBanned() const
|
||||
{
|
||||
if (m_players.empty())
|
||||
{
|
||||
Log::warn("STKPeer", "Missing player info to check for online id ban");
|
||||
}
|
||||
|
||||
std::map<uint32_t, uint32_t> ban_list =
|
||||
UserConfigParams::m_server_ban_list;
|
||||
auto ret = ban_list.find(m_peer_address.getIP());
|
||||
if (ret != ban_list.end())
|
||||
{
|
||||
// Ban all players
|
||||
if (ret->second == 0)
|
||||
return true;
|
||||
for (auto p : m_players)
|
||||
{
|
||||
if (ret->second == p->getOnlineId())
|
||||
return true;
|
||||
}
|
||||
}
|
||||
return false;
|
||||
} // isBanned
|
||||
|
@ -96,8 +96,6 @@ public:
|
||||
void addPlayer(std::shared_ptr<NetworkPlayerProfile> p)
|
||||
{ m_players.push_back(p); }
|
||||
// ------------------------------------------------------------------------
|
||||
bool isBanned() const;
|
||||
// ------------------------------------------------------------------------
|
||||
/** Sets the token for this client. */
|
||||
void setClientServerToken(const uint32_t& token)
|
||||
{
|
||||
|
Loading…
x
Reference in New Issue
Block a user