From: Matt Joiner Date: Tue, 7 Dec 2021 03:16:02 +0000 (+1100) Subject: Transmission does not reject cancelled requests X-Git-Tag: v1.39.0~8 X-Git-Url: http://www.git.stargrave.org/?a=commitdiff_plain;h=96ef73aeb67872f433975c25e56bce86f133c416;p=btrtrc.git Transmission does not reject cancelled requests --- 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] == '-' +}