Merge branch 'v1.19'

* v1.19:
  Further fixes to webseed path encoding
  Update README.md
  Move request strategy doc comments onto their public functions
  Add deprecated ParseMagnetURI
This commit is contained in:
Matt Joiner 2020-12-21 19:12:40 +11:00
commit 28cab41400
3 changed files with 38 additions and 8 deletions

View File

@ -46,6 +46,9 @@ func (m Magnet) String() string {
return u.String()
}
// Deprecated: Use ParseMagnetUri.
var ParseMagnetURI = ParseMagnetUri
// ParseMagnetUri parses Magnet-formatted URIs into a Magnet instance
func ParseMagnetUri(uri string) (m Magnet, err error) {
u, err := url.Parse(uri)

View File

@ -10,20 +10,24 @@ import (
"github.com/anacrolix/torrent/metainfo"
)
func trailingPath(infoName string, pathComps []string) string {
return path.Join(
func() (ret []string) {
for _, comp := range append([]string{infoName}, pathComps...) {
ret = append(ret, url.QueryEscape(comp))
}
return
}()...,
)
}
// Creates a request per BEP 19.
func NewRequest(url_ string, fileIndex int, info *metainfo.Info, offset, length int64) (*http.Request, error) {
fileInfo := info.UpvertedFiles()[fileIndex]
if strings.HasSuffix(url_, "/") {
// BEP specifies that we append the file path. We need to escape each component of the path
// for things like spaces and '#'.
url_ += path.Join(
func() (ret []string) {
for _, comp := range append([]string{info.Name}, fileInfo.Path...) {
ret = append(ret, url.PathEscape(comp))
}
return
}()...,
)
url_ += trailingPath(info.Name, fileInfo.Path)
}
req, err := http.NewRequest(http.MethodGet, url_, nil)
if err != nil {

23
webseed/request_test.go Normal file
View File

@ -0,0 +1,23 @@
package webseed
import (
"net/url"
"testing"
qt "github.com/frankban/quicktest"
)
func TestTrailingPath(t *testing.T) {
c := qt.New(t)
test := func(parts []string, result string) {
unescaped, err := url.QueryUnescape(trailingPath(parts[0], parts[1:]))
if !c.Check(err, qt.IsNil) {
return
}
c.Check(unescaped, qt.Equals, result)
}
test([]string{"a_b-c", "d + e.f"}, "a_b-c/d + e.f")
test([]string{"a_1-b_c2", "d 3. (e, f).g"},
"a_1-b_c2/d 3. (e, f).g",
)
}