13 "github.com/anacrolix/libtorgo/metainfo"
15 "bitbucket.org/anacrolix/go.torrent"
19 downloadDir = flag.String("downloadDir", "", "directory to store download torrent data")
20 testPeer = flag.String("testPeer", "", "bootstrap peer address")
21 httpAddr = flag.String("httpAddr", "", "http serve address")
22 // TODO: Check the default torrent listen port.
23 listenAddr = flag.String("listenAddr", ":6882", "incoming connection address")
24 disableTrackers = flag.Bool("disableTrackers", false, "disable trackers")
25 seed = flag.Bool("seed", false, "seed after downloading")
29 log.SetFlags(log.LstdFlags | log.Lshortfile)
33 func makeListener() net.Listener {
34 l, err := net.Listen("tcp", *listenAddr)
43 go http.ListenAndServe(*httpAddr, nil)
45 client := torrent.Client{
46 DataDir: *downloadDir,
47 Listener: makeListener(),
48 DisableTrackers: *disableTrackers,
50 http.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) {
56 fmt.Fprintln(os.Stderr, "no torrents specified")
59 for _, arg := range flag.Args() {
60 var ih torrent.InfoHash
61 if strings.HasPrefix(arg, "magnet:") {
62 m, err := torrent.ParseMagnetURI(arg)
64 log.Fatalf("error parsing magnet uri: %s", err)
67 err = client.AddMagnet(arg)
69 log.Fatalf("error adding magnet: %s", err)
72 metaInfo, err := metainfo.LoadFromFile(arg)
76 err = client.AddTorrent(metaInfo)
80 ih = torrent.BytesInfoHash(metaInfo.InfoHash)
82 client.PrioritizeDataRegion(ih, 0, 999999999)
83 err := client.AddPeers(ih, func() []torrent.Peer {
87 addr, err := net.ResolveTCPAddr("tcp", *testPeer)
91 return []torrent.Peer{{
103 if client.WaitAll() {
104 log.Print("all torrents completed!")
106 log.Fatal("y u no complete torrents?!")