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:
commit
28cab41400
|
@ -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)
|
||||
|
|
|
@ -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 {
|
|
@ -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",
|
||||
)
|
||||
}
|
Loading…
Reference in New Issue