}
type Client struct {
+ noUpload bool
dataDir string
halfOpenLimit int
peerID [20]byte
}
cl = &Client{
+ noUpload: cfg.NoUpload,
disableTrackers: cfg.DisableTrackers,
downloadStrategy: cfg.DownloadStrategy,
halfOpenLimit: 100,
case pp.Interested:
c.PeerInterested = true
// TODO: This should be done from a dedicated unchoking routine.
+ if me.noUpload {
+ break
+ }
c.Unchoke()
case pp.NotInterested:
c.PeerInterested = false
case pp.Have:
me.peerGotPiece(t, c, int(msg.Index))
case pp.Request:
+ if me.noUpload {
+ break
+ }
if c.PeerRequests == nil {
c.PeerRequests = make(map[request]struct{}, maxRequests)
}
DisableTrackers: *disableTrackers,
DownloadStrategy: torrent.NewResponsiveDownloadStrategy(*readaheadBytes),
ListenAddr: *listenAddr,
+ NoUpload: true, // Ensure that uploads are responsive.
})
http.DefaultServeMux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
client.WriteStatus(w)