return true
}
-func (ws *webseedPeer) _cancel(r RequestIndex) {
- active, ok := ws.activeRequests[ws.peer.t.requestIndexToRequest(r)]
- if ok {
+func (ws *webseedPeer) _cancel(r RequestIndex) bool {
+ if active, ok := ws.activeRequests[ws.peer.t.requestIndexToRequest(r)]; ok {
active.Cancel()
+ // The requester is running and will handle the result.
+ return true
}
- if !ws.peer.deleteRequest(r) {
- panic("cancelled webseed request should exist")
- }
- if ws.peer.isLowOnRequests() {
- ws.peer.updateRequests("webseedPeer._cancel")
- }
+ // There should be no requester handling this, so no further events will occur.
+ return false
}
func (ws *webseedPeer) intoSpec(r Request) webseed.RequestSpec {
start:
for !ws.peer.closed.IsSet() {
restart := false
- ws.peer.actualRequestState.Requests.Iterate(func(x uint32) bool {
+ ws.peer.requestState.Requests.Iterate(func(x uint32) bool {
r := ws.peer.t.requestIndexToRequest(x)
if _, ok := ws.activeRequests[r]; ok {
return true
log.Printf("closing %v", ws)
ws.peer.close()
}
- ws.peer.remoteRejectedRequest(ws.peer.t.requestIndexFromRequest(r))
+ if !ws.peer.remoteRejectedRequest(ws.peer.t.requestIndexFromRequest(r)) {
+ panic("invalid reject")
+ }
return err
}
err = ws.peer.receiveChunk(&pp.Message{
}
func (me *webseedPeer) isLowOnRequests() bool {
- return me.peer.actualRequestState.Requests.GetCardinality() < uint64(me.maxRequests)
+ return me.peer.requestState.Requests.GetCardinality() < uint64(me.maxRequests)
}
func (me *webseedPeer) peerPieces() *roaring.Bitmap {