Merge pull request #10 from ap-pauloafonso/fix-invalid-infohash

fix info hash
This commit is contained in:
ap-pauloafonso 2021-01-19 20:03:51 -03:00 committed by GitHub
commit b7f0fbaa85
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
2 changed files with 29 additions and 5 deletions

View file

@ -10,9 +10,9 @@ import (
"math"
"math/rand"
"net/http"
"net/url"
"os"
"os/signal"
"regexp"
"strconv"
"strings"
"sync"
@ -367,8 +367,8 @@ func (R *ratioSpoofState) changeCurrentTimer(newAnnounceRate int) {
}
func (R *ratioSpoofState) tryMakeRequest(query string) *trackerResponse {
for idx, url := range R.torrentInfo.trackerInfo.urls {
completeURL := url + "?" + strings.TrimLeft(query, "?")
for idx, baseUrl := range R.torrentInfo.trackerInfo.urls {
completeURL := buildFullUrl(baseUrl, query)
R.lastAnounceRequest = completeURL
req, _ := http.NewRequest("GET", completeURL, nil)
for header, value := range R.bitTorrentClient.Headers() {
@ -402,6 +402,13 @@ func (R *ratioSpoofState) tryMakeRequest(query string) *trackerResponse {
}
func buildFullUrl(baseurl, query string) string {
if len(strings.Split(baseurl, "?")) > 1 {
return baseurl + "&" + strings.TrimLeft(query, "&")
}
return baseurl + "?" + strings.TrimLeft(query, "?")
}
func calculateNextTotalSizeByte(speedBytePerSecond, currentByte, pieceSizeByte, seconds, limitTotalBytes int) int {
if speedBytePerSecond == 0 {
return currentByte
@ -421,7 +428,16 @@ func extractInfoHashURLEncoded(rawData []byte, torrentData map[string]interface{
h := sha1.New()
h.Write([]byte(rawData[byteOffsets[0]:byteOffsets[1]]))
ret := h.Sum(nil)
return url.QueryEscape(string(ret))
var buf bytes.Buffer
re := regexp.MustCompile(`[a-zA-Z0-9\.\-\_\~]`)
for _, b := range ret {
if re.Match([]byte{b}) {
buf.WriteByte(b)
} else {
buf.WriteString(fmt.Sprintf("%%%02x", b))
}
}
return buf.String()
}
func extractTotalSize(torrentData map[string]interface{}) int {

View file

@ -8,7 +8,7 @@ import (
func assertAreEqual(t *testing.T, got, want interface{}) {
t.Helper()
if got != want {
t.Errorf("\ngot: %v\n want: %v", got, want)
t.Errorf("\ngot : %v\nwant: %v", got, want)
}
}
@ -55,3 +55,11 @@ func TestClculateNextTotalSizeByte(T *testing.T) {
// want := "%60N%7d%1f%8b%3a%9bT%d5%fc%ad%d1%27%ab5%02%1c%fb%03%b0"
// assertAreEqual(T, got, want)
// }
// func TestUrlEncodeInfoHash2(T *testing.T) {
// b, _ := ioutil.ReadFile("")
// got := extractInfoHashURLEncoded(b, beencode.Decode(b))
// want := "%02r%fd%fe%bf%fbt%d0%0f%cf%d9%8c%e0%a9%97%f8%08%9b%00%b2"
// assertAreEqual(T, got, want)
// }