12 "github.com/anacrolix/envpprof"
13 "github.com/anacrolix/tagflag"
14 "github.com/bradfitz/iter"
16 "github.com/anacrolix/torrent/metainfo"
26 func processReader(r io.Reader) error {
27 metainfo, err := metainfo.Load(r)
31 info, err := metainfo.UnmarshalInfo()
33 return fmt.Errorf("error unmarshalling info: %s", err)
36 fmt.Printf("%s\n", info.Name)
39 d := map[string]interface{}{
41 "NumPieces": info.NumPieces(),
42 "PieceLength": info.PieceLength,
43 "InfoHash": metainfo.HashInfoBytes().HexString(),
44 "NumFiles": len(info.UpvertedFiles()),
45 "TotalLength": info.TotalLength(),
46 "Announce": metainfo.Announce,
47 "AnnounceList": metainfo.AnnounceList,
48 "UrlList": metainfo.UrlList,
50 if len(metainfo.Nodes) > 0 {
51 d["Nodes"] = metainfo.Nodes
54 d["Files"] = info.UpvertedFiles()
56 if flags.PieceHashes {
57 d["PieceHashes"] = func() (ret []string) {
58 for i := range iter.N(info.NumPieces()) {
59 ret = append(ret, hex.EncodeToString(info.Pieces[i*20:(i+1)*20]))
64 b, _ := json.MarshalIndent(d, "", " ")
65 _, err = os.Stdout.Write(b)
72 err := processReader(bufio.NewReader(os.Stdin))
77 os.Stdout.WriteString("\n")