From c2bdb31bb399b0430e4aafb1f05d76833b68c7d4 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Wed, 15 Jun 2016 15:13:53 +1000 Subject: [PATCH] Client.announceTorrentDHT -> Torrent.announceDHT --- client.go | 58 +----------------------------------------------------- torrent.go | 57 +++++++++++++++++++++++++++++++++++++++++++++++++++++ 2 files changed, 58 insertions(+), 57 deletions(-) diff --git a/client.go b/client.go index fe863299..fa63e446 100644 --- a/client.go +++ b/client.go @@ -1533,7 +1533,7 @@ func (cl *Client) AddTorrentInfoHash(infoHash metainfo.Hash) (t *Torrent, new bo new = true t = cl.newTorrent(infoHash) if cl.dHT != nil { - go cl.announceTorrentDHT(t, true) + go t.announceDHT(true) } cl.torrents[infoHash] = t t.updateWantPeersEvent() @@ -1579,62 +1579,6 @@ func (cl *Client) dropTorrent(infoHash metainfo.Hash) (err error) { return } -func (cl *Client) announceTorrentDHT(t *Torrent, impliedPort bool) { - for { - select { - case <-t.wantPeersEvent.LockedChan(&cl.mu): - case <-t.closed.LockedChan(&cl.mu): - return - } - // log.Printf("getting peers for %q from DHT", t) - ps, err := cl.dHT.Announce(string(t.infoHash[:]), cl.incomingPeerPort(), impliedPort) - if err != nil { - log.Printf("error getting peers from dht: %s", err) - return - } - // Count all the unique addresses we got during this announce. - allAddrs := make(map[string]struct{}) - getPeers: - for { - select { - case v, ok := <-ps.Peers: - if !ok { - break getPeers - } - addPeers := make([]Peer, 0, len(v.Peers)) - for _, cp := range v.Peers { - if cp.Port == 0 { - // Can't do anything with this. - continue - } - addPeers = append(addPeers, Peer{ - IP: cp.IP[:], - Port: cp.Port, - Source: peerSourceDHT, - }) - key := (&net.UDPAddr{ - IP: cp.IP[:], - Port: cp.Port, - }).String() - allAddrs[key] = struct{}{} - } - cl.mu.Lock() - cl.addPeers(t, addPeers) - numPeers := len(t.peers) - cl.mu.Unlock() - if numPeers >= torrentPeersHighWater { - break getPeers - } - case <-t.closed.LockedChan(&cl.mu): - ps.Close() - return - } - } - ps.Close() - // log.Printf("finished DHT peer scrape for %s: %d peers", t, len(allAddrs)) - } -} - func (cl *Client) prepareTrackerAnnounceUnlocked(announceURL string) (blocked bool, urlToUse string, host string, err error) { _url, err := url.Parse(announceURL) if err != nil { diff --git a/torrent.go b/torrent.go index 6848a6fd..59dc38e7 100644 --- a/torrent.go +++ b/torrent.go @@ -1191,3 +1191,60 @@ func (t *Torrent) announceRequest() tracker.AnnounceRequest { Left: t.bytesLeftAnnounce(), } } + +func (t *Torrent) announceDHT(impliedPort bool) { + cl := t.cl + for { + select { + case <-t.wantPeersEvent.LockedChan(&cl.mu): + case <-t.closed.LockedChan(&cl.mu): + return + } + // log.Printf("getting peers for %q from DHT", t) + ps, err := cl.dHT.Announce(string(t.infoHash[:]), cl.incomingPeerPort(), impliedPort) + if err != nil { + log.Printf("error getting peers from dht: %s", err) + return + } + // Count all the unique addresses we got during this announce. + allAddrs := make(map[string]struct{}) + getPeers: + for { + select { + case v, ok := <-ps.Peers: + if !ok { + break getPeers + } + addPeers := make([]Peer, 0, len(v.Peers)) + for _, cp := range v.Peers { + if cp.Port == 0 { + // Can't do anything with this. + continue + } + addPeers = append(addPeers, Peer{ + IP: cp.IP[:], + Port: cp.Port, + Source: peerSourceDHT, + }) + key := (&net.UDPAddr{ + IP: cp.IP[:], + Port: cp.Port, + }).String() + allAddrs[key] = struct{}{} + } + cl.mu.Lock() + cl.addPeers(t, addPeers) + numPeers := len(t.peers) + cl.mu.Unlock() + if numPeers >= torrentPeersHighWater { + break getPeers + } + case <-t.closed.LockedChan(&cl.mu): + ps.Close() + return + } + } + ps.Close() + // log.Printf("finished DHT peer scrape for %s: %d peers", t, len(allAddrs)) + } +} -- 2.48.1