コード例 #1
0
// EncodeResponse groups all of the peer-requested data into a nice bencoded
// string that we respond with.
func EncodeResponse(ipport []string, data *AnnounceData) (resp string) {
	ret := ""
	completeCount := len(redisPeerStore.GetKeyVal(nil, data.InfoHash))
	incompleteCount := len(redisPeerStore.GetKeyVal(nil, data.InfoHash))
	ret += bencode.EncodeKV("complete", bencode.EncodeInt(completeCount))

	ret += bencode.EncodeKV("incomplete", bencode.EncodeInt(incompleteCount))
	if data.Compact || !data.Compact {
		ipstr := string(CompactAllPeers(ipport))
		ret += bencode.EncodeKV("peers", ipstr)
	} else {
		return bencode.EncodePeerList(ipport)
	}

	return fmt.Sprintf("d%se", ret)
}
コード例 #2
0
func formatScrapeResponse(torrent *schemas.Torrent) string {
	subdir := fmt.Sprintf("d%s%s%s%s%s%se",
		bencode.EncodeByteString("complete"),
		bencode.EncodeInt(int(torrent.Seeders)),

		bencode.EncodeByteString("downloaded"),
		bencode.EncodeInt(int(torrent.Downloaded)),

		bencode.EncodeByteString("incomplete"),
		bencode.EncodeInt(int(torrent.Leechers)),
	)

	fileList := bencode.EncodeKV(
		bencode.EncodeByteString(torrent.InfoHash),
		subdir,
	)

	return fmt.Sprintf("d%se", fileList)
}