From 0a64047081182bc7eaae23fc54bec0d2b523fb71 Mon Sep 17 00:00:00 2001 From: karlchenofhell Date: Fri, 18 May 2007 23:13:44 +0000 Subject: [PATCH] - plasmaParserDocument can process subdocuments now (other archive-parsers may want to use this method) - added 7zip parser - added 'text/sgml' to realtime parseable mimetypes (sometimes returned by the mime type parser) - added new cached output stream class, very suitable for parsers because of limited memory git-svn-id: https://svn.berlios.de/svnroot/repos/yacy/trunk@3740 6c8d7289-2bf4-0310-a012-ef5d649a1542 --- .classpath | 85 ++++----- .project | 30 +-- httpd.mime | 1 + libx/J7Zip-modified.jar | Bin 0 -> 136480 bytes .../anomic/plasma/parser/AbstractParser.java | 34 ++++ .../parser/sevenzip/ByteArrayIInStream.java | 86 +++++++++ .../sevenzip/SZParserExtractCallback.java | 176 ++++++++++++++++++ .../anomic/plasma/parser/sevenzip/build.xml | 58 ++++++ .../parser/sevenzip/sevenzipParser.java | 146 +++++++++++++++ source/de/anomic/plasma/plasmaParser.java | 2 +- .../anomic/plasma/plasmaParserDocument.java | 154 ++++++++++----- .../server/serverCachedFileOutputStream.java | 175 +++++++++++++++++ yacy.init | 2 +- 13 files changed, 843 insertions(+), 106 deletions(-) create mode 100644 libx/J7Zip-modified.jar create mode 100644 source/de/anomic/plasma/parser/sevenzip/ByteArrayIInStream.java create mode 100644 source/de/anomic/plasma/parser/sevenzip/SZParserExtractCallback.java create mode 100644 source/de/anomic/plasma/parser/sevenzip/build.xml create mode 100644 source/de/anomic/plasma/parser/sevenzip/sevenzipParser.java create mode 100644 source/de/anomic/server/serverCachedFileOutputStream.java diff --git a/.classpath b/.classpath index dc7ec4add..3c7633e61 100644 --- a/.classpath +++ b/.classpath @@ -1,42 +1,43 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/.project b/.project index 3bbcaf65e..969b67fb5 100644 --- a/.project +++ b/.project @@ -1,17 +1,17 @@ -trunk - - - - - -org.eclipse.jdt.core.javabuilder - - - - - -org.eclipse.jdt.core.javanature - - + yacy + + + + + + org.eclipse.jdt.core.javabuilder + + + + + + org.eclipse.jdt.core.javanature + + diff --git a/httpd.mime b/httpd.mime index 5b6ed7114..b86eb728d 100644 --- a/httpd.mime +++ b/httpd.mime @@ -3,6 +3,7 @@ ### # Extension = MIME type +7z = application/x-7z-compressed ai = application/postscript aiff = audio/x-aiff au = audio/basic diff --git a/libx/J7Zip-modified.jar b/libx/J7Zip-modified.jar new file mode 100644 index 0000000000000000000000000000000000000000..176b3210e2314ccc8bd61f765ae974c9b2376966 GIT binary patch literal 136480 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%0A`S{?k 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 z z=OhuG=f|VaDNAU_JitLA7?9II64`9z+`9i(X?Tycr;$N^QV2h@>Hn{lhMc~gl)c@5 zX?!BuA$oY={0Z*PXEUJd^@qjs{uc4!e28oJLcN^ATesv?YmI_j8s-hfo z;~2ZK_xz%yyPHKsn~CwX-^i5zDs}%= zbN#0$-A`xy2!}P=RY<8_}&?<;O4I<6KlA zBx}bgTW`2B8acek*ipp%vUh!Q+cOt?f_n+~C}Ydk)Wp+kAo4x+A(8nmav=0U$=O%V zuX;#+9EOCmsD?guubJmB(tr_yVUtAAm*bxme>=Dy9a8&vCzKZ|trj*KVU?0zZk8hZ5k{2LViJKyWS zT2P|@E!EMN{vq`V1b2SOpS%2Dxu;@TF16ZCC7_B$;hD0Bx#cjZd%6Lzc6<9`Wupu=LtXqlefB^*6bLB>OqKRTvE3>ey6a_~ z4+Y7_fO=lK#Yp=T>^s z*y@+_z@AX8;Fj;(K5y1I3e)OC`eWc)Hu)`nuSHk40hTRVG>RY587YYkT~)WEqbKxr zh)|odcH4%i;wjfrew}`lSQihG%8V`n1!PV-@aYMpL3v4ge7|M1GI{*$zI;USfq{Ff79OZWze$y#y{HjQmd;lmeyG7o`~Wwku*vS$#GjQXDVn z${s|x_jB}7{36mk*@vT}?;C6f7YxsDm6@J^w7zOUU%iK8R%6ctY%N=?I<*b+Ro9xU z$_jJNESNCajz$vJj2rN2fnr+kGq}_n*UpaS$JLe3z<@&7WFh$JBoEkze0VM;YpK3n z0|?2ir@{vrw$`VZ#izZyh*f`&i;<2U7_8b$ zfsLP3QcqYMMVFkZA_qT9j2}dPVvlGop!~AWb5@;pinK;WTnRZ*nnshF)Q1#*dC!Sf zFK(r7WKkN$IoXD9(YU4D-D1bJXj1+wA)R&SM{1K-=tzr2k8D>EfXIW(MhbG!bF(<| z6E@-nez%vihWE%*KrmWPNVS&EuUx8>reo!c)TCZPjk4Ynv2lx1az(6s)f}2xrg=^P zgLVD5y_PkLQ3s&LqK8f*WHd~2@|iGXy^nxf8mPPMBA19GWm4n2v6DTl{CiHG7=G$PA$7P@QM2-B(Ao{B+RdEW7bF@gQ-}SQ|91?#+^MR1qWeB1NK3RS1GX6 zGYnar<#UxXHDy|`hzccvHb+7RQ=uC+SxRmbF?z=PtZreuvrF@~;Mz7!PD+2b zR`bpdfU}OrQ;7o+Az7M)Ch>m{mB-;ja5`zq?89%Bp1+jmjks*kzoqr`3Ka9fwF;3U z33Dg68H!Lk(CIBI>X23uKtF%E{@P-K{5dsC67$xzGKQ^7KU5)r(xPOe@4c2ASxe(- zGO(#xei#UKp4b2T+}Mt@hiS#DInSXN`?`|}F1Y8-YpOb)9R08eA1)~KYRZF4z~ZRlBE2rH{aOq z&)<7Fb<3I0L5MJR6u8JyPyYHN%*@%xNiJLdy^tb=gnHshc-^ghQfi5^5@e$~VON7r zN8!P?!Nl)hKD<5#9@E6EmYS+WUpfxb9^AjL$G*S5oq>8`E3xYUsDfTAJy))>)K9EL zuSLCIR;`*fX)oNTUlkF#qc3i;PGy7dMx5%l?k~NcEWdAx!0>x3H4;@VDFfMj-Ae9~ zoxCrQ<*5U{Z9fWPMD*TMUvTU_0JsvXC&^+OjF7;K2=hjoVYdOm{P51?LrEqCQh=h= zR{pkP?Jk<&4W+RR7}@qT;bi2>#bGt?(opOlNc~eD#ifZ8YV%`LxUSTks8~-6*)*DMZ#lCSW>@dn+Nap}iVNN!|glm`qL;Yo$ti8rU3vyNra8OuE%T8AB3N6G|A{36x^l#nAnv)g98) z^MrU$S?iXm{a%8J?iXBT>i%sI(u5vbwboFCO^L{BAY1|up`QV;kq}p#-@-8s- zAsh@vntAef{3nnSHv}VLz~h|LX%F_LldEopq|e85cv4rf#pLPgKMgbHs0LmYSM_DC zG*1F=+M8#}Y^krT1={;Xe^&XB?G)-zTsk)aOgHuz^aZ>i^7Tx*nN)7aWRcyWb zMkLgpNMyYn89()4TrH0UA-j6~HaVz%3@us>p|Z-4j2zG(gxc9i&CG1*e&d<&4fwaN`3_=qZQ!0sZz&43pH}u%Kei(kRn#~)7l3o*B$MvRLppIb&tzvg*e$*kL zoEin6;M=I=@naZ3fpodx5xx|uy%uE7dLoRCo8STs{TQaCQ0XQ0?FhDkOINe+IgUy? zr`YQP)UwL@8sfyybUrq*2>8P4326bq)50trtP8cLaMlaH>YDpAa2hco>aM(hu%9N3$!%Qp;CBr8v~%%SX3m z+`4r+Qhut+HCu;m#RZ$~h3DHNxE8iJ2m(}SU=Gc0wWC6rhTS75-pP3W%-2NdPB|1= zAkJGrKz84?ZFdbbTW6J5CDUM+p(v-$?k@6U-B`S*U$GjG5xlC(Tsl+Y9{fpDTFN4L z=04hEd?>~-_<>5Y+2o5k$k=Xwhk^pz^!g=es-Jl~%1 zerUv^WZ)H#vvUCc?5NZFCW<$T&lwd?swW6o!Ra$7401Dd0c>A=LN;2R-J8{Kv^`OD;{Iqb;_xJM0m zY;;sVYxZ3sI1F)6vWg++CbT^T)ed{}*XxQK9j~54xR>FmF{>d8iGF^SI2q%W3Wl?F zyom6}{*^5JG@$I-5&QeqqHTiTJ>461H-HTA)AF&u z8rXd}Q{vzKUMIAKjV0B6LLvJzg#7i^Mf4X?u+jaW>d`;i{BzGj8vHw{H*P!n?pI>2fGscGgf{Qw;TXza$S3QOoc})Mq&vf7TWj_M1EHuOPh8;oDps6 zMk|RviZ>y9(TdB%aLV*XYu4D2t=F#if^{tcu?ar{H{NIg8a)ByL)lwM)+|Njmd!#7 zg)QLK9B0iA_l7n`cNw3>auev2Mt%>-g6~mKqyJMCzg9~NUVr)2!*d0m?3aOvxiS>F zv6*WgJB9pc-;JY#h)(Rn9u8AwpAQq@fsFo?5ZXyIkMR#rIJ-wG#WHyjW+haTLjI+U zL0^{zaDJSUCXvENSJjyC3voGV)8|NIFl*`SzDNrx>kQ7&ny}M2=P%>05Ib96Au?rN zMJ&m%@-2CPar^tg3D(Raq32>?^@iz961P#*AVx88XS4RLT1E(=EEcX$4xlyr@jgVL zC%)^YJx9^jT)*vQ-x0;_JY(jev|s0VmX8a1v(d{5TjZ^%LFl zDN`2yp%6^Pe3;an`CANXIgrRA{si5@-^QTdCQJOuzV*Xd)WYh&&n^6AHBD!wvA9@7 zQ<)0Rem!~0nXYMtY5}{;xgGM5%4@Pitl+fNwdyJ^=Mf%hxn8zDevc~F$8Y(Bo$O?L zx$U;E_sdJB?F0?WC+gThFVRY=DZNcpaYl?(!;i~%v=^gfKD74cWf(BRYaJ4XtPXqN zmD~_<0_>3&XqbRjEiBtQX%N4f7UD&n6dWr-1QmGAV)qyGyf=r)-}`hgOXfDOYwHrM z$Ksg9xjB(SE}EXC0|248?M5w3=fI-c0_-J(?4Ddzk;INyv3#@1M}Fw#C6S1mFcc)= zkj^Wqe{URS7c>JR1!*fLgUlcR84}93`pN(5#>elU)iilG&^*q*~mAqtQ6`*rz<@2QF z>@z|pj#4qBusPLH$VJoz8g~i5pj0fW*=xT_yQ#lQm`*!Qg`gZ}$&fL_$;1`~dkUWL zp5=Pmg`V%hT=Z^d5Szd-nl|08atSWZ8SglxOais7JxrNLpNstg>sIr+V7ql(243wk@N!m8#2Co$k7dahNPjt4M`+_g^bUL^uN%M z5&unQ_-?U*4H`oA_@(|E=`1fg>Nzd77_G6azRV1e(wuSo6y2EwLwe3NO;F2}|42_d zCL$)n537qvdJjhxlX-uJWZMg_&ly_Q`-78}g;o1?vnGlzc3BVx4MrpBh-XUl*xTYx=l_PoE9dww& zKSQoDX*mQMaZSe-(_Yd7d>eBj=Gm_A*cyXjG5gVpvh+|WIyNg8*Qw;5MmpE)9AL_> zrdu{;6(Ms_?DLss7-neos2%B!Fm`Gk*F~Nh77!#EjMad%>bQwUDROoWKrx_#l&jGM z0I{jz6P0h%)AReZmcgqb8q`HDZ6v8Iz69WJ1SmacnFJA80V^t7o0GEQ>M$vnw?K)d z?Im&z^s($V)JCX*0^`kM+{=25rBeN*ocgD(?0-$ zDmd-4BA*n(>)}gyU?Jk-_6SIWU2|drh4NU)aa`vx; z`VaE95~Q2zyz__WFV$ub)rACPwh+K>2mUlrrQ#dX>R2yzOi+#_;v*xZrvdnAB7$MO zY*>KM#+vdoA#Kyzd`fec+GsO>nUzxI6>~FPGyOHRY^mk2GFtX5Z1V*R?Ddb<81tp8 zO4Ym2PZbi!fm`IqljjB($zoD6lxzlUa9@GC zb<>Zcr^DjMRro_u*}jmFI7LE-VV{fa*0=>KZmuVY5ZQ15MHKAwde<^=={;@n#uP#+boWphGI+3IQ*1i#}S7apa*xS0ZVVr4KB+nI2b8vfOut5Y0kK{T6Z** zQ)F0kG`NW-d~^)d61*5*uhz3r+;&>A2T+uAbhK@Ryq~-h>yTTw1{97kty7yFXHuYN z9^rW)5|Y1&4zni#tciJg5W`3Z%;ioH&kJB%oXZb+1Ik(Q3SRaBKlten^UD6q4o^#BnQ!qH3XV5fs9XR}R<&JfS_eE4Hvt?25m?pq9;bqxppBF{mL5Ld zUr%*|?mOMR22(-p2Rr~lt)h4bgoMlIqP__P zRwku6&L})Vf>;c?qPbD0;}RIBCeU5*Ls`SZ&_o>SF&l=Xp#fxD!!fiZXr_oXE>~IC zBV#Td1K)}DMFK@Q^SCI|FpToZ`r3wvri|EF66PC|eofoCYjv=v4be0jXBWuJs zH}r6d#=#6i+hwnWBFbYOoh@_l*e3({hrOy%j0)s_|5QVKd2pl#-|XjFEgs_FP^pa$ zGHG4lfmurdyRkdh_s-%56^WztFV5!FR9})A#edJgapp!C#hR5kubExzd=Xg1nAaO| zxumf5TC5(6WIY6Me~i*f^>ieTov0H=L7>fHjKC5##1A~E6BZh%Ve1fbFpD%>MKE5r zbH{YIRG8z|*<3(Yi-fkI-|GkT`SC9D&Z3ACB&IiPiD!u{-3bZ{p)iSB|KxupZ#wC{ zo?hN6XT8n)?uiut{740e+dHUC2%-d#fCNkB2HN&$u5d(6J*qeKn*a6Lnj3`c(eE4Q zU{XXZo2el&BF7R-0wy+v)nH_;v+n_v8$u?2u;nPBO@hM3*t&$v+{i8h$^+{nq}fS%!T4e=ao+;mDu3kyrw5HlrJ`T3S$u*ji;3v0aU^U>%R3>I6+AOvA1%XeE$BODJ zF&_hR_I0onB}zZKp7U*wuqeqD@)IMMUyzp8HZ~S;mzs=6iNigFj9>VnPlbItGAXJAt@q>#l7JlC zP_J|Wxu?a>XJdJE7Dx8uw7BoL3*(||;al5`{oO~q)|_ZybyOy3 zsMVFr$IQ+qaV5YutfK7VjbyUk#I$ufi`G*qf1&7X)!k@AebOT=w6|gP& zMOkSAzAw~PgiuvMiRm(pL=8?jmpVZKmC&Eqx7QfbbqR~SwK-}6PI(JUqjiWY5~;ua zE5mOcZ)BfKsd6m4Qk~2~-;iDiQ8}_LoR0e7EXJIKRa_89dD8ZvrcHFWLP?{&jIoMx z@KEmnpJx<>U}8+QF4e`Hf*3`C;p&cjU(4LKdz>W_XU7?;#JBQrZSnzG@B*aHBi7P)us*%brH${qo`zsUJ;hIz>w|_rwj(mEMf>YyK7H9xJbZpO zX8ft3ZNzz8!W()-uO5t1CN3}E#)5KJ#>^F5Ga`IrQurvh zxtXw^VG^vX@s`I)9!PSrS-{WLFOeSEjJMH|mx-H*XEnyWI;P9XiV9SXpdVDAn9R|b zRrP%sCwu>b4624J{8TbukjjB@C#5Cmk(lE#%N;HUX@D6|FAEw8WZZybUxT0xo~tav z5uEiyVWr}BWiDjG@~2%!(KLWey(6y2^m+-YC&G-B?pZANf;H4z{{imM z&KtqEj-sv5gr^*21}BG3u9XZ4Dsm{_T42~KcF>sxv`(_88slDGrC3<7}1J2d|lFSO;pRx zE7+w=1IEDTKupfO10j`OTXnKeG!{yd6WulSJB)^=Q8KzJvWigvW1Sc{arC2|$S}ZL zd<|%|n1={Gc)Zc8bMVryG9d;$$BW-Bf7-HBdRLvSp2lujuY@2&2aaW-J5+(aMxM`5 zI+E!H^z2OVoH=PQlj%H;Zgx@X#!_IE?W zTIYBMkJMZ`y*c$5E9~aa_q@GU>AoWpQH^m7&0CGAB&3^ai7=RuGU;Pu=yClT0Vzui zAKM#Wq+ZaDtjm_lY5LjljrvSvgjr9I<2(kNmFS|YY1Jz*&sXtYa=plL2Y$&{cu#2E z$FfIvCcH2YbW(&SBQfy?$!<+r+{MV+b-^k=cl<+q)9xG5-nDm(N^@bJhGaZrO}olDl`_qP zu|@5oALEA7*6Awsl9nM`q#TjQRn2}pTt18PLtV*Pw4xv^nIyi0C={7~$Kam0>_E*P zv5l0dzdZeg)UaWmSV{6|W)vuzz1Pw^7y<3sn5XNQmg#ewsyR#{ zMmxGWxc5=3k_Lxg2`P;SiZ+@-hPTXfa9@HrBhvLG2)OHr^uphzOc9d-CvKv+`0kzd zR2s^|jsaGn&1h=YhVI!KQWw9EIxwshE@^;XeEiP6@1|xsb^n~bjqq8e{q>VL^Nqz+!==KkNL9Os*J2uT=1APUelG~={FAQhXhGda8R zjbmx@LLhiZzPCIERdn>U^t23KUkIku6hN5aLcOs?=;^F}`_iCbdUa&HuAg5q=JWZt z5&z5JVEj)bcx`lzj2-m+ssTyTi29OmiJH2MCAXNGy_?GCI&AP9qN^H3xHHf zgCT(z#mF2ZEr;m5Og(F7zeLok+Q-5qv%xqm;29V^*9Yq9#XaI=KpLcW%5T__eB*w= zVc7A*^X>f#u?y>*5Dq@6e1z)gdo@ca(T2&gs*N$n?GFkyM(jchl}Tbnaf))QT4V)& z%@j=VJ|K{c6jg)i`w&ogZ>3&`ye?^dSPiB%d&^usWqPoL;5Fn!@Kgs{HWFHyqnV`P z;bTY^vyrI=C8tS;Gb;_P?<@7!dS9C{^r>A==)t`;0KwD5@It-=lBK~18Q3!Ur!m0^ zNAeWtv|ekQ=2E{28>lCrR5~Rb%}H!198Bm-BqJo95T8z|&SV>b^-&E%4#lV}H|!c1 zxmrYZfeD^AlUAM*kg4@J0q6qwk~lM3$tVYNKb%FCU7arTRTLZ(LrZMZyZ!>kH-!WM z=i9rcPLkV1((E#ojv-~R$rCqSlH`*i8k5$aH+@P_`<09Hef^+phFB|3UGX_I0v#wO z!2&$Y-uc_a?gmK@Ya#sJ0mfD&!PatNz`zP&)&(iJaRrDJY*Jwj!&488!+LhZHf4k4a<%R@_DMw$rY z%K(fG`nPloty2^`3@|2tf;ysgQgl&4Rim8|&5<~e_1W7%K$qATm)NF|PptIG2?yaa zL|99iZbwfu*8~=G+kE5|-?SFL%pHBUJ+Da*PZM8RuApj%sffI$ zm_VeQu^7CQ!Y-+jFDj=jddjmxxJcArjV;_=`S{aJOp8)|1yLNsp3w$}Q&!A5;GveT z5{1-TR!mjLwO#}A(Fd5@?P`!l^KxSzS1U6)_*KHE-EPA%)BT?7VfE?6bN!vmOScJG zP-LrHracQ%PNBMeba+e|vgM)XBniE7Wo)lte9R3=+dmz39JrRt5XE36uz=<`3{y}5 zui4qu)x{OcpM5ry)fAs?J=O{tS&=P7YrwedQOud%Y(5T`F0x(1j+|dRSA}$`dkmn1LakxE3uR!& z(gd=9QwOEocZYP#jhdBy9CP7}Du@Kv5QP}bLKPCEp0&QvT!?Xy^IjbP61@`vXrz0L zBL4O|9NH?(aEQA%LZR*1Wpsu@TNSl>1_O&8JIW(aUv0;U9MzXb(gxAJ38qXxr?dnd z6qp}=BC%C`_|A&+?iuAEP^VG9v;k%MNSBKo2F(`6;7Oe;n8r)=)QK2;5!W0#l4dKw z+6WNqNXFEXXE_3~)fut55R0xqZ5)>=bpNle_?L4`FsJ%~7NhYeqj4qR&A zyGkrbI63mpCDC8P2lo^m*hL6STUrt;%oYOrBi$3u9{mbg=GSjj>Y#F@`W|saD&e2d zDiG}rg$7xze0Gnb)+_<)w6D5ze(%*-#1Mf#CP+6rYW)xoLaCO=;fKq36W2<&)N+TG zt5t?^a$$gVgBII^aum{Iva_~EjiT4Cn?;CnVq9(7qIWP-k!VW@G6G@(k9wX6#kg7H zxKyaOUvhh*|3O6dU4L_y9(#DwkScKSql|CXz_)Oefnhm#i)}vy{elOvB7G?JhCLcu zHa1@z8|vD0dxXhtqU+!aI47k)hg$lU;DlgVYA#)M{_4yQq9+l`O*t*Jxq+KRuTy8U z^bwPaYJW6y5C{=x{^(wRq<_OQ;N3JaPuYOi!v2B zeh4PS!v+ZER<71TD?Pe8Ik*)Rw=@`={5kNV?CWBe)MZW{cKN{@AtQXh6!P+UGy-gd zT{-L)t47b{-m9hpYdsUH#YEwoBmN=Lvq@>xyq)M36Ndv$*$;uFl3tWpEV=7;3lPN# zr|Uo>8&dOW1N3Sx()9(7SUqaA`cX-tm%)V^u3F}$$vk8qpyFmM{qo2~$tgH1x! z5qWbEFcsPZ?d>l|zxZ(ywkjd2kYKi=zhp=d)QTH5?PX^ zvfR?ev-6W1-_k!My0y02$gFlnzKO*@fw;z=XPHL3eR$IKk2sdMy`#@i_Gxv5uXJuj zEl9B116kJFMhs;oy(2-bR%}!2uOAMWEZeN5e|)9yAeAg#$aicfn8A8Nj9?V@F^@iL z5d75;Twa+O#4Lz;b#_6SBgE73GDohFWL9CJq}C0~Ve;CH8N^cC9EMxIoj)vZI}YK& z>~wnE6Zi~lZ0_tU%+MyA-W8{THMXr&G=U{v zAUA$wXO>sz7W%8NP_3p4ECkO+Z93uSF#mtiq5rLH{zpn&{+}uF zs?TrA=7%|i$+pdyoVmW$&kR{FOTugB4LE@> z5H<9tdKn`{BMeHd`zc>=xY#0@jR%j(=l;;UOiNeqi;3ZvuR>Y%Wl(0{Pyjii^mI1= zksjBBCFlo!n$Z9G{5w7VU(Ox&pBnjFuK&kv!~eDj=l3N4>i=5wTe6S;SAuPnC`tm~ z&Hz{?Y6i^>hRUou!lpb@Cb|U->O)NxAGo{g?mEIOQf_Pk*ZurGRnq`EdaGsy!a|fd zz5N5^S_Uh6da&N{hrrP;}*DcxeH)z2E| z(xUFYd+EkDZR7rlg0lpMDUaXl*t8L);FeEA0snuj?(Z0<|08Rb`rQj@vqo+NMq4CC zJHh5+GGJg3KK`HOLRz0$lfcyqIPwC1AvHpV97Vwx`DBn-9b{ z7bOh##iK#jYYJotT*Kpz^n)NUqvM^G8$9@lw+MHVOc?n@C`_60V zGvAsoq1vTg*5af$=hyp}Wwf&VZ-`qKN>nMok7sZ~`Mk6E(GaN z{LOe`yg&Q%Pd&sRpZtdx-DO850qBt053uHgw+py=CZxD ziDyL%;cjQu9>03TT{-yhOjQ|Kd=4aTKWlzCdD%hyBDvM&2M&-5b8&gO6j}y(#M}jJR^ zQxmzrSjX0yvr5z3&buW(JTf?1^}_^s-Zk(o(-{c9P#l@PI?mCFE@A^XB?;HHpJ1tb zfY;K+u=2aV>~ka9nYjyJDsVT2?ORSoytRO8%j*ba)n<|mJ=+sY8!2WID{=Wt;{1X`eWEcrr*x5M$W3l5ERIM--(cdKr zRWY4)M@>%qsGu!UL(BbG{eFp_5|&dA*UM`9=yCMrH<=n^TiS)!Ih-H?#KkfHScyZy zP&&!ouIGrYo5)1ZTT3#gL7LHbcF8tdQoy6JQYB8HSRS3{z=sqHeiwvz zsxjX^GbU&?GCABldI4_GFIgyOn5s&Lknx_7=wY1kcWcn_0Nn%kE>DK1NN2vWpTUlc z5HYrCHcM@0KT?k)24<%x@3-GhM+!Vzv2tT%#>_~Q=nE_$)~yXzVr8fM?y}r#0uwRyGX&#DKU#dYEoNM&Ms}6bPz0Gacv(%*oY0n~FD8nTu?Wfc+~wTRG<|_IFh5 z`RVPP9rhHpTdxQQROq9rYQdbMi1ABt#xepgX77g2e;YxwzdtsUN0(^7TogrLGb=P4 zQ>Wu{1{}&Y$K`VK%dpq^Mv}p#zg|P5?8sWGBu=MPe<9LGq3qrumS`n4Bw#%GYENN> z<#nmp?XkA~*mi{*N8f>owma;DBI#>yr~&$1&CDoTK;H6j2a0H zZ=^kYq&RFgP^PrpbOBkVU)mH~!?C(D(Bep9g#M8yN(nvV$xB6SnM`KXJ|s$@f+F#j zhfUvps+5qwJ(xVAn3v?qyUGqa=A}e_rxjtpLUOmyLgFspK_~id_Z>^z#3?}s^!XBt zq^x6^KlJ9tU^o)>G6z=im${N6@8H8F0<2ohiK&i;mZSM-ld4mdqb}-`HTp*4&OIQt zKZyD-4l1UK<3~J&B&J*?#v5aA_i%ZZDz(aV4v)N@L8tI>3sg1qL`^9`PauaiS>alM zbGxBCnoRJ}+J=FxxMqR2SLu#RG~v>>Fk@keW}RWm#PPb6!3>S>{NKgYT9l86;NvMD z(1KU#%<)uQ1y#zH1A{=X$XdcNOr;h~k}_h3mG9*g+{0godvwV3M-;;;4A&5rXc&B2 zoAP$q*B~lajclk!%@5p|?)Io{JE%hT6Kp$H<0e?LI?f{8IDGPsa#ue%9XZ%d56$yh zO%7K?Ju3n_Vs8&j4=rXK7p5MjTu|SX^BrT?<@g_>&dam;^B#Upy@+^b2dqyP0i|Al z`S6HN>!in|Pa(*Tw4$wR^m*Z1L&k!zccIv|XI7*|JDwwFMLE7zwDK(Cul$B}yeP{{ zI5)4tdkT242>PUm0}XPaAH%{Bq`=;Z%z=JQ9Z;Xz>3S#$3p2CTYiH-Td?Q&B`7Hv` z%NNJSC($VGXl*x(4!_cOAUFk^vAc3VD^}o~Ow%CS4wPtUX*-K>($tnN5_Eh zCP!xpwYUpoZZXZ!^fRNBbxf- zo&zSDhUwhe{+@%&@7^e$dR!kpV(;lpuOtPFIE8+JmgNEH)qvX5qv0EY!f6pM-s@Ej zrPzXb>>(odNYTfn`13LXCAmTJ!tlir__El7aeXIkxws!an4Hbw)gOSCvKU%no&&18 zbqq7yTjs~0&NrVbXC^cEHuZZ4xkDD#TMMT2ahMyKLHD(v(&vx`xzShAE<1MoJDDtu zIAtsvMn-PXl|RD;=N~&BPQq%T!#9kbZmOSCL!rYxr>7p@U36QsuV}7HK`a6*7tp!a zryie8#&mEK{nWnWf))zxxt-b%`U(pIctck9(7>vDqpUhW|L871pPDmup%DpRvCNs? zHClB>gwD*Jc1H~7Y0R~eDj!*|r-!b^?)D7fZ0bwgSEk+&cY~+4rOezhQZrcLjzk(H z9=u>v>z2dnr+9Tw{&;BfO}xbGWDyBx9bFp^9!Ug6ZaaZW>~e)}B~sX+Qp7BHTZs7e z^6@)c69P{op6IjKgoFLNbp5|nkN@0uMgREafBF^w*nsUn1qHpda9E9BXRl4R0v^3? zeVT3gioS`96bJQrr<#_Bh>K7T20xo)eTr`(s;P*!XL?N>4S#WDygk1^0$GJu3rKw% zFV4U2ceckoEj1NAGN)7T*D`Bk5Ts+d|A7yWM)ku~UVFrUWM8~SMn`kAY$e+;TLq}Z z)Vmw7pA&@s0syu6SM1=ps$y|jaL1Aj3qbGDNK9k}xoI%J_f02Tx;+%dB!Dv_=?&5t zO5i_OpP!oPb7(;*To33kZa!RqZ2_^1ct$L)+7o1x_StB{+x<{>#|&0-2#7qQ%@fX#|pJn zFti_G6uPTVfqggYP~`&Qabv4D=j|6Awv+C?51F{!fJuF7Q04&1&dtPYffF}9$equ9 z%CY{Y>mwltGnAs8yWj71Xn|TXmrWhCmmEy}m--89mf?bqp}f1rY6XH_Ghb>n7P5`K z9iT%1_&>zR=||gITV!nxFgxlLj{$NBrvw*HO>&Py>CW4t1l;4JwEAsLA@#P4eYeTk zL_|P}Z8LV5^Q45y!|FND4zL%D)%0MOWXT%8X^~Qc3q&zb`+oHnVQz%$)$q>XmK4{5 zoxz4%H0%*bxo6(7WK; zTJw+wlS5CRD3MlO3#EDayfLC7t)QrB4Sbz)goQshGPmV60BdMadtKi4Ue=U8qM}uN zM5)7FGLA^H{D}us9!5Fnud)j?bG5tWsAn9uu$smKB!Fi1`$AH%RpzH;tb?euvr*KC zlm$wpFIto!yImq^=@jnjcpSlK^^Wn5@#aUKs(PyCteVr11eNq_+E@qqQ|bF} zXH@?qVHK7BXY$EOOZI)~ye$<-r`zyVY?TBPf~@&JRDmnN11iH&a3IsIwazA*5Shn) z9()Ie`}pRY@PsLOL+G~L#AIu_IeB@s^a}Qa>70ukKFT|hf@yK;z1)p+F7*^Hk3K?b z3lAm_48`-1!9fpc)fZxkQD8)KUCbJs*~B3?Qic{I!)>z}3;w)tJ}|KC2hex&TXD9M zA985qc|vB;4f0Lq?D98aGKXQ)m?DZCa7Go$UJLc{sXFkSeZB>JWZ>~ZSvT=&BQe(d z2o~$DlJU;f1*$XJd=h)5t&3xxXTfPmeU;09oeTWmi{GD~z+eA=X>&JYhkvk={{jU6M#2vMgMDM>gWixIloK|Nhtg`ptj%fZz1PYkje3|_ITV^m*SzA$48CjbQ zPb*Fb666aeARlOq;fK&GSKy@-?ja|Uqoh$9(&BVE`Tlhn-qR(gYlUO_(#y^+ z*cZVmc`&@$bnCY@K4`nhLDt7TtwJ`zJXpP2yuT$%8Q4Ql_~&tThicmVxh|6TCWIfTW)D zps1%-_>EX_$z?W%AKAkx-mD=DjwDwKYi59A#FS@M$$Yj~pfnoU>rhKu2&2B_S?!!r z9>(N1AD#yJ+FBU46sVtZPvxmM-oDfmcvkkD6#`&HGo3Hu)7gb2bxfwlWZG!5)>-E_ zCVEd$_5JeGC3S^Z&AsQ1D)tqbyX8&G&MD-Kv|k-Ge?@XqDh|bKq4*&ag~JMs2V7)B zECx1Lm;0PV&OU*%0KktXE`hnh`y{Q=k|cGNTljOy%pmHdWSd+1XAz`R92pP+GV7sz z20!$KSWY1*@rnO^&JxJ;&$dFw((Nb1tRL{>X&zxvp2Pikgc-{%c<>NlFAt(qpU~&n z-x3V5e2b?i-Qh$bmJf)X0S?Zkp^+H7>$(Qif853P#WZ`7BW7aD#tWhCaEb4ZONvEw z@f-A#*+dUQV77!D6o30 zjvVH@?%|+yKwYgK6D*3}#_+Iui{UbT_8I=r#kfT$j)s;Git66;_S(L6{)P^N>7|V6DVaw9Oatxn0Ks$l^bvAcKOmSTaRrjqjp*<6BghNW9 zgyHvq63hfb_F;&$%xwEUYI!0J&)ICd3wj!pXdZ`X8pqFx_(MQ*9kL0I*>-#2G_Mxy zG=t?zi^40m5U}MFPe}U-1jpgJp}~j3QbS}sNe;ppmPG^ zVzqw1qWi?p9oN4U%*@#uESVZk>nmq%W?j(8Hg@vMTIS7X?>UfvvkMVdjf3Ok5Z#G&`{$2D%*XvX&-MVjNHH-ohQcPFPN1S=odTC5y z6=m%`g8+Okax^Id`jO1FiWK%k08BIxOgq?1=?yI~G*t3#a@eFAlNoYCr3wf?=77Lo zlS=m?T;D&;<*OFqZksa)@Epg?A`#Tf!T}oDFSM5CE0_&+Vkho48)jH z4xnsgO;sSH^NWs-nm|Hfti^afPM=j^Ny6&QTO9vc|BQ;#PgRj8+0%b`K2@+-gS9^|g>euH(03e+pjq(^|ImbV~rPS*ke)&HT&3D{}bxFe?Y8ut!` zDHCh^V5h@Y9Y=W>V6EARM;EIPvpkq!0^i3jqEks9&>3zhZhXMZm1|>Mq(DBd0g6y# z`2@@mB@QuwAxv@_BMo-ODb7?}UB`U#mZHqycmO(}N`E36X3si!Yc)Q4WY|aaD?iSi ziQv4SmSQ4kI@AunT3@Fxqx%xHf^9TP2YSaD{(^t7k?Cu-r=9@bwnEI~AS}x{C{8*m zrHuH|UHnd1MX6{j`+hI4J3e}_DCYDmIx`|sJx`5h@+znXC>Ou55I!juVcA)Rm&cU7 zoFbq6^_*YVv51sJlv^sTkV^F|t8!VgB|?xY4S6Ax^s0#ItUYPAU5A=MVPjl5IEWy> z8B>6Z^XK&svkc&&A0}tQ;-v1Z6!0ESK^LD%F)#6q@q)n5EFC$fqaMU`G{UnG2=-NNrg6QNuCQW8d~O zZvFOB7?0rg;pA1Q)N@s2$Qu}K8!qit9Rjy#&kwkwJVt5O#j!HvxKE0h#o+`xBf&25 z5g*sT%f7LNYz)N%>XJtmKW_}Eb|Xa)i@fV__i2}u1@qnmjcR06gOPi-a8*?3=IKx^ zZL6}kFWc|qM)8)cSSi1}k1j%J98xVMCCF^MJL3uc%+g4>2fVu_KN0o{#{Bt!<8X&A zFGeBT7mh>pczx?4E1FQ;QB~PmEFTzE&(g^AkpxR9+b(q0on5m>6+ySz*Y7_}b{qxm z_0G{dBRh>7N-N3H{h;`Kh|-zr0soG^xfYwgT#Cp?g@ng`@<8mB{#2VE4la9ySUD4b zy4YLU)GaHpb_Mh57Mql;e<9h931it3TSHetL*}*6cM!lwTTYZ6`2J`=>Ccsti?WhSq|$E5?dG}jyVh5tWq;mgN!C-uDOq}{TVYI$W6T4vaarq#E_=q`@%=u$asfJ)V z1r?GN8FZ-ya)FQU4r_bLo5QNFyN`MU12_&L*^)O=Ra>zvCm!&g%BaGvCq`8c4k>RM zFgRV+i#H_gJ8689)+?&k4nL%ZzzR; zOTzm4=V)E_%A312at7vR=If!<*T77SNpUtv>LoG8a6{=d2yw1S9vW*A3 zvXlFa+54@{9r(!Jy=jcKv90@w7khh^&+pOc2PZy*$F|+FQ`C~ptm7=YrV$@Nrp?Wj zzU}UbmBDxL!qodLKiBh_goPj#i56=o#}RvYrf<1>5qogH&qMYi+((yfc+Z60`yG#2o|BHemmEi% z@7un%+MqQUcpQ32YIqB>$0l72>#M1ucuX?Km9E8#rS;-{Iaw#HA`jz9#{giIz)8>p zGW{Cy3`{etO!Ngqj<8A))O3JCVh-&2rgaid;XpEenzn#C-5h!;{s?zw8hX}C0*G8R zS+IU(?2@J+7HtXAL>xpbtCFaNO!a5d1JH^)qT}DamH36k_GS8*9oB|-ws$epJU}SX zdtkVdB%b8R^x#+@IOTLh1XE?$n5mt=chkwkjMOC}(lX$O^FVTr>Wrvm-*E0`oL z-uq=_OKo_)N~p3Qg|RQQ_p@k%9p?8hM?1Nh+t&d2bK6tr9hC}Ky-a>R20Rj0eg!pT zu_PXF31$KzG4;KIs`W^E_xyg+`f1MGBj9?yf>KKtTqpJ#b$mC$wfvR{TuEc~1|UtF z81xyS#Tgvww&}1+#Oxoc{0i_yMS;CoO_J+9Sh%al7$fRjHubrga1nLH=%I3Q%b{(= zjrv?12w2!gWQVQO^Rj>+X(}!dUIoZn-U6FDteFQL?F&% z!E^j3!o|)9Isg|&)L5ISN{gN14YbiR$mVGsYBUY-JRpNbM^&gRBy$u{pitC%IQO^5UDr>Mm(VWDFTAT!{5G3F>JHi>I)xH1lEcB?6pehlF4ly2WapP^ zw|-*KIumQWFwRK80yn+R6tRvyw;pmeRe;2enx5dfWTu5TiDAxk*3ID1uIErt+}tOv zFSc7JrVxZG8G;pyQV^0_S7FyDG!4MnMpE~Pe$XrwB)?wh;rL_H+j`_ljIor=U}RFt zARxZkEC7iNI0%}l*mPWtF~^kgM9Q<9y8MK{Pus6A&@-n{%x1?1*$Og)cVeAnfN4e2 zDSRuETBHSzo3VU7bb=lU=b4(1#2zyI0>l?~E9uf8+ox>Wo=R|*654in6opq% zTPB|qfp6q4FPmVVvHL{JNR<_C!f5)xnQxwn^YDuahE#lN32<7KS zDsvNIEA(%bJ@t0-8^lQkkMYI6tgDH~)nt-Md!~5NNU2}x9M|u+=gi>```zX9Cx_+r z7H{x;4tfH5D}WuMd7yl##}F--OsjCqo zy}y^uPjE9)`eSa?9Kd$~p*kkhagNx0nQ8UP z(p~d;M3l||(Rn{>ALeV1x@v4x6Mv&&j$EB4G4q~Na{(9=oItDDm0qpUNAb3l?~%H% zB-!zp*T+ynD&(b$(5w+Dola1=&A4)s6oyqU05*e=HW(mYoUQSKj8ru13|q9((H79$ z8Wdj_@!d(Bd)i07eI58 zht*J(X}y>2AD&ftkzVI%m8LL(bUzA>yv1d;sEj^Gw_idFBCY6oN}bN*%J%(0{)Q<(0f9Q0N0w?`y17BAafspF@6; zUV`2R#B>?az(OZemdp^c)Ujlt>~>6FqZ4|H#OT#RwCLs< zMRVC4u8p)NNPAJsJ^O1-4y2hyb(zC&l_B}-xJe;O_p|QM3t}x{crcYPTBSYAW8#@G zpX|i~FMSY672TldZHQXe7>+BkhKX+dvX-)ZW5R^-*>T6hQ%$CZatfGLZPF}@g1c1N z@^+Zx>Fv@)hs}{A!ad-S!kyda9nMg}Z1(HqGYfuaEHcTFciH+mS1yumSZ0NE zaQXOUDQg2Vm$^@#km(nI7ld2*%R;B~UI?c>I{Gt=;clQVPC>aZhMnoAzREc0%(+q?q*hm48j(Y_Y z!HSKT`&JKbZ7oybFWx4VxkhI$6K1XPQ5JjEBX0)`)zh zcv+9}X>#+#PH*Dz$!X?&crM7AhJuy2q;#b4cl#W;am2; z=xMUgZ{EjJei&T&w!HVzr*55eW28d3j)|>(IQHuyUc^KE6+vNGomi-iCO@5K&Bx+B=BmoDF?}7qR zeN^Qef)jx<%sPE}XGT64cnKw@5@}#^1a5vzPC}s2@3J4@Wh$y^o`{1ElAR4^+c|}+$vAzm;}h!i&S`x(q{NRdcTiebjRw9$x^287ncm0 zl!LE`3u`&axdNy8`AFvZ8i5VvEVPm81Z1MBH6IlF4Wffe-SCRSs>7;xH{^b8OKnG&fC?gzb+`=iV!r+H|sE z9D>gjA4Ro#E;B^o#=hRIk%C2pEv3-)k0i#Z~=Gs)6jP2De zgd)^I$%5)dtC$^DW5t zXgdr~oubJ~4~v`e$~?1C&F3mkh*GLSPqWXh4@xAV?hzo#d?LVju(bzt zib>gCUh;&!ciw`)E%n)IRnj2U_C!+>SF!i>;b_XsG6>Ve_X$PRT%+|_4N?x~(Zlou zp~1N75gjI+xeCTE(4%SWMf@(6ChW2Y$R)hb9T8rOpSX>5AsLW>(?1RQ2Q|HWLdl!M zO!cp=g%gR^X`aHjz;@AIb`|B{?!?}>O!x3$M}3p`9Ivz@ln0deuR>^iDe zZULT#$=BNN1x`0XV|)k$vL+$C%ust} zmRpA(M#yQYbj4&0 zK?%pL@2~#Ylavnze+B9W3?+)pAVBFpYy}E>BbNTy7k!)Kw6U(|UD3s(&H`K$({wtIxkY8)e}YXp2NK$v;iWH07)B*Y=i0SX4j{ZWm* zp8+nVut!Ktf24fcd=`BYshRRRUiRZjI{4w>Em6n9}LT0PI4}!WW|5 zQ#A~%0|=EtCLauk@wnh9Z-K(CNhPM+_!Z2>5&8V)?+_f6;z;HY4mp=N_*P#ul znYn-g!CbH#^*bhgCbx{!&w1P)jxS1{oMr$;pGAzq_}n+c%sxknokQlHe1@h{$Zcc~ z3eSl6fw$*2Es~YYaO69vByH_50;5j8bv}OyAKevxbX-pdar^I|ZAUd35ig#RE~s96 z2DnhHNe~TW7aZh!mAQ`46}!EIgamlQV%Q|f+PR%U8@c!iKbz5D*K*?yxh*w3@ZEtn zku=*r0oozYBtG=;St2hHZEI1;%E&s!1XbJl-Zqy9Inzh4Rj2F^!R&MmrjZA*+IL&mOQmiOL8+D~Dn@_x@98xU0E3X0^a@9E9cUu9_ff{E zSeAkiC8mpKGKR6M;w7Zzef&^}GR#VZEXhfsY-z$~BIy+gTYdxkS5?TLZ;C7Y3Y*nG zLMQ(#9QL2bFJf!;pHrbo)ptiFRSX{+mpa`RFXUQcNkE8zUK0e=`T}d#o}ifSpum3M zpAdm2b)NBBwVrHNHVWNS7B#DMm3TCj%cu=SlxCK$@fb|`Z~JgBXzY{hd&kFcIKFe) z8JO9QU99Sez(Jl{uUTKxVjNR^b9L5AH2QZ3`Ν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 super.count) + throw new IndexOutOfBoundsException(Integer.toString(offset)); + super.pos = offset; + } + } + + private final SeekableByteArrayInputStream sbais; + + public ByteArrayIInStream(byte[] buffer) { + this.sbais = new SeekableByteArrayInputStream(buffer); + } + + public long Seek(long offset, int origin) { + switch (origin) { + case STREAM_SEEK_SET: this.sbais.seekAbsolute((int)offset); break; + case STREAM_SEEK_CUR: this.sbais.seekRelative((int)offset); break; + } + return this.sbais.getPosition(); + } + + public int read() throws IOException { + return this.sbais.read(); + } + + public int read(byte[] b, int off, int len) throws IOException { + return this.sbais.read(b, off, len); + } +} \ No newline at end of file diff --git a/source/de/anomic/plasma/parser/sevenzip/SZParserExtractCallback.java b/source/de/anomic/plasma/parser/sevenzip/SZParserExtractCallback.java new file mode 100644 index 000000000..6e1fc8569 --- /dev/null +++ b/source/de/anomic/plasma/parser/sevenzip/SZParserExtractCallback.java @@ -0,0 +1,176 @@ +// SZParserExtractCallback.java +// ------------------------------------- +// part of YACY +// (C) by Michael Peter Christen; mc@anomic.de +// first published on http://www.anomic.de +// Frankfurt, Germany, 2004 +// +// This file ist contributed by Franz Brausze +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// Using this software in any meaning (reading, learning, copying, compiling, +// running) means that you agree that the Author(s) is (are) not responsible +// for cost, loss of data or any harm that may be caused directly or indirectly +// by usage of this softare or this documentation. The usage of this software +// is on your own risk. The installation and usage (starting/running) of this +// software may allow other people or application to access your computer and +// any attached devices and is highly dependent on the configuration of the +// software which must be done by the user of the software; the author(s) is +// (are) also not responsible for proper configuration and usage of the +// software, even if provoked by documentation provided together with +// the software. +// +// Any changes to this file according to the GPL as documented in the file +// gpl.txt aside this file in the shipment you received can be done to the +// lines that follows this copyright notice here, but changes must not be +// done inside the copyright notive above. A re-distribution must contain +// the intact and unchanged copyright notice. +// Contributions and changes to the program code must be marked as such. + +package de.anomic.plasma.parser.sevenzip; + +import java.io.IOException; +import java.io.OutputStream; +import java.util.HashMap; +import java.util.Iterator; +import java.util.Map; + +import de.anomic.net.URL; +import de.anomic.plasma.plasmaParser; +import de.anomic.plasma.plasmaParserDocument; +import de.anomic.plasma.parser.AbstractParser; +import de.anomic.plasma.parser.ParserException; +import de.anomic.server.serverCachedFileOutputStream; +import de.anomic.server.logging.serverLog; + +import SevenZip.ArchiveExtractCallback; +import SevenZip.Archive.IInArchive; +import SevenZip.Archive.SevenZipEntry; + +// wrapper class to redirect output of standard ArchiveExtractCallback to serverLog +// and parse the extracted content +public class SZParserExtractCallback extends ArchiveExtractCallback { + + private final serverLog log; + private final long maxRamSize; + private serverCachedFileOutputStream cfos = null; + private final plasmaParser parser; + private final plasmaParserDocument doc; + private final String prefix; + + public SZParserExtractCallback(serverLog logger, IInArchive handler, + long maxRamSize, plasmaParserDocument doc, String prefix) { + super.Init(handler); + this.log = logger; + this.maxRamSize = maxRamSize; + this.parser = new plasmaParser(); + this.doc = doc; + this.prefix = prefix; + } + + public void PrepareOperation(int arg0) { + this.extractMode = (arg0 == IInArchive.NExtract_NAskMode_kExtract); + switch (arg0) { + case IInArchive.NExtract_NAskMode_kExtract: + this.log.logFine("Extracting " + this.filePath); + break; + case IInArchive.NExtract_NAskMode_kTest: + this.log.logFine("Testing " + this.filePath); + break; + case IInArchive.NExtract_NAskMode_kSkip: + this.log.logFine("Skipping " + this.filePath); + break; + }; + } + + public void SetOperationResult(int arg0) throws IOException { + if (arg0 != IInArchive.NExtract_NOperationResult_kOK) { + this.NumErrors++; + switch(arg0) { + case IInArchive.NExtract_NOperationResult_kUnSupportedMethod: + throw new IOException("Unsupported Method"); + case IInArchive.NExtract_NOperationResult_kCRCError: + throw new IOException("CRC Failed"); + case IInArchive.NExtract_NOperationResult_kDataError: + throw new IOException("Data Error"); + default: + // throw new IOException("Unknown Error"); + } + } else try { + AbstractParser.checkInterruption(); + + if (this.cfos != null) { + // parse the file + plasmaParserDocument theDoc; + // workaround for relative links in file, normally '#' shall be used behind the location, see + // below for reversion of the effects + URL url = new URL(doc.getLocation(), this.prefix + "/" + super.filePath); + String mime = plasmaParser.getMimeTypeByFileExt(super.filePath.substring(super.filePath.lastIndexOf('.') + 1)); + if (this.cfos.isFallback()) { + theDoc = this.parser.parseSource(url, mime, null, this.cfos.getContentFile()); + } else { + theDoc = this.parser.parseSource(url, mime, null, this.cfos.getContentBAOS()); + } + + // revert the above workaround + Map nanchors = new HashMap(theDoc.getAnchors().size(), 1f); + Iterator it = theDoc.getAnchors().entrySet().iterator(); + Map.Entry entry; + String base = doc.getLocation().toNormalform(); + while (it.hasNext()) { + entry = (Map.Entry)it.next(); + if (((String)entry.getKey()).startsWith(base + "/")) { + String ref = "#" + ((String)entry.getKey()).substring(base.length() + 1); + this.log.logFinest("changing " + entry.getKey() + " to use reference " + ref); + nanchors.put(base + ref, entry.getValue()); + } else { + nanchors.put(entry.getKey(), entry.getValue()); + } + } + theDoc.getAnchors().clear(); + theDoc.getAnchors().putAll(nanchors); + this.doc.addSubDocument(theDoc); + } + } catch (ParserException e) { + IOException ex = new IOException("error parsing extracted content of " + super.filePath + ": " + e.getMessage()); + ex.initCause(e); + throw ex; + } catch (InterruptedException e) { + IOException ex = new IOException("interrupted"); + ex.initCause(e); + throw ex; + } + } + + public OutputStream GetStream(int index, int askExtractMode) throws IOException { + SevenZipEntry item = super.archiveHandler.getEntry(index); + super.filePath = item.getName(); + try { + AbstractParser.checkInterruption(); + } catch (InterruptedException e) { + IOException ex = new IOException("interrupted"); + ex.initCause(e); + throw ex; + } + this.cfos = (item.isDirectory()) ? null + : new serverCachedFileOutputStream(this.maxRamSize, null, true, item.getSize()); + return this.cfos; + } + + public String getCurrentFilePath() { + return super.filePath; + } +} diff --git a/source/de/anomic/plasma/parser/sevenzip/build.xml b/source/de/anomic/plasma/parser/sevenzip/build.xml new file mode 100644 index 000000000..6a7232ab7 --- /dev/null +++ b/source/de/anomic/plasma/parser/sevenzip/build.xml @@ -0,0 +1,58 @@ + + + + Some classes to parse 7zip files + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/source/de/anomic/plasma/parser/sevenzip/sevenzipParser.java b/source/de/anomic/plasma/parser/sevenzip/sevenzipParser.java new file mode 100644 index 000000000..ec9e0d40a --- /dev/null +++ b/source/de/anomic/plasma/parser/sevenzip/sevenzipParser.java @@ -0,0 +1,146 @@ +// sevenzipParser.java +// ------------------------------------- +// part of YACY +// (C) by Michael Peter Christen; mc@anomic.de +// first published on http://www.anomic.de +// Frankfurt, Germany, 2004 +// +// This file ist contributed by Franz Brausze +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// Using this software in any meaning (reading, learning, copying, compiling, +// running) means that you agree that the Author(s) is (are) not responsible +// for cost, loss of data or any harm that may be caused directly or indirectly +// by usage of this softare or this documentation. The usage of this software +// is on your own risk. The installation and usage (starting/running) of this +// software may allow other people or application to access your computer and +// any attached devices and is highly dependent on the configuration of the +// software which must be done by the user of the software; the author(s) is +// (are) also not responsible for proper configuration and usage of the +// software, even if provoked by documentation provided together with +// the software. +// +// Any changes to this file according to the GPL as documented in the file +// gpl.txt aside this file in the shipment you received can be done to the +// lines that follows this copyright notice here, but changes must not be +// done inside the copyright notive above. A re-distribution must contain +// the intact and unchanged copyright notice. +// Contributions and changes to the program code must be marked as such. + +package de.anomic.plasma.parser.sevenzip; + +import java.io.File; +import java.io.IOException; +import java.io.InputStream; +import java.util.Hashtable; + +import SevenZip.IInStream; +import SevenZip.MyRandomAccessFile; +import SevenZip.Archive.SevenZip.Handler; + +import de.anomic.net.URL; +import de.anomic.plasma.plasmaParserDocument; +import de.anomic.plasma.parser.AbstractParser; +import de.anomic.plasma.parser.Parser; +import de.anomic.plasma.parser.ParserException; +import de.anomic.server.serverCachedFileOutputStream; +import de.anomic.server.serverFileUtils; + +public class sevenzipParser extends AbstractParser implements Parser { + + /** + * a list of mime types that are supported by this parser class + * @see #getSupportedMimeTypes() + */ + public static final Hashtable SUPPORTED_MIME_TYPES = new Hashtable(); + static { + SUPPORTED_MIME_TYPES.put("application/x-7z-compressed", "7z"); + } + + /** + * a list of library names that are needed by this parser + * @see Parser#getLibxDependences() + */ + private static final String[] LIBX_DEPENDENCIES = new String[] { "J7Zip-modified.jar" }; + + public sevenzipParser() throws IOException { + super(LIBX_DEPENDENCIES); + super.parserName = "7zip Archive Parser"; + } + + public plasmaParserDocument parse(URL location, String mimeType, String charset, + IInStream source, long maxRamSize) throws ParserException, InterruptedException { + plasmaParserDocument doc = new plasmaParserDocument(location, mimeType, charset); + Handler archive; + super.theLogger.logFine("opening 7zip archive..."); + try { + archive = new Handler(source); + } catch (IOException e) { + throw new ParserException("error opening 7zip archive", location, e); + } + checkInterruption(); + SZParserExtractCallback aec = new SZParserExtractCallback(super.theLogger, archive, + maxRamSize, doc, location.getFile()); + super.theLogger.logFine("processing archive contents..."); + try { + archive.Extract(null, -1, 0, aec); + return doc; + } catch (IOException e) { + if (e.getCause() instanceof InterruptedException) + throw (InterruptedException)e.getCause(); + if (e.getCause() instanceof ParserException) + throw (ParserException)e.getCause(); + throw new ParserException( + "error processing 7zip archive at internal file: " + aec.getCurrentFilePath(), + location, e); + } finally { + try { archive.close(); } catch (IOException e) { } + } + } + + public plasmaParserDocument parse(URL location, String mimeType, String charset, + byte[] source) throws ParserException, InterruptedException { + return parse(location, mimeType, charset, new ByteArrayIInStream(source), Parser.MAX_KEEP_IN_MEMORY_SIZE - source.length); + } + + public plasmaParserDocument parse(URL location, String mimeType, String charset, + File sourceFile) throws ParserException, InterruptedException { + try { + return parse(location, mimeType, charset, new MyRandomAccessFile(sourceFile, "r"), Parser.MAX_KEEP_IN_MEMORY_SIZE); + } catch (IOException e) { + throw new ParserException("error processing 7zip archive", location, e); + } + } + + public plasmaParserDocument parse(URL location, String mimeType, String charset, + InputStream source) throws ParserException, InterruptedException { + try { + serverCachedFileOutputStream cfos = new serverCachedFileOutputStream(Parser.MAX_KEEP_IN_MEMORY_SIZE); + serverFileUtils.copy(source, cfos); + if (cfos.isFallback()) { + return parse(location, mimeType, charset, cfos.getContentFile()); + } else { + return parse(location, mimeType, charset, cfos.getContentBAOS()); + } + } catch (IOException e) { + throw new ParserException("error processing 7zip archive", location, e); + } + } + + public Hashtable getSupportedMimeTypes() { + return SUPPORTED_MIME_TYPES; + } +} diff --git a/source/de/anomic/plasma/plasmaParser.java b/source/de/anomic/plasma/plasmaParser.java index 49d5e37f0..51554ef44 100644 --- a/source/de/anomic/plasma/plasmaParser.java +++ b/source/de/anomic/plasma/plasmaParser.java @@ -941,7 +941,7 @@ public final class plasmaParser { plasmaParser theParser = new plasmaParser(); // configuring the realtime parsable mimeTypes - plasmaParser.initRealtimeParsableMimeTypes("application/xhtml+xml,text/html,text/plain"); + plasmaParser.initRealtimeParsableMimeTypes("application/xhtml+xml,text/html,text/plain,text/sgml"); // configure all other supported mimeTypes plasmaParser.enableAllParsers(PARSER_MODE_PROXY); diff --git a/source/de/anomic/plasma/plasmaParserDocument.java b/source/de/anomic/plasma/plasmaParserDocument.java index 66e05f18a..0e378b529 100644 --- a/source/de/anomic/plasma/plasmaParserDocument.java +++ b/source/de/anomic/plasma/plasmaParserDocument.java @@ -46,28 +46,35 @@ import java.io.BufferedInputStream; import java.io.ByteArrayInputStream; import java.io.File; import java.io.FileInputStream; +import java.io.IOException; import java.io.InputStream; import java.net.MalformedURLException; + +import de.anomic.server.serverCachedFileOutputStream; import de.anomic.server.serverFileUtils; +import java.util.Arrays; import java.util.HashMap; import java.util.Iterator; +import java.util.LinkedList; +import java.util.List; import java.util.Map; import java.util.TreeSet; import de.anomic.htmlFilter.htmlFilterImageEntry; import de.anomic.net.URL; +import de.anomic.plasma.parser.Parser; public class plasmaParserDocument { private URL location; // the source url private String mimeType; // mimeType as taken from http header private String charset; // the charset of the document - private String[] keywords; // most resources provide a keyword field - private String title; // a document title, taken from title or h1 tag; shall appear as headline of search result - private String author; // author or copyright - private String[] sections; // if present: more titles/headlines appearing in the document - private String abstrct; // an abstract, if present: short content description + private List keywords; // most resources provide a keyword field + private StringBuffer title; // a document title, taken from title or h1 tag; shall appear as headline of search result + private StringBuffer author; // author or copyright + private List sections; // if present: more titles/headlines appearing in the document + private StringBuffer abstrct; // an abstract, if present: short content description private Object text; // the clear text, all that is visible private Map anchors; // all links embedded as clickeable entities (anchor tags) private TreeSet images; // all visible pictures in document @@ -77,54 +84,63 @@ public class plasmaParserDocument { private Map hyperlinks, audiolinks, videolinks, applinks; private Map emaillinks; private boolean resorted; - private InputStream textStream; - - public plasmaParserDocument(URL location, String mimeType, String charset, + private InputStream textStream; + + protected plasmaParserDocument(URL location, String mimeType, String charset, String[] keywords, String title, String author, String[] sections, String abstrct, - byte[] text, Map anchors, TreeSet images) { + Object text, Map anchors, TreeSet images) { this.location = location; - this.mimeType = (mimeType==null)?"application/octet-stream":mimeType; + this.mimeType = (mimeType == null) ? "application/octet-stream" : mimeType; this.charset = charset; - this.keywords = (keywords==null) ? new String[0] : keywords; - this.title = (title==null)?"":title; - this.author = (author==null)?"":author; - this.sections = (sections==null)?new String[0]:sections; - this.abstrct = (abstrct==null)?"":abstrct; - this.text = (text==null)?new byte[0]:text; - this.anchors = (anchors==null)?new HashMap(0):anchors; - this.images = (images==null)?new TreeSet():images; + this.keywords = (keywords == null) ? new LinkedList() : Arrays.asList(keywords); + this.title = (title == null) ? new StringBuffer() : new StringBuffer(title); + this.author = (author == null) ? new StringBuffer() : new StringBuffer(author); + this.sections = (sections == null) ? new LinkedList() : Arrays.asList(sections); + this.abstrct = (abstrct == null) ? new StringBuffer() : new StringBuffer(abstrct); + this.anchors = (anchors == null) ? new HashMap(0) : anchors; + this.images = (images == null) ? new TreeSet() : images; this.hyperlinks = null; this.audiolinks = null; this.videolinks = null; this.applinks = null; this.emaillinks = null; this.resorted = false; + + if (text == null) try { + this.text = new serverCachedFileOutputStream(Parser.MAX_KEEP_IN_MEMORY_SIZE); + } catch (IOException e) { + e.printStackTrace(); + this.text = new StringBuffer(); + } else { + this.text = text; + } + } + + public plasmaParserDocument(URL location, String mimeType, String charset) { + this(location, mimeType, charset, null, null, null, null, null, (Object)null, null, null); + } + + public plasmaParserDocument(URL location, String mimeType, String charset, + String[] keywords, String title, String author, + String[] sections, String abstrct, + byte[] text, Map anchors, TreeSet images) { + this(location, mimeType, charset, keywords, title, author, sections, abstrct, (Object)text, anchors, images); } public plasmaParserDocument(URL location, String mimeType, String charset, String[] keywords, String title, String author, String[] sections, String abstrct, File text, Map anchors, TreeSet images) { - this.location = location; - this.mimeType = (mimeType==null)?"application/octet-stream":mimeType; - this.charset = charset; - this.keywords = (keywords==null) ? new String[0] : keywords; - this.title = (title==null)?"":title; - this.author = (author==null)?"":author; - this.sections = (sections==null)?new String[0]:sections; - this.abstrct = (abstrct==null)?"":abstrct; - this.text = text; - if (text != null) text.deleteOnExit(); - this.anchors = (anchors==null)?new HashMap(0):anchors; - this.images = (images==null)?new TreeSet():images; - this.hyperlinks = null; - this.audiolinks = null; - this.videolinks = null; - this.applinks = null; - this.emaillinks = null; - this.resorted = false; - } + this(location, mimeType, charset, keywords, title, author, sections, abstrct, (Object)text, anchors, images); + } + + public plasmaParserDocument(URL location, String mimeType, String charset, + String[] keywords, String title, String author, + String[] sections, String abstrct, + serverCachedFileOutputStream text, Map anchors, TreeSet images) { + this(location, mimeType, charset, keywords, title, author, sections, abstrct, (Object)text, anchors, images); + } public URL getLocation() { return this.location; @@ -142,19 +158,23 @@ public class plasmaParserDocument { } public String getTitle() { - return title; + return title.toString(); } public String[] getSectionTitles() { - if (sections != null) return sections; else return new String[]{getTitle()}; + if (sections != null) { + return (String[])sections.toArray(new String[this.sections.size()]); + } else { + return new String[] { getTitle() }; + } } public String getAbstract() { - if (abstrct != null) return abstrct; else return getTitle(); + if (abstrct != null) return abstrct.toString(); else return getTitle(); } public String getAuthor() { - if (author != null) return author; else return ""; + if (author != null) return author.toString(); else return new String(); } public InputStream getText() { @@ -165,6 +185,8 @@ public class plasmaParserDocument { this.textStream = new BufferedInputStream(new FileInputStream((File)this.text)); } else if (this.text instanceof byte[]) { this.textStream = new ByteArrayInputStream((byte[])this.text); + } else if (this.text instanceof serverCachedFileOutputStream) { + return ((serverCachedFileOutputStream)this.text).getContent(); } return this.textStream; } catch (Exception e) { @@ -177,8 +199,18 @@ public class plasmaParserDocument { try { if (this.text == null) return new byte[0]; - if (this.text instanceof File) return serverFileUtils.read((File)this.text); - else if (this.text instanceof byte[]) return (byte[])this.text; + if (this.text instanceof File) { + return serverFileUtils.read((File)this.text); + } else if (this.text instanceof byte[]) { + return (byte[])this.text; + } else if (this.text instanceof serverCachedFileOutputStream) { + serverCachedFileOutputStream ffbaos = (serverCachedFileOutputStream)this.text; + if (ffbaos.isFallback()) { + return serverFileUtils.read(ffbaos.getContent()); + } else { + return ffbaos.getContentBAOS(); + } + } } catch (Exception e) { e.printStackTrace(); } @@ -189,6 +221,9 @@ public class plasmaParserDocument { if (this.text == null) return 0; if (this.text instanceof File) return ((File)this.text).length(); else if (this.text instanceof byte[]) return ((byte[])this.text).length; + else if (this.text instanceof serverCachedFileOutputStream) { + return ((serverCachedFileOutputStream)this.text).getLength(); + } return -1; } @@ -204,19 +239,23 @@ public class plasmaParserDocument { // sort out doubles and empty words TreeSet hs = new TreeSet(); String s; - for (int i = 0; i < this.keywords.length; i++) { - if (this.keywords[i] == null) continue; - s = this.keywords[i].trim(); + for (int i = 0; i < this.keywords.size(); i++) { + if (this.keywords.get(i) == null) continue; + s = ((String)this.keywords.get(i)).trim(); if (s.length() > 0) hs.add(s.toLowerCase()); } if (hs.size() == 0) return ""; // generate a new list - StringBuffer sb = new StringBuffer(this.keywords.length * 6); + StringBuffer sb = new StringBuffer(this.keywords.size() * 6); Iterator i = hs.iterator(); while (i.hasNext()) sb.append((String) i.next()).append(separator); return sb.substring(0, sb.length() - 1); } + public List getKeywords() { + return this.keywords; + } + public Map getAnchors() { // returns all links embedded as anchors (clickeable entities) // this is a url(String)/text(String) map @@ -335,6 +374,27 @@ public class plasmaParserDocument { this.resorted = true; } + public void addSubDocument(plasmaParserDocument doc) throws IOException { + this.sections.addAll(Arrays.asList(doc.getSectionTitles())); + + if (this.title.length() > 0) this.title.append('\n'); + this.title.append(doc.getTitle()); + + this.keywords.addAll(doc.getKeywords()); + + if (this.abstrct.length() > 0) this.abstrct.append('\n'); + this.abstrct.append(doc.getAbstract()); + + if (!(this.text instanceof serverCachedFileOutputStream)) { + this.text = new serverCachedFileOutputStream(Parser.MAX_KEEP_IN_MEMORY_SIZE); + serverFileUtils.copy(getText(), (serverCachedFileOutputStream)this.text); + } + serverFileUtils.copy(doc.getText(), (serverCachedFileOutputStream)this.text); + + anchors.putAll(doc.getAnchors()); + images.addAll(doc.getImages()); + } + public void close() { // try close the output stream if (this.textStream != null) { diff --git a/source/de/anomic/server/serverCachedFileOutputStream.java b/source/de/anomic/server/serverCachedFileOutputStream.java new file mode 100644 index 000000000..f42b9db35 --- /dev/null +++ b/source/de/anomic/server/serverCachedFileOutputStream.java @@ -0,0 +1,175 @@ +// FileFallbackByteArrayOutputStream.java +// ------------------------------------- +// part of YACY +// (C) by Michael Peter Christen; mc@anomic.de +// first published on http://www.anomic.de +// Frankfurt, Germany, 2004 +// +// This file ist contributed by Franz Brausze +// +// This program is free software; you can redistribute it and/or modify +// it under the terms of the GNU General Public License as published by +// the Free Software Foundation; either version 2 of the License, or +// (at your option) any later version. +// +// This program is distributed in the hope that it will be useful, +// but WITHOUT ANY WARRANTY; without even the implied warranty of +// MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +// GNU General Public License for more details. +// +// You should have received a copy of the GNU General Public License +// along with this program; if not, write to the Free Software +// Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA +// +// Using this software in any meaning (reading, learning, copying, compiling, +// running) means that you agree that the Author(s) is (are) not responsible +// for cost, loss of data or any harm that may be caused directly or indirectly +// by usage of this softare or this documentation. The usage of this software +// is on your own risk. The installation and usage (starting/running) of this +// software may allow other people or application to access your computer and +// any attached devices and is highly dependent on the configuration of the +// software which must be done by the user of the software; the author(s) is +// (are) also not responsible for proper configuration and usage of the +// software, even if provoked by documentation provided together with +// the software. +// +// Any changes to this file according to the GPL as documented in the file +// gpl.txt aside this file in the shipment you received can be done to the +// lines that follows this copyright notice here, but changes must not be +// done inside the copyright notive above. A re-distribution must contain +// the intact and unchanged copyright notice. +// Contributions and changes to the program code must be marked as such. + +package de.anomic.server; + +import java.io.BufferedInputStream; +import java.io.BufferedOutputStream; +import java.io.ByteArrayInputStream; +import java.io.ByteArrayOutputStream; +import java.io.File; +import java.io.FileInputStream; +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +public class serverCachedFileOutputStream extends ByteArrayOutputStream { + + protected File fallbackFile; + protected long fallbackSize; + protected boolean buffered; + + protected long size = 0; + protected boolean isFallback = false; + protected OutputStream fallback = null; + + public serverCachedFileOutputStream(long fallbackSize) throws IOException { + this(fallbackSize, null, true, 32); + } + + public serverCachedFileOutputStream(long fallbackSize, File fallback, boolean buffered) + throws IOException { + this(fallbackSize, fallback, buffered, 32); + } + + public serverCachedFileOutputStream(long fallbackSize, File fallback, boolean buffered, + long size) throws IOException { + this.fallbackSize = fallbackSize; + this.fallbackFile = (fallback == null) ? File.createTempFile( + serverCachedFileOutputStream.class.getName(), + Long.toString(System.currentTimeMillis())) : fallback; + this.buffered = buffered; + checkFallback(size); + } + + public serverCachedFileOutputStream(long fallbackSize, File fallback, boolean buffered, + byte[] data) throws IOException { + this(fallbackSize, fallback, buffered, 0); + super.buf = data; + super.count = data.length; + checkFallback(this.size = data.length); + } + + protected boolean checkFallback(long size) { + if (size > this.fallbackSize) try { + fallback(); + return true; + } catch (IOException e) { + throw new RuntimeException("error falling back to file", e); + } else { + return false; + } + } + + public void fallback() throws IOException { + if (this.isFallback) return; + this.isFallback = true; + if (!this.fallbackFile.exists()) { + this.fallbackFile.createNewFile(); + } else if (this.fallbackFile.isDirectory()) { + throw new IOException("cannot write on a directory"); + } + OutputStream os = new FileOutputStream(this.fallbackFile); + this.fallback = (this.buffered) ? new BufferedOutputStream(os) : os; + serverFileUtils.copy(new ByteArrayInputStream(super.buf), this.fallback); + super.buf = new byte[0]; + super.count = 0; + super.reset(); + } + + public boolean isFallback() { + return this.isFallback; + } + + public void write(int b) { + if (checkFallback(++this.size)) try { + this.fallback.write(b); + } catch (IOException e) { + throw new RuntimeException("error writing to fallback", e); + } else { + super.write(b); + } + } + + public void write(byte[] b, int off, int len) { + if (checkFallback(this.size += len)) try { + this.fallback.write(b, off, len); + } catch (IOException e) { + throw new RuntimeException("error writing to fallback", e); + } else { + super.write(b, off, len); + } + } + + public void close() throws IOException { + if (this.fallback != null) + this.fallback.close(); + super.close(); + } + + public InputStream getContent() throws IOException { + close(); + if (this.isFallback) { + InputStream is = new FileInputStream(this.fallbackFile); + return (this.buffered) ? new BufferedInputStream(is) : is; + } else { + return new ByteArrayInputStream(this.buf); + } + } + + public byte[] getContentBAOS() { + if (this.isFallback) + throw new RuntimeException("underlying ByteArrayOutputStream not available, already fell back to file"); + return super.buf; + } + + public File getContentFile() { + if (!this.isFallback) + throw new RuntimeException("haven't fallen back yet, fallback file has no content"); + return this.fallbackFile; + } + + public long getLength() { + return this.size; + } +} diff --git a/yacy.init b/yacy.init index 8a06c8a4a..f292b1ef8 100644 --- a/yacy.init +++ b/yacy.init @@ -204,7 +204,7 @@ proxyCacheMigration = true # # parseableRealtimeMimeTypes: specifies mime-types that can be indexed on the fly # parseableMime: specifies mime-types that can be indexed but not on the fly -parseableRealtimeMimeTypes=application/xhtml+xml,text/html,text/plain +parseableRealtimeMimeTypes=application/xhtml+xml,text/html,text/plain,text/sgml parseableMimeTypes= parseableMimeTypes.CRAWLER= parseableMimeTypes.PROXY=