From cbc9aee65c67db0d9021608cd7e15f9c479aa83d Mon Sep 17 00:00:00 2001 From: chudov Date: Tue, 7 Jun 2011 19:59:07 +0000 Subject: [PATCH] Removed outdated files which are now kept in Mercurial repository for CTDB server --- CUETools.CTDB/Web/404.html | 8 - CUETools.CTDB/Web/about.php | 35 -- CUETools.CTDB/Web/ctdb.png | Bin 22906 -> 0 bytes CUETools.CTDB/Web/favicon.ico | Bin 2550 -> 0 bytes CUETools.CTDB/Web/img/bg_bottom.jpg | Bin 9714 -> 0 bytes CUETools.CTDB/Web/img/bg_left_border.jpg | Bin 9727 -> 0 bytes CUETools.CTDB/Web/img/bg_right_border.jpg | Bin 9726 -> 0 bytes CUETools.CTDB/Web/img/bg_top_border.jpg | Bin 9710 -> 0 bytes CUETools.CTDB/Web/img/bottom_left_corner.jpg | Bin 293 -> 0 bytes CUETools.CTDB/Web/img/bottom_right_corner.jpg | Bin 290 -> 0 bytes CUETools.CTDB/Web/img/top_left_corner.jpg | Bin 293 -> 0 bytes CUETools.CTDB/Web/img/top_right_corner.jpg | Bin 293 -> 0 bytes CUETools.CTDB/Web/index.php | 49 --- CUETools.CTDB/Web/list.php | 13 - CUETools.CTDB/Web/logo_start.php | 81 ---- CUETools.CTDB/Web/phpctdb/ctdb.php | 370 ------------------ CUETools.CTDB/Web/robots.txt | 4 - CUETools.CTDB/Web/show.php | 98 ----- CUETools.CTDB/Web/submit.php | 103 ----- CUETools.CTDB/Web/table_end.php | 9 - CUETools.CTDB/Web/table_start.php | 10 - CUETools.CTDB/Web/top.php | 48 --- CUETools.CTDB/uploader.php | 355 ----------------- 23 files changed, 1183 deletions(-) delete mode 100644 CUETools.CTDB/Web/404.html delete mode 100644 CUETools.CTDB/Web/about.php delete mode 100644 CUETools.CTDB/Web/ctdb.png delete mode 100644 CUETools.CTDB/Web/favicon.ico delete mode 100644 CUETools.CTDB/Web/img/bg_bottom.jpg delete mode 100644 CUETools.CTDB/Web/img/bg_left_border.jpg delete mode 100644 CUETools.CTDB/Web/img/bg_right_border.jpg delete mode 100644 CUETools.CTDB/Web/img/bg_top_border.jpg delete mode 100644 CUETools.CTDB/Web/img/bottom_left_corner.jpg delete mode 100644 CUETools.CTDB/Web/img/bottom_right_corner.jpg delete mode 100644 CUETools.CTDB/Web/img/top_left_corner.jpg delete mode 100644 CUETools.CTDB/Web/img/top_right_corner.jpg delete mode 100644 CUETools.CTDB/Web/index.php delete mode 100644 CUETools.CTDB/Web/list.php delete mode 100644 CUETools.CTDB/Web/logo_start.php delete mode 100644 CUETools.CTDB/Web/phpctdb/ctdb.php delete mode 100644 CUETools.CTDB/Web/robots.txt delete mode 100644 CUETools.CTDB/Web/show.php delete mode 100644 CUETools.CTDB/Web/submit.php delete mode 100644 CUETools.CTDB/Web/table_end.php delete mode 100644 CUETools.CTDB/Web/table_start.php delete mode 100644 CUETools.CTDB/Web/top.php delete mode 100644 CUETools.CTDB/uploader.php diff --git a/CUETools.CTDB/Web/404.html b/CUETools.CTDB/Web/404.html deleted file mode 100644 index 3d18775..0000000 --- a/CUETools.CTDB/Web/404.html +++ /dev/null @@ -1,8 +0,0 @@ - - - - - -disc not present in database - - \ No newline at end of file diff --git a/CUETools.CTDB/Web/about.php b/CUETools.CTDB/Web/about.php deleted file mode 100644 index b0e7d47..0000000 --- a/CUETools.CTDB/Web/about.php +++ /dev/null @@ -1,35 +0,0 @@ - -

What's it for?

-You probably heard about AccurateRip, a wonderfull database of CD rip checksums, which helps you make sure your CD rip is an exact copy of original CD. What it can tell you is how many other people got the same data when copying this CD. - -CUETools Database is an extension of this idea. - -

What are the advantages?

- -

What are the downsides and limitations?

- -

How many errors can a rip contain and still be repairable?

- -

What information does the database contain per each submission?

- - - diff --git a/CUETools.CTDB/Web/ctdb.png b/CUETools.CTDB/Web/ctdb.png deleted file mode 100644 index b5226ea96745918494be030fec0c31a6d96b2c51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 22906 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 VTIU9V%M1(*44$rjF6*2UngAKy<0k+B diff --git a/CUETools.CTDB/Web/favicon.ico b/CUETools.CTDB/Web/favicon.ico deleted file mode 100644 index a8346adda48d26faa12e7c52386716d668159618..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2550 zcmZQzU}Ruo5D);-3Je)63=C=v3{XA?Lk24YLmvwRg9b>9fq_AR0iuq9fq}t+1w`V< zJK7_xceF=L+0hYbXY>r!X))`VYaFX6$H>;N8(4F>ObC#IJ{EcmDtQ;N1V8 z&#(Re@$Aa~4|mV}2Z=%SKKc(*i);djzoR{3$Ibmq|Nr~+djJ1;{r~^#i~s*WJpBLP?Op$WU)u!N1G5{Q z-q9Xmv7AbdxSI;Kl}FhGF<=LlS}@8dvXb+<_%o`{+a(@9+>(6 z<-uA1Ki@qGl0(t|ESq zhi7*(JUX|F;nBI>3?I*JV)%Y`8^fndn;1S`+Q#tn@+OAg*ETVHy|#nl+l}1}e{Sz) z_;-63!=F358E#%a$8h_`HHN!)?=pP8b)4b*y<-eN?jC0NarX$r@B7CYKHojb@cG^; zh7WhoFnqj!p5gz)Lk#~P9%lIX;2gvM=VuxIKR?g#^X&Ge0X?~;p4-L4BsAK zX888x62rGAml-}jy29}F$yJ6wPcJh3e{z}O$FnO8Kc8P?`2X@E!~fS88GgLD$?)UV zO@{w3ZZrIUe}m!Qn_CS3LHOM*hM#ZlGyMHUS`yA1z7-DUXy$DZ~HoFBtxRf64Iw=SznFKVCEZ|M8aL|DX2^ z|9^d8`2QD#KQjFP_mScMpHB?`|9ocn|MxS)|NkKTo#EfVpA7&1|77_0?-#?rzkeA1 z|NqPI|NlRR|Ns9p>}Zc<_~EV048jddKQh-s(u@NG!$)RNx{3I|oFROrQMm!*N9MJw zjLOZJ0*XN5Ao(Bt%FHK3l)>u$vokO-FflNJ%mEnzqHpMbWcFYLne&ku!De6pv6&bc zm_Qh$=N}^jLjb6bG=F~#WEcp8#6W300c05y15+JT&5wL#W)MF4pqa_$|8fS9IvoR$ z9Uz4e3^E^NFUWl$cYypgbNwu^K#A|KmozXz%b|ka)t%}mosc&Si!I**_)x@uRkd4|AW+4{&ohd2ZiGTh7}AhJ%<FV6f&A&G9lf*3vfP=H{|yVBirgjC8j!;f4bFmimHNPd7^_mzzh|E+Qi( zIXcWyotxWUmxsfLpHDSTmX%e;ft%aZm4i80P=L>w&B}_+pPO4bfSEa1SX{yh#E&vm zQwwC~@Kul$)0bvtm95N82=U|K(KV7135~JMEXpr0uF&O?Z%J2*Z#EE0t;wsdt8I~I z;1Mlpu2NABm<7<_#hv=|r|I2hO&g&3F_7#J8C z7#SECr5ISjYzBrTMrk-Zi%|orhKYfJ(U5_Ofq_Aqfq|ij(Fn{IVPIhBZO>$2f$Ckt zz`$^UfdOPA$W#dJn3A8Ast}NoUy@&(kzb(T9IOzYnU|7ZUd&)*U|?!xU}$AzpkQcX zWo&L`YR&)x%nKMH_Wu9Rz_5S`Za(7zW;h#UCrB+DBQr!T0~@kG808TDU{pi)2NNUA z3`RXBxYtcsMzE z1i87m1x5LJc=$yngoQSbmIMkW?kHg*n9 zE^bD2Nk#@HW|*V^10xF~GZPCFD?1wpD>IKVBLkBlGmD~-A**9xqOek7qY<0P#DyE3 zlvPB74kj6!6g6FRW>=jQ{Ndrpz1iUt~~j&bnDTpPrrtxm9;ux4%s3gp4)HqQD1rMB#%|5o*CqFM8qz{CBQqxM1`A#MIxllgX8A0h8FnN&E*ot#9lT(Ysa(s$G=A+od3YKGF zU=U(pU|fvjRrFUl`1KoMfgFUm~M%uCHH1%(ZdYcR-kf3O$>0|RejX-U3& zYF=tlVo7QW$cT{2f>fwtE{I}~2uQ{=H(db~5j6Hcb7@gdh-*X$$nzj;85lr;k1FC@ zoSupz!j_m*5|WsXBF2}Tnv)ZfT2bOz>=EMYla!yI0}5Xbm@tZB&W!w`D#x76bXZ97 zLp<*R69xr%N@`kSX-)|P0|RGSYEcOmCX8%`9+|hga)o4#C#`rxCF?v ze))N+AmdB&3;at5;P-N7f3w=6DTKw0uh8ki5G+g7#Nte86+4ON2_Iq(Q5hG zH)5(~NE%ZFr?_BHN(3b+eg;Q|6o!0;B!*N51%?2I3~;fY&rl3z6@ZI9{3;X}oEgBz zLCj|Zo6pVws&N<@8U8;M|DRD(QedU8pI5Ax2xcph{(h^(s($dTnD?@Yh6a#Zh16{MkR0CZ@!xT&1B-5lcU5hm1v}E%%W1}R)RCO)| zsFkS|nFzO{SPGJXS*xI61L9hNOTOTO#N<>v6C+C#OEYsLOH&(tbU7}V`hd)e)SL*H z%-qzx;>`R!J42{iba7M-kq8YY$QqEuxfE>lK^{j62pR-V0a84ogiS$8n!cf)vA((; zog4z|^kGjQ1u$u(_=1aBd1MxsJh8QTZfCVFhQj7C*O2G=vjr0v|^f83tY9q0$MHYsuMJNr;%Pg@of|`paOrM~u zNG!k}=ddCWlmr!QDiRBiCt!HVtT56 zRzYgIjXpvYyL%x;caV#l9hZ$hxSj>oxprI%bO584kQB(H!8ICOB!vJ;ibqq|XmF7f z0wgIOOTqK16Ns32P*JyB&6apkECO36)AqMkP z^HOZp%hm1ekXD5_fF>Qlt3tp_E{G$T5P%sDkhFreVnw&C8XHZ&D=d%BQz{rYSW=hk3OX|mrQO+UA+15<;R*9X`f5AEUi2|y&@u` z(lau%%E~J$t6JOIJ370jOr17;#>`numM&YqV&$qWTeofBv2)jvqsNY)IC<*I)oa&p z+`RSV>9glAUcUPB_1pI!KYs~=oD5n;!pg$J!p6p$%gDqm$f793YRJZ*Ble z$l=teJW(`gVUn0J=SG!-7oCefh(ByHQJoYlk?itu(Iz!h$q+Nw6m_oR=E-g)Aoqr* zmWG+Pw1OS{SyO7tk}aSGEmI*YS~T3l(=6bNS`aH*JR&kGI%cfcapJ~{AC{hxnU$S0 rSMEG{^W{%1E3c@ms;*h9cAdKQ>KE$5lY5K*{;dC;e}C8a`2RNn28Y`b diff --git a/CUETools.CTDB/Web/img/bg_left_border.jpg b/CUETools.CTDB/Web/img/bg_left_border.jpg deleted file mode 100644 index 90756dfaad2e9c6a067c7b15521eb3922d6780d5..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9727 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 diff --git a/CUETools.CTDB/Web/img/bg_top_border.jpg b/CUETools.CTDB/Web/img/bg_top_border.jpg deleted file mode 100644 index d3528ebeb93f6d5ac51e90b777a66184df2b4595..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 9710 zcmex=Bm<7<_#hv=|r|I2hO&g&3F_7#J8C z7#SECr5ISjYzBrTMrk-Zi%|orhKYfJ(U5_Ofq_Aqfq|ij(Fn{IVPIhBZO>$2f$Ckt zz`$^UfdOPA$W#dJn3A8Ast}NoUy@&(kzb(T9IOzYnU|7ZUd&)*U|?!xU}$AzpkQcX zWo&L`V!;3c%nKMH_Wu9Rz_5S`Za(7zW;h#UCrB+DBQr!T0~@kG808TDU{pi)2NNUA z3`RXBxYtcsMzE z1i87m1x5LJc=$yngoQSbmIMkW?kHg*n9 zE^bD2Nk#@HW|*V^10xF~GZPCFD?1wpD>IKVBLkBlGmD~-A**9xqOek7qY<0P#DyE3 zlvPB74kj6!6g6FRW>=jQ{Ndrpz1iUt~~j&bnDTpPrrtxm9;ux4%s3gp4)HqQD1rMB#%|5g-^&l<-te{|EV@P61XNYGgVaR7F0Q(ank4!Qm zaX@Ua*+^pWz(y8>Iu0b1SDKT|q7VF)%O)F)%Q& zgE^iqP_sZ*v8Na1mlmK1vE>(Krf24*=9T6$Ffj1A27^rZ2a7Q8U6p zY>7D~A&KcIVtmP|IXNMz6(yd<9wELyN%{FXpz!5@38N_H%*ZdQa?Ht0hlLbB#Pc37 zVNiglq^2d7=9DlnFmRTo7L{O89tIOeRnDE1?wp^KUjzzDXy6J$%y)8!OMpDvX^4=&V;!7NbGE<`|u0)sOH*f@y!Y+&=* z89;RnBO}BAhvNS;N=gc>^!4+K^%6l%U%lk~T>Xl~0)0b01APV?`-+0ZTbjaVdbUa!D;tF3Kz@$;{7F09l=wlwVq6 zt6o}~nPO#-WNK_;VQ!*pmY8awYiO8asheb)l%{KuW}KF6o@Q*6WSFYXr2w@uwIUPY zRuoG?GB9fu6l_3TD{#pdT#%TYYG-0(X<}(+Ze(d{qmM4f1ydi8S&^C(;gXq~npd2e zpJ!(XRf{f;sv#1g!30?Yk~o)wjXucZNC82Ez$rkAN0hKBNJ-N-)HBvsx1*CoVBJ0J z>7xK9jTB#SF)NSE;*$KLN;?~UOfmX6za%paMf4lLtF-*0+{6;Q%-qEERQ;@i)N~ttgeZ3R zLW=Gn7dJaD8+~v+3#xPNxD@CBMlB&JkVk`SG`L6#0g@DtrmoT8A}It&QaqZvMuUr_ z5FknMXzCgbE|NlkB*mktYc#k>3IUQ7kEX8C;36pmNK#C0>f%BS=BMVR*s7PS+uI?n z2XO#RI)K-MfEQa3M=&7(GaMjk1+9Kyf=dv~Kw1wXh`t_V5op4di5WCI0-noYU|{E9 zV`brF=3-)G;AUiCU}I)vM98wSvM{qVaWHZ+aB&MTFflT-FfucPT*So2S<1-7%p%At z#HPqDti-@!DB@_OEXo<^B$lXREFM(YD3LT#)p_B@4{9bwT#^SbnyNnxHf#DgX^~4v zv8$W8d$LAoSh&=tLzf*L@^Wn>nH7(LUmugvBd3bt7L`J1&WM-9>S5#KD zwzYS3c1@W&ZTgIvvz9DfwtU6PRa>@h+rDGxt|Lc}9Y1mM)Rn8(uHU$M>&eq+&tJTJ z_2uig?>~P25(GIJw0?w@g@uKUjWw5%iCK_EQHa%$jX_D+F_7ITQKXQ=sZn{NXwbqW zF=Nh+DhDq*7kvR7FYNnDQX09pfT*b|k-AX|24NWZ#GjC}HJNUDv z)RZM#KucMsLe{cqxQC}%z?ZWi*0Oj+WK?v_Sh3^8jTb*GJtH$KJ7=!kdGhAVpITO4 kQCU@8vsUdob?enH)FmhPR{#CC|8x33-|z4CUjKg+04#{x)Bpeg diff --git a/CUETools.CTDB/Web/img/bottom_left_corner.jpg b/CUETools.CTDB/Web/img/bottom_left_corner.jpg deleted file mode 100644 index 229d9d1d9ac9d0bd880c44f862e1af20b1bc90ef..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 293 zcmex=%N5(112%qS9!3{1>|AoYwW!XT|6Q9(@6TMRtRj0{YI U%z_N|47K@vWmQ)q%N;sT5yA0SCEGBGHElry3$X8?%`Vv62k;9+KDU=m~& QWUyzbOG|U$OZa~i0LPXd1^@s6 diff --git a/CUETools.CTDB/Web/img/top_left_corner.jpg b/CUETools.CTDB/Web/img/top_left_corner.jpg deleted file mode 100644 index 0e6c0b3253859265bfef350979576ab81e9c49c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 293 zcmex=%N5(12j49v*ljLZy7f*|#b=;|3jqJo&Bw-|Vs85x)a UnFSf_8LHM-WxEK^kpF)Z02l8c9{>OV diff --git a/CUETools.CTDB/Web/img/top_right_corner.jpg b/CUETools.CTDB/Web/img/top_right_corner.jpg deleted file mode 100644 index 0f3332d343d30a7b7a671909e565382822a8ab01..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 293 zcmex=%N5&{g&j3^R}Ow0_1AoZxiAgv%#K@`Pc(OV2W%!~|7 Vg3N*p_6)U2Z!QN_71aN~2>>TLAbbD- diff --git a/CUETools.CTDB/Web/index.php b/CUETools.CTDB/Web/index.php deleted file mode 100644 index b652e88..0000000 --- a/CUETools.CTDB/Web/index.php +++ /dev/null @@ -1,49 +0,0 @@ - pg_num_rows($result)) - $count = pg_num_rows($result); -if ($start == '') $start = pg_num_rows($result) - $count; - -printf("

Recent additions:

"); -include 'list.php'; -pg_free_result($result); -printf("
"); -?> - - diff --git a/CUETools.CTDB/Web/list.php b/CUETools.CTDB/Web/list.php deleted file mode 100644 index 7d81a05..0000000 --- a/CUETools.CTDB/Web/list.php +++ /dev/null @@ -1,13 +0,0 @@ - - -= $start; $i--) { - $record = pg_fetch_array($result, $i); - printf('', urlencode($record['artist']), $record['artist'], $record['title'], $record['discid'], $record['discid'], $record['discid'], $record['ctdbid'], $record['ctdbid'], $record['confidence']); -} -if ($start > 0) printf('', $count * floor(($start - 1) / $count), $url); -printf("
ArtistAlbumDisc IdCTDB IdAR
%s%s%s%08x%d
More
"); -include 'table_end.php' ; -?> diff --git a/CUETools.CTDB/Web/logo_start.php b/CUETools.CTDB/Web/logo_start.php deleted file mode 100644 index 79897f1..0000000 --- a/CUETools.CTDB/Web/logo_start.php +++ /dev/null @@ -1,81 +0,0 @@ - - - -CUETools DB - - - - - - - - - - - - - - -
- -
- - - - - - - - -
HomePopularAboutCUETools
- -
-
diff --git a/CUETools.CTDB/Web/phpctdb/ctdb.php b/CUETools.CTDB/Web/phpctdb/ctdb.php deleted file mode 100644 index afa7820..0000000 --- a/CUETools.CTDB/Web/phpctdb/ctdb.php +++ /dev/null @@ -1,370 +0,0 @@ -fp = fopen($target_file, 'rb'); - $this->fpstats = fstat($this->fp); - $this->atoms = $this->parse_container_atom(0, $this->fpstats['size']); - $this->db = false; - foreach ($this->atoms as $entry) if($entry['name'] == 'CTDB') $this->db = $entry; - } - - function __destruct() { - fclose($this->fp); - } - - function ParseTOC() - { - $disc = $this->db['discs'][0]; - $this->fulltoc = ''; - $totalcount = 0; - $firstaudio = 0; - $lastaudio = 0; - foreach ($disc['TOC ']['subatoms'] as $track) - { - if ($track['name']=='INFO') { - $trackcount = phpCTDB::BigEndian2Int(substr($track['value'],0,4)); - $pregap = phpCTDB::BigEndian2Int(substr($track['value'],4,4)); - $pos = $pregap + 150; - } - if ($track['name']=='TRAK') { - $isaudio = phpCTDB::BigEndian2Int(substr($track['value'],0,4)); - $length = phpCTDB::BigEndian2Int(substr($track['value'],4,4)); - if ($isaudio == 0 && $totalcount!=0) - $pos += 11400; - $this->fulltoc = sprintf('%s %d', $this->fulltoc, $pos); - $pos += $length; - $totalcount ++; - if ($isaudio != 0) - $lastaudio = $totalcount; - if ($isaudio != 0 && $firstaudio == 0) - $firstaudio = $totalcount; - } - } - if ($trackcount != $totalcount) - die('wrong trackcount'); - $this->fulltoc = sprintf('%d %d %d %d%s', $firstaudio, $lastaudio, $totalcount, $pos, $this->fulltoc); - } - - static function toc2mbtoc($fulltoc) - { - $ids = explode(' ', $fulltoc); - $mbtoc = sprintf('%d %d', $ids[0], $ids[1]); - if ($ids[1] == $ids[2]) - { - for ($tr = 3; $tr < count($ids); $tr++) - $mbtoc = sprintf('%s %d', $mbtoc, $ids[$tr]); - } else // Enhanced CD - { - $mbtoc = sprintf('%s %d', $mbtoc, $ids[$ids[1] + 4] - 11400); - for ($tr = 4; $tr < $ids[1] + 4; $tr++) - $mbtoc = sprintf('%s %d', $mbtoc, $ids[$tr]); - } - return $mbtoc; - } - - static function toc2mbid($fulltoc) - { - $ids = explode(' ', $fulltoc); - $mbtoc = sprintf('%02X%02X', $ids[0], $ids[1]); - if ($ids[1] == $ids[2]) - { - for ($tr = 3; $tr < count($ids); $tr++) - $mbtoc = sprintf('%s%08X', $mbtoc, $ids[$tr]); - } else // Enhanced CD - { - $mbtoc = sprintf('%s%08X', $mbtoc, $ids[$ids[1] + 4] - 11400); - for ($tr = 4; $tr < $ids[1] + 4; $tr++) - $mbtoc = sprintf('%s%08X', $mbtoc, $ids[$tr]); - } -// echo $fulltoc . ':' . $mbtoc . '
'; - $mbtoc = str_pad($mbtoc,804,'0'); - $mbid = str_replace('+', '.', str_replace('/', '_', str_replace('=', '-', base64_encode(pack("H*" , sha1($mbtoc)))))); - return $mbid; - } - - static function mblookup($mbid) - { - $mbconn = pg_connect("dbname=musicbrainz_db user=musicbrainz_user"); - if (!$mbconn) - return false; - $mbresult = pg_query_params('SELECT DISTINCT album' - . ' FROM album_cdtoc, cdtoc' - . ' WHERE album_cdtoc.cdtoc = cdtoc.id' - . ' AND cdtoc.discid = $1', - array($mbid) - ); - $mbmeta = false; - while(true == ($mbrecord = pg_fetch_array($mbresult))) - { - $mbresult2 = pg_query_params('SELECT a.name as albumname, ar.name as artistname, coverarturl' - . ' FROM album a INNER JOIN albummeta m ON m.id = a.id, artist ar' - . ' WHERE a.id = $1' - . ' AND ar.id = a.artist', - array($mbrecord[0])); - $mbmeta[] = pg_fetch_array($mbresult2); - pg_free_result($mbresult2); - } - pg_free_result($mbresult); - return $mbmeta; - } - - function ctdb2pg($discid) - { - $disc = $this->db['discs'][0]; - $record = false; - $record['discid'] = $discid; - $record['ctdbid'] = $disc['CRC ']['int']; - $record['confidence'] = $disc['CONF']['int']; - $record['parity'] = base64_encode($this->read($disc['PAR ']['offset'], 16)); - $record['fulltoc'] = $this->fulltoc; - $record['userid'] = $disc['USER']['value']; - $record['agent'] = $disc['TOOL']['value']; - $record['time'] = date ("Y-m-d H:i:s"); - $record['artist'] = @$disc['ART ']['value']; - $record['title'] = @$disc['nam ']['value']; - return $record; - } - - static function pg2ctdb($dbconn, $id) - { - $target_path = phpCTDB::discid2path($id); - - $result = pg_query_params($dbconn, "SELECT * FROM submissions WHERE discid=$1", array($id)) - or die('Query failed: ' . pg_last_error()); - if (pg_num_rows($result) < 1) die('not found'); - - $totalconf = 0; - $newctdb = false; - $newctdb['name'] = 'CTDB'; - $newhead = false; - $newhead['name'] = 'HEAD'; - $newtotal = false; - $newtotal['name'] = 'TOTL'; - $newtotal['value'] = phpCTDB::BigEndian2String($totalconf,4); - $newhead['subatoms'][] = $newtotal; - $newctdb['subatoms'][] = $newhead; - - while (TRUE == ($record = pg_fetch_array($result))) - { - $totalconf += $record['confidence']; - $newdisc = false; - $newdisc['name'] = 'DISC'; - - $newatom = false; - $newatom['name'] = 'CRC '; - $newatom['value'] = phpCTDB::Hex2String(sprintf('%08x',$record['ctdbid'])); - $newdisc['subatoms'][] = $newatom; - - $newatom = false; - $newatom['name'] = 'NPAR'; - $newatom['value'] = phpCTDB::BigEndian2String(8,4); - $newdisc['subatoms'][] = $newatom; - - $newatom = false; - $newatom['name'] = 'CONF'; - $newatom['value'] = phpCTDB::BigEndian2String((int)($record['confidence']),4); - $newdisc['subatoms'][] = $newatom; - - $newatom = false; - $newatom['name'] = 'PAR '; - $newatom['value'] = base64_decode($record['parity']); - $newdisc['subatoms'][] = $newatom; - - $newctdb['subatoms'][] = $newdisc; - } - - pg_free_result($result); - - $newctdb['subatoms'][0]['subatoms'][0]['value'] = phpCTDB::BigEndian2String($totalconf,4); - - $ftyp=false; - $ftyp['name'] = 'ftyp'; - $ftyp['value'] = 'CTDB'; - - $tname = sprintf("%s/ctdb.tmp", $target_path); - $tfp = fopen($tname, 'wb'); - phpCTDB::unparse_atom($tfp,$ftyp); - phpCTDB::unparse_atom($tfp,$newctdb); - fclose($tfp); - if(!rename($tname,sprintf("%s/ctdb.bin", $target_path))) - die('error uploading file ' . $target_path); - } - - static function Hex2Int($hex_word, $signed = false) - { - $int_value = 0; - $byte_wordlen = strlen($hex_word); - for ($i = 0; $i < $byte_wordlen; $i++) { - sscanf($hex_word{$i}, "%x", $digit); - $int_value += $digit * pow(16, ($byte_wordlen - 1 - $i)); - } - if ($signed) { - $sign_mask_bit = 0x80 << 24; - if ($int_value & $sign_mask_bit) { - $int_value = 0 - ($int_value & ($sign_mask_bit - 1)); - } - } - return $int_value; - } - - static function BigEndian2Int($byte_word, $signed = false) { - - $int_value = 0; - $byte_wordlen = strlen($byte_word); - - for ($i = 0; $i < $byte_wordlen; $i++) { - $int_value += ord($byte_word{$i}) * pow(256, ($byte_wordlen - 1 - $i)); - } - - if ($signed) { - $sign_mask_bit = 0x80 << (8 * ($byte_wordlen - 1)); - if ($int_value & $sign_mask_bit) { - $int_value = 0 - ($int_value & ($sign_mask_bit - 1)); - } - } - - return $int_value; - } - - static function Hex2String($number) - { - $intstring = ''; - $hex_word = str_pad($number, 8, '0', STR_PAD_LEFT); - for ($i = 0; $i < 4; $i++) { - sscanf(substr($hex_word, $i*2, 2), "%x", $number); - $intstring = $intstring.chr($number); - } - return $intstring; - } - - static function LittleEndian2String($number, $minbytes=1, $synchsafe=false) { - $intstring = ''; - while ($number > 0) { - if ($synchsafe) { - $intstring = $intstring.chr($number & 127); - $number >>= 7; - } else { - $intstring = $intstring.chr($number & 255); - $number >>= 8; - } - } - return str_pad($intstring, $minbytes, "\x00", STR_PAD_RIGHT); - } - - static function BigEndian2String($number, $minbytes=1, $synchsafe=false) { - return strrev(phpCTDB::LittleEndian2String($number, $minbytes, $synchsafe)); - } - - static function discid2path($id) - { - $err = sscanf($id, "%03d-%04x%04x-%04x%04x-%04x%04x", $tracks, $id1a, $id1b, $id2a, $id2b, $cddbida, $cddbidb); - $parsedid = sprintf("%03d-%04x%04x-%04x%04x-%04x%04x", $tracks, $id1a, $id1b, $id2a, $id2b, $cddbida, $cddbidb); - if ($id != $parsedid) - die("bad id ". $id); - return sprintf("parity/%x/%x/%x/%s", $id1b & 15, ($id1b >> 4) & 15, ($id1b >> 8) & 15, $parsedid); - } - - static function ctdbid2path($discid, $ctdbid) - { - $path = phpCTDB::discid2path($discid); - sscanf($ctdbid, "%04x%04x", $ctdbida, $ctdbidb); - $parsedctdbid = sprintf("%04x%04x", $ctdbida, $ctdbidb); - if ($ctdbid != $parsedctdbid) - die("bad id ". $ctdbid); - return sprintf("%s/%s.bin", $path, $ctdbid); - } - - static function unparse_atom($fp, $atom) - { -// printf('unparse_atom(%s)
', $atom['name']); - $offset = ftell($fp); - fwrite($fp, phpCTDB::BigEndian2String(0, 4)); - fwrite($fp, $atom['name']); - if (@$atom['subatoms']) - foreach ($atom['subatoms'] as $subatom) - phpCTDB::unparse_atom($fp, $subatom); - else if ($atom['value']) - fwrite($fp, $atom['value']); - else - die(sprintf("couldn't write long atom %s: size %d", $atom['name'], $atom['size'])); - $pos = ftell($fp); - fseek($fp, $offset, SEEK_SET); - fwrite($fp, phpCTDB::BigEndian2String($pos - $offset, 4)); - fseek($fp, $pos, SEEK_SET); - } - - function read($offset, $len) - { - fseek($this->fp, $offset, SEEK_SET); - return fread($this->fp, $len); - } - - function parse_container_atom($offset, $len) - { -// printf('parse_container_atom(%d, %d)
', $offset, $len); - $atoms = false; - $fin = $offset + $len; - while ($offset < $fin) { - fseek($this->fp, $offset, SEEK_SET); - $atom_header = fread($this->fp, 8); - $atom_size = phpCTDB::BigEndian2Int(substr($atom_header, 0, 4)); - $atom_name = substr($atom_header, 4, 4); - $atom['name'] = $atom_name; - $atom['size'] = $atom_size - 8; - $atom['offset'] = $offset + 8; - if ($atom_size - 8 <= 256) - $atom['value'] = fread($this->fp, $atom_size - 8); - else - $atom['value'] = false; -// echo $len, ':', $offset, ":", $atom_size, ":", $atom_name, '
'; - if ($atom_name == 'CTDB' || $atom_name == 'DISC' || $atom_name == 'TOC ' || ($atom_name == 'HEAD' && ($atom_size != 28 || 256 != phpCTDB::BigEndian2Int(substr($atom['value'],0,4))))) - { - $atom['subatoms'] = $this->parse_container_atom($offset + 8, $atom_size - 8); - foreach ($atom['subatoms'] as $param) - switch ($param['name']) { - case 'HEAD': - case 'TOC ': - case 'CRC ': - case 'USER': - case 'TOOL': - case 'MBID': - case 'ART ': - case 'nam ': - case 'NPAR': - case 'CONF': - case 'TOTL': - case 'PAR ': - $atom[$param['name']] = $param; - break; - case 'DISC': - $atom['discs'][] = $param; - break; - } - } else - $atom['subatoms'] = false; - switch ($atom_name) - { - case 'CRC ': - case 'NPAR': - case 'CONF': - case 'TOTL': - $atom['int'] = phpCTDB::BigEndian2Int($atom['value']); - break; - } - $offset += $atom_size; - $atoms[] = $atom; - } - if ($offset > $fin) - die(printf("bad atom: offset=%d, fin=%d", $offset, $fin)); - return $atoms; - } -} -?> diff --git a/CUETools.CTDB/Web/robots.txt b/CUETools.CTDB/Web/robots.txt deleted file mode 100644 index 6072cbb..0000000 --- a/CUETools.CTDB/Web/robots.txt +++ /dev/null @@ -1,4 +0,0 @@ -User-agent: * -Disallow: /show.php -Disallow: /top.php -Disallow: /parity/ diff --git a/CUETools.CTDB/Web/show.php b/CUETools.CTDB/Web/show.php deleted file mode 100644 index 3358fbd..0000000 --- a/CUETools.CTDB/Web/show.php +++ /dev/null @@ -1,98 +0,0 @@ - 1) die('not unique'); -$record = pg_fetch_array($result); -pg_free_result($result); - -$mbid = phpCTDB::toc2mbid($record['fulltoc']); -$mbmeta = phpCTDB::mblookup($mbid); - -printf('
'); -$imgfound = false; -if ($mbmeta) - foreach ($mbmeta as $mbr) - if ($mbr['coverarturl']) - { - if (!$imgfound) include 'table_start.php'; - printf('', $mbr['coverarturl']); - $imgfound = true; - } -if ($imgfound) { - include 'table_end.php'; - printf('

'); -} -include 'table_start.php'; -?> - -', $discid); -printf('', $ctdbid); -printf('', phpCTDB::toc2mbtoc($record['fulltoc']), $mbid, $mbmeta ? count($mbmeta) : "-"); -//printf('', $record['fulltoc']); -printf(''); -if ($record['artist'] != '') - printf('', $record['artist']); -if ($mbmeta) - foreach ($mbmeta as $mbr) - if ($mbr['artistname'] != $record['artist']) - printf('', $mbr['artistname']); -if ($record['title'] != '') - printf('', $record['title']); -if ($mbmeta) - foreach ($mbmeta as $mbr) - if ($mbr['albumname'] != $record['title']) - printf('', $mbr['albumname']); -?> -
Disc ID%s
CTDB ID%s
Musicbrainz ID%s (%s)
Full TOC%s
'); -?> - -', $trno, $trstartmsf, $trlenmsf, $trstart, $trend); -} -printf("
TrackStartLengthStart sectorEnd sector
%d%s%s%d%d
"); -printf('
Artist%s
Artist (MB)%s
Title%s
Title (MB)%s
- -
- - diff --git a/CUETools.CTDB/Web/submit.php b/CUETools.CTDB/Web/submit.php deleted file mode 100644 index a7e28ff..0000000 --- a/CUETools.CTDB/Web/submit.php +++ /dev/null @@ -1,103 +0,0 @@ - - * @link http://de3.php.net/manual/en/ini.core.php#79564 - */ -function php_to_byte($v){ - $l = substr($v, -1); - $ret = substr($v, 0, -1); - switch(strtoupper($l)){ - case 'P': - $ret *= 1024; - case 'T': - $ret *= 1024; - case 'G': - $ret *= 1024; - case 'M': - $ret *= 1024; - case 'K': - $ret *= 1024; - break; - } - return $ret; -} - -// Return the human readable size of a file -// @param int $size a file size -// @param int $dec a number of decimal places - -function filesize_h($size, $dec = 1) -{ - $sizes = array('byte(s)', 'kb', 'mb', 'gb'); - $count = count($sizes); - $i = 0; - - while ($size >= 1024 && ($i < $count - 1)) { - $size /= 1024; - $i++; - } - - return round($size, $dec) . ' ' . $sizes[$i]; -} - -$file = $_FILES['uploadedfile']; - -//echo $file['name'], ini_get('upload_max_filesize'); - - // give info on PHP catched upload errors - if($file['error']) switch($file['error']){ - case 1: - case 2: - echo sprintf($lang['uploadsize'], - filesize_h(php_to_byte(ini_get('upload_max_filesize')))); - echo "Error ", $file['error']; - return; - default: - echo $lang['uploadfail']; - echo "Error ", $file['error']; - } - -//if ($_SERVER['HTTP_USER_AGENT'] != "CUETools 205") { -// echo "user agent ", $_SERVER['HTTP_USER_AGENT'], " is not allowed"; -// return; -//} - -$tmpname = $file['tmp_name']; -$size = (@file_exists($tmpname)) ? filesize($tmpname) : 0; -if ($size == 0) { - echo "no file uploaded"; - return; -} - -$dbconn = pg_connect("dbname=ctdb user=ctdb_user") - or die('Could not connect: ' . pg_last_error()); - -$id = $_POST['id']; -$target_path = phpCTDB::discid2path($id); -@mkdir($target_path, 0777, true); -$target_file = sprintf("%s/ctdb.bin", $target_path); - -$ctdb = new phpCTDB($tmpname); -$merging = @file_exists($target_file); -$ctdb->ParseTOC(); -$record = $ctdb->ctdb2pg($id); -unset($ctdb); - -$destname = sprintf("%s/%08x.bin", $target_path, $record['ctdbid']); -if(!move_uploaded_file($tmpname, $destname)) - die('error uploading file ' . $tmpname . ' to ' . $destname); - -$subres = pg_insert($dbconn, 'submissions', $record); - -phpCTDB::pg2ctdb($dbconn, $id); - -if ($merging) - printf("%s has been updated", $id); -else - printf("%s has been uploaded", $id); -?> diff --git a/CUETools.CTDB/Web/table_end.php b/CUETools.CTDB/Web/table_end.php deleted file mode 100644 index ebe80f2..0000000 --- a/CUETools.CTDB/Web/table_end.php +++ /dev/null @@ -1,9 +0,0 @@ - - - - - - - - - diff --git a/CUETools.CTDB/Web/table_start.php b/CUETools.CTDB/Web/table_start.php deleted file mode 100644 index b39065d..0000000 --- a/CUETools.CTDB/Web/table_start.php +++ /dev/null @@ -1,10 +0,0 @@ - - - - - - - - -
- diff --git a/CUETools.CTDB/Web/top.php b/CUETools.CTDB/Web/top.php deleted file mode 100644 index ce0de21..0000000 --- a/CUETools.CTDB/Web/top.php +++ /dev/null @@ -1,48 +0,0 @@ -=100"; - $term = ' AND '; -} -$query = $query . " ORDER BY confidence"; -$result = pg_query($query) or die('Query failed: ' . pg_last_error()); -$start = @$_GET['start']; -if (pg_num_rows($result) == 0) - die('nothing found'); -if ($count > pg_num_rows($result)) - $count = pg_num_rows($result); -if ($start == '') $start = pg_num_rows($result) - $count; - -printf("

Popular discs:

"); -include 'list.php'; -pg_free_result($result); -printf("
"); -?> - - diff --git a/CUETools.CTDB/uploader.php b/CUETools.CTDB/uploader.php deleted file mode 100644 index a3bf7aa..0000000 --- a/CUETools.CTDB/uploader.php +++ /dev/null @@ -1,355 +0,0 @@ - - * @link http://de3.php.net/manual/en/ini.core.php#79564 - */ -function php_to_byte($v){ - $l = substr($v, -1); - $ret = substr($v, 0, -1); - switch(strtoupper($l)){ - case 'P': - $ret *= 1024; - case 'T': - $ret *= 1024; - case 'G': - $ret *= 1024; - case 'M': - $ret *= 1024; - case 'K': - $ret *= 1024; - break; - } - return $ret; -} - -// Return the human readable size of a file -// @param int $size a file size -// @param int $dec a number of decimal places - -function filesize_h($size, $dec = 1) -{ - $sizes = array('byte(s)', 'kb', 'mb', 'gb'); - $count = count($sizes); - $i = 0; - - while ($size >= 1024 && ($i < $count - 1)) { - $size /= 1024; - $i++; - } - - return round($size, $dec) . ' ' . $sizes[$i]; -} - -function BigEndian2Int($byte_word, $signed = false) { - - $int_value = 0; - $byte_wordlen = strlen($byte_word); - - for ($i = 0; $i < $byte_wordlen; $i++) { - $int_value += ord($byte_word{$i}) * pow(256, ($byte_wordlen - 1 - $i)); - } - - if ($signed) { - $sign_mask_bit = 0x80 << (8 * ($byte_wordlen - 1)); - if ($int_value & $sign_mask_bit) { - $int_value = 0 - ($int_value & ($sign_mask_bit - 1)); - } - } - - return $int_value; -} - -function LittleEndian2String($number, $minbytes=1, $synchsafe=false) { - $intstring = ''; - while ($number > 0) { - if ($synchsafe) { - $intstring = $intstring.chr($number & 127); - $number >>= 7; - } else { - $intstring = $intstring.chr($number & 255); - $number >>= 8; - } - } - return str_pad($intstring, $minbytes, "\x00", STR_PAD_RIGHT); -} - -function BigEndian2String($number, $minbytes=1, $synchsafe=false) { - return strrev(LittleEndian2String($number, $minbytes, $synchsafe)); -} - -function unparse_atom($fp, $atom) -{ -// printf('unparse_atom(%s)
', $atom['name']); - $offset = ftell($fp); - fwrite($fp, BigEndian2String(0, 4)); - fwrite($fp, $atom['name']); - if ($atom['subatoms']) - foreach ($atom['subatoms'] as $subatom) - unparse_atom($fp, $subatom); - else if ($atom['value']) - fwrite($fp, $atom['value']); - else - die(sprintf("couldn't write long atom %s: size %d", $atom['name'], $atom['size'])); - $pos = ftell($fp); - fseek($fp, $offset, SEEK_SET); - fwrite($fp, BigEndian2String($pos - $offset, 4)); - fseek($fp, $pos, SEEK_SET); -} - -function parse_container_atom($fp, $offset, $len) -{ -// printf('parse_container_atom(%d, %d)
', $offset, $len); - $atoms = false; - $fin = $offset + $len; - while ($offset < $fin) { - fseek($fp, $offset, SEEK_SET); - $atom_header = fread($fp, 8); - $atom_size = BigEndian2Int(substr($atom_header, 0, 4)); - $atom_name = substr($atom_header, 4, 4); - $atom['name'] = $atom_name; - $atom['size'] = $atom_size - 8; - $atom['offset'] = $offset + 8; - if ($atom_size - 8 <= 32) - $atom['value'] = fread($fp, $atom_size - 8); - else - $atom['value'] = false; -// echo $offset, ":", $atom_size, ":", $atom_name, '
'; - if ($atom_name == 'CTDB' || $atom_name == 'DISC' || $atom_name == 'TOC ') - { - $atom['subatoms'] = parse_container_atom($fp, $offset + 8, $atom_size - 8); - foreach ($atom['subatoms'] as $param) - switch ($param['name']) { - case 'HEAD': - case 'CRC ': - case 'NPAR': - case 'CONF': - case 'PAR ': - $atom[$param['name']] = $param; - break; - case 'DISC': - $atom['discs'][] = $param; - break; - } - } else - $atom['subatoms'] = false; - switch ($atom_name) - { - case 'CRC ': - case 'NPAR': - case 'CONF': - $atom['int'] = BigEndian2Int($atom['value']); - break; - } - $offset += $atom_size; - $atoms[] = $atom; - } - if ($offset > $fin) - die("bad atom"); - return $atoms; -} - -function get_chunk_offset($fp, $offset, $maxlen, $names, $namepos, &$res, &$len) -{ -// printf('get_chunk_offset(%d, %d, [%d]%s)
', $offset, $maxlen, $namepos, $names[$namepos]); - $subatoms = parse_container_atom($fp, $offset, $maxlen); - if (!$subatoms) return -1; - foreach($subatoms as $atom) - if ($atom['name'] == $names[$namepos]) - { - if ($namepos + 1 >= count($names)) - { - $res = $atom['offset']; - $len = $atom['size']; - return 0; - } - return get_chunk_offset($fp, $atom['offset'], $atom['size'], $names, $namepos + 1, $res, $len); - } - return -1; -} - -function chunk_offset($fp, $offset, $maxlen, $path, &$res, &$len) -{ -// printf('chunk_offset(%d, %d, %s)
', $offset, $maxlen, $path); - return get_chunk_offset($fp, $offset, $maxlen, explode(".", $path), 0, $res, $len); -} - -function read_chunk($fp, $offset, $maxlen, $path, $len = 32) -{ -// printf('read_chunk(%d, %d, %s)
', $offset, $maxlen, $path); - if (chunk_offset($fp, $offset, $maxlen, $path, $chunk_offset, $chunk_length) < 0) return; - if ($chunk_length > $len) return; - fseek($fp, $chunk_offset, SEEK_SET); - return fread($fp, $chunk_length); -} - -function read_int($fp, $offset, $len, $path) -{ -// printf('read_int(%d, %d, %s)
', $offset, $len, $path); - return BigEndian2Int(read_chunk($fp, $offset, $len, $path, 4)); -} - -function copy_data($srcfp, $srcoffset, $dstfp, $dstoffset, $length) -{ - fseek($srcfp, $srcoffset, SEEK_SET); - fseek($dstfp, $dstoffset, SEEK_SET); - fwrite($dstfp, fread($srcfp, $length)); -} - -$file = $_FILES['uploadedfile']; - -//echo $file['name'], ini_get('upload_max_filesize'); - - // give info on PHP catched upload errors - if($file['error']) switch($file['error']){ - case 1: - case 2: - echo sprintf($lang['uploadsize'], - filesize_h(php_to_byte(ini_get('upload_max_filesize')))); - echo "Error ", $file['error']; - return; - default: - echo $lang['uploadfail']; - echo "Error ", $file['error']; - } - -//if ($_SERVER['HTTP_USER_AGENT'] != "CUETools 205") { -// echo "user agent ", $_SERVER['HTTP_USER_AGENT'], " is not allowed"; -// return; -//} - -$tmpname = $file['tmp_name']; -$size = (@file_exists($tmpname)) ? filesize($tmpname) : 0; -if ($size == 0) { - echo "no file uploaded"; - return; -} - -$id = $_POST['id']; -$err = sscanf($id, "%03d-%04x%04x-%04x%04x-%04x%04x", $tracks, $id1a, $id1b, $id2a, $id2b, $cddbida, $cddbidb); -$parsedid = sprintf("%03d-%04x%04x-%04x%04x-%04x%04x", $tracks, $id1a, $id1b, $id2a, $id2b, $cddbida, $cddbidb); -if ($id != $parsedid) { - echo "bad id ", $id; - return; -} - -$fp = fopen($tmpname, 'rb'); -if (chunk_offset($fp, 0, $size, 'CTDB.DISC', $disc_offset, $disc_length) < 0) - die("bad file"); -$head = read_chunk($fp, 0, $size, 'CTDB.HEAD', 20); -$crc = read_int($fp, $disc_offset, $disc_length, 'CRC '); -$npar = read_int($fp, $disc_offset, $disc_length, 'NPAR'); -$tool = read_chunk($fp, $disc_offset, $disc_length, 'TOOL'); -$version = BigEndian2Int(substr($head,0,4)); -$disccount = BigEndian2Int(substr($head,4,4)); -$total = BigEndian2Int(substr($head,8,4)); -fclose($fp); - -$target_path = sprintf("parity/%x/%x/%x", $id1b & 15, ($id1b >> 4) & 15, ($id1b >> 8) & 15); -$target_file = sprintf("%s/dBCT-%s.bin", $target_path, $parsedid); - -@mkdir($target_path, 0777, true); - -if ($npar < 8 || $npar > 16 || $version != 256 || $disccount != 1) { - printf("bad file: version=%d, disccount=%d, total=%d, npar=%d, tool=%s", - $version, $disccount, $total, $npar, $tool); - return; -} - -if (!@file_exists($target_file)) { - if(!move_uploaded_file($tmpname, $target_file)) { - echo "there was an error uploading the file, please try again!"; - return; - } - printf("%s has been uploaded", $parsedid); - return; -} - -$fp = fopen($tmpname, 'rb'); -$fpstats = fstat($fp); -$db = parse_container_atom($fp, 0, $fpstats['size']); -foreach ($db as $entry) if($entry['name'] == 'CTDB') $ctdb = $entry; - -if (@file_exists($target_file)) { - $fp1 = fopen($target_file, 'rb'); - $fp1stats = fstat($fp1); - $db1 = parse_container_atom($fp1, 0, $fp1stats['size']); - foreach ($db1 as $entry) if($entry['name'] == 'CTDB') $ctdb1 = $entry; -} - -$ftyp['name'] = 'ftyp'; -$ftyp['value'] = 'CTDB'; - -$newctdb['name'] = 'CTDB'; - $newhead['name'] = 'HEAD'; - $newtotal['name'] = 'TOTL'; - $newtotal['value'] = $ctdb1 ? BigEndian2String(BigEndian2Int(substr($ctdb1['HEAD']['value'],8,4)) + 1,4) : substr($ctdb['HEAD']['value'],8,4); - $newhead['subatoms'][] = $newtotal; -$newctdb['subatoms'][] = $newhead; -$discs = 0; -foreach ($ctdb['subatoms'] as $disc) - if ($disc['name'] == 'DISC') - { - $crc = $disc['CRC ']['value']; - - $newdisc = false; - $newdisc['name'] = 'DISC'; - $newdisc['subatoms'][] = $disc['CRC ']; - $newdisc['subatoms'][] = $disc['NPAR']; - $newdisc['subatoms'][] = $disc['CONF']; - fseek($fp, $disc['PAR ']['offset']); - $newpar['name'] = 'PAR '; - $newpar['value'] = fread($fp, 16); - $newdisc['subatoms'][] = $newpar; - $newctdb['subatoms'][] = $newdisc; - $discs++; - } -if ($discs > 1) - die('One disc at a time, please'); -if ($discs < 1) - die('No disc records found'); -if ($ctdb1) -foreach ($ctdb1['subatoms'] as $disc) - if ($disc['name'] == 'DISC') - { - if ($crc == $disc['CRC ']['value']) - die("duplicate entry"); - - $newdisc = false; - $newdisc['name'] = 'DISC'; - $newdisc['subatoms'][] = $disc['CRC ']; - $newdisc['subatoms'][] = $disc['NPAR']; - $newdisc['subatoms'][] = $disc['CONF']; - fseek($fp1, $disc['PAR ']['offset']); - $newpar['name'] = 'PAR '; - $newpar['value'] = fread($fp1, 16); - $newdisc['subatoms'][] = $newpar; - $newctdb['subatoms'][] = $newdisc; - } - - -$destpath = sprintf("%s/%s/", $target_path, $parsedid); -@mkdir($destpath, 0777, true); - -$tname = sprintf("%s/ctdb.tmp", $destpath); -$tfp = fopen($tname, 'wb'); -unparse_atom($tfp,$ftyp); -unparse_atom($tfp,$newctdb); -fclose($tfp); - -$crca = BigEndian2Int(substr($crc,0,2)); -$crcb = BigEndian2Int(substr($crc,2,2)); -$destname = sprintf("%s/%04x%04x.bin", $destpath, $crca, $crcb); -if(!move_uploaded_file($tmpname, $destname)) - die('error uploading file'); - -if(!rename($tname,sprintf("%s/ctdb.bin", $destpath))) - die('error uploading file'); - -fclose($fp); -if ($fp1) fclose($fp1); - -printf("%s has been updated", $parsedid); -?>