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

Reply via email to