From 96ef73aeb67872f433975c25e56bce86f133c416 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Tue, 7 Dec 2021 14:16:02 +1100 Subject: [PATCH] Transmission does not reject cancelled requests --- peerconn.go | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/peerconn.go b/peerconn.go index 27d34ee5..289b2fdf 100644 --- a/peerconn.go +++ b/peerconn.go @@ -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] == '-' +} -- 2.44.0