]> Sergey Matveev's repositories - btrtrc.git/commitdiff
Fixes for cmd/torrent with the new torrent.Info field
authorMatt Joiner <anacrolix@gmail.com>
Fri, 27 Jun 2014 08:57:35 +0000 (18:57 +1000)
committerMatt Joiner <anacrolix@gmail.com>
Fri, 27 Jun 2014 08:57:35 +0000 (18:57 +1000)
client.go
cmd/torrent/main.go
misc.go
torrent.go

index 13589a0d5a70a067621bf821d45564203378e666..c159d7426c2ccf96cc912bb37108b69c8a330d34 100644 (file)
--- 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
index 6874ef678cc8e6347f77fcdc0fca307bb4aa44e2..5b7bc54e45616bc1f0c535da4e4a47a811c4ab4e 100644 (file)
@@ -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 3ffb2852fff18bed81b0feb5ef808bf978a1e743..2e2436f9ad6434b9e9a8a9ef4e905120f2cac3ca 100644 (file)
--- 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 {
index e051d8b96df3e7cb8690d0fd79eae02efcea86a3..18ddc6db8bb22005bed6cba1412a8a7128490ff9 100644 (file)
@@ -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 {