torrent: comments and starting more tests
This commit is contained in:
parent
7f39bac612
commit
c9343672f0
3 changed files with 38 additions and 9 deletions
|
@ -5,30 +5,31 @@ import (
|
|||
"time"
|
||||
)
|
||||
|
||||
// https://wiki.theory.org/BitTorrentSpecification#Metainfo_File_Structure
|
||||
// File is a representation of https://wiki.theory.org/BitTorrentSpecification#Metainfo_File_Structure
|
||||
type File struct {
|
||||
// URL of a main tracker
|
||||
// Announce is the URL of a main tracker
|
||||
Announce string `bencode:"announce"`
|
||||
|
||||
// List of additional trackers
|
||||
// AnnounceList lists additional trackers
|
||||
AnnounceList []string `bencode:"announce-list"`
|
||||
|
||||
// Epoch of the creation of this torrent
|
||||
// CreationDate is epoch of the creation of this torrent
|
||||
CreationDate int64 `bencode:"creation date,omitempty"`
|
||||
|
||||
// Dictionary about this torrent, including files to be tracked
|
||||
// Info is the dictionary about this torrent, including files to be tracked
|
||||
Info InfoSection `bencode:"info,omitempty"`
|
||||
|
||||
// free-form textual comments of the author
|
||||
// Comment is free-form textual comments of the author
|
||||
Comment string `bencode:"comment,omitempty"`
|
||||
|
||||
// name and version of the program used to create the .torrent
|
||||
// CreatedBy is the name and version of the program used to create the .torrent
|
||||
CreatedBy string `bencode:"created by,omitempty"`
|
||||
|
||||
// string encoding used to generate the `pieces` and `info` fields
|
||||
// Encoding string encoding used to generate the `pieces` and `info` fields
|
||||
Encoding string `bencode:"encoding"`
|
||||
}
|
||||
|
||||
// CreationDateTime returns a time from the File's CreationDate
|
||||
func (f File) CreationDateTime() time.Time {
|
||||
return time.Unix(f.CreationDate, 0)
|
||||
}
|
||||
|
@ -84,6 +85,8 @@ var (
|
|||
ErrNotProperDataInterface = torrentError{"data does not look like map[string]interface{}"}
|
||||
)
|
||||
|
||||
// DecocdeTorrentData translates a bencode decoded message from a *.torrent file.
|
||||
// Assuming a generic map[string]interface{} data.
|
||||
func DecocdeTorrentData(data interface{}) (*File, error) {
|
||||
m, ok := data.(map[string]interface{})
|
||||
if !ok {
|
||||
|
|
|
@ -2,10 +2,34 @@ package torrent
|
|||
|
||||
import (
|
||||
"bytes"
|
||||
"github.com/vbatts/go-bt/bencode"
|
||||
"fmt"
|
||||
"io/ioutil"
|
||||
"testing"
|
||||
|
||||
"github.com/vbatts/go-bt/bencode"
|
||||
)
|
||||
|
||||
func TestDecode(t *testing.T) {
|
||||
data := new(map[string]interface{})
|
||||
tData, err := ioutil.ReadFile("./testdata/farts.torrent")
|
||||
if err != nil {
|
||||
t.Fatal(err)
|
||||
}
|
||||
|
||||
// currently failing in ./bencode/struct.go:134
|
||||
if err := bencode.Unmarshal(tData, &data); err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
f, err := DecocdeTorrentData(data)
|
||||
if err != nil {
|
||||
t.Error(err)
|
||||
}
|
||||
|
||||
fmt.Printf("%#v\n", f)
|
||||
|
||||
}
|
||||
|
||||
func TestFileMarshal(t *testing.T) {
|
||||
f1 := File{
|
||||
Announce: "http://foo.bar.com:9090/announce",
|
||||
|
|
2
torrent/testdata/farts.torrent
vendored
Normal file
2
torrent/testdata/farts.torrent
vendored
Normal file
|
@ -0,0 +1,2 @@
|
|||
d8:announce41:http://bananaboat.usersys.redhat.com:90907:comment12:farts, y'all10:created by25:Transmission/2.84 (14307)13:creation datei1467900546e8:encoding5:UTF-84:infod5:filesld6:lengthi10e4:pathl10:README.txteee4:name5:farts12:piece lengthi32768e6:pieces20:_¦n"gEU¾l
|
||||
Ø L97§¸Ž87:privatei0eee
|
Loading…
Reference in a new issue