13 "bitbucket.org/anacrolix/go.torrent/util"
15 "github.com/anacrolix/libtorgo/metainfo"
17 "bitbucket.org/anacrolix/go.torrent"
21 downloadDir = flag.String("downloadDir", "", "directory to store download torrent data")
22 testPeer = flag.String("testPeer", "", "bootstrap peer address")
23 httpAddr = flag.String("httpAddr", "localhost:0", "http serve address")
24 // TODO: Check the default torrent listen port.
25 listenAddr = flag.String("listenAddr", ":6882", "incoming connection address")
26 disableTrackers = flag.Bool("disableTrackers", false, "disable trackers")
27 seed = flag.Bool("seed", false, "seed after downloading")
31 log.SetFlags(log.LstdFlags | log.Lshortfile)
37 util.LoggedHTTPServe(*httpAddr)
39 client, err := torrent.NewClient(&torrent.Config{
40 DataDir: *downloadDir,
41 DisableTrackers: *disableTrackers,
42 ListenAddr: *listenAddr,
45 log.Fatalf("error creating client: %s", err)
47 http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
52 fmt.Fprintln(os.Stderr, "no torrents specified")
55 for _, arg := range flag.Args() {
56 var ih torrent.InfoHash
57 if strings.HasPrefix(arg, "magnet:") {
58 m, err := torrent.ParseMagnetURI(arg)
60 log.Fatalf("error parsing magnet uri: %s", err)
63 err = client.AddMagnet(arg)
65 log.Fatalf("error adding magnet: %s", err)
68 metaInfo, err := metainfo.LoadFromFile(arg)
72 err = client.AddTorrent(metaInfo)
76 util.CopyExact(&ih, metaInfo.Info.Hash)
78 client.PrioritizeDataRegion(ih, 0, 999999999)
79 err := client.AddPeers(ih, func() []torrent.Peer {
83 addr, err := net.ResolveTCPAddr("tcp", *testPeer)
87 return []torrent.Peer{{
100 log.Print("all torrents completed!")
102 log.Fatal("y u no complete torrents?!")