"crypto/rand"
"crypto/sha1"
"errors"
+ "expvar"
"fmt"
"io"
"log"
_ "bitbucket.org/anacrolix/go.torrent/tracker/udp"
)
+var (
+ unusedDownloadedChunksCount = expvar.NewInt("unusedDownloadedChunksCount")
+ chunksDownloadedCount = expvar.NewInt("chunksDownloadedCount")
+ peersFoundByDHT = expvar.NewInt("peersFoundByDHT")
+ peersFoundByPEX = expvar.NewInt("peersFoundByPEX")
+)
+
const extensionBytes = "\x00\x00\x00\x00\x00\x10\x00\x00"
// Currently doesn't really queue, but should in the future.
log.Printf("error adding PEX peers: %s", err)
return
}
- log.Printf("added %d peers from PEX", len(pexMsg.Added))
+ peersFoundByPEX.Add(int64(len(pexMsg.Added)))
}()
default:
err = fmt.Errorf("unexpected extended message ID: %v", msg.ExtendedID)
if !ok {
break getPeers
}
+ peersFoundByDHT.Add(int64(len(cps)))
err = cl.AddPeers(t.InfoHash, func() (ret []Peer) {
for _, cp := range cps {
ret = append(ret, Peer{
Port: int(cp.Port),
Source: peerSourceDHT,
})
- // log.Printf("peer from dht: %s", &net.UDPAddr{
- // IP: cp.IP[:],
- // Port: int(cp.Port),
- // })
}
return
}())
log.Printf("error adding peers from dht for torrent %q: %s", t, err)
break getPeers
}
- // log.Printf("got %d peers from dht for torrent %q", len(cps), t)
}
}
ps.Close()
}
func (me *Client) downloadedChunk(t *torrent, c *connection, msg *pp.Message) error {
+ chunksDownloadedCount.Add(1)
+
req := newRequest(msg.Index, msg.Begin, pp.Integer(len(msg.Piece)))
// Request has been satisfied.
// Do we actually want this chunk?
if _, ok := t.Pieces[req.Index].PendingChunkSpecs[req.chunkSpec]; !ok {
- log.Printf("got unnecessary chunk from %v: %q", req, string(c.PeerId[:]))
+ unusedDownloadedChunksCount.Add(1)
return nil
}