]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Add per-torrent ability to disable uploading
authorMaxb <bittmanmax@gmail.com>
Sat, 30 May 2020 19:42:51 +0000 (12:42 -0700)
committerMatt Joiner <anacrolix@gmail.com>
Tue, 2 Jun 2020 01:20:39 +0000 (11:20 +1000)
peerconn.go
torrent.go

index df395006c1061b0d26000084bb991f6432551ff0..779e9a7364def13855707e832adcb2a918349d41 100644 (file)
@@ -1325,6 +1325,9 @@ func (c *PeerConn) uploadAllowed() bool {
        if c.t.cl.config.NoUpload {
                return false
        }
+       if c.t.dataUploadDisallowed {
+               return false
+       }
        if c.t.seeding() {
                return true
        }
index 52c6124dc2f10569b799fde74f44c40517ea7b83..d231a8e54c6c77ceb1212ac38f3c82073a0b2f59 100644 (file)
@@ -45,6 +45,7 @@ type Torrent struct {
 
        networkingEnabled      bool
        dataDownloadDisallowed bool
+       dataUploadDisallowed   bool
        userOnWriteChunkErr    func(error)
 
        // Determines what chunks to request from peers.
@@ -1273,6 +1274,9 @@ func (t *Torrent) seeding() bool {
        if t.closed.IsSet() {
                return false
        }
+       if t.dataUploadDisallowed {
+               return false
+       }
        if cl.config.NoUpload {
                return false
        }
@@ -1969,6 +1973,26 @@ func (t *Torrent) AllowDataDownload() {
 
 }
 
+func (t *Torrent) AllowDataUpload() {
+       t.cl.lock()
+       defer t.cl.unlock()
+       log.Printf("AllowDataUpload")
+       t.dataUploadDisallowed = false
+       for c := range t.conns {
+               c.updateRequests()
+       }
+}
+
+func (t *Torrent) DisallowDataUpload() {
+       t.cl.lock()
+       defer t.cl.unlock()
+       log.Printf("DisallowDataUpload")
+       t.dataUploadDisallowed = true
+       for c := range t.conns {
+               c.updateRequests()
+       }
+}
+
 func (t *Torrent) SetOnWriteChunkError(f func(error)) {
        t.cl.lock()
        defer t.cl.unlock()