Author: soliton
Date: Tue Mar 31 21:30:56 2009
New Revision: 34353
URL: http://svn.gna.org/viewcvs/wesnoth?rev=34353&view=rev
Log:
parse the IP only once when checking for bans
Modified:
branches/1.6/src/server/ban.cpp
branches/1.6/src/server/ban.hpp
Modified: branches/1.6/src/server/ban.cpp
URL:
http://svn.gna.org/viewcvs/wesnoth/branches/1.6/src/server/ban.cpp?rev=34353&r1=34352&r2=34353&view=diff
==============================================================================
--- branches/1.6/src/server/ban.cpp (original)
+++ branches/1.6/src/server/ban.cpp Tue Mar 31 21:30:56 2009
@@ -143,7 +143,7 @@
read(cfg);
}
- banned::ip_mask banned::parse_ip(const std::string& ip) const
+ ip_mask parse_ip(const std::string& ip)
{
// We use bit operations to construct the integer
// ip_mask is a pair: first is ip and second is mask
@@ -272,13 +272,8 @@
return ip_ & mask & mask_;
}
- bool banned::match_ip(const std::string& ip) const {
- try {
- ip_mask pair = parse_ip(ip);
- return (ip_ & mask_) == (pair.first & mask_);
- } catch (banned::error&) {
- return false;
- }
+ bool banned::match_ip(const ip_mask& pair) const {
+ return (ip_ & mask_) == (pair.first & mask_);
}
void ban_manager::read()
@@ -609,7 +604,13 @@
std::string ban_manager::is_ip_banned(const std::string& ip) const
{
- ban_set::const_iterator ban = std::find_if(bans_.begin(),
bans_.end(), boost::bind(&banned::match_ip, boost::bind(&banned_ptr::get, _1),
ip));
+ ip_mask pair;
+ try {
+ pair = parse_ip(ip);
+ } catch (banned::error&) {
+ return "";
+ }
+ ban_set::const_iterator ban = std::find_if(bans_.begin(),
bans_.end(), boost::bind(&banned::match_ip, boost::bind(&banned_ptr::get, _1),
pair));
if (ban == bans_.end()) return "";
return (*ban)->get_reason();
}
Modified: branches/1.6/src/server/ban.hpp
URL:
http://svn.gna.org/viewcvs/wesnoth/branches/1.6/src/server/ban.hpp?rev=34353&r1=34352&r2=34353&view=diff
==============================================================================
--- branches/1.6/src/server/ban.hpp (original)
+++ branches/1.6/src/server/ban.hpp Tue Mar 31 21:30:56 2009
@@ -60,7 +60,9 @@
typedef std::list<banned_ptr> deleted_ban_list;
typedef std::priority_queue<banned_ptr,std::vector<banned_ptr>,
banned_compare> ban_time_queue;
typedef std::map<std::string, size_t> default_ban_times;
+ typedef std::pair<unsigned int, unsigned int> ip_mask;
+ ip_mask parse_ip(const std::string&);
class banned {
unsigned int ip_;
@@ -73,9 +75,6 @@
std::string group_;
std::string nick_;
static const std::string who_banned_default_;
- typedef std::pair<unsigned int, unsigned int> ip_mask;
-
- ip_mask parse_ip(const std::string&) const;
banned(const std::string& ip);
@@ -110,7 +109,7 @@
bool match_group(const std::string& group) const
{ return group_ == group; }
- bool match_ip(const std::string& ip) const;
+ bool match_ip(const ip_mask& ip) const;
unsigned int get_mask_ip(unsigned int) const;
unsigned int get_int_ip() const
_______________________________________________
Wesnoth-commits mailing list
[email protected]
https://mail.gna.org/listinfo/wesnoth-commits