aboutsummaryrefslogtreecommitdiff
path: root/dht
diff options
context:
space:
mode:
authorFelix Hanley <felix@userspace.com.au>2018-03-20 11:37:09 +0000
committerFelix Hanley <felix@userspace.com.au>2018-03-20 11:37:09 +0000
commite2e746843dca7874d287420336b3ec4830203ff5 (patch)
treec806afa152d33f1124ea03e943db60ead0497b9e /dht
parentef4aec50a8f6ace8076d4bfeef0ba64cf8598048 (diff)
downloaddhtsearch-e2e746843dca7874d287420336b3ec4830203ff5.tar.gz
dhtsearch-e2e746843dca7874d287420336b3ec4830203ff5.tar.bz2
Start working on SQL to relieve load
Diffstat (limited to 'dht')
-rw-r--r--dht/node.go10
-rw-r--r--dht/options.go13
2 files changed, 18 insertions, 5 deletions
diff --git a/dht/node.go b/dht/node.go
index 829f244..b0dd9ec 100644
--- a/dht/node.go
+++ b/dht/node.go
@@ -40,7 +40,9 @@ type Node struct {
blacklist *lru.ARCCache
// OnAnnoucePeer is called for each peer that announces itself
- OnAnnouncePeer func(p models.Peer)
+ OnAnnouncePeer func(models.Peer)
+ // OnBadPeer is called for each bad peer
+ OnBadPeer func(models.Peer)
}
// NewNode creates a new DHT node
@@ -191,6 +193,10 @@ func (n *Node) packetWriter() {
n.blacklist.Add(p.raddr.String(), true)
// TODO reduce limit
n.log.Warn("failed to write packet", "error", err)
+ if n.OnBadPeer != nil {
+ peer := models.Peer{Addr: p.raddr}
+ go n.OnBadPeer(peer)
+ }
}
}
}
@@ -245,7 +251,7 @@ func (n *Node) processPacket(p packet) error {
}
if _, black := n.blacklist.Get(p.raddr.String()); black {
- return fmt.Errorf("blacklisted", "address", p.raddr.String())
+ return fmt.Errorf("blacklisted: %s", p.raddr.String())
}
switch y {
diff --git a/dht/options.go b/dht/options.go
index 094d8f7..86d7af7 100644
--- a/dht/options.go
+++ b/dht/options.go
@@ -15,6 +15,13 @@ func SetOnAnnouncePeer(f func(models.Peer)) Option {
}
}
+func SetOnBadPeer(f func(models.Peer)) Option {
+ return func(n *Node) error {
+ n.OnBadPeer = f
+ return nil
+ }
+}
+
// SetAddress sets the IP address to listen on
func SetAddress(ip string) Option {
return func(n *Node) error {
@@ -57,10 +64,10 @@ func SetLogger(l logger.Logger) Option {
}
}
-// SetBlacklistSize sets the size of the node blacklist
-func SetBlacklistSize(s int) Option {
+// SetBlacklist sets the size of the node blacklist
+func SetBlacklist(bl *lru.ARCCache) Option {
return func(n *Node) (err error) {
- n.blacklist, err = lru.NewARC(s)
+ n.blacklist = bl
return err
}
}