From 9d53e195471b6e6979f93df66ca54d1d137dc9b9 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Fri, 27 Jun 2014 18:57:35 +1000 Subject: [PATCH] Fixes for cmd/torrent with the new torrent.Info field --- client.go | 6 ++++++ cmd/torrent/main.go | 9 ++++++--- misc.go | 7 +++++-- torrent.go | 2 +- 4 files changed, 18 insertions(+), 6 deletions(-) diff --git a/client.go b/client.go index 13589a0d..c159d742 100644 --- a/client.go +++ b/client.go @@ -411,6 +411,9 @@ func (cl *Client) connDeleteRequest(t *torrent, cn *connection, r request) { } func (cl *Client) requestPendingMetadata(t *torrent, c *connection) { + if t.haveInfo() { + return + } var pending []int for index, have := range t.MetaDataHave { if !have { @@ -663,6 +666,7 @@ func (me *Client) AddPeers(infoHash InfoHash, peers []Peer) error { } func (cl *Client) setMetaData(t *torrent, md MetaData) (err error) { + t.Info = md t.Data, err = mmapTorrentData(md, cl.DataDir) if err != nil { return @@ -757,6 +761,8 @@ func (me *Client) AddTorrent(metaInfo *metainfo.MetaInfo) (err error) { if err != nil { return } + me.mu.Lock() + defer me.mu.Unlock() err = me.addTorrent(t) if err != nil { return diff --git a/cmd/torrent/main.go b/cmd/torrent/main.go index 6874ef67..5b7bc54e 100644 --- a/cmd/torrent/main.go +++ b/cmd/torrent/main.go @@ -18,7 +18,7 @@ import ( 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") @@ -39,14 +39,17 @@ func makeListener() net.Listener { } 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 { diff --git a/misc.go b/misc.go index 3ffb2852..2e2436f9 100644 --- a/misc.go +++ b/misc.go @@ -109,8 +109,11 @@ type metaInfoMetaData struct { 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 { diff --git a/torrent.go b/torrent.go index e051d8b9..18ddc6db 100644 --- a/torrent.go +++ b/torrent.go @@ -279,7 +279,7 @@ func (t *torrent) HashPiece(piece pp.Integer) (ps pieceSum) { return } func (t *torrent) haveAllPieces() bool { - if t.Info == nil { + if !t.haveInfo() { return false } for _, piece := range t.Pieces { -- 2.48.1