From 65db2436fdfde2cf801cf32a536ee4ae7a6405bf Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Wed, 9 Dec 2020 20:01:53 +1100 Subject: [PATCH] cmd/torrent: Add spew-bencoding command --- cmd/torrent/main.go | 25 +++++++++++++++++++++++-- 1 file changed, 23 insertions(+), 2 deletions(-) diff --git a/cmd/torrent/main.go b/cmd/torrent/main.go index d860ca4f..1cc79923 100644 --- a/cmd/torrent/main.go +++ b/cmd/torrent/main.go @@ -4,6 +4,7 @@ package main import ( "expvar" "fmt" + "io" stdLog "log" "net" "net/http" @@ -15,6 +16,8 @@ import ( "github.com/alexflint/go-arg" "github.com/anacrolix/missinggo" + "github.com/anacrolix/torrent/bencode" + "github.com/davecgh/go-spew/spew" "github.com/dustin/go-humanize" "golang.org/x/xerrors" @@ -153,8 +156,12 @@ var flags struct { Debug bool Stats *bool - *DownloadCmd `arg:"subcommand:download"` - *ListFilesCmd `arg:"subcommand:list-files"` + *DownloadCmd `arg:"subcommand:download"` + *ListFilesCmd `arg:"subcommand:list-files"` + *SpewBencodingCmd `arg:"subcommand:spew-bencoding"` +} + +type SpewBencodingCmd struct { } //DownloadCmd: &DownloadCmd{ @@ -253,6 +260,20 @@ func mainErr() error { fmt.Println(f.DisplayPath(&info)) } return nil + case flags.SpewBencodingCmd != nil: + d := bencode.NewDecoder(os.Stdin) + for i := 0; ; i++ { + var v interface{} + err := d.Decode(&v) + if err == io.EOF { + break + } + if err != nil { + return fmt.Errorf("decoding message index %d: %w", i, err) + } + spew.Dump(v) + } + return nil default: p.Fail(fmt.Sprintf("unexpected subcommand: %v", p.Subcommand())) panic("unreachable") -- 2.44.0