From 7faee72fa37f882c2d3e2e50430e41cf50c4c050 Mon Sep 17 00:00:00 2001 From: csoler Date: Tue, 26 May 2015 21:17:09 +0000 Subject: [PATCH] Started implementation of ban list. For now, just gathers the list of banned IPs from the DHT and is not used to reject IPs yet (the DHT list is, even if DHT is desactivated). Next steps: GUI with switch controls, exchange of IP ban lists between friends, handling IP ranges. git-svn-id: http://svn.code.sf.net/p/retroshare/code/trunk@8297 b45a01b8-16f6-495d-af2f-9b41ad6348cc --- src/bitdht/bdfilter.cc | 12 ++++++------ src/bitdht/bdfilter.h | 12 ++++++------ src/bitdht/bdnode.cc | 9 +++++---- src/bitdht/bdnode.h | 4 ++-- src/udp/udpbitdht.cc | 5 +++++ src/udp/udpbitdht.h | 6 +++--- 6 files changed, 27 insertions(+), 21 deletions(-) diff --git a/src/bitdht/bdfilter.cc b/src/bitdht/bdfilter.cc index fca8ca9..2624907 100644 --- a/src/bitdht/bdfilter.cc +++ b/src/bitdht/bdfilter.cc @@ -66,7 +66,7 @@ void bdFilter::writeBannedIpFile() for( std::map::iterator it=mFiltered.begin();it!=mFiltered.end();++it) { - fprintf(fd, "%s %d %ld %ld\n", bdnet_inet_ntoa(it->second.mAddr.sin_addr).c_str(), it->second.mFilterFlags, it->second.mFilterTS, it->second.mLastSeen) ; + fprintf(fd, "%s %u %lu %lu\n", bdnet_inet_ntoa(it->second.mAddr.sin_addr).c_str(), it->second.mFilterFlags, it->second.mFilterTS, it->second.mLastSeen) ; #ifdef DEBUG_FILTER fprintf(stderr, "Storing Peer Address: %s \n", bdnet_inet_ntoa(it->second.mAddr.sin_addr).c_str()) ; #endif @@ -212,11 +212,11 @@ int bdFilter::addPeerToFilter(const struct sockaddr_in& addr, uint32_t flags) // mFiltered[saddr] = *it ; // } // } -// void bdFilter::getFilteredPeers(std::list& peers) -// { -// for(std::map::iterator it = mFiltered.begin(); it != mFiltered.end();++it) -// peers.push_back(it->second) ; -// } +void bdFilter::getFilteredPeers(std::list& peers) +{ + for(std::map::iterator it = mFiltered.begin(); it != mFiltered.end();++it) + peers.push_back(it->second) ; +} /* fast check if the addr is in the structure */ int bdFilter::addrOkay(struct sockaddr_in *addr) { diff --git a/src/bitdht/bdfilter.h b/src/bitdht/bdfilter.h index 2d43f5d..b671270 100644 --- a/src/bitdht/bdfilter.h +++ b/src/bitdht/bdfilter.h @@ -40,11 +40,11 @@ class bdFilteredPeer { - public: - struct sockaddr_in mAddr; - uint32_t mFilterFlags; /* reasons why we are filtering */ - time_t mFilterTS; - time_t mLastSeen; + public: + struct sockaddr_in mAddr; + uint32_t mFilterFlags; /* reasons why we are filtering */ + time_t mFilterTS; + time_t mLastSeen; }; class bdFilter @@ -56,7 +56,7 @@ class bdFilter //bool filtered(std::list &answer); bool filteredIPs(std::list &answer); -void loadFilteredPeers(const std::list& peers) ; +//void loadFilteredPeers(const std::list& peers) ; void getFilteredPeers(std::list &peers); int checkPeer(const bdId *id, uint32_t peerFlags); diff --git a/src/bitdht/bdnode.cc b/src/bitdht/bdnode.cc index 42d597a..9161c69 100644 --- a/src/bitdht/bdnode.cc +++ b/src/bitdht/bdnode.cc @@ -93,10 +93,11 @@ void bdNode::init() setNodeDhtMode(BITDHT_MODE_TRAFFIC_DEFAULT); } -//void bdNode::getFilteredPeers(std::list& peers) -//{ -// mFilterPeers.getFilteredPeers(peers) ; -//} +bool bdNode::getFilteredPeers(std::list& peers) +{ + mFilterPeers.getFilteredPeers(peers) ; + return true ; +} // //void bdNode::loadFilteredPeers(const std::list& peers) //{ diff --git a/src/bitdht/bdnode.h b/src/bitdht/bdnode.h index 79ec716..77ee0d9 100644 --- a/src/bitdht/bdnode.h +++ b/src/bitdht/bdnode.h @@ -149,8 +149,8 @@ class bdNode: public bdNodePublisher void updateStore(); bool addressBanned(const sockaddr_in &raddr) ; - void getFilteredPeers(std::list &peers); - void loadFilteredPeers(const std::list &peers); + bool getFilteredPeers(std::list &peers); + //void loadFilteredPeers(const std::list &peers); /* simplified outgoing msg functions (for the managers) */ virtual void send_ping(bdId *id); /* message out */ diff --git a/src/udp/udpbitdht.cc b/src/udp/udpbitdht.cc index 91be827..5410d50 100644 --- a/src/udp/udpbitdht.cc +++ b/src/udp/udpbitdht.cc @@ -217,6 +217,11 @@ bool UdpBitDht::isAddressBanned(const sockaddr_in &raddr) return mBitDhtManager->addressBanned(raddr) ; } +bool UdpBitDht::getListOfBannedIps(std::list& ipl) +{ + return mBitDhtManager->getFilteredPeers(ipl) ; +} + /* stats and Dht state */ diff --git a/src/udp/udpbitdht.h b/src/udp/udpbitdht.h index b5459ac..3694687 100644 --- a/src/udp/udpbitdht.h +++ b/src/udp/udpbitdht.h @@ -88,6 +88,7 @@ virtual int getDhtQueries(std::map &queries); virtual int getDhtQueryStatus(const bdNodeId *id, bdQuerySummary &query); virtual bool isAddressBanned(const sockaddr_in &raddr) ; + virtual bool getListOfBannedIps(std::list &ipl); /* stats and Dht state */ virtual int startDht(); @@ -111,9 +112,8 @@ virtual int status(std::ostream &out); virtual void run(); /**** do whats to be done ***/ - int tick(); - - private: +int tick(); +private: void clearDataTransferred();