]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Handle errors in webseed peers for bad URLs
authorMatt Joiner <anacrolix@gmail.com>
Fri, 10 Jul 2020 03:18:33 +0000 (13:18 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Fri, 10 Jul 2020 03:18:33 +0000 (13:18 +1000)
webseed-peer.go

index 3511635ab9cdd2ed46d2d0aa03b1ecfa4b36bebf..e5ba748e5df9fc4f71873368fed9a23b6b0f6b43 100644 (file)
@@ -2,12 +2,14 @@ package torrent
 
 import (
        "fmt"
+       "strings"
 
        "github.com/anacrolix/torrent/common"
        "github.com/anacrolix/torrent/metainfo"
        pp "github.com/anacrolix/torrent/peer_protocol"
        "github.com/anacrolix/torrent/segments"
        "github.com/anacrolix/torrent/webseed"
+       "github.com/pkg/errors"
 )
 
 type webseedPeer struct {
@@ -70,7 +72,11 @@ func (ws *webseedPeer) requestResultHandler(r request, webseedRequest webseed.Re
        defer ws.peer.t.cl.unlock()
        if result.Err != nil {
                ws.peer.logger.Printf("request %v rejected: %v", r, result.Err)
-               ws.peer.remoteRejectedRequest(r)
+               if strings.Contains(errors.Cause(result.Err).Error(), "unsupported protocol scheme") {
+                       ws.peer.close()
+               } else {
+                       ws.peer.remoteRejectedRequest(r)
+               }
        } else {
                err := ws.peer.receiveChunk(&pp.Message{
                        Type:  pp.Piece,