}
func (cl *Client) requestPendingMetadata(t *torrent, c *connection) {
+ if t.haveInfo() {
+ return
+ }
var pending []int
for index, have := range t.MetaDataHave {
if !have {
}
func (cl *Client) setMetaData(t *torrent, md MetaData) (err error) {
+ t.Info = md
t.Data, err = mmapTorrentData(md, cl.DataDir)
if err != nil {
return
if err != nil {
return
}
+ me.mu.Lock()
+ defer me.mu.Unlock()
err = me.addTorrent(t)
if err != nil {
return
var (
downloadDir = flag.String("downloadDir", "", "directory to store download torrent data")
testPeer = flag.String("testPeer", "", "bootstrap peer address")
- profAddr = flag.String("profAddr", "", "http serve address")
+ httpAddr = flag.String("httpAddr", "", "http serve address")
// TODO: Check the default torrent listen port.
listenAddr = flag.String("listenAddr", ":6882", "incoming connection address")
disableTrackers = flag.Bool("disableTrackers", false, "disable trackers")
}
func main() {
- if *profAddr != "" {
- go http.ListenAndServe(*profAddr, nil)
+ if *httpAddr != "" {
+ go http.ListenAndServe(*httpAddr, nil)
}
client := torrent.Client{
DataDir: *downloadDir,
Listener: makeListener(),
DisableTrackers: *disableTrackers,
}
+ http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
+ client.WriteStatus(w)
+ })
client.Start()
defer client.Stop()
if flag.NArg() == 0 {
func (me metaInfoMetaData) Files() []metainfo.FileInfo { return me.mi.Files }
func (me metaInfoMetaData) Name() string { return me.mi.Name }
-func (me metaInfoMetaData) PieceHashes() []string {
- return nil
+func (me metaInfoMetaData) PieceHashes() (ret []string) {
+ for i := 0; i < len(me.mi.Pieces); i += 20 {
+ ret = append(ret, string(me.mi.Pieces[i:i+20]))
+ }
+ return
}
func (me metaInfoMetaData) PieceLength() int64 { return me.mi.PieceLength }
func (me metaInfoMetaData) PieceCount() int {