From cc17c8a54ce2b25ff481b4b5094f612fdafdae46 Mon Sep 17 00:00:00 2001 From: Matt Joiner Date: Fri, 16 Jun 2017 17:07:30 +1000 Subject: [PATCH] metainfo URL list can be a string or list --- metainfo/metainfo.go | 2 +- metainfo/metainfo_test.go | 12 ++++++++ .../SKODAOCTAVIA336x280_archive.torrent | Bin 0 -> 2826 bytes metainfo/testdata/flat-url-list.torrent | Bin 0 -> 2739 bytes metainfo/urllist.go | 27 ++++++++++++++++++ 5 files changed, 40 insertions(+), 1 deletion(-) create mode 100644 metainfo/testdata/SKODAOCTAVIA336x280_archive.torrent create mode 100644 metainfo/testdata/flat-url-list.torrent create mode 100644 metainfo/urllist.go diff --git a/metainfo/metainfo.go b/metainfo/metainfo.go index 947bd713..55624e99 100644 --- a/metainfo/metainfo.go +++ b/metainfo/metainfo.go @@ -17,7 +17,7 @@ type MetaInfo struct { Comment string `bencode:"comment,omitempty"` CreatedBy string `bencode:"created by,omitempty"` Encoding string `bencode:"encoding,omitempty"` - URLList []string `bencode:"url-list,omitempty"` + UrlList UrlList `bencode:"url-list,omitempty"` } // Load a MetaInfo from an io.Reader. Returns a non-nil error in case of diff --git a/metainfo/metainfo_test.go b/metainfo/metainfo_test.go index 037f8825..2f1ec745 100644 --- a/metainfo/metainfo_test.go +++ b/metainfo/metainfo_test.go @@ -116,3 +116,15 @@ func TestUnmarshal(t *testing.T) { testUnmarshal(t, `d4:infoabce`, nil) testUnmarshal(t, `d4:infodee`, &MetaInfo{InfoBytes: []byte("de")}) } + +func TestMetainfoWithListURLList(t *testing.T) { + mi, err := LoadFromFile("testdata/SKODAOCTAVIA336x280_archive.torrent") + require.NoError(t, err) + assert.Len(t, mi.UrlList, 3) +} + +func TestMetainfoWithStringURLList(t *testing.T) { + mi, err := LoadFromFile("testdata/flat-url-list.torrent") + require.NoError(t, err) + assert.Len(t, mi.UrlList, 1) +} diff --git a/metainfo/testdata/SKODAOCTAVIA336x280_archive.torrent b/metainfo/testdata/SKODAOCTAVIA336x280_archive.torrent new file mode 100644 index 0000000000000000000000000000000000000000..40ec11f6e8b833034e980af28a3264ada1da5bee GIT binary patch literal 2826 zcma);Tc{n?8OQa(NY#=;AG}~-2yLUmoU_)Nb)7zx(mzUp?NY-P%``A*&>zA9UMPdZi8LP%_zv>iwe;9y-so6N1z4#o#D zG#JEG0J8yFn-|UOq3aLsojdru`MFyT%%!PZW|~~GKQEw3x^^Y$*hNTu$Ce8au1l6W zx$h*s8WwTiCTXj>9zMjn>L#IDDvQd7yj(yu{NmeUC8=tB>Gld}p;-BKf)BPCtO)){ z67i!glYTGQK>(xWwgeunzZvmnV~5Alj@G^8hN^`usiCcNShPjbZ~C@C#2W7G=QRdw z6JO*5McWRF*7SS5s>U#vz%>BFxUTsecpEP-@F|r#6bczN*Iy~{W%rQSmkES zG+rUuB*TZhnEjdMZZR|wqG7gi1oL1M>#F`h0(96YfL#->H8YfCzJ_7G+zJ(0ZVz|u z5jZ@Wij^?@oL6Ns$ZAfxQCw;z6!0uBV-+YxCl>|Aj+2@qr5V=K#QB@Rg2;wS6hYwP zK4m&%)Pa;F%B+BL0a+DGwV{w^-5^qy0nwaB&Wv%!GQu5+jHbqDW~_11h^*V@UBF-{ z*NO>gIOkcFCO1)<=#SBqvE7zGRQB)Z{fu<}5B7=9rfR+I~?rNO3k!ayu)MrC0Ld^M~tA)jN zXya(=y!SyUj8}lLW?b#*V_C> zN4r!Lt7+guV(CB(&IdH8PrXCMt(HdXNJyL#nvx($Ku?dEQD{Q>dKvo2RIn+e;DFNr zXcHBq3xgi8 zQZTLu1@5pJpiLaM2M6f&z|b7j%PDYbI52{3Z>+ZD>%Bvz*n6UrSc}dW#yv4#>RHKB{rTA>&&R4AJAEESW0bRL>my1F_m&kSd5BFE`=V1Sz7F_X0wGU z%X&HB(KYJar~uO%@_4LepZ+`sLj?bkk2-xhbyAK7+NKJxC46Tke+?$cM?{n@GOe)EfW ze|zfnKi~hsuf9F;;bZSSd&`+uzPEJQ{AQ^t`x&%w#-2C_Z_TNR{xZ|sjAO3XTy$`>z@9F2~Et)NPqJ(NwEEOTudW_?VE*xku73U4jgK5Xb|wA!`|;wpp1bkB zd4F?#@Xfh5x4r#O478}cEdURxQe3tUPI5h!i{f4cp#0gskxO{ dVuZ}}o5_)i$LlPUv*^EWGdn$1|Np4~{{uoGn)v_# literal 0 HcmV?d00001 diff --git a/metainfo/testdata/flat-url-list.torrent b/metainfo/testdata/flat-url-list.torrent new file mode 100644 index 0000000000000000000000000000000000000000..216ab38cacceff5f5bfd42e1958ce966dad53a1c GIT binary patch literal 2739 zcma);Nr)Xq7{~Qs#3(3uaKS(m)Mzj>Rn@h&2N_KwK`>%Q5e1W4zM9vjU-z@SXG3s3 zh=RBT5j}_ts0S6qgB}tWTn-}S;EEf92!jZU2NjLt_g?0`d6Uc#Z{1bZRlo25{lBj( z=**U7HCuW}W!7oiUN$-DS~_8C-^u4-qN-;yX{4DPE~Dw_i)}^Tv_kgSp6yN123XB~WHAPA@tf!Il*MJ3)4U{N?z|DQibjGLyDM^%B z0p$#`Dwb+PAQao$Fvg>z9K3#|w-CxWhK=2oDMqp9=W2ca-t z0g}fk8CV-UP-mh{h1ZhsF=!PaDy!K@Xqg&e%!t`zq*ieY2yS$$Eij`axKuczm^zLb z+a_I)IVEI)9V@g~3_On-g^s}n6}2K1Ou!sUf~GQpgVN58F-K~NbWx3%DMbbO7&H%r zYr(YFK2lAYi;fE~v@%|UkH-tm)QO;139Ttb#|zC>pxzNHz(&iZ)J_Mhq=*3=@i6X= zhz_+1ldaLcj<(w7_9Aa#r4+R==m9GQP-J5-9jCpw9>=!{|9gQNlRLj6)FJpa1R1 zeJ@|TY3byh8%{a%(wFO7;^yi78xG1Rzu0u(qQ|x#KKHI44_$V}gG1g* zuRr+v)`RSldzW5(^u47$4^2P!=mj6%bKR47-g6#3`>S~Br>|c3z_h=i-u=ncCmTL{ n2LmlCZwtVmR4KAHZ;N$=(%EcX46c*R3~r&v-Qb27BG~vJS9N~v literal 0 HcmV?d00001 diff --git a/metainfo/urllist.go b/metainfo/urllist.go new file mode 100644 index 00000000..8171f198 --- /dev/null +++ b/metainfo/urllist.go @@ -0,0 +1,27 @@ +package metainfo + +import ( + "github.com/anacrolix/torrent/bencode" +) + +type UrlList []string + +var ( + _ bencode.Unmarshaler = (*UrlList)(nil) +) + +func (me *UrlList) UnmarshalBencode(b []byte) error { + if len(b) == 0 { + return nil + } + if b[0] == 'l' { + var l []string + err := bencode.Unmarshal(b, &l) + *me = l + return err + } + var s string + err := bencode.Unmarshal(b, &s) + *me = []string{s} + return err +} -- 2.48.1