From f3fc28ff74cac9df7229ff868a4dff77863ff031 Mon Sep 17 00:00:00 2001 From: z3d Date: Sun, 28 Nov 2010 13:29:28 +0000 Subject: [PATCH 01/21] Readme tweaks. --- installer/resources/readme/readme.html | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/installer/resources/readme/readme.html b/installer/resources/readme/readme.html index 51828d968..2e9fa42f8 100644 --- a/installer/resources/readme/readme.html +++ b/installer/resources/readme/readme.html @@ -13,7 +13,7 @@

Welcome to the Invisible Internet

- From 4a94d48ef7600b91f7f98db1f4ca2223458c9c77 Mon Sep 17 00:00:00 2001 From: z3d Date: Sun, 28 Nov 2010 20:41:26 +0000 Subject: [PATCH 05/21] More readme tweakage. --- installer/resources/readme/readme.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/installer/resources/readme/readme.html b/installer/resources/readme/readme.html index 21ca05632..7f17230bc 100644 --- a/installer/resources/readme/readme.html +++ b/installer/resources/readme/readme.html @@ -62,7 +62,7 @@ your eepsite will be visible (but not discoverable) to others. Detailed instruct Peer into the filesharing world of the Freenet darknet with Tino's I2P to Freenet proxy.
  • Eepsite Search Engine
    eepsites.i2p: An anonymously hosted eepsite search engine.
  • -
  • I2P Network Health
    zzz runs an I2P network performance service to monitor various aspects of I2P's network. Visit stats.i2p for more information.
  • +
  • I2P Network Health
    stats.i2p: Check out various aspects of network performance with this I2P network monitoring site run by zzz.
  • Discover I2P
    There are many more eepsites - just follow the links from the ones you see, bookmark your favorites, and visit them often! There's a custom build of Firefox built especially for I2P called I2PFox you might like to investigate for locked down darknet exploration!
  • From 47ce7b24fab55c85d9ff1c2d1ab8aa1e2668d751 Mon Sep 17 00:00:00 2001 From: z3d Date: Sun, 28 Nov 2010 22:58:07 +0000 Subject: [PATCH 06/21] Console: Add console_big.css to "dark" theme to accomodate doublebyte glyphs better. --- .../themes/console/dark/console_big.css | 28 +++++++++++++++++++ 1 file changed, 28 insertions(+) create mode 100644 installer/resources/themes/console/dark/console_big.css diff --git a/installer/resources/themes/console/dark/console_big.css b/installer/resources/themes/console/dark/console_big.css new file mode 100644 index 000000000..d07c8a60b --- /dev/null +++ b/installer/resources/themes/console/dark/console_big.css @@ -0,0 +1,28 @@ +/* I2P Theme Override: Dark */ +/* Comment: Larger text (and other tweaks) for Chinese */ +/* Author: dr|z3d */ + +div.routersummary table { + font-size: 8.5pt; +} + +div.routersummary h3, div.routersummary h4, div.routersummary p, div.routersummary h3 a, div.routersummary a { + text-shadow: 0 0 0 #fff !important; +} + +div.routersummary b { + font-size: 9pt; + font-weight: normal; +} + +div.routersummary a { + font-size: 10pt; +} + +.smallhead { + font-size: 8.5pt +} + +table { + font: 8.5pt/130% "Lucida Sans Unicode", Verdana, "Bitstream Vera Sans", Tahoma, Helvetica, sans-serif; +} \ No newline at end of file From c23116bca8262b78b3f7a109cee123fb2c8d4a09 Mon Sep 17 00:00:00 2001 From: z3d Date: Sun, 28 Nov 2010 23:23:46 +0000 Subject: [PATCH 07/21] Readme: add planet.i2p to our list of I2P resources. --- installer/resources/readme/readme.html | 1 + 1 file changed, 1 insertion(+) diff --git a/installer/resources/readme/readme.html b/installer/resources/readme/readme.html index 7f17230bc..e4d53b0eb 100644 --- a/installer/resources/readme/readme.html +++ b/installer/resources/readme/readme.html @@ -60,6 +60,7 @@ your eepsite will be visible (but not discoverable) to others. Detailed instruct
  • Ugha's Wiki
    ugha.i2p: An open wiki that anyone can edit with plenty of information about I2P, help for beginners, additional links into the network etc.
  • I2P to Freenet Proxy
    fproxy.tino.i2p: Peer into the filesharing world of the Freenet darknet with Tino's I2P to Freenet proxy.
  • +
  • The Planet (on I2P)
    planet.i2p: An RSS aggregator site that takes news and events from around I2P and publishes them all in one place. A good place to visit to see the community at work!
  • Eepsite Search Engine
    eepsites.i2p: An anonymously hosted eepsite search engine.
  • I2P Network Health
    stats.i2p: Check out various aspects of network performance with this I2P network monitoring site run by zzz.
  • From 054eae8718602837170a0ad5d97b9d4eca031793 Mon Sep 17 00:00:00 2001 From: z3d Date: Sun, 28 Nov 2010 23:29:02 +0000 Subject: [PATCH 08/21] Readme tweak; dark tweaks. --- installer/resources/readme/readme.html | 2 +- .../resources/themes/console/dark/console.css | 39 ++++++++++++++++--- 2 files changed, 34 insertions(+), 7 deletions(-) diff --git a/installer/resources/readme/readme.html b/installer/resources/readme/readme.html index e4d53b0eb..48faf5ef4 100644 --- a/installer/resources/readme/readme.html +++ b/installer/resources/readme/readme.html @@ -60,7 +60,7 @@ your eepsite will be visible (but not discoverable) to others. Detailed instruct
  • Ugha's Wiki
    ugha.i2p: An open wiki that anyone can edit with plenty of information about I2P, help for beginners, additional links into the network etc.
  • I2P to Freenet Proxy
    fproxy.tino.i2p: Peer into the filesharing world of the Freenet darknet with Tino's I2P to Freenet proxy.
  • -
  • The Planet (on I2P)
    planet.i2p: An RSS aggregator site that takes news and events from around I2P and publishes them all in one place. A good place to visit to see the community at work!
  • +
  • The Planet (on I2P)
    planet.i2p: An RSS aggregator site that takes news and events from around I2P and publishes them all in one place. A good site to visit to see the community at work!
  • Eepsite Search Engine
    eepsites.i2p: An anonymously hosted eepsite search engine.
  • I2P Network Health
    stats.i2p: Check out various aspects of network performance with this I2P network monitoring site run by zzz.
  • diff --git a/installer/resources/themes/console/dark/console.css b/installer/resources/themes/console/dark/console.css index 25053d785..b37fead3e 100644 --- a/installer/resources/themes/console/dark/console.css +++ b/installer/resources/themes/console/dark/console.css @@ -45,6 +45,14 @@ div.logo { box-shadow: inset 0px 0px 1px 0px #009; } +div.logo hr { + color: #494; + background: #494; + height: 1px; + border: 0px solid #494; + margin: 10px 0 5px; +} + div.toolbar { margin: 0; padding: 10px; @@ -559,13 +567,21 @@ div.main li b { } .tidylist:first-child { - padding-top: 5px; +/* padding-top: 5px;*/ } .tidylist:last-child { padding-bottom: 15px; } +.tidylist code { + text-align: left; + font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; + color: #dd0; + padding: 1px 2px; + background: #030; +} + ol { display: inline; margin: 1px 0 0 0; @@ -583,7 +599,6 @@ code { font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; color: #dd0; padding: 1px 2px; - background: #030; } a:link, h2 a:link{ @@ -918,16 +933,28 @@ div.joblog { text-align: justify !important; overflow-x: scroll; /* Opera fix */ } + +div.main li { + text-align: left; + list-style: square; + margin: 2px 0px 2px 30px; + padding: 2px 20px 2px 0px; +/* line-height: 150%;*/ + word-wrap: break-word; +} - div.joblog:li { +div.joblog li { word-wrap: break-word !important; text-align: justify !important; - line-height: 80% !important; + line-height: 120% !important; + margin: 2px 0px 2px 30px; + padding: 2px 20px 2px 0px; } -div.joblog:ul { +div.joblog ul { word-wrap: break-word !important; text-align: justify; + margin-bottom: 0px; } div.joblog li:first-child { @@ -935,7 +962,7 @@ div.joblog li:first-child { } div.joblog li:last-child { - margin-bottom: 0; + margin-bottom: -15px; } div.joblog form:first-child { From 8d2ea460c861c4ec8f1b603c7b3aabc00b8457ce Mon Sep 17 00:00:00 2001 From: z3d Date: Mon, 29 Nov 2010 04:51:27 +0000 Subject: [PATCH 09/21] I2PSnark: Vanilla finessing. --- .../resources/themes/snark/vanilla/snark.css | 37 +++++++++++++++---- 1 file changed, 29 insertions(+), 8 deletions(-) diff --git a/installer/resources/themes/snark/vanilla/snark.css b/installer/resources/themes/snark/vanilla/snark.css index f96e8e2b3..794c7018f 100644 --- a/installer/resources/themes/snark/vanilla/snark.css +++ b/installer/resources/themes/snark/vanilla/snark.css @@ -139,13 +139,17 @@ tr { } thead, tfoot { - text-shadow:0 1px 0px #930; + text-shadow: 0px 1px 1px #330; background: url("images/bling.png") repeat-x scroll center center #867; + font-weight: bold; + color: #503; } +/* thead a, tfoot a { -text-shadow:1px 1px #101; +text-shadow: 1px 1px 1px #f00; } +*/ thead { border-bottom: 1px solid #604; @@ -156,7 +160,6 @@ th { font-size: 9pt; border-top: 1px outset #001; border-bottom: 1px inset #604; - color: #b30; whitespace: nowrap; font-variant: small-caps !important; letter-spacing: 0.05em; @@ -218,7 +221,7 @@ tfoot th { td { padding: 1px; - color: #001 !important; + color: #501 !important; opacity: 1; font-size: 9.5pt; } @@ -274,7 +277,7 @@ td:first-child { padding-left: 0px; min-width: 120px; font-weight: bold; - color: #404 !important; + color: #402 !important; font-size: 8pt; } @@ -435,6 +438,24 @@ a:hover { font-weight: bold; } +a:link { + color: #d30; + text-decoration: none; + font-weight: bold; + word-wrap: break-word; +} + +a:visited { + color: #a60; + text-decoration: none; + font-weight: bold; +} + +a:hover { + color: #fa0; + font-weight: bold; +} + input { font-size: 9pt; font-weight: bold; @@ -655,7 +676,7 @@ div.configsection table{ } div.configsection a { - color: #f60; + color: #f30; text-shadow: 1px 1px #500; } @@ -665,8 +686,8 @@ div.configsection a:hover { } code { - font-size: 9.5pt; - color: #227; + font-size: 9pt; + color: #930; padding: 0 2px; font-weight: bold; font-family: "Lucida Console", "DejaVu Sans Mono", Courier, mono; From 2138599567f3d30d6955f4338408cc31cc25e8d0 Mon Sep 17 00:00:00 2001 From: z3d Date: Mon, 29 Nov 2010 05:36:54 +0000 Subject: [PATCH 10/21] I2PSnark: Vanilla edits. --- .../themes/snark/vanilla/images/delete.png | Bin 719 -> 721 bytes .../themes/snark/vanilla/images/details.png | Bin 834 -> 866 bytes .../themes/snark/vanilla/images/remove.png | Bin 555 -> 551 bytes .../themes/snark/vanilla/images/snark_add.png | Bin 0 -> 3434 bytes .../snark/vanilla/images/snark_create.png | Bin 0 -> 2143 bytes .../themes/snark/vanilla/images/start.png | Bin 506 -> 491 bytes .../themes/snark/vanilla/images/start_all.png | Bin 1146 -> 1138 bytes .../themes/snark/vanilla/images/stop.png | Bin 481 -> 489 bytes .../themes/snark/vanilla/images/stop_all.png | Bin 1138 -> 1140 bytes .../resources/themes/snark/vanilla/snark.css | 8 ++++---- 10 files changed, 4 insertions(+), 4 deletions(-) create mode 100644 installer/resources/themes/snark/vanilla/images/snark_add.png create mode 100644 installer/resources/themes/snark/vanilla/images/snark_create.png diff --git a/installer/resources/themes/snark/vanilla/images/delete.png b/installer/resources/themes/snark/vanilla/images/delete.png index 6cbf85f3f919d2f580d1582bff61b9f31a0c5d5b..c198341725c97f1684f7d23389235b3c386961b3 100644 GIT binary patch delta 676 zcmV;V0$csh175l0kk%mUv@ArE{9jxtyyx_qum8_wn{>_`>MQ z=i$KNJpbo^{yhJ4R8lN>l^vmlL`=g$LW&28Zq}+K!QmvnwSOufl^lowX1jZb&1$4* zHVH~mVT?v3CSI&@x-y*;#rh<)%dyUkHNfSDLee#ASph0B6d`3F5DiPX#?#pLsd;nr zGoHB(rFnUN9oI-2o3k-&H$D;aZ!0zR{$}`z6JaBP;1P%hq&;AD-vxHBa112S>9hFa zn8D-o;J@SLVSj(sUZ0}i{9O~{AKo)MHOj`$2Jubkul~+LcM4fYv~;v}VDs5nHafZ2 zR;egZ2u#Hq8tu2x8?y0AUbf`aTa4_e;=Hz68C)5n!c@ZBckSr%GyW&oCwXMA!fZN5 z*3m42n?dZob|&X1DK-?)V}FY7WO~wY)xx(HVxn6%;eTHUZZ(&#Rr70o8~d0YPsl^j zZYFXGer+W+7}>)~^4fB_lNGpEWV_~WqbV>mIy=V4&;(&3XyrUC8tASs!n>TBq(C89 zbwObDK6;~t&X=7GE)J5X(Nd<#lcyozjjj_5Wzg49kwl`{IQgoSwbf~U#1YKw{JfowhsSK^=kWy0x zMy|`BDRSV?B)c&C%sOvYcMUmfmfYc%$e+YP`W+D>vE$=YzM8)=LK9PpONV;^0000< KMNUMnLSTZ)b5cbB delta 674 zcmV;T0$u&l1yutQ~c=7j4Saw7RNLNTQ4S8@h?^ z5+aHykRa>A8>dAo4C^9_Bs3#>kuCxw%Wgzvm4O43t);WMvpHYd=FT}g=eV7-t*60; zV^{ma1JBF%_xb&vH_gKHVDFJLnQmI2rcj0yDXp$f^8*^r>wisgtVEkzvgO1h=GS0$ zX-27_8C7dJoJEx-i%LdD;@JyiV{5tb-loL-h&^}&JuT$M|6?R2p{>XhGolP}d=A-A z1c9q|Bvt~2Y;n?;-_9cK4ZwfJ4rPZgtQ7#8_ebz|+6kUz0X{*DJrGDB?_(j1eE|h6 zf@IC(TEar-y?;`G>GC=Fe!1cGc)%x<&7(Ma{846CTk6->T1ZM z2#?c=l|TTEb+x$k{t0xA)}q^>qV8p=qJRTNCO09iZ-1h>{S>5V42v!owgmw#3(wLozNLTCf3^Cu{i8E&5si;)OYnG6gR1tzIrYw$5-;@PVLKnR9G zxt38$GJT(%#E;cgSWHG7sT8r}z zJ9!`(EPwVmz;QfSS%yTaY8ZZr6J4Ff71Uh2hzMPQFfmw3)(b;@pvhs<^#{>vzXfK$ z0UM+WuGWn9JJ(CMpfywxV;5|#$I$WcF0{m$m#(26ZGE@V(smpjL%q-wSYDdnug6l` z;W%w;GNK%X*d4r^n^CCY(a-%!z1W?~C}n+TUK^0rrG@o@e{xkQmQW@smH+?%07*qo IM6N<$f(3Cp=l}o! diff --git a/installer/resources/themes/snark/vanilla/images/details.png b/installer/resources/themes/snark/vanilla/images/details.png index 852e6aae73beafbba2d493887c9e9e35ab0aa6d6..5f9c04a601fec7a0b106d4047ab441482ad3570c 100644 GIT binary patch delta 858 zcmV-g1Eu`J2I2-GiBL{Q4GJ0x0000DNk~Le0000G0000G2nGNE03Y-JVUZyhe*+Xr zL_t(|oLy7hOH*+ee$Iz;o0)A=Y1$OJ2@QmzLP8WNgsdRTi#{lbpy;Nc{(`!R?z-qE zD(WIC`o4$)3sSr&Dk`&dGv_w9={C>V&e?Xhov&Z-W|?^4Ip;m+_rA~jydQ_dimMf^ zYZ%y8GPl{VTj*Kjz)g|uC;MX*f6>Bne{q@3x1go3!MFC>(K7?>z5TnmrdBU3TSIs% zh|#y7a!>9KKgJa95y|k%#Jmr_^JfQ7>X~$enU>0QBf$#A8J5$2FeUea$;uE5Meegx z2lx8P_wc_!p?uqjjR*P%d+uDne^sn@)_^e`v!MVkoj!%J&tK5ly@S3Pe-K3z9i1EM zgMs)KHE91(p+@*-G<(-I*5AB*;{wlY1D2`6G&A@xGK8Ps#_;CFE2L6!*mjX%5-jXH z(biVK-hHSY?GBL#-+S!Lo^>ua50VZr3pOd}?AeO0-Mi4_YkMDdYG9X`_4*9ObVf0bMDm!O2-ljGRg-9hg*3WW>=!9qH%Kv7i4=?olork7$j zi!`#$jm=Jyo?RqBS*C%9w;$vCr(cyub!@*1PT-+rR7eYHL?iPcT8_c#Ek_8Zso+1d z6*Yq=`<6zeX$8ujK_VexW+sa1=~?ozK*7Ka7D z>p{t|ZV9vu1$U`-e|GX`e4xZjh{sci#gYh4#9-*_{FSxfk$@UVW$GFk&;q%DU9&*a!fgpFkAUoHKD0qfY3>1KVcKW kAbci_Qq#VWYNkW?Z}pNv zAob8s5G;#Qi!e3B%Q&}l#_?SDxwOvC2^-rV=jH6ZzV)qdttH_9N9aOVhX^s_!;cFP zG!I^G6Pw#~=hr`$>wom1XIK{Hf5~&%v)50y3}oVdLMo|cccr|NkM2d^S+JgMVB^za zGT~6Xltp%8tbc5Ja&)q(rJ)6^YQx^6Po+@BMn1ob+0xtUJmw#yk)Bz=0^@--hHiA< zxHWY1#r=!-;)z%SuI13JfKXcuWofqCr z4NoNmQ2^5zDX`FX={TAOTjBdY%1Z?>-GO5;q>vJG$c<4U?^UQdF(4rWZ;yA4r)=GZ zQPQCmHSE*JsuovimJL{%3CpCid<&!m0~kn>>30K5qet;0<_9|F9XmLcerI1lEz|22ByOsx+I_MK&xH$qbBE$4e9=K0X zpn^;#Es{)DGz6X)duGMb%KOk14Z1>dt2&flB^18ya8l2AIYE`6e-MgBbkHM*lLSTv!FxnfK%R7{{GQ6&Bww~fnm#3m-IqVH$}* zCDZD6Ml^ z8|*QaFdO)AIOYgR?ew9qk*v!QnM9--?aNMWYwOQ%@AQQk5MxKiV*mgE07*qoM6N<$ Ef*x{zpa1{> diff --git a/installer/resources/themes/snark/vanilla/images/remove.png b/installer/resources/themes/snark/vanilla/images/remove.png index 90fdd21608a4f7e88c5a8bdd9caa55402c5e8859..0d8616f6bbd44b92cf5a1b0dfc3567b5c510caf6 100644 GIT binary patch delta 504 zcmVzAsdk;o}D#C8W z5g`;>|DKXJY&>2Ms?Sp;1EH9PNtKb`dUEkKA08%a=J8L!^IOx{rjLmm?^*hkuMhC` z?E=$x7ic@uM*Llz@oOK^=dJYtGRp?%PG2S56L$Mv4!xr9M09oRzkul3%S85{#JjG4yGwyDWSpmk&zCT{NGKEoK4@8+X{FrDjDY0e zsD`>WVOdv*Px|PN1n4G4YA(g2!eg@19qePH^iNGqYUo`K{-$5ayMQfCg6Ng3jKrIri$t_7HXbAaaE%@ybTQ%`R{<8f%OPWwTt9Ps6{&d~KK?nu{? zU%I7h2kmSv2kZ>x=(~{OFnenP8t~E?+T^xXC%cr9*O6%1W(!$3RQV;UO5VXtV$lk! ugQK&tIc;UY$~o&=xTcI{Zy$S+jQs$%#jr#(w@oDg0000~p1}-5?1O9#e#=ywT%)rROjv>bgRQ~PU z7iK1Ww!G|`!tiPNCcG}eX~65{>lpq$dByN{^#+Dt=dO}wz<-A;*BQPn-^jqDs><-; z(IbX8GZ!)Zymgm21Act|!muTygh9Z>1TOaW*l~u%2{~Xnf(ES3EoX30Qej|XV`KRJ z=@Y}RfBzVM|NqaR`1U=+>bwdJ0~jA~Tle?R*UwD+0-Ox@HtuBjwt5T0_BU@BzWx1+ zqL7V=i9wT_n}0z$Hkd&-(2L>Yhwlul_a6QSPdvXqerEW3{WgQ5hciPahz~U6C=mYu zxlZWpZ9zTEc ymu2R>9c@23zE=MF_nV~b{OR-eKbOxwZ3h5#Ot=COu2aPT0000FaQVu diff --git a/installer/resources/themes/snark/vanilla/images/snark_add.png b/installer/resources/themes/snark/vanilla/images/snark_add.png new file mode 100644 index 0000000000000000000000000000000000000000..e2c291a6cf6f182e8befa9f1aaa80b426f6f5e20 GIT binary patch literal 3434 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 B-Q@rP diff --git a/installer/resources/themes/snark/vanilla/images/start_all.png b/installer/resources/themes/snark/vanilla/images/start_all.png index 091ce38e491640e28ae133b89db39e7b58530ef5..95380966800905dd4c152a84b89b8ec9574b2af1 100644 GIT binary patch delta 1096 zcmV-O1h@P82=WM!Ie#QcL_t(|oRwB>Oj}hLe$MTM77*yzDzw1BmN8rwLdKwcm4ObDNFqMiKlzAko9}4x`OtP#JRTM6 z+`Z(&#p4rjjDPz#pd>CRQ;u=h+J0A%Oz~W-|CGKwv!Sp-CEN5`vit7Yc; zT69R$ByU(nozD1SPC9dtpYk&V~Len1RS1*o=79OoD^!(nm z!-dNH2RLdjHC0p9MG1w-;KL&3%?fn&Tta=T9*u{}5^^OG-Me#qw6r1-|L7iD`mwy^9wOUOHPQIzbo+?+O1&mO0iJCRfld;zQPk*+P5J83+Z_%6L}Q-~6`cY7jM;t4Gp7d%qrBFd zd!Q6}Z$-m@HL_fiFlV;&kW(6Uy1}lz$wUIEm?>Va)uy^K51-+M#pbrKsaab2eQ-Hw8hx?pl#S(tJ{0) zRB!QjSt)F(FGRn7&3lqUPLz~e=7MK~j6txe z-vFPV3-#Y{by+>^7xA7qpn>Lc1Ny7h>yxo@Q$e{_5lHv-JNuVnJ++Ie#okL_t(|oRwBK{3waXh8Y>B}QZIzYB(xn=- ziL_QKp|wO})U+Bxqd&y_mgPO~c|?Ga&JiOxBKivyQL%Scw->tEJ7!ttIjD7v6dbe8yRqg~F8S)zaM zp6cJXlt)uCj*e0SF-ao4_sxjdlqAU`s|xY)9c?1vZETk0{vD2&CyDsr>Cp{7yY+f1 zKJUrWt;C~(9e?Ir7pC4g0r&9uszSnm(y6o$FTL*~A}O8=_McR5kJsnu6+W9@N@m9l zFurvP8!EOTpKe(558Cs1fpy|`y!+)TNn0kIR`N+AODMwg7v^WY{ z*jS!pxm5L#8O514)VFGMB~(d%SRp=$UJkOK+i~^RKd|xDeaNk@49^wtMWKqJrHc6d z`fbzxF=bZ-I2CFOy{o|N6BCH-%%8(|SLC%TuB8uFiv_0HS{W`Cn21Q=|JkZ5|GJ76b8dqYGxy)s0~MBnDvK^t#gfrqgphF8IDviS)t!(h;0 zfYsxH_+OHOqOg_C06#VZ3;S;&%@e~gPIme2uIaw#M6p=6|7=lX;U;@c)#f?siM%<) zDMI=a9*#oKT_rBwPDbCP(#{Ix7Xs3<;?j&tm4CP;iE#=7WYShH%t%Aop%;--TokT= zesmiLI;BgeAeLs|FvVW;@+7fVb3cS*a>#M~avnUq?6r9%^UcuE5bKLCTN;biiV&ZrQ+ZKOM`0z}@EOz8t zDs-vE%_|CF91f^*Gf{WyJ!l$VLPSFRngs;i@cqM&Pg2nlyx;E_Pry$@svAZ|-g2@t zC%|hgy$ec)cNaB;ysC0%8B}$9)^x;&gMSF}$?^8QZ{Nn4VoS;bK5SPzc|!Ke4T^~i zNGX%fj>j_N-FWA>d_ii#V^WHL8`12-0%y0mrS0mJ&fplht*$ja&~9^KhOvnJylpZ# z-aXydT9)?c;IZ?Ye@Kk-Y8W?tsMpwg+c#H2N)DXp$oZ4wDThZSb=}kbmlyL$lS#hz zARFa8!x3&>zX6QHB@AA@_v6UIodYY)>!GK)bf>y&Y9Qp`(PeK>l{sUX_SyE3FZMsn W&98Nk7EMS10000jLqM{atA}x!8_7Q{+AoLQwK(y;6 z>;>9Ht63yj(Pd%K&P#2I$g+r10;9~C@zPxW|L>a##L3a{9Om|MzVm+e28&LH(#Mc%&F^{rRsH65M5S|Mo5DIvbTY3uzI|rDIOCAG{iZhOSxsGbFN;49j zxMf(_-%caSR5{&p4zRe0DTodP+Im{r>3gjpJ zq>#1SBBSm%)bTGG?6Rjkz%P%a*gP`JCzJHFbo6Phb#`QBUr?4sKg+VA==*{I90;v zN)ZW+(brhdX-*5X^Sr;o@@j*wSWn_0$o%_5qtQ4&lQaLG`s1!rZO7!@VvgH~;_u07*qoM6N<$fR delta 434 zcmV;j0Zsnt1K|UZIe(K$L_t(|oRyQ!O2a@Dg-@CUs+&r!P{fUjf*`mR1b5=XC-70a zbEVJVMxUZ6NYT0yv?7#ZtF(=+TCAF%Hcd2{$v9Cfjiy2l3^UBk{pQ|t8KJP>+?rkS zGIE?sh#=RZq?$K(1fyJbjD{sAr&*MEsC5CS#k?!YBSajZVSgA+Mgs@}U|pJGAZ;^u z0rt{`Ac;fLwqQ#XlbahqdjWubRfbbi5KpH8F$f{HjmpUh=<;F!5F5P2JP)p_;;q#J z__{C8by3OXaQ*ZIhXqUh<9r_ielb2Z#V3aAY!)R=0}UxFv~_-v5Aolsou8v<7#L=; z^jf+B>2;A98-IbTnE^=U>o87?i(7Ktt%HQ?d~0JzsGwS$8#fn=T6rq c#lpkR2Q;wOJS{gnC;$Ke07*qoM6N<$f}!`!9{>OV diff --git a/installer/resources/themes/snark/vanilla/images/stop_all.png b/installer/resources/themes/snark/vanilla/images/stop_all.png index 098a3d1fb1e5fba95f308b9287142909eadf6948..2ec69fed2ffa5ba0241dbf18e497aa726c092985 100644 GIT binary patch delta 1098 zcmV-Q1hxC}2=oY$Ie#WeL_t(|oRwB>Oj}hLe(vpEDIidAK+DHQ3IZmCpa@+DWeg3` z#AxOsnI`+GQKK2j{xGLee~625i#q+Y#Krh$K@y0|B!bIm2JL`2QyD}+8I?gl1Pb() zwzv1o)7#NeXfb`>oZk1m=Q-y*=RNnFUP=yc)I(seLJ|s*3V$Rq1ZlII($-%|sb3OM zvTych2wOZT=}2lq;OXff)YI8~Nk_-W;bgQ|tLuggc>z;~3*RNcMD{mpGkme%e=ejKJYzt#_$ufFC(bs^rJ-nu3<8eyH8)^tAL*d{! z3AMxtkt7MMn^k<>lR7ZzkDB`~_rbbhLup=qLJ{T?V}GqI;mp@B{Rx_q^@DQ=9j6K$$sb`Ka?IqQmw(bwpqQmfE=u@_dq6#~SB zBBK59ZH8G7aS@vmSoEF16^FsA%L`*E!RPT~COw90*1q0jwa*5H1rdSNRv3~cQ;%_Z1gQ25q8Fh}mBFl~D*RIvQS5xRa*y^EhZVP zu89%y7@^TnI_1f-^CFekQR|N5c>HPT9xewbs^0Nx+3%*Or zl=rj4uxIMHw$9kHI zp0S@Fto$)Aov&p>%v*O{cm9sFnJCli7jKvSA&9h}lc`fy=lJk;KkBQq)%A|0;6v3Q zC#CeK$8HIsTX$ExU0y!nXFw}j8KF2}7+s#2+Zi_>uGgyqS*&Hn;@=tn4|c7^o2s^% QmjD0&07*qoM6N<$g2eM9^8f$< delta 1096 zcmV-O1h@P22=WM!Ie#QcL_t(|oTZj+Oj}hL$Deb1X$xDSFzQM>SXUS$aT4M-YJnn~ zhG?>w%tbQI$UbR&4H&BNPN8>JtM3;-X9q?*6%*t`f+k&(iEFbAL>9^WRi(e3+9}saFAhbo-YP1|j z0=%dM_H>Hbn82ZS83+hGu+gaGstpD}MMc?1^8*9$M}Hsyn%$09C$m*a8(dOQk+X=Aacts`D>n8@Ka97clySk6@+Hn^Ou|6IJ`G@ zy0bn+JW(5hQnl=SLYgID>~Ad$-mQd5uQtZ;=zk{!=(GG4!3WbzQ84KDLlXN8Zk0+U z-g~rTO-B8b4*cUF;8^was%9#~p^C1?6`5u=p@Iv;wUFi%uZFepZ)av^7%@(49*oDY zDCPCSulFHDi{V&+VSpF@+g-y8#7oC(!&wNHN3a+!mi!v+2K2Of#Iep`h-|rJAY6t8 zYJYhd94jl*{UC;6`JHdz7K5d;TAO;Oufv^vz?f$eabqg?>UIRdEBoM;$0(wt=-xs`7R%ws8T~W@Vdztb zsrTIz3sU@bD+NwZ`TN+th#M~hDQ`In?SHua9}@t5e8FD(-P^FBKBP;+MZ1~i5IUt= zQhNqL*NX3sW7YVrdheGy9vAmK+`oZICYfYo(G;vl=z=B`^?`Uq;KETVH$Lhc?{766 zojQN5{)dXXJ!qHxWB&tYmeu)CaOZFU O0000 Date: Mon, 29 Nov 2010 13:08:03 +0000 Subject: [PATCH 11/21] * i2psnark: Don't timeout queued piece messages --- .../src/org/klomp/snark/PeerConnectionOut.java | 16 ++++++++++++---- .../src/org/klomp/snark/PeerCoordinator.java | 4 +++- .../java/src/org/klomp/snark/PeerState.java | 3 +++ 3 files changed, 18 insertions(+), 5 deletions(-) diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionOut.java b/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionOut.java index d4bc3b346..66399aa34 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionOut.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerConnectionOut.java @@ -229,12 +229,9 @@ class PeerConnectionOut implements Runnable /** * Adds a message to the sendQueue and notifies the method waiting * on the sendQueue to change. - * If a PIECE message only, add a timeout. */ private void addMessage(Message m) { - if (m.type == Message.PIECE) - SimpleScheduler.getInstance().addEvent(new RemoveTooSlow(m), SEND_TIMEOUT); synchronized(sendQueue) { sendQueue.add(m); @@ -430,7 +427,11 @@ class PeerConnectionOut implements Runnable return total; } - /** @since 0.8.2 */ + /** + * Queue a piece message with a callback to load the data + * from disk when required. + * @since 0.8.2 + */ void sendPiece(int piece, int begin, int length, DataLoader loader) { boolean sendNow = false; @@ -457,6 +458,11 @@ class PeerConnectionOut implements Runnable addMessage(m); } + /** + * Queue a piece message with the data already loaded from disk + * Also add a timeout. + * We don't use this anymore. + */ void sendPiece(int piece, int begin, int length, byte[] bytes) { Message m = new Message(); @@ -467,6 +473,8 @@ class PeerConnectionOut implements Runnable m.data = bytes; m.off = 0; m.len = length; + // since we have the data already loaded, queue a timeout to remove it + SimpleScheduler.getInstance().addEvent(new RemoveTooSlow(m), SEND_TIMEOUT); addMessage(m); } diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java index 0967f2461..bcff20a9d 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerCoordinator.java @@ -75,7 +75,9 @@ public class PeerCoordinator implements PeerListener private final byte[] id; - // Some random wanted pieces + /** The wanted pieces. We could use a TreeSet but we'd have to clear and re-add everything + * when priorities change. + */ private final List wantedPieces; /** partial pieces - lock by synching on wantedPieces */ diff --git a/apps/i2psnark/java/src/org/klomp/snark/PeerState.java b/apps/i2psnark/java/src/org/klomp/snark/PeerState.java index 38ed62029..4db84ad68 100644 --- a/apps/i2psnark/java/src/org/klomp/snark/PeerState.java +++ b/apps/i2psnark/java/src/org/klomp/snark/PeerState.java @@ -110,6 +110,9 @@ class PeerState implements DataLoader if (choked) { out.cancelRequestMessages(); // old Roberts thrash us here, choke+unchoke right together + // The only problem with returning the partials to the coordinator + // is that chunks above a missing request are lost. + // Future enhancements to PartialPiece could keep track of the holes. List pcs = returnPartialPieces(); if (!pcs.isEmpty()) { if (_log.shouldLog(Log.DEBUG)) From d31113255e883631c5eb746eb9aa61acff3d7b80 Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 29 Nov 2010 13:13:02 +0000 Subject: [PATCH 12/21] * Logging: - Use System locale and time zone for default date/time format, so it matches the wrapper log time (we can't set the wrapper log time zone). (existing installs must remove logger.dateFormat line in logger.config to get system default format) - Force RuntimeExceptions to CRIT level - Don't have log() count buffer size --- apps/routerconsole/jsp/logs.jsp | 3 ++- core/java/src/net/i2p/util/Log.java | 3 +++ core/java/src/net/i2p/util/LogManager.java | 26 +++++++++++++++++----- core/java/src/net/i2p/util/LogWriter.java | 15 +++++++------ router/java/src/net/i2p/router/Router.java | 5 +++++ 5 files changed, 39 insertions(+), 13 deletions(-) diff --git a/apps/routerconsole/jsp/logs.jsp b/apps/routerconsole/jsp/logs.jsp index 019564bbe..ed3b7ebc9 100644 --- a/apps/routerconsole/jsp/logs.jsp +++ b/apps/routerconsole/jsp/logs.jsp @@ -24,11 +24,12 @@ Processor: <%=net.i2p.util.NativeBigInteger.cpuModel()%> (<%=net.i2p.util.NativeBigInteger.cpuType()%>)
    Jbigi: <%=net.i2p.util.NativeBigInteger.loadStatus()%>
    Encoding: <%=System.getProperty("file.encoding")%>

    +

    <%=intl._("Note that system information, log timestamps, and log messages may provide clues to your location; please review everything you include in a bug report.")%>:

    " />

    <%=intl._("Critical Logs")%>

    -

    <%=intl._("Router Logs")%> (<%=intl._("configure")%>)

    +

    <%=intl._("Router Logs")%> (<%=intl._("configure")%>)

    <%=intl._("Service (Wrapper) Logs")%>

    diff --git a/core/java/src/net/i2p/util/Log.java b/core/java/src/net/i2p/util/Log.java index 63d44cb13..922df7885 100644 --- a/core/java/src/net/i2p/util/Log.java +++ b/core/java/src/net/i2p/util/Log.java @@ -107,6 +107,9 @@ public class Log { } public void log(int priority, String msg, Throwable t) { + // Boost the priority of NPE and friends so they get seen and reported + if (t != null && t instanceof RuntimeException && !(t instanceof IllegalArgumentException)) + priority = CRIT; if (priority >= _minPriority) { _manager.addRecord(new LogRecord(_class, _name, Thread.currentThread().getName(), priority, diff --git a/core/java/src/net/i2p/util/LogManager.java b/core/java/src/net/i2p/util/LogManager.java index 6c9a062e4..54a3b9e13 100644 --- a/core/java/src/net/i2p/util/LogManager.java +++ b/core/java/src/net/i2p/util/LogManager.java @@ -13,6 +13,7 @@ import java.io.File; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.IOException; +import java.text.DateFormat; import java.text.DecimalFormat; import java.text.SimpleDateFormat; import java.util.ArrayList; @@ -23,6 +24,7 @@ import java.util.List; import java.util.Map; import java.util.Properties; import java.util.Set; +import java.util.TimeZone; import java.util.TreeMap; import java.util.concurrent.ConcurrentHashMap; import java.util.concurrent.LinkedBlockingQueue; @@ -57,7 +59,9 @@ public class LogManager { public final static String PROP_RECORD_PREFIX = "logger.record."; public final static String DEFAULT_FORMAT = DATE + " " + PRIORITY + " [" + THREAD + "] " + CLASS + ": " + MESSAGE; - public final static String DEFAULT_DATEFORMAT = "HH:mm:ss.SSS"; + //public final static String DEFAULT_DATEFORMAT = "HH:mm:ss.SSS"; + /** blank means default short date and medium time for the locale - see DateFormat */ + public final static String DEFAULT_DATEFORMAT = ""; public final static String DEFAULT_FILENAME = "logs/log-#.txt"; public final static String DEFAULT_FILESIZE = "10m"; public final static boolean DEFAULT_DISPLAYONSCREEN = true; @@ -225,6 +229,7 @@ public class LogManager { startLogWriter(); _records.offer(record); + /**** don't burden the logging thread with counting int numRecords = _records.size(); if (numRecords > 100) { @@ -234,6 +239,7 @@ public class LogManager { _writer.notifyAll(); } } + ****/ } /** @@ -292,8 +298,7 @@ public class LogManager { _format = fmt.toCharArray(); String df = config.getProperty(PROP_DATEFORMAT, DEFAULT_DATEFORMAT); - _dateFormatPattern = df; - _dateFormat = new SimpleDateFormat(df); + setDateFormat(df); String disp = config.getProperty(PROP_DISPLAYONSCREEN); if (disp == null) @@ -386,13 +391,24 @@ public class LogManager { /** * Update the date format * + * @param format null or empty string means use default format for the locale + * (with a SHORT date and a MEDIUM time - see DateFormat) * @return true if the format was updated, false if it was invalid */ public boolean setDateFormat(String format) { - if (format == null) return false; + if (format == null) + format = ""; + if (format.equals(_dateFormatPattern) && _dateFormat != null) + return true; try { - SimpleDateFormat fmt = new SimpleDateFormat(format); + SimpleDateFormat fmt = (SimpleDateFormat) DateFormat.getDateTimeInstance(DateFormat.SHORT, DateFormat.MEDIUM); + if (!format.equals("")) + fmt.applyPattern(format); + // the router sets the JVM time zone to UTC but saves the original here so we can get it + String systemTimeZone = _context.getProperty("i2p.systemTimeZone"); + if (systemTimeZone != null) + fmt.setTimeZone(TimeZone.getTimeZone(systemTimeZone)); _dateFormatPattern = format; _dateFormat = fmt; return true; diff --git a/core/java/src/net/i2p/util/LogWriter.java b/core/java/src/net/i2p/util/LogWriter.java index 7dca7ba96..b4d6e4395 100644 --- a/core/java/src/net/i2p/util/LogWriter.java +++ b/core/java/src/net/i2p/util/LogWriter.java @@ -27,7 +27,8 @@ import net.i2p.I2PAppContext; */ class LogWriter implements Runnable { /** every 10 seconds? why? Just have the gui force a reread after a change?? */ - private final static long CONFIG_READ_ITERVAL = 10 * 1000; + private final static long CONFIG_READ_INTERVAL = 50 * 1000; + private final static long FLUSH_INTERVAL = 11 * 1000; private long _lastReadConfig = 0; private long _numBytesInCurrentFile = 0; private Writer _currentOut; @@ -71,14 +72,14 @@ class LogWriter implements Runnable { try { List records = _manager._removeAll(); if (records == null) return; - for (LogRecord rec : records) { - writeRecord(rec); - } if (!records.isEmpty()) { + for (LogRecord rec : records) { + writeRecord(rec); + } try { _currentOut.flush(); } catch (IOException ioe) { - System.err.println("Error flushing the records"); + System.err.println("Error writing the router log"); } } } catch (Throwable t) { @@ -87,7 +88,7 @@ class LogWriter implements Runnable { if (shouldWait) { try { synchronized (this) { - this.wait(10*1000); + this.wait(FLUSH_INTERVAL); } } catch (InterruptedException ie) { // nop } @@ -101,7 +102,7 @@ class LogWriter implements Runnable { private void rereadConfig() { long now = Clock.getInstance().now(); - if (now - _lastReadConfig > CONFIG_READ_ITERVAL) { + if (now - _lastReadConfig > CONFIG_READ_INTERVAL) { _manager.rereadConfig(); _lastReadConfig = now; } diff --git a/router/java/src/net/i2p/router/Router.java b/router/java/src/net/i2p/router/Router.java index 459be0ec7..7f8b2788e 100644 --- a/router/java/src/net/i2p/router/Router.java +++ b/router/java/src/net/i2p/router/Router.java @@ -96,6 +96,7 @@ public class Router { public final static String PROP_SHUTDOWN_IN_PROGRESS = "__shutdownInProgress"; public final static String DNS_CACHE_TIME = "" + (5*60); + private static final String originalTimeZoneID; static { // grumble about sun's java caching DNS entries *forever* by default // so lets just keep 'em for a short time @@ -106,6 +107,8 @@ public class Router { System.setProperty("http.agent", "I2P"); // (no need for keepalive) System.setProperty("http.keepAlive", "false"); + // Save it for LogManager + originalTimeZoneID = TimeZone.getDefault().getID(); System.setProperty("user.timezone", "GMT"); // just in case, lets make it explicit... TimeZone.setDefault(TimeZone.getTimeZone("GMT")); @@ -180,6 +183,8 @@ public class Router { if (envProps.getProperty("i2p.dir.config") == null) envProps.setProperty("i2p.dir.config", userDir); + // Save this in the context for the logger and apps that need it + envProps.setProperty("i2p.systemTimeZone", originalTimeZoneID); // The important thing that happens here is the directory paths are set and created // i2p.dir.router defaults to i2p.dir.config From 174c2226628d00f134cbbac0774bcb3435c90763 Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 29 Nov 2010 13:15:11 +0000 Subject: [PATCH 13/21] * UDP: - Fix bug causing PacketPusher to loop quickly instead of sleeping - Fix udp.sendCycleTime and sendCycleTimeSlow stats - Fix speed values on peers.jsp - Try to fix rare NPE (ticket 298) --- .../transport/udp/InboundEstablishState.java | 4 +++- .../udp/OutboundMessageFragments.java | 19 +++++++++++++------ .../i2p/router/transport/udp/PeerState.java | 2 +- .../router/transport/udp/UDPTransport.java | 4 ++-- 4 files changed, 19 insertions(+), 10 deletions(-) diff --git a/router/java/src/net/i2p/router/transport/udp/InboundEstablishState.java b/router/java/src/net/i2p/router/transport/udp/InboundEstablishState.java index 334a075fb..f659c59f8 100644 --- a/router/java/src/net/i2p/router/transport/udp/InboundEstablishState.java +++ b/router/java/src/net/i2p/router/transport/udp/InboundEstablishState.java @@ -19,6 +19,7 @@ import net.i2p.util.Log; * initiated the connection with us. In other words, they are Alice and * we are Bob. * + * TODO do all these methods need to be synchronized? */ class InboundEstablishState { private final RouterContext _context; @@ -27,7 +28,8 @@ class InboundEstablishState { private byte _receivedX[]; private byte _bobIP[]; private final int _bobPort; - private DHSessionKeyBuilder _keyBuilder; + // try to fix NPE in getSentY() ????? + private volatile DHSessionKeyBuilder _keyBuilder; // SessionCreated message private byte _sentY[]; private final byte _aliceIP[]; diff --git a/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java b/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java index 58e700f09..81a787abf 100644 --- a/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java +++ b/router/java/src/net/i2p/router/transport/udp/OutboundMessageFragments.java @@ -33,6 +33,8 @@ class OutboundMessageFragments { /** which peer should we build the next packet out of? */ private int _nextPeer; private PacketBuilder _builder; + private long _lastCycleTime = System.currentTimeMillis(); + /** if we can handle more messages explicitly, set this to true */ // private boolean _allowExcess; // LINT not used?? // private volatile long _packetsRetransmitted; // LINT not used?? @@ -176,13 +178,13 @@ class OutboundMessageFragments { if (!_activePeers.contains(peer)) { if (_log.shouldLog(Log.DEBUG)) _log.debug("Add a new message to a new peer " + peer.getRemotePeer().toBase64()); + if (_activePeers.isEmpty()) + _lastCycleTime = System.currentTimeMillis(); _activePeers.add(peer); } else { if (_log.shouldLog(Log.DEBUG)) _log.debug("Add a new message to an existing peer " + peer.getRemotePeer().toBase64()); } - if (_activePeers.size() == 1) - _lastCycleTime = System.currentTimeMillis(); _activePeers.notifyAll(); } _context.statManager().addRateData("udp.outboundActiveCount", active, 0); @@ -227,8 +229,6 @@ class OutboundMessageFragments { } } - private long _lastCycleTime = System.currentTimeMillis(); - /** * Fetch all the packets for a message volley, blocking until there is a * message which can be fully transmitted (or the transport is shut down). @@ -248,18 +248,24 @@ class OutboundMessageFragments { for (int i = 0; i < _activePeers.size(); i++) { int cur = (i + _nextPeer) % _activePeers.size(); if (cur == 0) { + // FIXME or delete, these stats aren't much help since they include the sleep time long ts = System.currentTimeMillis(); long cycleTime = ts - _lastCycleTime; + _lastCycleTime = ts; _context.statManager().addRateData("udp.sendCycleTime", cycleTime, _activePeers.size()); - if (cycleTime > 1000) + // make longer than the default sleep time below + if (cycleTime > 1100) _context.statManager().addRateData("udp.sendCycleTimeSlow", cycleTime, _activePeers.size()); } peer = _activePeers.get(i); state = peer.allocateSend(); if (state != null) { + // we have something to send and we will be returning it _nextPeer = i + 1; break; } else { + // Update the minimum delay for all peers (getNextDelay() returns 1 for "now") + // which will be used if we found nothing to send across all peers int delay = peer.getNextDelay(); if ( (nextSendDelay <= 0) || (delay < nextSendDelay) ) nextSendDelay = delay; @@ -274,8 +280,9 @@ class OutboundMessageFragments { if (_log.shouldLog(Log.DEBUG)) _log.debug("wait for " + nextSendDelay); // wait.. or somethin' + // wait a min of 10 and a max of 3000 ms no matter what peer.getNextDelay() says if (nextSendDelay > 0) - _activePeers.wait(nextSendDelay); + _activePeers.wait(Math.min(Math.max(nextSendDelay, 10), 3000)); else _activePeers.wait(1000); } else { diff --git a/router/java/src/net/i2p/router/transport/udp/PeerState.java b/router/java/src/net/i2p/router/transport/udp/PeerState.java index 54ece24c2..1006f52a3 100644 --- a/router/java/src/net/i2p/router/transport/udp/PeerState.java +++ b/router/java/src/net/i2p/router/transport/udp/PeerState.java @@ -1270,7 +1270,7 @@ class PeerState { if (_dead) return -1; synchronized (msgs) { if (_retransmitter != null) { - rv = (int)(now - _retransmitter.getNextSendTime()); + rv = (int)(_retransmitter.getNextSendTime() - now); if (rv <= 0) return 1; else diff --git a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java index e287d1426..dead5e003 100644 --- a/router/java/src/net/i2p/router/transport/udp/UDPTransport.java +++ b/router/java/src/net/i2p/router/transport/udp/UDPTransport.java @@ -1986,8 +1986,8 @@ public class UDPTransport extends TransportImpl implements TimedWeightedPriority buf.append(DataHelper.formatDuration2(idleOut)); buf.append(""); - int recvBps = (idleIn > 2 ? 0 : peer.getReceiveBps()); - int sendBps = (idleOut > 2 ? 0 : peer.getSendBps()); + int recvBps = (idleIn > 15*1000 ? 0 : peer.getReceiveBps()); + int sendBps = (idleOut > 15*1000 ? 0 : peer.getSendBps()); buf.append(""); buf.append(formatKBps(recvBps)); From 671f48e77e9239f12bde785d4736ebb245cfb1d8 Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 29 Nov 2010 13:51:39 +0000 Subject: [PATCH 14/21] -14 --- history.txt | 16 ++++++++++++++++ .../java/src/net/i2p/router/RouterVersion.java | 2 +- 2 files changed, 17 insertions(+), 1 deletion(-) diff --git a/history.txt b/history.txt index 57a905e8c..a2df68cb1 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,19 @@ +2010-11-29 zzz + * i2psnark: + - Don't timeout queued piece messages + * Logging: + - Use System locale and time zone for default date/time format, + so it matches the wrapper log time (we can't set the wrapper log time zone). + (existing installs must remove logger.dateFormat line + in logger.config to get system default format) + - Force RuntimeExceptions to CRIT level + - Don't have log() count buffer size + * UDP: + - Fix bug causing PacketPusher to loop quickly instead of sleeping + - Fix udp.sendCycleTime stat + - Fix speed values on peers.jsp + - Try to fix rare NPE (ticket 298) + 2010-11-28 zzz * Build: Move all dependencies to top-level build.xml, so each sub-build.xml is only executed once diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 7f4edb975..31c35f8c3 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 13; + public final static long BUILD = 14; /** for example "-test" */ public final static String EXTRA = ""; From b5f652ef044743a1ddc113b8290be92558cf6f2e Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 29 Nov 2010 15:36:05 +0000 Subject: [PATCH 15/21] tweak --- apps/routerconsole/jsp/logs.jsp | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/routerconsole/jsp/logs.jsp b/apps/routerconsole/jsp/logs.jsp index ed3b7ebc9..b6fe3fe71 100644 --- a/apps/routerconsole/jsp/logs.jsp +++ b/apps/routerconsole/jsp/logs.jsp @@ -24,7 +24,7 @@ Processor: <%=net.i2p.util.NativeBigInteger.cpuModel()%> (<%=net.i2p.util.NativeBigInteger.cpuType()%>)
    Jbigi: <%=net.i2p.util.NativeBigInteger.loadStatus()%>
    Encoding: <%=System.getProperty("file.encoding")%>

    -

    <%=intl._("Note that system information, log timestamps, and log messages may provide clues to your location; please review everything you include in a bug report.")%>:

    +

    <%=intl._("Note that system information, log timestamps, and log messages may provide clues to your location; please review everything you include in a bug report.")%>

    " />

    <%=intl._("Critical Logs")%>

    From 601abdce6dba68276f24fdd1661f3d419ae41335 Mon Sep 17 00:00:00 2001 From: zzz Date: Mon, 29 Nov 2010 15:39:55 +0000 Subject: [PATCH 16/21] Lock down streaming classes not in the API. Holler if this breaks any external apps. --- .../src/net/i2p/client/streaming/I2PSocketOptionsImpl.java | 2 +- .../java/src/net/i2p/client/streaming/Connection.java | 4 ++-- .../java/src/net/i2p/client/streaming/ConnectionHandler.java | 2 +- .../java/src/net/i2p/client/streaming/ConnectionManager.java | 2 +- .../java/src/net/i2p/client/streaming/ConnectionOptions.java | 2 +- .../net/i2p/client/streaming/ConnectionPacketHandler.java | 2 +- .../src/net/i2p/client/streaming/I2PServerSocketFull.java | 2 +- .../java/src/net/i2p/client/streaming/I2PSocketFull.java | 2 +- .../src/net/i2p/client/streaming/I2PSocketManagerFull.java | 2 +- .../java/src/net/i2p/client/streaming/MessageHandler.java | 2 +- .../src/net/i2p/client/streaming/MessageInputStream.java | 2 +- .../src/net/i2p/client/streaming/MessageOutputStream.java | 2 +- apps/streaming/java/src/net/i2p/client/streaming/Packet.java | 2 +- .../java/src/net/i2p/client/streaming/PacketHandler.java | 2 +- .../java/src/net/i2p/client/streaming/PacketLocal.java | 2 +- .../java/src/net/i2p/client/streaming/PacketQueue.java | 2 +- .../src/net/i2p/client/streaming/RetransmissionTimer.java | 5 ++++- .../java/src/net/i2p/client/streaming/SchedulerChooser.java | 2 +- .../java/src/net/i2p/client/streaming/TCBShare.java | 2 +- history.txt | 1 + router/java/src/net/i2p/router/RouterVersion.java | 2 +- 21 files changed, 25 insertions(+), 21 deletions(-) diff --git a/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketOptionsImpl.java b/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketOptionsImpl.java index 4ecf34d6a..b1fedcea7 100644 --- a/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketOptionsImpl.java +++ b/apps/ministreaming/java/src/net/i2p/client/streaming/I2PSocketOptionsImpl.java @@ -6,7 +6,7 @@ import java.util.Properties; * Define the configuration for streaming and verifying data on the socket. * */ -public class I2PSocketOptionsImpl implements I2PSocketOptions { +class I2PSocketOptionsImpl implements I2PSocketOptions { private long _connectTimeout; private long _readTimeout; private long _writeTimeout; diff --git a/apps/streaming/java/src/net/i2p/client/streaming/Connection.java b/apps/streaming/java/src/net/i2p/client/streaming/Connection.java index 20b1a0f01..239c77d1b 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/Connection.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/Connection.java @@ -22,7 +22,7 @@ import net.i2p.util.SimpleTimer2; * destinations. * */ -public class Connection { +class Connection { private I2PAppContext _context; private Log _log; private ConnectionManager _connectionManager; @@ -1067,7 +1067,7 @@ public class Connection { /** * Coordinate the resends of a given packet */ - public class ResendPacketEvent extends SimpleTimer2.TimedEvent { + class ResendPacketEvent extends SimpleTimer2.TimedEvent { private PacketLocal _packet; private long _nextSendTime; public ResendPacketEvent(PacketLocal packet, long delay) { diff --git a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionHandler.java b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionHandler.java index ba801ae95..6ba876dd9 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionHandler.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionHandler.java @@ -17,7 +17,7 @@ import net.i2p.util.SimpleTimer; * * @author zzz modded to use concurrent and bound queue size */ -public class ConnectionHandler { +class ConnectionHandler { private I2PAppContext _context; private Log _log; private ConnectionManager _manager; diff --git a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java index 630d84422..69ace81a2 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionManager.java @@ -20,7 +20,7 @@ import net.i2p.util.SimpleTimer; * * */ -public class ConnectionManager { +class ConnectionManager { private I2PAppContext _context; private Log _log; private I2PSession _session; diff --git a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java index 72eb38e60..ae14daa15 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionOptions.java @@ -15,7 +15,7 @@ import net.i2p.util.Log; * Define the current options for the con (and allow custom tweaking midstream) * */ -public class ConnectionOptions extends I2PSocketOptionsImpl { +class ConnectionOptions extends I2PSocketOptionsImpl { private int _connectDelay; private boolean _fullySigned; private boolean _answerPings; diff --git a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionPacketHandler.java b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionPacketHandler.java index e4a8efbc0..aafc7fbcd 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/ConnectionPacketHandler.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/ConnectionPacketHandler.java @@ -14,7 +14,7 @@ import net.i2p.util.SimpleTimer; * queue, marking packets as acked, updating various fields, etc. * */ -public class ConnectionPacketHandler { +class ConnectionPacketHandler { private I2PAppContext _context; private Log _log; diff --git a/apps/streaming/java/src/net/i2p/client/streaming/I2PServerSocketFull.java b/apps/streaming/java/src/net/i2p/client/streaming/I2PServerSocketFull.java index 83f7c8376..262b49624 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/I2PServerSocketFull.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/I2PServerSocketFull.java @@ -7,7 +7,7 @@ import net.i2p.I2PException; * Bridge to allow accepting new connections * */ -public class I2PServerSocketFull implements I2PServerSocket { +class I2PServerSocketFull implements I2PServerSocket { private I2PSocketManagerFull _socketManager; public I2PServerSocketFull(I2PSocketManagerFull mgr) { diff --git a/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketFull.java b/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketFull.java index 19867ed06..dfcfacfa1 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketFull.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketFull.java @@ -10,7 +10,7 @@ import net.i2p.data.Destination; * Bridge between the full streaming lib and the I2PSocket API * */ -public class I2PSocketFull implements I2PSocket { +class I2PSocketFull implements I2PSocket { private Connection _connection; private I2PSocket.SocketErrorListener _listener; private Destination _remotePeer; diff --git a/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketManagerFull.java b/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketManagerFull.java index c26a27fe2..f71067698 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketManagerFull.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/I2PSocketManagerFull.java @@ -23,7 +23,7 @@ import net.i2p.util.Log; * or receive any messages with its .receiveMessage * */ -public class I2PSocketManagerFull implements I2PSocketManager { +class I2PSocketManagerFull implements I2PSocketManager { private I2PAppContext _context; private Log _log; private I2PSession _session; diff --git a/apps/streaming/java/src/net/i2p/client/streaming/MessageHandler.java b/apps/streaming/java/src/net/i2p/client/streaming/MessageHandler.java index cfd208c01..4097c568f 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/MessageHandler.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/MessageHandler.java @@ -15,7 +15,7 @@ import net.i2p.util.ConcurrentHashSet; * Packets, if we can. * */ -public class MessageHandler implements I2PSessionListener { +class MessageHandler implements I2PSessionListener { private ConnectionManager _manager; private I2PAppContext _context; private Log _log; diff --git a/apps/streaming/java/src/net/i2p/client/streaming/MessageInputStream.java b/apps/streaming/java/src/net/i2p/client/streaming/MessageInputStream.java index 216a2cdf4..883fc332c 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/MessageInputStream.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/MessageInputStream.java @@ -19,7 +19,7 @@ import net.i2p.util.Log; * yet present them in order. * */ -public class MessageInputStream extends InputStream { +class MessageInputStream extends InputStream { private final I2PAppContext _context; private final Log _log; /** diff --git a/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java b/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java index ed45972be..e61435680 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/MessageOutputStream.java @@ -15,7 +15,7 @@ import net.i2p.util.SimpleTimer2; * on flush or when the buffer is full. It also blocks according * to the data receiver's needs. */ -public class MessageOutputStream extends OutputStream { +class MessageOutputStream extends OutputStream { private final I2PAppContext _context; private final Log _log; private byte _buf[]; diff --git a/apps/streaming/java/src/net/i2p/client/streaming/Packet.java b/apps/streaming/java/src/net/i2p/client/streaming/Packet.java index 14ebb61d5..faff2ff72 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/Packet.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/Packet.java @@ -53,7 +53,7 @@ import net.i2p.util.Log; * packet that should not be ACKed

    * */ -public class Packet { +class Packet { private long _sendStreamId; private long _receiveStreamId; private long _sequenceNum; diff --git a/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java b/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java index 95674b433..bcf5610ef 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/PacketHandler.java @@ -15,7 +15,7 @@ import net.i2p.util.Log; * the server socket, or queue a reply RST packet. * */ -public class PacketHandler { +class PacketHandler { private ConnectionManager _manager; private I2PAppContext _context; private Log _log; diff --git a/apps/streaming/java/src/net/i2p/client/streaming/PacketLocal.java b/apps/streaming/java/src/net/i2p/client/streaming/PacketLocal.java index cbe913e05..dd5fe1ceb 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/PacketLocal.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/PacketLocal.java @@ -12,7 +12,7 @@ import net.i2p.util.SimpleTimer2; * coordinate local attributes about a packet - send time, ack time, number of * retries, etc. */ -public class PacketLocal extends Packet implements MessageOutputStream.WriteStatus { +class PacketLocal extends Packet implements MessageOutputStream.WriteStatus { private I2PAppContext _context; private Log _log; private Connection _connection; diff --git a/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java b/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java index 8a4692ada..fa0aa87ce 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/PacketQueue.java @@ -18,7 +18,7 @@ import net.i2p.util.Log; * mode=bestEffort doesnt block in the SDK. * */ -public class PacketQueue { +class PacketQueue { private I2PAppContext _context; private Log _log; private I2PSession _session; diff --git a/apps/streaming/java/src/net/i2p/client/streaming/RetransmissionTimer.java b/apps/streaming/java/src/net/i2p/client/streaming/RetransmissionTimer.java index 92c4cf1c2..6f3bc3054 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/RetransmissionTimer.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/RetransmissionTimer.java @@ -3,7 +3,10 @@ package net.i2p.client.streaming; import net.i2p.util.SimpleTimer2; /** - * + * Not clear that we really need to create our own timer group, but we do, + * to prevent us clogging the router's timer group. + * Use from outside this package is deprecated. + * (BOB instantiates this for thread group reasons) */ public class RetransmissionTimer extends SimpleTimer2 { private static final RetransmissionTimer _instance = new RetransmissionTimer(); diff --git a/apps/streaming/java/src/net/i2p/client/streaming/SchedulerChooser.java b/apps/streaming/java/src/net/i2p/client/streaming/SchedulerChooser.java index 2c8f5df01..c9c9e0d38 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/SchedulerChooser.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/SchedulerChooser.java @@ -10,7 +10,7 @@ import net.i2p.util.Log; * Examine a connection's state and pick the right scheduler for it. * */ -public class SchedulerChooser { +class SchedulerChooser { private I2PAppContext _context; private Log _log; private TaskScheduler _nullScheduler; diff --git a/apps/streaming/java/src/net/i2p/client/streaming/TCBShare.java b/apps/streaming/java/src/net/i2p/client/streaming/TCBShare.java index 7c8df3e3e..d2d02021a 100644 --- a/apps/streaming/java/src/net/i2p/client/streaming/TCBShare.java +++ b/apps/streaming/java/src/net/i2p/client/streaming/TCBShare.java @@ -20,7 +20,7 @@ import net.i2p.util.SimpleTimer2; * same router. * */ -public class TCBShare { +class TCBShare { private I2PAppContext _context; private Log _log; private Map _cache; diff --git a/history.txt b/history.txt index a2df68cb1..d0fc2aba1 100644 --- a/history.txt +++ b/history.txt @@ -8,6 +8,7 @@ in logger.config to get system default format) - Force RuntimeExceptions to CRIT level - Don't have log() count buffer size + * Streaming: Make all classes outside the API package private * UDP: - Fix bug causing PacketPusher to loop quickly instead of sleeping - Fix udp.sendCycleTime stat diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index 31c35f8c3..ea17ad55f 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 14; + public final static long BUILD = 15; /** for example "-test" */ public final static String EXTRA = ""; From e243f90b35729ddf58f65bcf7800904bedd26838 Mon Sep 17 00:00:00 2001 From: z3d Date: Mon, 29 Nov 2010 17:00:26 +0000 Subject: [PATCH 17/21] Readme tweaks; Dark manoeuvres. --- installer/resources/readme/readme.html | 6 +-- .../resources/themes/console/dark/console.css | 6 +-- .../themes/console/dark/console_big.css | 37 +++++++++++++++++-- 3 files changed, 39 insertions(+), 10 deletions(-) diff --git a/installer/resources/readme/readme.html b/installer/resources/readme/readme.html index 48faf5ef4..ebee7e198 100644 --- a/installer/resources/readme/readme.html +++ b/installer/resources/readme/readme.html @@ -26,10 +26,10 @@
  • Invisible Internet & Public Web Browsing
    On I2P you can access anonymous websites (aka eepsites) and other services (eg. ssh over I2p, your own IRC server etc) in addition to being able to host your own services, and you can also access the normal web anonymously via I2P. Configure your browser to use the HTTP proxy I2P provides at 127.0.0.1 port 4444, then browse to an eepsite or a normal http:// address. Below we list some of the sites hosted on I2P.
  • Anonymous File Transfer
    I2PSnark is integrated into I2P, providing anonymous, encrypted BitTorrent transfers. In addition, Sponge develops a bittorrent client called Robert written in Python. There is also a port of eMule to I2P called iMule [Needs developers!], an anonymous, secure implementation of a Gnutella network, accessible using I2Phex, and additional facilities including browser-based file hosting etc.
  • -
  • Anonymous Chat
    Start your IRC client (eg. chatzilla, pidgin, x-chat) +
  • Anonymous Chat
    Start your IRC client (eg. Chatzilla, Pidgin, XChat) and connect to the server at 127.0.0.1 port 6668. Your local I2P IRC proxy on localhost:6668 will direct you to one of two IRC servers hosted on I2P by Postman and Badger, but neither you nor they know where the other is, and your mom, ISP or government is unable to intercept your conversation! Once you're there, #i2p, #i2p-help, #i2p-chat and #i2p-dev are just a few of the available channels you may wish to /join. There's also a I2P based instant messenger for unmonitorable, uncensorable, anonymous chat.
  • Forums & Blogging
    Syndie is a distributed forum and blogging platform for I2P [Needs developers!]. There's also an I2P plugin port of the Java-based pebble blogging platform ported to I2P by zzz, available on i2plugins.i2p. And of course all normal blogging, forum and cms software will run over I2P, though you're advised to take extra precautions with security when setting up and keep all associated software (eg. Php, MySql, Python, Apache etc) up to date and locked down! Also, there are quite a few forums running on I2P in various languages; see below for some suggestions.
  • -
  • Plugins for I2P
    Extend the usefulness of I2P by installing plugins… blogging, chatting, filesharing and other plugins have already been written or ported and await your installation! Browse the plugins and related info at i2plugins.i2p. If you're a developer, a complete language agnostic framework for writing your own plugins is provided with documentation; I2P plugins can be coded in any language.
  • +
  • Plugins for I2P
    Extend the usefulness of I2P by installing plugins… blogging, chatting, filesharing and other plugins have already been written or ported and await your installation! Browse the plugins and related info at i2plugins.i2p. If you're a developer, a complete language agnostic framework for writing your own plugins is provided with documentation; I2P plugins can be coded in any language.

  • Anonymous Encrypted Webserving on I2P

    @@ -86,5 +86,5 @@ your eepsite will be visible (but not discoverable) to others. Detailed instruct
  • Reporting Bugs
    If you'd like to report a bug, please file a ticket on trac.i2p2.i2p. For developer related discussions, please visit zzz's developer forums or come and visit the developer channel on I2P's IRC network. Developers can browse source at zzz's mtn repository viewer or Sponge's instance, or via trac.i2p2.i2p.
  • -
  • Get Involved!
    I2P is developed and maintained mostly through unfunded, voluntary participation by community members. We're happy to accept donations, which go towards essential hosting and administrative costs. We have cash bounties for aspects of I2P for developers looking for incentives to participate, and we're always looking for more Java coders, translators, promoters and users to help I2P grow. For further info on how you can help visit the website. Thanks in advance!
  • +
  • Get Involved!
    I2P is developed and maintained mostly through unfunded, voluntary participation by community members. We're happy to accept donations, which go towards essential hosting and administrative costs. We have cash bounties for aspects of I2P for developers looking for incentives to participate, and we're always looking for more Java coders, translators, promoters and users to help I2P grow. For further info on how you can help visit the volunteers page on the website. Thanks in advance!
  • diff --git a/installer/resources/themes/console/dark/console.css b/installer/resources/themes/console/dark/console.css index b37fead3e..ef764f364 100644 --- a/installer/resources/themes/console/dark/console.css +++ b/installer/resources/themes/console/dark/console.css @@ -954,15 +954,15 @@ div.joblog li { div.joblog ul { word-wrap: break-word !important; text-align: justify; - margin-bottom: 0px; + margin: 0px 0 10px; } div.joblog li:first-child { - margin-top: 10px; + margin-top: 0px; } div.joblog li:last-child { - margin-bottom: -15px; + margin-bottom: -25px; } div.joblog form:first-child { diff --git a/installer/resources/themes/console/dark/console_big.css b/installer/resources/themes/console/dark/console_big.css index d07c8a60b..cf2c46374 100644 --- a/installer/resources/themes/console/dark/console_big.css +++ b/installer/resources/themes/console/dark/console_big.css @@ -1,7 +1,16 @@ /* I2P Theme Override: Dark */ -/* Comment: Larger text (and other tweaks) for Chinese */ +/* Comment: Larger text (and other tweaks) for Chinese & other doublebyte charactersets */ /* Author: dr|z3d */ +body { + font: 9pt/130% Verdana, "Bitstream Vera Sans", Tahoma, Helvetica, sans-serif; +} + +div.news { + font-size: 9.5pt; + font-style: normal !important; +} + div.routersummary table { font-size: 8.5pt; } @@ -10,6 +19,11 @@ div.routersummary h3, div.routersummary h4, div.routersummary p, div.routersumma text-shadow: 0 0 0 #fff !important; } +div.routersummary h4 { + font-size: 10pt; + font-weight: normal; +} + div.routersummary b { font-size: 9pt; font-weight: normal; @@ -17,12 +31,27 @@ div.routersummary b { div.routersummary a { font-size: 10pt; + font-weight: normal; } -.smallhead { - font-size: 8.5pt +b, a, a:link, a:hover, a:visited { + font-weight: normal; +} + +button, button:visited { + font: normal 10pt Verdana,"Bitstream Vera Sans",Tahoma,Helvetica,sans-serif !important; +} + +code, pre, tt { + font-size: 10pt; + font-weight: normal; +} + +.smallhead, th { + font-size: 8.5pt; + font-weight: normal; } table { - font: 8.5pt/130% "Lucida Sans Unicode", Verdana, "Bitstream Vera Sans", Tahoma, Helvetica, sans-serif; + font: 8.5pt/130% Verdana, "Bitstream Vera Sans", Tahoma, Helvetica, sans-serif; } \ No newline at end of file From 0f288ed720b9eb7d732e78a7c4eb030de1573a45 Mon Sep 17 00:00:00 2001 From: z3d Date: Mon, 29 Nov 2010 18:16:49 +0000 Subject: [PATCH 18/21] Console: "light" theme refresh. --- .../themes/console/light/console.css | 311 +++++++++++------- .../themes/console/light/default.css | 20 +- .../themes/console/light/i2ptunnel.css | 2 +- .../console/light/images/darkbluetile.png | Bin 298 -> 0 bytes .../console/light/images/darkerbluetile.png | Bin 1496 -> 0 bytes .../themes/console/light/images/header.png | Bin 0 -> 157 bytes .../themes/console/light/images/header_on.png | Bin 0 -> 193 bytes .../themes/console/light/images/i2plogo.png | Bin 9266 -> 9962 bytes .../console/light/images/lightbluetile.png | Bin 3486 -> 0 bytes .../themes/console/light/images/sandtile.png | Bin 1392 -> 0 bytes .../themes/console/light/images/snowcamo.png | Bin 0 -> 2276 bytes .../themes/console/light/images/tabletile.png | Bin 1075 -> 0 bytes .../console/light/images/tabletile_alt.png | Bin 1131 -> 0 bytes .../console/light/images/tabletilelighter.png | Bin 1184 -> 0 bytes .../themes/console/light/images/titletile.png | Bin 1112 -> 0 bytes .../themes/console/light/images/warning.png | Bin 803 -> 1053 bytes 16 files changed, 213 insertions(+), 120 deletions(-) delete mode 100644 installer/resources/themes/console/light/images/darkbluetile.png delete mode 100644 installer/resources/themes/console/light/images/darkerbluetile.png create mode 100644 installer/resources/themes/console/light/images/header.png create mode 100644 installer/resources/themes/console/light/images/header_on.png delete mode 100644 installer/resources/themes/console/light/images/lightbluetile.png delete mode 100644 installer/resources/themes/console/light/images/sandtile.png create mode 100644 installer/resources/themes/console/light/images/snowcamo.png delete mode 100644 installer/resources/themes/console/light/images/tabletile.png delete mode 100644 installer/resources/themes/console/light/images/tabletile_alt.png delete mode 100644 installer/resources/themes/console/light/images/tabletilelighter.png delete mode 100644 installer/resources/themes/console/light/images/titletile.png diff --git a/installer/resources/themes/console/light/console.css b/installer/resources/themes/console/light/console.css index 7f19b7bf0..bcdf92201 100644 --- a/installer/resources/themes/console/light/console.css +++ b/installer/resources/themes/console/light/console.css @@ -1,12 +1,12 @@ /* I2P Theme: Light */ -/* I2P Description: Light theme with soft blue highlights. */ +/* Description: Light blue highlights. */ /* Author: dr|z3d */ body { - margin: 15px 0 0 10px; + margin: 15px 0 0 15px; padding: 0em; text-align: center; - background: #eef; + background: #eef url('images/snowcamo.png'); color: #000; font: 9pt/130% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; } @@ -34,13 +34,13 @@ div.logo { text-align: center; font-color: #fff; margin: 0 20px 0 20px; - border: 1px solid #002; + border: 1px solid #447; -moz-border-radius: 4px; -khtml-border-radius: 4px; border-radius: 4px; - background: #ddddff url('images/lightbluetile.png'); + background: #eef; /*url('images/lightbluetile.png')*/ width: 175px; - -moz-box-shadow: inset 0px 0px 1px 0px #002; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf; } div.toolbar { @@ -48,7 +48,7 @@ div.toolbar { padding: 10px; font-weight: bold; background: #eef; - border: 1px solid #002; + border: 1px solid #447; display: none !important; } @@ -80,7 +80,7 @@ a:active{ div.routersummaryouter { float: left; - width: 215px; + width: 210px; margin: 0 0 10px 0px; padding: 0; border: 0; @@ -94,18 +94,19 @@ div.routersummary { width: 175px; padding: 10px; text-align: center !important; - border: 1px solid #000033; - background: #ddf url('images/lightbluetile.png'); + border: 1px solid #447; + background: #ccddf6); color: #000; font-size: 8pt; clear: left;/* fixes a bug in Opera */ -moz-border-radius: 4px; -khtml-border-radius: 4px; border-radius: 4px; + background: #eef; /* float: left; */ - -moz-box-shadow: inset 0px 0px 1px 0px #002; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf; } div.routersummary input[type=text] { @@ -118,7 +119,7 @@ div.routersummary hr { height: 2px; border-bottom: 1px solid #eef; margin: 8px -10px 7px -10px; - -moz-box-shadow: inset 0px 1px 1px 1px #001; + -moz-box-shadow: inset 0px 1px 1px 1px #ddf; } div routersummary hr:last-child { @@ -130,11 +131,22 @@ div.routersummary h3 { border: 0; font-size: 9.5pt; letter-spacing: 0.04em; - margin: -7px -9px -7px -9px; - padding: 1px 0; + margin: -4px -6px; + padding: 2px 0; background: #c5d5fb; text-transform: uppercase; - background-image: -moz-linear-gradient(top, bottom, from(#ddf), to(#c5d5fb), color-stop(25%, #c5d5fb), color-stop(100%, #ddf)); + background: #ddf url('images/header_on.png') center center repeat-x; + border: 1px solid #99f !important; + -moz-border-radius: 3px; +} + +div.routersummary h3 a { + text-decoration: none; +} + +div.routersummary h3:hover { + background: #ddf url('images/header.png') center center repeat-x; + text-shadow: 0 0 0; } div.routersummary h4 { @@ -144,10 +156,11 @@ div.routersummary h4 { letter-spacing: 0.02em; margin: -7px -9px -7px -9px !important; padding: 0px 3px 1px 3px; - background: #c1d1f7; + background: #eef; text-transform: capitalize; text-decoration: none !important; color: #2b2; + line-height: 105%; } div.routersummary table { @@ -175,16 +188,31 @@ div.tunnels { padding-top: 3px !important; } +div.tunnels table { + margin: -7px 0 -5px -4px !important; +} + .tunnels tr { padding: 4px 0 !important; } +div.tunnels td:first-child { + width: 16px; + text-align: left; + padding-right: 1px; +} + +div.tunnels td:last-child { + text-align: right; + padding-right: 1px; +} + div.routersummary form { margin: -6px 0 -5px 0; } div.routersummary form:last-child { - margin: 0 !important; + margin: 6px 0 0 0 !important; padding: 0; } @@ -203,7 +231,7 @@ div.routersummary a:hover { } div.routersummary td { - padding: 1px 3px; + padding: 0 3px; background-image: none !important; border: 0 !important; } @@ -214,7 +242,7 @@ div.warning { margin: 5px 20px 10px 240px; padding: 5px 25px 20px 75px; background: #fff; - border: 1px solid #002; + border: 1px solid #447; text-align: left; color: inherit; -moz-border-radius: 4px; @@ -234,8 +262,8 @@ div.warning { div.sorry { margin: 5px 15px 10px 220px; padding: 20px 20px 20px 75px; - background: #ffb; - border: 1px solid #002; + background: #eef; + border: 1px solid #447; -moz-border-radius: 4px; -khtml-border-radius: 4px; border-radius: 4px; @@ -246,32 +274,37 @@ div.sorry { -moz-box-shadow: inset 0px 0px 0px 1px #d00; word-wrap: break-word; font-weight: bold; - color: #331; + color: #531; } div.sorry hr { - color: #552; - background: #552; + color: #531; + background: #531; height: 1px; - border: 1px solid #552; - margin: 10px 0; + border: 1px solid #531; + margin: 10px 0 15px 0; } div.main { - margin: 0px 0px 20px 195px; - padding: 0 15px 15px 25px; + margin: 15px 15px 20px 220px; + padding: 0 15px 15px 15px; background: #eef; text-align: left; color: #001; width: auto; min-width: 500px; + border: 1px solid #447; + -moz-border-radius: 4px; + -khtml-border-radius: 4px; + border-radius: 4px; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf; } div.main hr, hr { - color: #003; - background: #003; + color: #447; + background: #447; height: 1px; - border: 0px solid #003; + border: 0px solid #447; margin: 10px 0; } @@ -288,46 +321,48 @@ div.main textarea { div.news { margin: 0px 15px 10px 220px; padding: 10px 25px 7px 25px; - border: 1px solid #003; - color: #410; + border: 1px solid #447; + color: #000; border-radius: 4px; -moz-border-radius: 4px; -khtml-border-radius: 4px; text-align: right !important; - font-size: 7pt; + font-size: 7.5pt; line-height: 140%; - background: #fea url('images/sandtile.png'); + background: #eef; /*url('images/sandtile.png');*/ -moz-box-shadow: inset 0px 0px 1px 0px #410; + background: #eef; /*url("images/bg2.png")no-repeat scroll bottom right;*/ } div.news p { font-size: 8.5pt; text-align: justify !important; } - +/* div.news a:link{ - color: #630; + color: #a30; text-decoration: none; } div.news a:visited{ - color: #830; + color: #930; } div.news a:hover{ - color: #a30; + color: #d20; text-decoration: underline; } div.news a:active{ color: #c30; } +*/ div.news hr{ - color: #410; - background: #410; + color: #447; + background: #447; height: 1px; - border: 0px solid #410; + border: 0px solid #447; margin: 10px 0 5px; } @@ -335,19 +370,25 @@ div.news li { text-align: justify; list-style: none; margin: 10px 0 20px 0 !important; - padding: 5px 0; vertical-align: bottom; - border: 1px solid #410; - border-left: 5px solid #410; - padding: 3px 5px 3px 5px; + border: 1px solid #447; + border-left: 5px solid #447; + padding: 4px 5px; border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; -khtml-border-radius: 0 4px 4px 0; - background: #fb1; font-size: 10pt; - opacity: 0.7; + opacity: 1; + background: #fff url('images/header.png') center center repeat-x; } +/* +div.news h4 a{ + color: #910 !important; + opacity: 1 !important; +} +*/ + div.news h4 { border-bottom: 0px; padding: 0; @@ -357,34 +398,35 @@ div.news h4 { div.confignav { padding: 15px 10px !important; - margin: 0 0px 15px 0; - background: #ddf url('images/lightbluetile.png'); + margin: 15px 0 15px 0; + background: #ddf url('images/header.png') center center repeat-x; -moz-border-radius: 4px; -khtml-border-radius: 4px; border-radius: 4px; - border: 1px solid #000022; + border: 1px solid #447; font-size: 9.5pt !important; font-weight: bold !important; line-height: 160% !important; - -moz-box-shadow: inset 0px 0px 1px 0px #002; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf; min-width: 400px; } div.configure { - padding: 5px 15px 0px 15px !important; +/* padding: 5px 15px 0px 15px !important; margin: 0px 0px 15px 0; - background: #ddf url('images/lightbluetile.png'); + background: #eef; url('images/lightbluetile.png') -moz-border-radius: 4px; -khtml-border-radius: 4px; border-radius: 4px; - border: 1px solid #000022; - -moz-box-shadow: inset 0px 0px 1px 0px #002; + border: 1px solid #447; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf;*/ min-width: 400px; + margin-bottom: 0px; } div.configure h3, div.graphspanel h3 { - border: 1px solid #002; - border-left: 5px solid #002; + border: 1px solid #447; + border-left: 5px solid #447; padding: 3px 5px 3px 5px; margin: 15px 0 15px 0; border-radius: 0 4px 4px 0; @@ -394,19 +436,20 @@ div.configure h3, div.graphspanel h3 { } div.graphspanel { - padding: 12px; +/* padding: 12px; margin: 10px 0px 25px 0; background: #ddf url('images/lightbluetile.png'); -moz-border-radius: 4px; -khtml-border-radius: 4px; border-radius: 4px; - border: 1px solid #000022; - -moz-box-shadow: inset 0px 0px 1px 0px #002; - text-align: center !important; + border: 1px solid #447; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf;*/ + text-align: center !important; + margin: 15px 0px -15px; } div.graphspanel img { - border: 1px solid #003; + border: 1px solid #447; padding: 2px; margin: 6px; text-align: center !important; @@ -416,7 +459,7 @@ div.graphspanel img { } div.graphspanel img:hover { - border: 1px solid #003; + border: 1px solid #447; padding: 2px; margin: 6px; text-align: center !important; @@ -436,10 +479,10 @@ div.messages { -moz-border-radius: 4px; -khtml-border-radius: 4px; border-radius: 4px; - border: 1px solid #000033; - background: #008 url('images/lightbluetile.png'); + border: 1px solid #447; + background: #eef; /*url('images/lightbluetile.png');*/ font-weight: bold; - -moz-box-shadow: inset 0px 0px 1px 0px #002; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf; } div.messages span.error { @@ -462,7 +505,7 @@ div.messages li { table { border-collapse: collapse; width: 100%; - border: 1px solid #000022; + border: 1px solid #447; margin: 1px -15px 5px 0px; cell-padding: 1px; font-size: 7pt; @@ -483,12 +526,12 @@ table hr { th { padding: 6px 2px; color: #000; - background: #b4c8ff url('images/tabletitlelight.png') repeat-x; + background: #ddf url('images/header.png') center center repeat-x; text-align: center; font-size: 9pt; line-height: 110%; - border-bottom: 1px solid #001 !important; - border-top: 1px solid #001 !important; + border-bottom: 1px solid #447 !important; + border-top: 1px solid #447 !important; } tr { @@ -497,11 +540,11 @@ tr { } tr:nth-child(even) { - background: #99f url('images/tabletile.png') !important; + background: #eef; /*url('images/tabletile.png') !important;*/ } tr:nth-child(odd) { - background: #bbf url('images/tabletile_alt.png') !important; + background: #ddf; /*url('images/tabletile_alt.png') !important;*/ } /* tr:last-child { @@ -514,7 +557,7 @@ td { padding: 5px 3px; color: #000; vertical-align: middle; - border-top: 1px inset #001; + border-top: 1px inset #447; border-bottom: 1px outset #99f; } @@ -524,6 +567,15 @@ tt { padding: 1px 5px; } +div.main li { + text-align: left; + list-style: square; + margin: 2px 5px 0px 20px; + padding: 1px 10px 1px 10px; + line-height: 150%; + word-wrap: break-word; +} + div.main li { text-align: left; list-style: square; @@ -534,14 +586,14 @@ div.main li { } div.main li b { - color: #404 !important; - letter-spacing: 0.04em; + color: #700 !important; + letter-spacing: 0.02em; font-size: 9.5pt; - line-height: 200%; + line-height: 170%; } div.main li:first-child { - margin-top: 10px; + margin-top: 10px !important; } .tidylist { text-align: justify !important; @@ -555,6 +607,15 @@ div.main li:first-child { padding-bottom: 5px; } +.tidylist code { + text-align: left; + font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; + color: #390; + padding: 2px 3px; + background: #eeb; + font-weight: bold; +} + ol { margin: 1px 0 0 5px; @@ -572,15 +633,24 @@ code { font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; } + +code { + text-align: left; + font: 9pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; + color: #390; + padding: 2px 3px; + font-weight: bold; +} + a:link{ - color: #008; + color: #005; text-decoration: none; font-weight: bold; word-wrap: break-word; } a:visited{ - color: #004; + color: #309; text-decoration: none; font-weight: bold; } @@ -602,6 +672,7 @@ a:active{ padding-bottom: -2px; text-align: justify; line-height: 120% !important; + padding-right: -100px !important; } .links li:first-child { @@ -629,11 +700,11 @@ h1 { font: normal bold 16pt/120% "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; letter-spacing: 0.15em; text-transform: uppercase; - text-shadow: 0px 0px 1px rgba(0, 0, 148, 0.9); - -moz-box-shadow: inset 0px 0px 1px 0px #002; + text-shadow: 0px 0px 1px #77f;; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf; white-space: normal; - background: #ddddff url('images/lightbluetile.png'); - border: 1px solid #002; + background: #ddf url('images/header.png') center center repeat-x; + border: 1px solid #447; border-radius: 4px; -moz-border-radius: 4px; -khtml-border-radius: 4px; @@ -643,42 +714,43 @@ h2 { font-size: 12pt; color: #001; letter-spacing: 0.05em; - background: #ddf url('images/titletile.png'); + background: #ddf url('images/header.png') center center repeat-x; text-shadow: 0px 0px 1px rgba(0, 0, 64, 0.5); - padding: 7px 10px; + padding: 10px 10px; wordwrap: none; - border: 1px solid #002; + border: 1px solid #447; border-radius: 4px; -moz-border-radius: 4px; -khtml-border-radius: 4px; margin: 15px 0px 12px 0 !important; - -moz-box-shadow: inset 0px 0px 1px 0px #002; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf; word-wrap: break-word; + text-transform: uppercase; } h2 a:hover { text-shadow: 0px 0px 1px rgba(255, 255, 72, 0.9); border-bottom: 1px #ff6600; - border-bottom-style: solid; - border-bottom-color: #002; padding-bottom: 5px; } h3 { - border: 1px solid #002; - border-left: 5px solid #002; - padding: 3px 5px 3px 5px; + border: 1px solid #447; + border-left: 5px solid #447; + padding: 5px 5px 5px 5px; margin: 12px 0 12px 0; border-radius: 0 4px 4px 0; -moz-border-radius: 0 4px 4px 0; -khtml-border-radius: 0 4px 4px 0; - background: #eef; + background: #ddf url('images/header.png') center center repeat-x !important; + text-transform: uppercase; + text-shadow: 0px 0px 1px #77f; } h4 { border-bottom: 1px; border-bottom-style: solid; - border-bottom-color: #001; + border-bottom-color: #447; padding: 0 0 10px 0; margin: 5px 0 10px 0; font-size: 11pt; @@ -723,8 +795,8 @@ button:active{ } .langbox { - margin: 4px 10px 4px 5px; - padding: 5px 5px; + margin: 20px 10px 4px 5px; + padding: 8px 5px; color: #001; font-size: 7pt; width: 260px; @@ -733,13 +805,23 @@ button:active{ valign: middle; } +.langbox img { + opacity: 0.8; + -moz-box-shadow: 0 0 1px #447; +} + +.langbox img:hover { + opacity: 1; + -moz-box-shadow: 0 0 1px #f60; +} + input { background: #eef; color: #001; margin: 5px 10px 5px 10px; padding: 4px 2px; font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; - border: 1px solid #001; + border: 1px solid #447; text-decoration: none; min-width: 110px; } @@ -785,7 +867,7 @@ input[type=text] { margin: 5px 10px 5px 10px; padding: 4px 2px; font: bold 8pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; - border: 1px solid #001; + border: 1px solid #447; text-decoration: none; } @@ -796,7 +878,7 @@ submit { padding: 2px; font-family: "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; font-weight: bold; - border: 1px solid #001; + border: 1px solid #447; text-decoration: none; } @@ -809,7 +891,7 @@ select { color: #003; margin: 5px 10px 5px 10px; padding: 4px; - border: 1px solid #001; + border: 1px solid #447; min-width: 110px; font: 9pt "Lucida Sans Unicode", "Bitstream Vera Sans", Verdana, Tahoma, Helvetica, sans-serif; border-radius: 4px; @@ -829,7 +911,7 @@ textarea { font: 8pt "Lucida Console", "DejaVu Sans Mono", Courier, mono; min-height: 100px; min-width: 97%; - border: 1px solid #001; + border: 1px solid #447; } form {} @@ -843,7 +925,7 @@ form {} border-radius: 4px; -moz-border-radius: 4px; -khtml-border-radius: 4px; - border: 1px solid #001; + border: 1px solid #447; display: none; } @@ -852,18 +934,19 @@ form {} font-size: 8pt; font-color: #001 !important; text-align: center; - border: 1px solid #001 !important; + border: 1px solid #447 !important; border-top: 0 !important; margin: -5px 0 5px 0; padding: 7px; background: #bcf; -moz-box-shadow: inset 0px 0px 2px 1px #eef; } + /* .joblog { margin: 15px 0; padding: 10px 20px !important; - border: 1px solid #003; + border: 1px solid #447; background-color: #004; background: #ddf url('images/lightbluetile.png'); color: #001; @@ -871,7 +954,7 @@ form {} -moz-border-radius: 4px; -khtml-border-radius: 4px; text-align: justify; - -moz-box-shadow: inset 0px 0px 1px 0px #002; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf; overflow: auto; } @@ -889,18 +972,20 @@ form {} */ div.joblog { - margin: 15px 0; +/* margin: 15px 0; padding: 10px 20px !important; - border: 1px solid #003; + border: 1px solid #447; background-color: #004; - background: #ddf url('images/lightbluetile.png'); + background: #eef; /*url('images/lightbluetile.png') color: #001; border-radius: 4px; -moz-border-radius: 4px; -khtml-border-radius: 4px; text-align: justify; - -moz-box-shadow: inset 0px 0px 1px 0px #002; + -moz-box-shadow: inset 0px 0px 1px 1px #bbf;*/ overflow: auto; + border: 0; + margin-top: 5px; } div.joblog:ul { @@ -987,9 +1072,9 @@ div.joblog hr { } .tablefooter tr, .tablefooter td { - background: #b4c8ff url('images/tabletitlelight.png') repeat-x; - border-top: 1px solid #001; - border-bottom: 1px solid #001 !important; + background: #ddf url('images/header.png') center center repeat-x; + border-top: 1px solid #447; + border-bottom: 1px solid #447 !important; padding: 8px 2px !important; font-size: 7pt; line-height: 110%; diff --git a/installer/resources/themes/console/light/default.css b/installer/resources/themes/console/light/default.css index ab0e677bb..3dca407ce 100644 --- a/installer/resources/themes/console/light/default.css +++ b/installer/resources/themes/console/light/default.css @@ -3,7 +3,7 @@ body { padding: 0px; text-align: center; font-family: "Lucida Sans Unicode", Verdana, Helvetica, sans-serif; - background-color: #eef; + background: #eef url('images/snowcamo.png'); color: #001; font-size: 10pt; /* we've avoided Tantek Hacks so far, @@ -45,7 +45,7 @@ h4 { border: 1px solid #225; margin: 5px 0 15px 0; padding: 5px 10px; - background: #b4c8ff url(images/tabletitlelight.png) repeat-x; + background: #b4c8ff url(images/header_on.png) repeat-x center center; text-transform: uppercase; letter-spacing: 0.08em; -moz-box-shadow: inset 0px 0px 4px 0px #bbf; @@ -200,7 +200,7 @@ hr { -khtml-border-radius: 4px; border-radius: 4px; margin-top: 8px; - background: #bbf url(images/tabletitlelight.png) 0 0 repeat: x !important; + background: #bbf url(images/header_on.png) center center repeat:x !important; text-decoration: none; } @@ -218,6 +218,9 @@ hr { border: 1px solid #002; padding: 10px 20px; -moz-box-shadow: inset 0px 0px 1px 0px #002; + background: none repeat scroll 0 0 #EEEEFF; + border: 1px solid #444477; + color: #000011; } .panel .footer { @@ -262,6 +265,11 @@ hr { padding: 5px 20px 11px 10px; background: url(images/lightbluetile.png); -moz-box-shadow: inset 0px 0px 0px 1px #f00; + -moz-box-shadow: inset 0px 0px 1px 0px #002; + background: none repeat scroll 0 0 #EEEEFF; + border: 1px solid #444477; + color: #000011; + } #globalOperationsPanel .control { @@ -288,7 +296,7 @@ globalOperationsPanel .control:link { -khtml-border-radius: 4px; border-radius: 4px; margin-top: 8px; - background: url(images/tabletitlelight.png) 0 0 repeat: x !important; + background: url(images/header_on.png) 0 0 repeat: x !important; } @@ -307,7 +315,7 @@ globalOperationsPanel .control:visited { -khtml-border-radius: 4px; border-radius: 4px; margin-top: 8px; - background: url(images/tabletitlelight.png) 0 0 repeat: x !important; + background: url(images/header_on.png) 0 0 repeat: x !important; } globalOperationsPanel .control:hover { @@ -325,7 +333,7 @@ globalOperationsPanel .control:hover { -khtml-border-radius: 4px; border-radius: 4px; margin-top: 8px; - background: url(images/tabletitlelight.png) 0 0 repeat: x !important; + background: url(images/header_on.png) 0 0 repeat: x !important; } .header { -moz-border-radius: 4px; diff --git a/installer/resources/themes/console/light/i2ptunnel.css b/installer/resources/themes/console/light/i2ptunnel.css index d091a0e9b..172e5ce65 100644 --- a/installer/resources/themes/console/light/i2ptunnel.css +++ b/installer/resources/themes/console/light/i2ptunnel.css @@ -90,7 +90,7 @@ font-size: 9pt !important; font-weight: bold; text-align: justify !important; - background: #ddf url(images/tabletile.png); + background: #ddf; /*url(images/tabletile.png);*/ } #tunnelListPage .footer .control { diff --git a/installer/resources/themes/console/light/images/darkbluetile.png b/installer/resources/themes/console/light/images/darkbluetile.png deleted file mode 100644 index 89df70b960574329efe68890e5c3303e8bbefef4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 298 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5mnSp^(qp;Z;$T0};32|j$aA9BwVPJ4(U;wgB z7#Kns7>pShOc@y57#N%w7=lAsHv;8CSvEEUIcyu7+_yLqo%#Z&P-jdu<=KCSqgK(JoQ#FuVOmV)HkM%8O!vsn4d? oo~T{;OkH}&M2EM}}%y>M1MG6B0 zYnP{sV@SoEx3^CgMW+h1J+$jOd}tCgr?bohxrhegIh6^=ryZy@nB2{5WN0~^@tBWm zVBw|$q3*@;sjkz`6-qDO6#MjfbjjAW*B0L0QyI$VDyn|3YemwGe;aQ8`c!HBFZJ>2 zQ1vts{!a>Ev|#V@tp73De*&^=zkc|eA@{@)gi2WCP5#7muROoMarVa?L#ynKmT~^> z&%fWOS-W(f)LeV7zs6?qGgs-mKVSc?O3SML__LEIZ`n(R#>RKOn*U<|jUa!QuLi%k zb+?LNt*UeX93+ zm(KUcq1~1^6PK>E>$|LPa@Akz)uRn^_gBp~ySj7jugG9qv8&JDZWX>NZhcLk-Bc}W zYv}&073pnT{{`l6z4GwP+G)3H<}Q=g^}Dm;qt)@vuiq3bKKFlj;N?=W%db<+odlW$ zS`=6mIUG3#1@i(Arh*UPuvzwy4#->F9S7uQeQH?Pv{n!T=Z`0`&5 z&xGs`__aeyx-|aT?B7+-qH=1k+_RtgYW?)@*Z%77ex0B4H!FC5;I|rmvpl~qS0C_S z{?mUky7PE?^52}`dcAAYqkdIAYk#)yckLIsBa4sKsmkq@e*JvW@4FH8`_Jf1pZT%Q zVzbSU=Y02m2isWf|N1u&C>*0|_yz$JP?3eGS{q#<)TLg6B^qJPWf8QF_FFnJ* z-~Qr$;k~;r>i#{vG-8MGi|eP)9D4g=-Igz3&s;tDS$tpa%l(?4ub=wk5`R7>|7AYU zx0|{9gYHFtk9Yrm@Eg!`)mOrqna_&N{n_Mg>}I{dxc4H*T+WzVzy2P{keMs8c C)HkaD literal 0 HcmV?d00001 diff --git a/installer/resources/themes/console/light/images/header_on.png b/installer/resources/themes/console/light/images/header_on.png new file mode 100644 index 0000000000000000000000000000000000000000..8137db9ae1fa1107abbb18cc8492843b7489af33 GIT binary patch literal 193 zcmeAS@N?(olHy`uVBq!ia0vp^%s_mTg9%7xy_a1Gq&N#aB8wRq_zr_Gy$<;xy@Mew_a*y zPdNMO`lwbZCwAK;wwq>bHj15Rb+>p6UNM__V}go+Q_q$ndC7H2Dt@w)`qsz)cZig? n`zI4|y?>KiHt00009a7bBm000id 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 UrmNRNQ2+n{07*qoM6N<$f)~s|M*si- diff --git a/installer/resources/themes/console/light/images/lightbluetile.png b/installer/resources/themes/console/light/images/lightbluetile.png deleted file mode 100644 index 53f9d54deaaa6cc333aca3c07e71848e26f5d2b0..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3486 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 fN8k0?++?ap?AKg@mOq``P$!{ diff --git a/installer/resources/themes/console/light/images/sandtile.png b/installer/resources/themes/console/light/images/sandtile.png deleted file mode 100644 index 4d88cb84740316d941ccd5b6a5ef0de5ccf4e519..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1392 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5kiGhJJ)Rr?I$l)yTh%9Dc;5!V$jK}j=q%bhB zDtWp%hE&XXd-rT!bgD?}!{R%Oj;-VB^mI^qcxpxgFV7B}WhD`Y$v#ak8FK@!Sa59E zIJxcE%DEfn%-p}Hl-s$(x zueT|ge*cl|u_(_qQ;%RLy4GF&_v3E($7{x~8=K`Mqna|1MtoJmY`Gj_p6+ z-MK3xJ7=!FJpcZPQnA01*LpTJX=r!QpYZto=%=}_an`JdwsWF=i?8@>pY`oi2 z|NHU&=+8GlXFqrUYu=v!{NLiAb044lGq3w+%7)^q-IWDJJ2oEsQ}Vpz@vNWM)i=+b zpEp0xCT)pOjKLbN9%uzhRqp|*=-$Y+;BW*`QRzpZiljA65L3f=M~$Iw*vNNm{KvRe XQLsMVu_G2(gfe)#`njxgN@xNAZith+ diff --git a/installer/resources/themes/console/light/images/snowcamo.png b/installer/resources/themes/console/light/images/snowcamo.png new file mode 100644 index 0000000000000000000000000000000000000000..4c645d52e207b79f5f89b8666f2ff25317894caa GIT binary patch literal 2276 zcmVG1LN?C$aC>Fnz3?)LZl000000000000000000000000000000sHx6=00009 za7bBm000id000id0mpBsWB>pNT1iAfRCt`N8p)R1C=dpveMQf9pYw?2v)qz3S1*#z z6WQ{){hfR3CNwE`%PyvN1SxRu{!I z741jeFdi&3n5f2&J5^=T?&)I!W2=w6u-zsMR%N>x!0lB!FoLdiU5K#Qnk4#8?OU?mi__FZJq6Dm-fA9WtIgg6o0TtqIy zG3BTll*XL?`3(rmIqMHWRgtuP`ENUXcE)^t9Gy^SWWO@TEIa^IU_0u$9;z?U^NAu9 zy6p(yi>pivD>qf!7Rxp)v%bGNIXR)ItH;>&UR26)zFBzbf;9QdDk>`Dcj)UdNJc6d zob1Di67vp!9fH?oC?P0w0}E1a&Fe*=VCu|kwd%P;?H6;dsP6EfisvQ%ZS7F=BLJ^0 z(&@?$r61=4Ms+u{&DS z8^V7KFybHfGFFFPm^@o{m(X;?ppw}5x(rDdf$RzVb__-WGXe`83Y*h!ErwZKJggfB z6^~64e9!&o(4e2d0Q>3dma1HMCo)4SMnocAGPQk6{7py9&L~sTWVe3?zc_nMa`XguOKrDt9jJk3_fA-44oqwzla#fy z!>}aAupLc#DK{MW^X{?RnO1~Go$?TDe@U}nO?J{^B3r8>)!{Dg(?JW~OuxX`(He~s~Umf!)(A62M!2-x`yTOe%R}JXO&bSrk;8!d+REu`=(wV--28tG6 zOlXZ~<1KE&bY&hYotJG$5J1Dp>(Yx^27KF@2OlsG9W>w}`XrB5eRi##j|G;8J^wNk z>c!;WDL1^D?}0|XIg;3Jn%f24Hm^v6KZ9_EB9)!g%VwLLZ)^Afw{Pxa~WW#t6-1hy7z^WURi>kM)n4PZslr(Juwgn__(-h5W z{SAA3!H}ex44@ZSvtsb>FpB5xR#dQB2@_4ICrotUp5*b6RpuKm_fC3!W<1EzN7pa~ z*dXY#h2VP7sT>@^Utu^cA%imSn(&P1At1m8)dT8Gwv{Q*gPsH?$_53&d9qc?o)T z=*icwM;0(!1XRdEJ$4?P94LZZO#@Kk^o+shcTyGhxJgFt#80id4H3ew?llY3tKG;# zUlzeK@gDv1-x-+_hncw|jM#MjX#VBa8l zZ7^yY1_=U#50@N809*uMXe_~R9cC|XJ%oREl*0-sfI$^7=;|NQpY}57sroHT2P=xv5L+PbLvI{}#7t}ztTvQj!p9#lJ@-eBNZ7dZMX2!k~A9Vpw z`M2;^Y!P7%Jh;5|)|h6<;q}t$MoIjZs_$*&EO4gXV#7FVF^B^YB^T0jN}bh>BF4^; zyOt$HQza! zXYLh8&<-b0Ooy%&P}!&tF;b?=1^E(cbLckjZNnM^L*gR)+I*9+m?g>k)c3eEkuI&> zWvI5CX-EOYQ^KsQdzR+~fvt!e5UlEm4efqfw#c*EibXXP|6I;<-cVNc?}ZyQYPSy{ z3Rb0OB$%m_l-DM2fAIfxlZQeU51zKt)#V;G2)PlzDygWx66^9`LBZ6Tu{W~WF_AdZ zWUV@yXvkH=>=slrdD>#`?fA;>I+)ogYMjVz)MRTm9*p7~G7P&plJ+bB1aH{0pkGUK zuw0tRqQOjOuLJNo2|xXC+u;CTph;Phsr zpojFZ{&EFuBTP0EkgSiGYZDNZo*&N*c43~Uy09}C`d6QUxGgR#c=D)biQU0Si!`M7 z)x@00ugr3bQ=c7;3#_WKTdLHqWrJ#DVds%@yMrvwB)SWS)*&ztU`^!h1w}YpGyb%M z3z{(zqzar-%k(LyV(^N<7SB4n473XJ9g2?0tT8~Za_@5m2zAr;I)E`wmMa(}?YTh2 ziJ~pdm1xZVtoWlTWHeigX8qCpQ8W)JV)^WtQH0Cq#4=<=N3P|7d%WXuG3$`?Xj*$Y^`oXuIrykDuH34<*`3M6|P!Xs0#N&X1yHWKfGO!b>AQD1wynp5wTurM0+<9?IlaJw>8mT`w%U0 y-XDo5FQTHo(TeqIEZRG^XfNxcz4eRr`tX0rZ%PhC%`uGt0000;OkH}&M2EM}}%y>M1MG6B0 z^HWb3$B>FSZ*QK?6Lyqvc{uMutGUA@c7{X0_Y0}?9pQ6q=oRN{lgx9HTHTRr`L}z$ z*y3p$t)4!55fRvS^>^;A8m?ui&J5RXk-LgOY=ld<@{a2#;<<=4*%c^((_J0*) zZk5nD;-JXJWf;)W=)@zEv_OD%LT%;WZ-32=-j`uNfAzMS$|cWNZ`*hCb>-b@;qF!Y z@?LNMZMR(d+`p*j+nP)BtfHR(7Ix%t5@-@=QD9NzKw(yW=|vX(@2vUle_y?NV?y56qIoZX-M>`$eY{p-gyH_hfR`~3Ok z*Wh{Ymwm33e}4L-!94wC*ZnL18C;V%|NL?H;-<1im(|^tyD#_e@#{bL{&UMY{vL@H z3RXNv93W_^VUhwH1ZlPNF&heiQ9x#oL`Ne8omzMps+K22N*Ss)X+hBo1BhAy=BdYE nY9&_4j2aCJkQMyQwam|2^S<1;OkH}&M2EM}}%y>M1MG6B0 zi>#-MV@SoEw|DP)O$n4~{rLA>hme-(R}nwq)+K)9vm`E8ac5UAWuw?pFE#`~IHX`{C5u$BO)wC!FOzU3m3!+P{5f z?`PjqlLiY+Xt&u?mG`k$cmG7Y4G*Fp-pP4md^<$MD^SCAp-5{G8e_`4v)jM^i}`l` z{l0&Vs`K|3b8Ajn6wu|Q$+c92c*f=Z`qtIg%i^}woqPWF&EGdRIo9l-&$F|?{j(ug z-)jEW&-|M|C*Q8y_4D(&+N1BHctnyG2r#!wXdH1+WaBan=xB7JozTlT+1}kZ?VBvV z=XBS_O7DWz64kx-ZuY7kyw>6}H!OQ>p+qPbJQ-Awt3Geq?LElfN ze!6@zb<3x}J9_Q5uKjCPbLnzz`L*XI*V21`CzSv4jGgCazjEpO{`Bwqn}09<_wM-H zPubG%wjVsK`tI)Q#UHs|#N0J+;OkL~Z#!R`T+({fOTtiq*)SlpN1~$@i-r>p<~ diff --git a/installer/resources/themes/console/light/images/tabletilelighter.png b/installer/resources/themes/console/light/images/tabletilelighter.png deleted file mode 100644 index 5586bb0635f0adfd89b8898a6e29a60833c7afe7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1184 zcmeAS@N?(olHy`uVBq!ia0vp^CqS5kiGhJJ)Rr?I$l)yTh%9Dc;5!V$jK}j=q%bhB z1bMnRhE&XXd&@IVI8lK0LDpLE*|F&$sL*ZxPX^s`)L(J9gYnN8+z{wX)xW!rX?#y`t_YI?5(k1>H1Ra--}jz>m470H&sk8uLPsN`tM)WtpBR_{u3BQ zz21H9Z(Q{|^_b`4(Z7_#f2yuCxaO6#Rs}n8=|$At*H8cbn)O%q`>o6`QP@@C)Q%#t zxxQ95ly`O5r#W>~AMbp=9A1mFiZAhzMl+IN$#K{MGZN!p|Nq4$sdo{aO)FziMAkcJk-vg?Hns{{79b z+mx~I^7;L@=GphYewX_BcwJr9zdxJjzrWiuGvbJn*v4BIIwE+_f><3_+uXpkt4@+& zH(0U*FZ0$mha*`fYCxT?Ys^eQCg4?$tl-)*0|-cF$Vw&pf=Tz%mK_Fry>3z7Z=JA6$px62y0ba2RIIV_k diff --git a/installer/resources/themes/console/light/images/titletile.png b/installer/resources/themes/console/light/images/titletile.png deleted file mode 100644 index beb9552baa136d485fa1be4468e6d78652f23f10..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1112 zcmeAS@N?(olHy`uVBq!ia0vp^ogmD?#K6G#z;O=;ki%Kv5n0T@z;_sg8IR|$NMT@L z;qr8G45^s&c20Kw6&rz8+q^Q>2mk*YJ*dqLWf4+foWC&kZC*}}`cm<-?K@2^r=;8Y z%r~2U^2d)GH@()@{@7ONt}JIAkh`8wcJt%yTIH)>eK_vJ2SdvZMmy93x!V4s) z+b%zy)3BRAa`*Q2i><$%&7I4*OwNcW=CJ9j>o<-rf6X}kZuc>-<#T7nguj=we!oGz zI)8tr?~DDZ{9TRR%2QXksA>gzt_Z41uH7MQw{5AdT>U%et9jPH*2ymF`l^%qY4sPL z)U=h8cE2pRcEWw*&Sxg68qSiZ0@{qGEaU+)XVxW7k6(BC`GFr_D*INvs$C`Oee~ka z+84<`I~Vsviyk_e{$lp@-Wm2U&KX=zo0GqDuHWXTDep|wpG$1F-rpfnyuNU;;lrHy z@2_WnX8D`JP6Rq${Q9_E&Hkc?XMX;=n6t0%(a%qxkNtemRL^#^UEMQ@Kui=LyQ|K#`mo9geQ3O^j$dFJ=T%9nC=&o9nh(qp92 zY^1Td#!YgHBO02y)EZp~q@vL;fGrgb{VPm;^LKe~=(#Y(ce?L#RDOqYBv+)r4EtX3 zw8nHs@;~hPW4~hw$iw{Y(-M%(`07-4Ek>(en_B_pyJeW#6MJp8Gw` zd;i)0KDPdJ`mIOJJ1cMRGd;wAWBy*Qb1^rK?-;$|vi`vrowk38R$zjNiRJnnx%(bQ z`!1%|EI$3iZTiPvy~onA$IN&2@b(FRuUq diff --git a/installer/resources/themes/console/light/images/warning.png b/installer/resources/themes/console/light/images/warning.png index c2b7e8c098c275410860bf6ac25743c25c8b782d..1996633119255a30205d59c672f3c02733a5bba5 100644 GIT binary patch delta 1046 zcmV+x1nK*u2Av2YiBL{Q4GJ0x0000DNk~Le0000N0000M2nGNE04sI}1(6{ae*@1+ zL_t(|oUN2?Xj^3z$Io+fZ|>dAO_SI(O=6ODZDy6t`PNb=A`>U8mNu5$l+?wys^%m-H=ZnwOj2-1o=l-nN=0Wp>!} zA@@G#p67SY`Jd+rz#Z6u1m1fmfAQ2t1NZbv5y0l@!`E?S)8Qc>dz96*KsqlU-c z{F#!$DX{QxjD?^Jk%*eiVsBDEpPwpxPVerZe>{6eY#AKYpNMYt2|Mcn8u^OWh;W<( zpuEaJ4hmWu91yUnTv0Hyz3|XOBcq}x%1MC(sa7hpt)_X zdKbiEZn)o1&Nn$Dq-c;y^#c=%-9>AN1)c~xMg$ld&Os_M1;v>>Fh+UYeNUwOX!p)9 zx)3tg(%T7odW{#v8`GUSayHvFQ50}K9=0~s!4A? zcY=Dep`-PKm)~hRWr6?gsUpF*7u4s((V6!&#Ku<=AYk1b(7Y4!6IsY7mq5--ph+r` z8?S*!{O#M{PaSLi5)k@l2)Dp3!x*FX3&z26w(zMh=;817QXnt@zh9k&;a} r6I< za)MsgK*~xWXN#h*e>Hey?s)ukCD@)i#5WA>KshOF7LnC42c6pdOo40qQHe~%hu-vSxl&ECIkpA)IG z9Fo6gK%KYNYDob@HS8-yPF35+;9Y$*Ieu-qj0A~`lR&FdhI442xZ}~cwmcAj&D_Gj z$%1^6F_k5yPzF;oiGZlx+EO2xTf$A4|asVx%6zHv>Ni2 z|D%!baKXInY*fX)h6o3kIzALo{q}}zcSMXmOEB7oW#mf&p|Ja%S{odTAs+h%N z_gd3E73rGpk>z4Pl8xO691Tzfud&#P$wzjb6$7^os^=se*)D> zL_t(|oMls8NK;`Le$P2`JI6VHmX$4X_5+EnvNr!E=Y^7?BqX@RSS4NAZiLD%3>!*; z5Lhs%MuJ^P2&KAH3&TvADW&LQ?&qBI^_|aiPG|0c@xAB$dA|33-fsW| z4(HAZXF34v2%i?&;kW==P~+nWe?bya&7#`cZp3jFi`rZ3 z{QmDMmDHwAx7uSCkL zp;SI_>Hz+h00_9t&mVTnDMQ+5%w;g>TM(j7#bQy@j!ulA*Xvgzk;oHVG6)bz5K<;7 z+0QWOvCUR^sjKTDlaY}{yh}@q5Q&7rVmTzq0>R)Cba&r^<>jASfAM&%7U1KQOmg}l z%ce~)S}yxu!7J3F(@^RarY#~WE#Eu?o4s^>WN9?y#fcmoC{!m`{N&kKV*AAO38=e1S; Y0R0ytzM6kH&j0`b07*qoM6N<$g3Y~riU0rr From f12556714af5e3028960f90b11b981d3847d969b Mon Sep 17 00:00:00 2001 From: z3d Date: Mon, 29 Nov 2010 18:18:38 +0000 Subject: [PATCH 19/21] -16 --- history.txt | 3 +++ router/java/src/net/i2p/router/RouterVersion.java | 2 +- 2 files changed, 4 insertions(+), 1 deletion(-) diff --git a/history.txt b/history.txt index d0fc2aba1..84b9cb95c 100644 --- a/history.txt +++ b/history.txt @@ -1,3 +1,6 @@ +20-11-29 dr|z3d + * Updated console theme "light". + 2010-11-29 zzz * i2psnark: - Don't timeout queued piece messages diff --git a/router/java/src/net/i2p/router/RouterVersion.java b/router/java/src/net/i2p/router/RouterVersion.java index ea17ad55f..e1f87e077 100644 --- a/router/java/src/net/i2p/router/RouterVersion.java +++ b/router/java/src/net/i2p/router/RouterVersion.java @@ -18,7 +18,7 @@ public class RouterVersion { /** deprecated */ public final static String ID = "Monotone"; public final static String VERSION = CoreVersion.VERSION; - public final static long BUILD = 15; + public final static long BUILD = 16; /** for example "-test" */ public final static String EXTRA = ""; From 29807946454b59c7b8026e4e236ab3536805964a Mon Sep 17 00:00:00 2001 From: z3d Date: Mon, 29 Nov 2010 19:55:18 +0000 Subject: [PATCH 20/21] Console translation (fr): s/I2P Configuration Interne/Configuration (sidebar). --- apps/routerconsole/locale/messages_fr.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/routerconsole/locale/messages_fr.po b/apps/routerconsole/locale/messages_fr.po index a779abf81..47ba8991a 100644 --- a/apps/routerconsole/locale/messages_fr.po +++ b/apps/routerconsole/locale/messages_fr.po @@ -3292,7 +3292,7 @@ msgstr "I2P Routeur Configuration" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:93 msgid "I2P Internals" -msgstr "I2P Configuration Interne" +msgstr "Configuration" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:99 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:379 From 59b53eb6f502dfe0fcdc70c7aa7f3d8b6d18c7b2 Mon Sep 17 00:00:00 2001 From: z3d Date: Mon, 29 Nov 2010 20:08:27 +0000 Subject: [PATCH 21/21] Console translation (de): s/Router-Einstellungen/Einstellungen (sidepanel). --- apps/routerconsole/locale/messages_de.po | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/apps/routerconsole/locale/messages_de.po b/apps/routerconsole/locale/messages_de.po index 873ab0924..c8fc40627 100644 --- a/apps/routerconsole/locale/messages_de.po +++ b/apps/routerconsole/locale/messages_de.po @@ -3250,7 +3250,7 @@ msgstr "Konfiguration des I2P-Routers" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:93 msgid "I2P Internals" -msgstr "Router-Einstellungen" +msgstr "Einstellungen" #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:99 #: ../java/src/net/i2p/router/web/SummaryBarRenderer.java:379