Handle webseed request errors
This commit is contained in:
parent
7909084a17
commit
d5a482e209
|
@ -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 {
|
||||
|
|
26
web_seed.go
26
web_seed.go
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue