From 7ac138c434e5d916bad4ff1f9fa03c9f2f74a897 Mon Sep 17 00:00:00 2001 From: Dimitri Sokolyuk Date: Sun, 3 Jul 2016 16:42:40 +0200 Subject: Less magic --- bencode/bencode_test.go | 13 +++++-------- cmd/btshow/main.go | 17 ++++++++++++++++- examples/freebsd.magent | 24 ------------------------ meta/torrent.go | 34 ++++++++++------------------------ meta/torrent_test.go | 11 ++++++----- 5 files changed, 37 insertions(+), 62 deletions(-) delete mode 100644 examples/freebsd.magent diff --git a/bencode/bencode_test.go b/bencode/bencode_test.go index 8ef71fa..5965afa 100644 --- a/bencode/bencode_test.go +++ b/bencode/bencode_test.go @@ -1,14 +1,8 @@ package bencode -import ( - "encoding/hex" - "io/ioutil" - "testing" - "time" - - "dim13.org/btget/meta" -) +import "testing" +/* func TestMarshal(t *testing.T) { v := meta.Torrent{ Announce: "test", @@ -32,6 +26,7 @@ func TestMarshal(t *testing.T) { } t.Logf("%q\n", string(out)) } +*/ func TestParseString(t *testing.T) { in := "4:testZZZ" @@ -49,6 +44,7 @@ func TestParseInt(t *testing.T) { } } +/* var testCase = []struct { Torrent string InfoHash string @@ -103,6 +99,7 @@ func TestUnmarshalPartial(t *testing.T) { t.Log(tor.Announce) } } +*/ func TestBoolUnmarshal(t *testing.T) { var b struct{ A bool } diff --git a/cmd/btshow/main.go b/cmd/btshow/main.go index a737733..467fb34 100644 --- a/cmd/btshow/main.go +++ b/cmd/btshow/main.go @@ -2,18 +2,33 @@ package main import ( "fmt" + "io/ioutil" "log" "net/url" "os" + "dim13.org/btget/bencode" "dim13.org/btget/meta" ) +func Open(fname string) (meta.Torrent, error) { + var tor meta.Torrent + body, err := ioutil.ReadFile(fname) + if err != nil { + return meta.Torrent{}, err + } + err = bencode.Unmarshal(body, &tor) + if err != nil { + return meta.Torrent{}, err + } + return tor, nil +} + func main() { if len(os.Args) != 2 { log.Fatal("usage: ", os.Args[0], " ") } - tor, err := meta.New(os.Args[1]) + tor, err := Open(os.Args[1]) if err != nil { log.Fatal(err) } diff --git a/examples/freebsd.magent b/examples/freebsd.magent deleted file mode 100644 index 26b8e42..0000000 --- a/examples/freebsd.magent +++ /dev/null @@ -1,24 +0,0 @@ -magnet:?xt=urn:btih:6330363f6fa9df963315385795f186cec8d147cf&dn=FreeBSD-10.3-RELEASE-amd64-bootonly.iso -magnet:?xt=urn:btih:d9cbea30ff2873f843eec5723a8c08289f18f481&dn=FreeBSD-10.3-RELEASE-amd64-bootonly.iso.xz -magnet:?xt=urn:btih:c9578c19b4a0d7a430c65d4e9db90f4ed6cdcbd0&dn=FreeBSD-10.3-RELEASE-amd64-disc1.iso -magnet:?xt=urn:btih:734076d81000a65da39f686ec58a4375f5c971bf&dn=FreeBSD-10.3-RELEASE-amd64-disc1.iso.xz -magnet:?xt=urn:btih:8cbc695b8ecf023da60738bd876b0754680da02d&dn=FreeBSD-10.3-RELEASE-amd64-dvd1.iso -magnet:?xt=urn:btih:d96a5da8253d6adfd3b6684845b26f0d2d710d6c&dn=FreeBSD-10.3-RELEASE-amd64-dvd1.iso.xz -magnet:?xt=urn:btih:4a6d09ae02672380120ea6083a7304f502b63fb6&dn=FreeBSD-10.3-RELEASE-amd64-memstick.img -magnet:?xt=urn:btih:a0a1fbb8743a466a646a3dda5f140352240cf513&dn=FreeBSD-10.3-RELEASE-amd64-memstick.img.xz -magnet:?xt=urn:btih:0c945d1742825434a64192f64bfe7662be8fae6f&dn=FreeBSD-10.3-RELEASE-amd64-mini-memstick.img -magnet:?xt=urn:btih:f75c5cc0f218ca45a23ffbb6a3e27248beb899af&dn=FreeBSD-10.3-RELEASE-amd64-mini-memstick.img.xz -magnet:?xt=urn:btih:8498968b7d18273f0a83090d5cc0577b304b2ea9&dn=FreeBSD-10.3-RELEASE-amd64-uefi-bootonly.iso -magnet:?xt=urn:btih:6834430f15a06570061cc8f8473f306d6e5aef33&dn=FreeBSD-10.3-RELEASE-amd64-uefi-bootonly.iso.xz -magnet:?xt=urn:btih:385f21e07d6d7365d40fc7cafed3cd5e2727745e&dn=FreeBSD-10.3-RELEASE-amd64-uefi-disc1.iso -magnet:?xt=urn:btih:b1bde14e0241f4061eabf5dfd264eb0a06f538fa&dn=FreeBSD-10.3-RELEASE-amd64-uefi-disc1.iso.xz -magnet:?xt=urn:btih:68cec1c3b9430ce276a5575bf1da301a6f88a867&dn=FreeBSD-10.3-RELEASE-amd64-uefi-dvd1.iso -magnet:?xt=urn:btih:087b367511e26265bceb7547a567a7ad6d417069&dn=FreeBSD-10.3-RELEASE-amd64-uefi-dvd1.iso.xz -magnet:?xt=urn:btih:c91f18b7588f4ee017e7d12ba27110df374bd4fb&dn=FreeBSD-10.3-RELEASE-amd64-uefi-memstick.img -magnet:?xt=urn:btih:a392d1cc4115a864000f3ce2339947e335c9c100&dn=FreeBSD-10.3-RELEASE-amd64-uefi-memstick.img.xz -magnet:?xt=urn:btih:ffaf585463d65819aadc312728adc5b49b019afb&dn=FreeBSD-10.3-RELEASE-amd64-uefi-mini-memstick.img -magnet:?xt=urn:btih:5a4320f05bdcb571ed873b46e3baacee2e74f1fc&dn=FreeBSD-10.3-RELEASE-amd64-uefi-mini-memstick.img.xz -magnet:?xt=urn:btih:1901d3810b40b95561798215d164b13ae674f976&dn=FreeBSD-10.3-RELEASE-amd64.qcow2.xz -magnet:?xt=urn:btih:4216b65f8e35383c524044b747ce7aa63c63b61b&dn=FreeBSD-10.3-RELEASE-amd64.raw.xz -magnet:?xt=urn:btih:687816dfeba300a383d1a12361b7c97196459c16&dn=FreeBSD-10.3-RELEASE-amd64.vhd.xz -magnet:?xt=urn:btih:a2aa931b02cc212d22af2a766a1867672116c308&dn=FreeBSD-10.3-RELEASE-amd64.vmdk.xz diff --git a/meta/torrent.go b/meta/torrent.go index 886668f..002480c 100644 --- a/meta/torrent.go +++ b/meta/torrent.go @@ -5,12 +5,10 @@ import ( "crypto/sha1" "errors" "fmt" - "io/ioutil" + "log" "os" "path" "time" - - "dim13.org/btget/bencode" ) var ErrNotImplemented = errors.New("not implemented") @@ -31,32 +29,19 @@ type Info struct { Private bool `bencode:"private"` } -func New(fname string) (Torrent, error) { - var tor Torrent - body, err := ioutil.ReadFile(fname) - if err != nil { - return Torrent{}, err - } - err = bencode.Unmarshal(body, &tor) - if err != nil { - return Torrent{}, err - } - return tor, nil -} - func (i Info) NPieces() int { - return len(i.Pieces) / 20 + return len(i.Pieces) / sha1.Size } func (i Info) Check(b []byte, n int) bool { sum := sha1.Sum(b) - off := n * 20 - return bytes.Equal(i.Pieces[off:off+20], sum[:]) + off := n * sha1.Size + return bytes.Equal(i.Pieces[off:off+sha1.Size], sum[:]) } func (i Info) CheckSum(n int) []byte { - off := n * 20 - return i.Pieces[off : off+20] + off := n * sha1.Size + return i.Pieces[off : off+sha1.Size] } func (i Info) CheckSums() [][]byte { @@ -98,16 +83,17 @@ func (i Info) Offset(piece int) int { return i.PieceLength * piece } -func (i Info) FileOffset(piece int) (int, int, bool) { +func (i Info) FileOffset(piece int) (int, int) { off := i.PieceLength * piece for n, l := range i.Files { if l.Length < off { off -= l.Length } else { - return n, off, off+i.PieceLength > i.Length + log.Println(n, off, i.PieceLength-off) + return n, off } } - return 0, off, false + return 0, off } /* diff --git a/meta/torrent_test.go b/meta/torrent_test.go index 4965b87..5f304d5 100644 --- a/meta/torrent_test.go +++ b/meta/torrent_test.go @@ -1,20 +1,21 @@ package meta -import "testing" - var tors = map[string]string{ "bsd": "OpenBSD_5.9_amd64_install59.iso-2016-03-29-0449.torrent", "ogg": "OpenBSD_songs_ogg-2016-03-25-0127.torrent", "deb": "debian-8.5.0-amd64-netinst.iso.torrent", + "mul": "multi.torrent", } +/* func TestPieces(t *testing.T) { - tor, err := New("../examples/" + tors["ogg"]) + tor, err := Open("../examples/" + tors["mul"]) if err != nil { t.Error(err) } for i := 0; i < tor.Info.NPieces(); i++ { - n, off, span := tor.Info.FileOffset(i) - t.Log(n, off, span) + n, off := tor.Info.FileOffset(i) + t.Log(n, off) } } +*/ -- cgit v1.2.3