diff --git a/webseed/request.go b/webseed/request.go index 6d62ccb6..4e3ef609 100644 --- a/webseed/request.go +++ b/webseed/request.go @@ -10,10 +10,12 @@ import ( "github.com/anacrolix/torrent/metainfo" ) -func trailingPath(infoName string, pathComps []string) string { +// Escapes path name components suitable for appending to a webseed URL. This works for converting +// S3 object keys to URLs too. +func EscapePath(pathComps []string) string { return path.Join( func() (ret []string) { - for _, comp := range append([]string{infoName}, pathComps...) { + for _, comp := range pathComps { ret = append(ret, url.QueryEscape(comp)) } return @@ -21,6 +23,10 @@ func trailingPath(infoName string, pathComps []string) string { ) } +func trailingPath(infoName string, fileComps []string) string { + return EscapePath(append([]string{infoName}, fileComps...)) +} + // 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]