From 0b385a409bd30d57cedbcfe4ddd8972d69c00b84 Mon Sep 17 00:00:00 2001 From: nsf Date: Thu, 28 Jun 2012 02:26:56 +0600 Subject: [PATCH] Add first bits of "torrent" library (.torrent file manipulation). Add missing testdata for bencode also. --- bencode/_testdata/continuum.torrent | Bin 0 -> 31207 bytes torrent/README | 1 + ...nux-2011.08.19-netinstall-i686.iso.torrent | Bin 0 -> 12792 bytes torrent/_testdata/continuum.torrent | Bin 0 -> 31207 bytes torrent/file.go | 167 ++++++++++++++++++ torrent/file_test.go | 36 ++++ 6 files changed, 204 insertions(+) create mode 100644 bencode/_testdata/continuum.torrent create mode 100644 torrent/README create mode 100644 torrent/_testdata/archlinux-2011.08.19-netinstall-i686.iso.torrent create mode 100644 torrent/_testdata/continuum.torrent create mode 100644 torrent/file.go create mode 100644 torrent/file_test.go diff --git a/bencode/_testdata/continuum.torrent b/bencode/_testdata/continuum.torrent new file mode 100644 index 0000000000000000000000000000000000000000..ac15b751a4682bf99ad56ded94c2cc1fb00fe6b3 GIT binary patch literal 31207 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%0D*f1Euc8hO)={iLER+R%jSr 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 0 { + return MultiFile{Name: f.name, Files: f.files} + } + return SingleFile{Name: f.name, Length: f.length} +} + +func Open(r io.Reader) (*File, error) { + var file File + var data torrent_data + d := bencode.NewDecoder(r) + err := d.Decode(&data) + if err != nil { + return nil, err + } + + // post-parse processing + file.name = data.Info.Name + file.length = data.Info.Length + if len(data.Info.Files) > 0 { + file.files = make([]FileInfo, len(data.Info.Files)) + for i, fi := range data.Info.Files { + file.files[i] = FileInfo{ + Length: fi.Length, + Path: fi.Path, + } + } + } + file.InfoHash = data.Info.Hash + file.PieceLength = data.Info.PieceLength + file.Pieces = data.Info.Pieces + file.Private = data.Info.Private + + if len(data.AnnounceList) > 0 { + file.AnnounceList = data.AnnounceList + } else { + file.AnnounceList = [][]string{[]string{data.Announce}} + } + file.CreationDate = time.Unix(data.CreationDate, 0) + file.Comment = data.Comment + file.CreatedBy = data.CreatedBy + file.Encoding = data.Encoding + if data.URLList != nil { + switch v := data.URLList.(type) { + case string: + file.URLList = []string{v} + case []interface{}: + var ok bool + ss := make([]string, len(v)) + for i, s := range v { + ss[i], ok = s.(string) + if !ok { + return nil, errors.New("bad url-list data type") + } + } + file.URLList = ss + default: + return nil, errors.New("bad url-list data type") + } + } + return &file, nil +} + +func OpenFromFile(filename string) (*File, error) { + f, err := os.Open(filename) + if err != nil { + return nil, err + } + defer f.Close() + return Open(f) +} + +//---------------------------------------------------------------------------- +// unmarshal structures +//---------------------------------------------------------------------------- + +type torrent_info_file struct { + Path []string `bencode:"path"` + Length int64 `bencode:"length"` + MD5Sum []byte `bencode:"md5sum,omitempty"` +} + +type torrent_info struct { + PieceLength int64 `bencode:"piece length"` + Pieces []byte `bencode:"pieces"` + Name string `bencode:"name"` + Length int64 `bencode:"length,omitempty"` + MD5Sum []byte `bencode:"md5sum,omitempty"` + Private bool `bencode:"private,omitempty"` + Files []torrent_info_file `bencode:"files,omitempty"` +} + +type torrent_info_ex struct { + torrent_info + Hash []byte +} + +func (this *torrent_info_ex) UnmarshalBencode(data []byte) error { + h := sha1.New() + h.Write(data) + this.Hash = h.Sum(this.Hash) + return bencode.Unmarshal(data, &this.torrent_info) +} + +type torrent_data struct { + Info torrent_info_ex `bencode:"info"` + Announce string `bencode:"announce"` + AnnounceList [][]string `bencode:"announce-list,omitempty"` + CreationDate int64 `bencode:"creation date,omitempty"` + Comment string `bencode:"comment,omitempty"` + CreatedBy string `bencode:"created by,omitempty"` + Encoding string `bencode:"encoding,omitempty"` + URLList interface{} `bencode:"url-list,omitempty"` +} diff --git a/torrent/file_test.go b/torrent/file_test.go new file mode 100644 index 00000000..32a9edb8 --- /dev/null +++ b/torrent/file_test.go @@ -0,0 +1,36 @@ +package torrent + +import "testing" +import "path" + +func test_file(t *testing.T, filename string) { + f, err := OpenFromFile(filename) + if err != nil { + t.Fatal(err) + } + + switch info := f.Info().(type) { + case SingleFile: + t.Logf("Single file: %s (length: %d)\n", info.Name, info.Length) + case MultiFile: + t.Logf("Multiple files: %s\n", info.Name) + for _, f := range info.Files { + t.Logf(" - %s (length: %d)\n", path.Join(f.Path...), f.Length) + } + } + + for _, group := range f.AnnounceList { + for _, tracker := range group { + t.Logf("Tracker: %s\n", tracker) + } + } + for _, url := range f.URLList { + t.Logf("URL: %s\n", url) + } + +} + +func TestFile(t *testing.T) { + test_file(t, "_testdata/archlinux-2011.08.19-netinstall-i686.iso.torrent") + test_file(t, "_testdata/continuum.torrent") +} -- 2.48.1