]> Sergey Matveev's repositories - btrtrc.git/blob - dht.go
Support custom DHT servers
[btrtrc.git] / dht.go
1 package torrent
2
3 import (
4         "io"
5         "net"
6
7         "github.com/anacrolix/dht/v2"
8         "github.com/anacrolix/dht/v2/krpc"
9 )
10
11 type DhtServer interface {
12         Stats() interface{}
13         ID() [20]byte
14         Addr() net.Addr
15         AddNode(ni krpc.NodeInfo) error
16         Ping(addr *net.UDPAddr)
17         Announce(hash [20]byte, port int, impliedPort bool) (DhtAnnounce, error)
18         WriteStatus(io.Writer)
19 }
20
21 type DhtAnnounce interface {
22         Close()
23         Peers() <-chan dht.PeersValues
24 }
25
26 type anacrolixDhtServerWrapper struct {
27         *dht.Server
28 }
29
30 func (me anacrolixDhtServerWrapper) Stats() interface{} {
31         return me.Server.Stats()
32 }
33
34 type anacrolixDhtAnnounceWrapper struct {
35         *dht.Announce
36 }
37
38 func (me anacrolixDhtAnnounceWrapper) Peers() <-chan dht.PeersValues {
39         return me.Announce.Peers
40 }
41
42 func (me anacrolixDhtServerWrapper) Announce(hash [20]byte, port int, impliedPort bool) (DhtAnnounce, error) {
43         ann, err := me.Server.Announce(hash, port, impliedPort)
44         return anacrolixDhtAnnounceWrapper{ann}, err
45 }
46
47 func (me anacrolixDhtServerWrapper) Ping(addr *net.UDPAddr) {
48         me.Server.Ping(addr, nil)
49 }
50
51 var _ DhtServer = anacrolixDhtServerWrapper{}