Handle webseed request errors

This commit is contained in:
Matt Joiner 2020-06-02 16:41:49 +10:00
parent 7909084a17
commit d5a482e209
2 changed files with 22 additions and 12 deletions

View File

@ -1152,8 +1152,7 @@ func (c *PeerConn) mainReadLoop() (err error) {
case pp.HaveNone:
err = c.peerSentHaveNone()
case pp.Reject:
c.deleteRequest(newRequestFromMessage(&msg))
c.decExpectedChunkReceive(newRequestFromMessage(&msg))
c.remoteRejectedRequest(newRequestFromMessage(&msg))
case pp.AllowedFast:
torrent.Add("allowed fasts received", 1)
log.Fmsg("peer allowed fast: %d", msg.Index).AddValues(c).SetLevel(log.Debug).Log(c.t.logger)
@ -1170,6 +1169,11 @@ func (c *PeerConn) mainReadLoop() (err error) {
}
}
func (c *peer) remoteRejectedRequest(r request) {
c.deleteRequest(r)
c.decExpectedChunkReceive(r)
}
func (c *peer) decExpectedChunkReceive(r request) {
count := c.validReceiveChunks[r]
if count == 1 {

View File

@ -3,6 +3,7 @@ package torrent
import (
"net/http"
"github.com/anacrolix/log"
"github.com/anacrolix/torrent/common"
"github.com/anacrolix/torrent/metainfo"
pp "github.com/anacrolix/torrent/peer_protocol"
@ -76,16 +77,21 @@ func (ws *webSeed) UpdateRequests() {
func (ws *webSeed) Close() {}
func (ws *webSeed) requestResultHandler(r request, webseedRequest webseed.Request) {
webseedRequestResult := <-webseedRequest.Result
result := <-webseedRequest.Result
ws.peer.t.cl.lock()
err := ws.peer.receiveChunk(&pp.Message{
Type: pp.Piece,
Index: r.Index,
Begin: r.Begin,
Piece: webseedRequestResult.Bytes,
})
ws.peer.t.cl.unlock()
if err != nil {
panic(err)
defer ws.peer.t.cl.unlock()
if result.Err != nil {
log.Printf("webseed request rejected: %v", result.Err)
ws.peer.remoteRejectedRequest(r)
} else {
err := ws.peer.receiveChunk(&pp.Message{
Type: pp.Piece,
Index: r.Index,
Begin: r.Begin,
Piece: result.Bytes,
})
if err != nil {
panic(err)
}
}
}