]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Transmission does not reject cancelled requests
authorMatt Joiner <anacrolix@gmail.com>
Tue, 7 Dec 2021 03:16:02 +0000 (14:16 +1100)
committerMatt Joiner <anacrolix@gmail.com>
Sun, 12 Dec 2021 05:56:01 +0000 (16:56 +1100)
peerconn.go

index 27d34ee55b7545f419ebe901b216487ed23328c1..289b2fdf4e102c82ebfb41302c6c79f22b40c570 100644 (file)
@@ -648,7 +648,9 @@ func (me *PeerConn) _cancel(r RequestIndex) bool {
                // Already cancelled and waiting for a response.
                return true
        }
-       if me.fastEnabled() {
+       // Transmission does not send rejects for received cancels. See
+       // https://github.com/transmission/transmission/pull/2275.
+       if me.fastEnabled() && !me.remoteIsTransmission() {
                me.cancelledRequests.Add(r)
        } else {
                if !me.deleteRequest(r) {
@@ -1688,3 +1690,7 @@ func (p *Peer) TryAsPeerConn() (*PeerConn, bool) {
 func (pc *PeerConn) isLowOnRequests() bool {
        return pc.actualRequestState.Requests.IsEmpty()
 }
+
+func (pc *PeerConn) remoteIsTransmission() bool {
+       return bytes.HasPrefix(pc.PeerID[:], []byte("-TR")) && pc.PeerID[7] == '-'
+}