From 2e0a6fc6f57e1f779db3057aa4023ae4eee253b3 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Sat, 15 Dec 2012 21:25:50 +0800 Subject: [PATCH] almost works --- .gitignore | 21 + AndroidManifest.xml | 51 ++ assets/iptables | Bin 0 -> 198652 bytes assets/pdnsd | Bin 0 -> 153256 bytes assets/pdnsd.conf | 43 + assets/redsocks | Bin 0 -> 130276 bytes assets/shadowsocks | Bin 0 -> 42312 bytes jni/Android.mk | 26 +- jni/pdnsd/conff.c | 29 - jni/pdnsd/config.h | 16 +- jni/pdnsd/main.c | 4 +- jni/shadowsocks/local.c | 798 +++++++++--------- jni/termExec.cpp | 400 +++++++++ pom.xml | 222 +++++ res/drawable-hdpi-v11/ic_stat_gaeproxy.png | Bin 0 -> 654 bytes res/drawable-hdpi-v9/ic_stat_gaeproxy.png | Bin 0 -> 647 bytes res/drawable-hdpi/ic_stat_gaeproxy.png | Bin 0 -> 1155 bytes res/drawable-hdpi/icon.png | Bin 0 -> 8801 bytes res/drawable-hdpi/ing.png | Bin 0 -> 10146 bytes res/drawable-hdpi/off.png | Bin 0 -> 8518 bytes res/drawable-hdpi/on.png | Bin 0 -> 9820 bytes res/drawable-ldpi-v11/ic_stat_gaeproxy.png | Bin 0 -> 322 bytes res/drawable-ldpi-v9/ic_stat_gaeproxy.png | Bin 0 -> 303 bytes res/drawable-ldpi/ic_stat_gaeproxy.png | Bin 0 -> 573 bytes res/drawable-ldpi/icon.png | Bin 0 -> 3139 bytes res/drawable-ldpi/ing.png | Bin 0 -> 5157 bytes res/drawable-ldpi/off.png | Bin 0 -> 4744 bytes res/drawable-ldpi/on.png | Bin 0 -> 5063 bytes res/drawable-mdpi-v11/ic_stat_gaeproxy.png | Bin 0 -> 435 bytes res/drawable-mdpi-v9/ic_stat_gaeproxy.png | Bin 0 -> 407 bytes res/drawable-mdpi/ic_stat_gaeproxy.png | Bin 0 -> 769 bytes res/drawable-mdpi/icon.png | Bin 0 -> 4766 bytes res/drawable-mdpi/ing.png | Bin 0 -> 7267 bytes res/drawable-mdpi/off.png | Bin 0 -> 6213 bytes res/drawable-mdpi/on.png | Bin 0 -> 7054 bytes res/drawable-xhdpi-v11/ic_stat_gaeproxy.png | Bin 0 -> 842 bytes res/drawable-xhdpi-v9/ic_stat_gaeproxy.png | Bin 0 -> 824 bytes res/drawable-xhdpi/ic_stat_gaeproxy.png | Bin 0 -> 1614 bytes res/layout/gaeproxy_appwidget.xml | 8 + res/layout/layout_apps.xml | 10 + res/layout/layout_apps_item.xml | 18 + res/layout/layout_progress_bar.xml | 17 + res/layout/main.xml | 16 + res/layout/overlay.xml | 6 + res/values-zh/strings.xml | 537 ++++++++++++ res/values/analytics.xml | 11 + res/values/colors.xml | 26 + res/values/strings.xml | 169 ++++ res/values/styles.xml | 48 ++ res/xml/shadowsocks_preference.xml | 71 ++ src/com/github/shadowsocks/AppManager.java | 416 +++++++++ src/com/github/shadowsocks/Exec.java | 69 ++ src/com/github/shadowsocks/ImageLoader.java | 215 +++++ .../shadowsocks/ImageLoaderFactory.java | 50 ++ src/com/github/shadowsocks/ProxyedApp.java | 96 +++ src/com/github/shadowsocks/Shadowsocks.java | 639 ++++++++++++++ .../shadowsocks/ShadowsocksApplication.java | 13 + .../shadowsocks/ShadowsocksService.java | 575 +++++++++++++ src/com/github/shadowsocks/Utils.java | 427 ++++++++++ travis.keystore | Bin 0 -> 2261 bytes 60 files changed, 4614 insertions(+), 433 deletions(-) create mode 100644 .gitignore create mode 100755 AndroidManifest.xml create mode 100644 assets/iptables create mode 100755 assets/pdnsd create mode 100644 assets/pdnsd.conf create mode 100755 assets/redsocks create mode 100755 assets/shadowsocks create mode 100644 jni/termExec.cpp create mode 100755 pom.xml create mode 100755 res/drawable-hdpi-v11/ic_stat_gaeproxy.png create mode 100755 res/drawable-hdpi-v9/ic_stat_gaeproxy.png create mode 100755 res/drawable-hdpi/ic_stat_gaeproxy.png create mode 100644 res/drawable-hdpi/icon.png create mode 100644 res/drawable-hdpi/ing.png create mode 100644 res/drawable-hdpi/off.png create mode 100644 res/drawable-hdpi/on.png create mode 100755 res/drawable-ldpi-v11/ic_stat_gaeproxy.png create mode 100755 res/drawable-ldpi-v9/ic_stat_gaeproxy.png create mode 100755 res/drawable-ldpi/ic_stat_gaeproxy.png create mode 100644 res/drawable-ldpi/icon.png create mode 100644 res/drawable-ldpi/ing.png create mode 100644 res/drawable-ldpi/off.png create mode 100644 res/drawable-ldpi/on.png create mode 100755 res/drawable-mdpi-v11/ic_stat_gaeproxy.png create mode 100755 res/drawable-mdpi-v9/ic_stat_gaeproxy.png create mode 100755 res/drawable-mdpi/ic_stat_gaeproxy.png create mode 100644 res/drawable-mdpi/icon.png create mode 100644 res/drawable-mdpi/ing.png create mode 100644 res/drawable-mdpi/off.png create mode 100644 res/drawable-mdpi/on.png create mode 100755 res/drawable-xhdpi-v11/ic_stat_gaeproxy.png create mode 100755 res/drawable-xhdpi-v9/ic_stat_gaeproxy.png create mode 100755 res/drawable-xhdpi/ic_stat_gaeproxy.png create mode 100644 res/layout/gaeproxy_appwidget.xml create mode 100644 res/layout/layout_apps.xml create mode 100644 res/layout/layout_apps_item.xml create mode 100644 res/layout/layout_progress_bar.xml create mode 100755 res/layout/main.xml create mode 100644 res/layout/overlay.xml create mode 100755 res/values-zh/strings.xml create mode 100755 res/values/analytics.xml create mode 100644 res/values/colors.xml create mode 100755 res/values/strings.xml create mode 100755 res/values/styles.xml create mode 100755 res/xml/shadowsocks_preference.xml create mode 100755 src/com/github/shadowsocks/AppManager.java create mode 100755 src/com/github/shadowsocks/Exec.java create mode 100755 src/com/github/shadowsocks/ImageLoader.java create mode 100755 src/com/github/shadowsocks/ImageLoaderFactory.java create mode 100755 src/com/github/shadowsocks/ProxyedApp.java create mode 100644 src/com/github/shadowsocks/Shadowsocks.java create mode 100755 src/com/github/shadowsocks/ShadowsocksApplication.java create mode 100755 src/com/github/shadowsocks/ShadowsocksService.java create mode 100755 src/com/github/shadowsocks/Utils.java create mode 100755 travis.keystore diff --git a/.gitignore b/.gitignore new file mode 100644 index 00000000..206bda08 --- /dev/null +++ b/.gitignore @@ -0,0 +1,21 @@ +classes +bin +gen +obj +target +local.properties +.classpath +.project +.settings +tests/bin +tests/gen +tests/local.properties +NUL +libs + +#Intellij IDEA +*.iml +*.ipr +*.iws +.idea/ +out/ diff --git a/AndroidManifest.xml b/AndroidManifest.xml new file mode 100755 index 00000000..1f75f8a2 --- /dev/null +++ b/AndroidManifest.xml @@ -0,0 +1,51 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/assets/iptables b/assets/iptables new file mode 100644 index 0000000000000000000000000000000000000000..7268216cba6338ad86cbfdf3557f471a3c60d7a6 GIT binary patch literal 198652 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 literal 0 HcmV?d00001 diff --git a/assets/pdnsd b/assets/pdnsd new file mode 100755 index 0000000000000000000000000000000000000000..43b80fd8766ef53174f81c789a34124540cc9c4b GIT binary patch literal 153256 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 Xuh$lgv3~BX4sB1TU@q7|74BazG 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

B=W9) znD@Z{nD<8R7yc)-_zl`n{7!8+erpw!26@>d_`O&j|E~!s0Q3Re=RS)6 z+XHkHVLt_}#k(gF-x%P>i2o<}HGl-TMZ$kK(hxxy^TdI)mf*L;+{qX2lQBl8fN(oN92bN^`J|(DBgJ{erwEDI9<6?!<4Zbu6CD&mD(z@kDwmPIP^^r|X(~ zdjDe%f9$4pITSgh>l0?E`~RsXZQTQ_)6@1@!uvND2)sG{X0T&h*9i2}H-hnhy@Gxi zLde@76Mk3w3&^=4=)?Gp?jWEF?jHo<|3Co+fg14}-6bF`ND4qd2I)ZC(2u{wu(&uF z{TOj?20n#%V}Rz~{{H_fed>qb;BrKET~PhOYp7SS(pOoen6LO&;jOsN4eF=={=$iz zL0&ogolo~nCeavq)9XhwA$h91TT8@`%*?<+#Q_rE{;^lCkTC;GI zs?YiVGWI2KOHwVjAdL2MhKcF@{3xU^_( zi%VyKs0E^3blM_x9J|ff)=q8hbgW$_v9<$hXM!w2tu|Aamp%XQeF;yj{mtKxpKEyU z-goYL&OPVcbI%#+g!eNKHIdA7rB@2APJjz|jrG(7$Iz2q<%FLOx6H$i{fZ*r7)EyNjGrxEz>}ZYaoDFBMQ4)UeC;iPf3+pl z`m$egGNfHLR}kYU`@lN+N^lMD`l1=0M)9^aZ## z+#9M=3C{s6c*Ot9cE;RRJFA6uUiXF8Bdjh4Mqlh`aOW|3xx|ZO3da8kJQ!{DAI40P zyI50;r`|OF8Ls=-^ipG$hfDI2S^U{0!ac|hRVr8kkvaH}o8UXa^*rXIGGIUOeLQox z0t!QB10cWT8(5uVoTEakGu~N`6V4-wbodmBcFYRlyvw69!ZsUvq87#erF1sY6N%sh zif$C`G*&HUKQK@#+f8UmdTzB8$noBiP;MBx{D0_{2-v+~guS zeiAsYhi+@Z1F%hiJfDa&tQ-AU@219l%YIZwrJZ08SClh>oF;YD$=Z~yRKDVH+4~jg zjGH@oKDYl9Q z@iN=*eTSX6tITsmj!}r zA{8e`QH~jW3&f5r7uE#U8}vueL!A`X1+3u(2_Psb7Gr#}`0=5vzwHa|5MqZ2`!Ghl ze6Y++N+yL$s`~~;W<7SNLbOYb8KfQm^tbaAk9HjKFJZeCiD=dOvM9$-eljv*#|h^$ zwtN}UYKB{CDl(XpitV8lI~>-*yj&{Cu%y23kc=)DT6Q;hm|ttzH=&Z(dd0@984=i3 z#Ev9)4enMHCDdRYy19e>kcVQXF+;1xQ46ar)na)*YpV8C-Ovh<8rwo}tbjvyOR?j^ z|1lQ3LM4w3s_}EzbmsjELYp^uXRIRU*kVVUs|NL|*~r!6DBWtYeEaI-t8eY;qakR! zgnDcLk9rq}O4bglcd1ZszEE%eK)q{F?;6y*=J=Xh>&*^9TP)N&;{T{OIaE?RsNSEQ z1O1f<^?vUR_4hH<`xxqd?D%81)_Xl9hbIg5zKK2k*JidWR8l6?D{?Ff4Agtv6C7ue zV`_lZD@u)Ai+b0h-nC2EVL3|@j<2On6i*AKDTEfnE{~k+T8{J>dkKBJfq%oD{~P~K zxyimxJC^#s3$5}Z-vC8UVO-qKp9tqcJ1+U;%JHDlF0PThIV*CEbH}O}=sN~l5^Tro zd^?OixxE8zpdH@^{&yQ1-2*fz!S`;621tDk0u7q(3(}yK-e1c4WOdI7jpd4-0bWpj zv-Sfz0a9*UsNB6M7sMtJ^i@>q`xP#DHmn~*Nmfzfs0|6_)%%T9jIvsc{U;nAdrm0! zE6m3EpgJzAIQzyfG$b_g6M2ml;UhojiAvkgKG8EkZ#RJB4bod<71;y5*aMl+c#jLz zgvR@y{yNar_Z8DYR|uAMf~u08BiH4rf)B)cqO%BU_((549`|;;gPbGn`1`Nu z_(<7<-T}_h&;2zJ;5NEvg40Xq^^ncs3QJ0epN-_XKic8*5iQiG;Dm;&e})#yVVO81 z30C`rpQRm_ectjL^SH5mV1K{Sw}Y;Mc|7b_hvu==U!S&;%1a=$d_!rJW05yFmk$wY zp2pKmL+T)!ISls3F79ua!baU`se$bVS#dvJTFf4YMFnkf!3$pr``tsHs@1ry5Zu)U zMp?xW$>JnMM!CWzVM_UR{g{8WZV&cb+L7ePz1rUeq10U>+BFxKeYu2B?U{_b*giVJXK%a0|+!pjftt&VqYxx$w+53NEBJSSfa!X9G94x2Y+I!>yTpx+zIeO!NFF#2ITXQ1yiv>l}Hq~}!X#&Q?#M1aPk&V9GkIUdwGxCg>thd;=3yykfzvXl;`r5zW%kvzPoeInfL zUdFbUda4%o+`5kq9+P5WOcr_W3XO@^jh&vK89daaGDkvdz2rg`*1Br72fhP)AUy{;9NIAtyw~6v+IazcDaIhcS)unLdsEZ` z+)pZjz3sdKotHReA4WS4x_^-)-}C?1hKL+9z4TPF3y2(W%&N<)>einDPoc4Hth}42 zJQqNBg0c{i(8x(C>Gg7<*H8I^ybR^|&97=mAdiJKBs9F{9E27O-iQY2khVheKyZ-6 zqL`QM2T$5<+TpKDq zRizKVF{pe24}GBg)$?XD6VN1QxJg;%!wvSJHcG5~m7M8g+-S$!uG<;6S3P0;>g@N? zX)Dzm0qw_!DhJhkJw#gu`t_l2L**;Her%UzUGe&x=*ki&(asQxGS)TF9x{)ye0yHG z4gHwNu^2vFg52H~FX@|Y3k)K8J?P*y@h|7?^era@OXT?2xuKF!Pc2V7-F*YvCz0bL zzJCKF%bw@!TzS6l*7o1&yPY~+?%+D49ix1c_;r{B%Vo;q@7q|JFRaA(@f15{W7*ef ze*|ahEyHTSdeA~MlFqnzZPk%7A9oM9X9IXh%3<}V==NfDP>#R(l|@cim$o4DbT6BI|p{2NCaQM*ZmrvetuhXQV|*-k>j8tv6~Hr?%#}IBmbD zDzop_`F`QHV9#(5a9EFr=6e=D-=bfc%~t}qGn?^lF%!k}zqI4|Kx>e$@bftWGw7*m zedtv0z*?dmn|Mk$FzU+wJ-V4y7xha(hcN%WJf=Q-q<8R~YjdHiOjSWLA+t{Ae2z!L z%;M+#U%nT3dP_Mz^KIiHCGn6tdpB0L8pzx`xs^YqFiuF1G5x?w*ozVReZ=Rf+S>ce zF{B;bZD?ynj%L>Y{{6@Q2;W~b-`|%|t7xiPSi$<6`f=;pJ?{?oVy$m!s263vysGF`S*P`JKluocL#6pRoBzfP zJ>b8YN-y$&O0NiN`zQA17Ec*O&wSh!Uyz=`Gm!sQdNAp>+W24Rz<7?pjzDNoA-^UM z_mr^1aDE^jLn!2MoDSa=Z82(2N?r8!OZK9nQ%qFO!w% zM6?8q=!3zP_@viUrR}*<^BJDz+}I;`VfV5<7##gadp<7y_@>d%6-Gbcy8+|NK|7(7 zdz5c|>4O0-&ilXH|0?A1;EK%j?hmzJ;SKUJ54eq$kn$@svYedr(#A?kH6bBAcR%ES z0N3mJ-*6un;08Pc`1+$~W2GU4p*t@H$K^L@X=w;UFM0^%!=77l^kMh^pDNLge*^~h zn7Qu9cpO~<93`i7U!mp#0Y?MebDmpQ+34GJ}r5)jzC9-Zc{JITrOFcJcql4#T zZp`SL;9YDycR=(*&wAz*&$($%i@gIFHQaYAM%CX2$3o5q1~AHq+DOaTP|JpR24D_w zL6oEaHn*K*mb;;Bf`A#p^W?lKN6MD68_I~qN^PpEqL4jF zeF#pu+DT)DQC9c4$ihvqFz-J{&M=%6ZbhUck(^UlmvxI6LZ5u_<1;W04c;IR{LnqP z&jx%Y_}e%Och`_^oL_(cE9cif?k*=R!uY+Sz_*X*4labwuj6rk?c>UEIz?M3$Dvy+ z^@^csvhnBAWXE_LmTW{TPdUE%)iZ1#cY-f_6lM1~Z?x*rpjHK?D^G=&`!PV|17NSLYxf{yARzlMW-P>$- zrs7EHBFqq(A9C7X#FBQs5+J83l%v+Sc{VxiryO_r3fVhSoSYuM1t{zEZjF&jQ8QW4 zIMUUPY*I`FZd%-Pjv7O$@|Z=r<)wwNLdKrOm!1M2yW|Xh8f^0PlbxKJf1A;@W6Tm( zznIvOQ>sXZfym+WiFWV%bL%S}EN($;G;%KJ<6h=ZzljVU<0QM(3!Z^9aLQ5agH&h8 zG!kpgJ&-sl$JIb46P`9;sTppW4=pLN)Qk$9{4eEg^=QWjzLDt3v992}zZICuQz6Rn zGX9#uEXrA5PSqQ$rd5*DGZ*()+zleoUkM=kLdv)BNBm*wKHLN#7S#q=RDS|b-;y_R zepcaxP!Sx$D}dP+^oJr}Y>z%9h?BN!oZ zijvnQC%_-xn(j>a@&2VP>ukZ6bx9Ju+1NK$k+^HqEwUNJo9cVKZgk7tG(}=9W`<-| z$}uBk5kU0eUalZu!@?(_=(!`i!1#(RSbmWnmV+BJs!IP5=Mmb$ohOaX46+Gmh zvE~2IuQHhY>E(mUe{L)N|CBGCzJE~pw`{elWl1C&K>M$@s=G|CEP`FWlY5u=5jeZ- z9Q=G_Mp&B0tfJ(~`Ruv`C-*v^1FAU&II~!pDoG(2^bg>|JRXA%b{Q+S7Hjrgz{et<^Sd)v(x2WCCuu_!WW15yl=fc=Ly>WwsRr5J%V}L?>YjnW`wRv zeR+&nwFp#-G7t^kfdXQ3P>FFj@^ECk%#SAJ5@pS(Wq6BilHk%;58M12SUzn1@h zF>aT{GV>2YVt8i`N*^)*7J4b|*pcl9EYl?riJ z)b+jXunWN1Lxt;+Mew<*f~7a1P-~sU(gGSaSS|RtnJ#jQ(#@YTM<58lraPgxWS%7~}sskFp=+1AoEe zPQRa~GLY1Hup3?k-#IgBN{Qd2NQaRsGaY*?^i1y}oxcgHm-7S$X6|z*xp718 z{iqC@(sIKyr301{&>g|Ucj4p@;0@(&oR08zQP8&RbisxP+O_-7(K%|~+8vgpjW{_A zl^q{Esn6E?8O8x#Gj^@h=73}H z!lxl=8Oi1N*?7W9&Sxp>-RFFdkh=p5;XQ&f5$o_M9J7Rd9W(?NTbsjHmCdmiR+ ziSy7edc0Za@f@efKu=#lZ&paMhcc?KRL91AHRhP~E9tRKcIX=_d7h_0ET{^yKa}*pUm?PM)Ux}iRMln?cGlzlVZ03k0S<;S|vo zwAun!;~gx=RPs8Gba*a~^1ESc--z9!(CMjYVW;)F@VpJr`FLJkyq{3+U1TSARxZK* zO9g`T*^3xbu8PXyMJP*31n~gg+WbV43Rz=zzn^3Mi+(ZJhy7%(Nqqun)ZSZ;*FH4L#LVnrgX|rXGUsY75>GIf-)o#VdkG#mg?tGq6W@?jqVu@a&W? zNCCXu-~A+ya7P{9o>1=Jh1|dRe-GXsS{sGjv4TH+$BD1=Oz~MrJ3(7P0*kCGGAhaZ zXzuZE1m?Hlc{pb0q|nnAUvO9Qa@+mi6niR&)tKuMGIB5Q5XekCzz6MXP{u zP7d+;Lf>+8dHo4#{onXiIMd%Yu=fFOKCJK3OTApSpKydj`8p=}_X(}Z655#Jf2sJT zL8DUSI}Hv~QJT(hob)nTNq4$P3#0u(Tg!pbn}TxfuqsQ(2y&d`5-AB^+bHSuy-@gj zjGj@up0~^-^EL{l$!HU(r}?sxeA#n2bAip?PSGx7RV;5U;pTSxB+$26+0%gg86wZo z@b0+6 zcfEvGkWo|dqqfgCkn;u)ljMxxb9V7IF7JbOae}ooVJi!&< zTm1-I+P;#>_~ou~PKAV~@6|5*XtTRM+9iK z0<_h9%k1{xOs?hi3S`W>`Po|GZD)OtaNJAqW5;p(e*9B0RX-lyD1y}PnNVqtqb`wN z>b#_E9bb0GkNa;byDFry@N!epW7i|{^wkzK?k1ay_vi-fqrF@SKW+rp81IWhYsd4g zCF7LOkLE}(8B5AiX5UbygoH|2MX*An;bB~3%*b47A)N3%F5)v>!v8%VJ`Te07qpB4 zZC7jx%siwea?o@Wn+x>BXlW z;?->jWV8y*?>6jVWPN_ZpP!Tbw>{2^&Fpl99F z0RPUE-0`S;G3udqHh_9@{>pePQl|9XWN!m~i zOeeEXcHOl?*#|vp;cbQRw!|}2c)MJ9JJ&N!fV)tDtM%jxWebI}(>z&1*_lGwNuEsM zZMN`M<+*|L;{*r_PpSZy5#C1QEciFT#}UBW<^PRjK>kzsJ%x92l&QntCHQ+bV4Vi6 zFNF4-;^lZfESWX@iuu%iOz79=E;Ex?d0v-$#-HtZ?n5q$a_x6yT-4TweC6W#okwi{3m#Q0l|b9useIX zm2R_;XAtt9=JW1%2kFI9UN=F$d5nKw?EZuB&Amc>AMy3&xwi^=`9j{G`MgQ)XN0_L zA@5Z_Pw5_zz~QS|=sWx)p^fqGCx!1u2;V)+=SkeFg*=&%_avWp-Bl&zxp_H}j9CSr z*YA3e-}%PkjGj=LMP2X`qxy1rc;;-2k;oBCNi@HZe<6##t4^h7KhYyXAv{?|8IF`u z6XwDXsR=jcS&P>I54X@UC}ImA zv`!cL^?P2%CH+E-K#bJ}=%(q^d!Xxn$DU0f)OG7WEIotU&?<|bty3M-A7B~7hH}`( z2Cfu30bed9fkjf3E{kQ}6jGgE! zsIyybRN98}ycG$vGZ|Oe2JMEjXr`H+Yr7M;_&M;#i1ZwA>LsLN;Ogsm--rG4_egE{ z`!7g;Lpp(U8D*{`J%Q9V5#NGGCw#gHa`>ajC$S4oD8R z2!-{)nu@Ft()Lfm_j|bJK$!r4Z%ERIR+P`%9{Q$1_@B1KYxKBXzU)xY$gU7=?5g6bRAQubswS{kqI1oJ7J__0~ z0yN@N(49)`-}OizOrj|UX&wG%CeV}!`#5?21~g^^o-gC?Ezkol&BQZ)S3+iJB|HGi z{~pN*cs9roTI3%@+LjByXMmwaIy4@91imNf6nKOOgnoP$lGQ!jd;TTD+xL0do6NBV zl8T3W!++mwGGl|+@Ynp8q|D#=GQ0fu3g0*LvNp*(#OFQlFBI~&3$XX`c{P6ZY{J z0rnz3FVjE3*#T#TJeJQ(_A|nFDFV!?eBKcM2qAB%(54JNkMFmq+|P+=Bugn{?pJV{qPEV9+cvS*K+4a)dtQk zdrw@PtRm9(2}FTE%HIDPO(mpxA&S@_r z#>wpKTzwHFGWfqLfQP81#oP4phQ!h(x-a#_hcsn<)h0Pa!R<;tJP__<9Ut9~=)DruX=k`yJ4FGe8~^((E8Ik?WI)}h_G9BolCpK z5?^VpR{gAEB86V(&R(L@zq7O>zr9SJxu`QAesre-j^xsZ=>LbM>*3dbeOVqx?-Ie{1OG|QI`gy-pU+VfiDopHzO;;u@^p#U}a>F za6IBJ0u1+$41BVXXdN;~a^O|Gxd7SuI(Heq<%5xdWsbN&A<8dumtgK6JrLw~Hh|~Z ziTSL>?-rywq}h1hfnRGHMO|nI-9f5#xJ9qv_j|}T>+pL5zekX?NQ3>seGUKp_qWB@ z{e6ygC$wl5WD5@zg*u zit2n$_k7Xwi1b6eWK$-w@>!kCG2b8I*yVzcZmp`c?c8KTA$lJC`k+%*Prfef249z2 z#3m_JrIf8jxI4L(l{MG14eF@QwYtZP9v=kvF~A)IxD~F+hEzZlP0rVDRge+g;^h6` zT1R!un)J<^*-y3GW>FolcNuhsqKZKf9tH#nAQZZqy7VogjHr%s-O8esgG#JGi7UPc z$6c%5?A~GgctBsoJ=gx^z^ex*^ZzJlh>{_5hjE+H2 z=L70-K#g)O?HW85>7lXs^xUtHh0I(}=qARZK&LKJ4}zEvh%WX(8`#I1~MkW zF%~(zI3XizX7@Q+OGNWYMI)OEPjMJ$6=nNYabhWG419n!X+Op6-J!dqC~FYpNr1ct zkpJQ&>#T?sWff?TDu#jHjJ>FD9;V!kv5oE=qZ?Z^7GF`OmqXE=mQXUs{rIlMsWJ@9 zQI-C=Ysc%5HE_mXh_nDH9NWd6_;o;DaU%`K^HuyFL^_O=falBj-GQ_l30n&FE`IMs zBDzAb7}RF`_CR-d83}9&!XJQ#z~4KOAQDkhJkP`5B}l;;{+I4wMID3s_dWV2LOWUK z;29Pn>L!`x7~l-n?>gmogAsxu0~&TJ+{dte}=z#hq{Ih~IfKx~+pCyy2BOE(T`U z^i9(A=#F+>d(oSGnf5_tcA-pXU|{BsDx{dV;tK>@q*+pa3^ecYyRmW+?;Sgk`mr$Mz6_`C9>uHb$c~3}4;72yS(MPTh~|~}`n*Txm>7_?(9>m&R7Srwhhf<) z!z*kaGZ%Zb${@-rVvj1+*w-7+lhMxCsrzAtTh^QY_y%ye|; zy}G$YbNPOMGN|8gqqggQl|hHmjI?F(SXisjqqi&3TYa#%Y&fFe$t@~FJaiG#lTx!d zQw(n>;0cs1wlK4#8Ii+t{*zEs9V!29^Near^k`(*i{zSkNt`@BCQcKfh>*zT5ixR2;+lAQ z$r@?X!-&iD2=J^8eEz#gP$N=uJm=!?-yj`F`WZ;+MLLYXzrk+@(i;42#P4RLN%%XB z{31P!?^E$i5Lu4YgY*~ZD~=*PhSx3lJ&bpo@mquE75H0*zvGc|45!yM-_%}u@<4lA z(B9K)Vr}Tt`h@j^`*fpB;$!I3V>(1dC0_2X!wcS=oBT`;#2BX1NW9txaI&yvvyQeg z37O02T;ipo0REAu8X^)R90$BpVPz3-ks1&lf{D8GxrCfr4S3tfYO|7a6RyMCpfXv8 zz5F`2p`TU`L;^m_4(6A)!UJ_2Q_M=Io7si1wbZeq8R3i`_bU@MRGNIRY;q&J5AijJ zF=2z+5RrfuI4V%TbX0=nF4Vsm@lUyg8K{4KZKQcBBgph8%rT}X+C1k zPKA|VD)_qG{w!uNmwmIJ#XlU1Y)ov4sFyd)-wOY)D#cy}0}C+AAzQ_$?D16Ro3@g| z=6s`;GDMVwkC${{kE9kT?l;J7vS|utEJ~PdCt(FfSzokmrGBrcmGC@`=w6d6q8kWa z?6B!{h42}dWN2Axg6?O8B@z)#z!Bd?WqPd9d#F3AF*95Gr@;~q+J?Mo)Oh5X z7-oendQWuY1Gcxfj+aD4)v=Em8p0z^B{aWn*p_J3d@)j=IC-erl0z9hpWW(<>HXjdfF99r6>9%H34^@vW>s*vEB&ZV>Rsg+bj{mSLCoe_IV zm&^8SQ4h7!#9A{uDdwW}oL!kr*^Vl3l9Wa8U}W=j<{D!Dk)BSlO<<-l53#DzBwm!r z(xadzd~6+V9=YdE32joC?~KZ4$vtz4DZyOCE?~naE0LfBP}x| zNl|*>Pd5C=2Ds_CjoMT|*=Xg>o?s_1<#nX457qy$zGu(fbMtuYD0)Hn!fa?iv65Q<_x?m; zalK~4tr7TiMHE@nkoG83Euw&%smju5Q(sxEDvOaFpiESc9T^epc7rT4*%E0G=RBkNLJ`SCDws4t&(hYQ|UrTbPLO_afz38Z25}0x&^EllHt9)WOxlX69{*{*>zs99qCKBEomc?vjC7lzw zLZ10*2dRrPT;rI_cL@?&zH^s-ita7a%aF7lZ;$46-)c{A4eAX?LNDMgSK!<{XN!UR=FoV=_5}Wma0eHFCu#V^{084Wdg&WPj zFOeOegs;F8z{R(b{sMj08vGLZawigzIWzFC9y+jGq?>Vc6q8^c$rPrV+3~tfY#qiT z$*^}RH8IROVo$`bJR6-03TGQ(rr|Co&N&zSy*om6%4F!+>>CL~RW><$#9u;lwn?0xC37##15G z3MwSBifv+53+P1$D9_DUwxWsXP-L^Oap!&{nv-jgy>Hf>T!S1Q`_W;H-QfLfG$U_M zsvE(`4b5yM{)&Rf@D?@-e??CYgJ1g`L$f-oBhxS*zII`^tZ1&DChx4KBNngDM~q+4 z!_~ArvAU$XbG2ek$(oimqgSg8k&rSn4f^$o>nTyJhLX^7Du&kla!;pk(i=Uk+L7I& zp$sIR!8PtjB3mnQ9)q)*%+jpVRKrKm7Yv@GH{kjF4PEykS>pz6pMDcNgvl|;3}q%t zHQJ;!?bFq=y?RJhDV2ytu?k+aY2fNwTVzH_2c5DVwziaIw=GIFqm&vGqhd@kO4+V! zuw)NoM({H5ep?}{F^Y@@Y?5fGhEj@f7FNvG8}p^q5P0Xt`PEJ~qoy{cNG;dYvqwRN zpHIzaWAh_gs%m33weWxBRL16~uQt>SNu@QV$oWHRT>g;M1`VyLSS>SCsTXQ9HdStF z+eBrm5p9;(5#r>mw5%lu8X`oXv1~q9e$&oU$Zj@TBN#*&pfWF7s)|Uw_;B#ez4nSC zH5+`I6;QL8b?9m5HajWzFH3o-+|+>8ZcK?&r&=Vz-dk(!%Ze6A_@Bl397<{C0jQGAI3cth+HLh#=A zN7yy%MC(Fjl$pyzYryL3OAD2G!_V~$F7uCN|khgY5S0k*%fV?#YWX1Vj~;wWg{A2WuZe#n`>M5Vvt771D&}a`t@N* zEs8=H-%jglPltgcN27d4HMWJzW)ElJpyVlT>@ zah7-H*{%rlc*Jm`O^I!hX6i-SvCMa}s7`&%I-5;0zs0g_D;u--0Tx^(&W9o!pD~gV zYY89sT{5ERrCI)=Gh=p+t=qhgN+F|~BuSJfg+^$IDW;*&LZ!AZ-;SvAABD!3^L?N* z&!Q|(bx}9Q-?FSbxmD&E5+ImJ@DR~&ReLqET`@{xhd8A#0q+u&llurXVjtgLv{^a2 z-JngZtI>*$rEIw4OP{P|^nsWL!mmZv)xwXcNgdI-uXvw+!S77Cbu^TbHIHtKX@pO4 z)QcPN7I2FEEsy_tnnP_n;3K^vdcSVZt|Cc}8EZ?$L^dpCk0H*?Xhvd_XoQJv0 zo1WRkQ#)|;o6bolZwG}cVpU8;<5E`M@Gbim=DUSe)l4@K*(1zyU9mqQsfNCjcvwm@ z|3&duaoj%kVoW{E|SnxVBGV`|M)%B1jkI%&vI zjX^7}Ew51?*qjaF!p(c&91WSyvYFWmd z)Dpe(S-Z%w!l{9G!J*A$kNVz2-mk-X)A;52Y;--5Odqp98G`W-KDWxgHuU^4JOKyc zl-UXG3UD&mIGfqed*$Zj=7=V;nr1;mbQ)1iB1i3D#g@qA9V}&&$KHhdkgdKL1t)wo1`wi=Ck{LvXI%h3oqaZEQ7RltO26{~F zu0?a+VK-`r?3%?!?79zhM84|;8-<9jl-1G|)tu7G{0VWJ95sPq%1vzCE;{A6$|AKv zOIJtjjcodDYNd93-7pn3hOQSirnJVjP`kn$FF0Gl83b(1UQue**2H|u8rvAv98(vV zG{O=#X_#frsO$_)M@M+Usa(YK?$)=Igp-zbnHXX>vIMQnwIm@z=41;ZeZVhPRHqMe z{(Iei{9n@@!2iYFkCB^e9WQr9?3FiJ*?VAl*~%_wDU2Y~be-#WGfh{yw}1LgAGi$b zCVu}W`%p<&V#^TK{F-KsM3tbKzuL@Z_l2n{+!qfo~kXS zU9?O3B5qG&KRawCl#$d$qN^`wkK5nIIdd$O%3k10K7JkKm+YBPJjXX5XWwVzUcR4Q zihBvs<`^EsV|!_MCJnA2%97BfJRq;5GVbHw#D+MYFM2)=t&O+b$9f_W>mkBUbP7~z zkh0VgjXrDbrC}2l-(qGD>yEScqpn8OhMNnP13iW8z&=Qw+ShZ`ekcTQtJ~ZYZ@!;B zjvkOUypOiUy-a2HSq_9s7~M8|JZfrR9)wBqw}I>V&hjdcO$N8c{*!&eGeuoI`;1R(mMkTf;wFNlXP-9P++&cv~ zsW@($ivcHn&Z6E*s}j{6)@LiIiQie;wkE1iTE|yJG(u2Aka%2kbR?a>Afy|TrcezL&2*!zsn`$(T#z%eY;mI~Rnj=JP1=|Ujy0*x&r#$g z()y>qh-SobX|ULdS5o*Bi01aNN4-JV)-l9#ago1${d8k8@R9o1qCLr{qVR>C9E`xl2^aR+icOSF~~( z-gXA0qkgh5;MXM3FSa?!T3mZ63qIdDE`qPk#@F`4sn>6+?T}C#f&F_Pw*C^)X&yYs z?9HiY=5cHbG)B=c&Sn$-{0X=U31oJ{b^HP2KhdCK_SMDjI^kiSCD9N|L$970FOwu;C!-FS0*tK61a9vcBE7mD;9% zqmR%S%G%c#q%u_Ib*rsUhBz2|JI+^9<6A7XRDr&Mr^`1m@8g~z7QAB%VsE=`qVA5d zhzpq#-H>3LQ5V@VvXwH)%ygrqUW~m4*w!vJ-PmdToWU!)i(uOqJ<-kd@=LT?4BXtzq>AETMWS?c!a* zQg@*g$F9t0>=t!y2iXPUEnBe%B({e3 zfX0D6fKcIYLy;l^+#PPvPSD_IKr^EtPpKFpOTo%$!Vt&?6f~=%%p^-t`z(d_`DZ)i zBQm}X_u93Pjbit@AiXxDca1LcK9_&*zp%>A?CtMm_IiK;r$H}R9?Mb@f0fEmf$Ed}daO<~u3Ina zts)fuyD5B$I7*`>llk6Y*T&IqOKB6kqoC5YF(Ll|$^sYaEBWU01oI z7nr@3y|Ni&LAx`1KjkraT(6mWNk6JL3$&jK>Z_5 zxXDJPT;*Ou%(<)FQy0n&YgR!U{{ye#%qcG|heo@6h13Li7e2tAFE>yr3ztLg25&m1 zOT)_AWQdJus=czR0eXuP`eb4wby9JXq5(4>{tc!k2Xqq6`l}Pb%~-Rc~BE%X2E|WcF$EV>jK4V4HaFu`_mHLx?Y=L5H(!o zV&ILC%2;E0QAdqK97kw&S>S-k_FL_TvmW}P2q$&hYhy|a*e_QVLfX2~s;k^}{_g*u zY*fnWzWtK4C<@5*UP`CIK(?#&Ay&T2Y)2q&81 z4OCM&&RK}v@OWQ1PG$aXi*6-j{Q3prOIg%>mD_S5yd^0257o@5PLi*$4u45>Cz1a$ z;rnkEOQpdIfUog&bzbND@Ob|=>Z?V4S5MD^EGS`itK)>3i9lRLSku@FFaiZdgqM># zKJ}8hS^EcCI$ZvPeHl6_BEcsa6o#vun%9E-vu{6E-+r8@P@P}&UFDuQpBg$#kvdvD zNBfk###8Fp=^-_axIk9Si1Yl4vGnyN4APJ0cajp43ugf3UPMN`%FR13V&Wk2Ugg~9 z5B9}A1O372K*0H2@SNlDX8a=kmjiUzb{HL zX(|aei*V{@ro_O)`tw_HX7`O?iFwub-0bJEZ$tyPiS4AE$L-hq3)u0c#VoC(S~a3Eseyst0-Q+SIn-nYhbp)tF4`{S2ONy=$4q zjBFb=nMA?9f{1w&P=@AlB+K)eXgjS`xr-rcR57^@BfQ#m2Je5v zzgPbh&VSj3H|H)NWmj$hpNaGp#;FeJ1ElKrCJX(dQ>1*qu5erUKCw6TDgCBCJyseY zL#uG6U?Tk@>sW+-UExl{eqf+qSGW#5#S8t)2=&W>GvzDX&zFaxb;KH2>KNhbMH_qg z_kEX#2)&Vq`df(pl75}!OMHJ>CX{eF|B3f&F7H^6a}uQG=+mP}5~SGo(r2gZHY5IV zH*cS<053GQm~QRTV?R_~;qFB1CRtTFx}{s6Segn+D?Qb`9GapZltog$T_+IrX5ibA zI%d$f3Vf@uCWO8nI_TTsp>N-Gk_g4|A$s|mQwm$Of7yqGp7-Lp%X7(YB<;r9-GS6? z4FqcOOL(K-p#9|B`houh&!g|f^JffbG=6Wycb+jDaab90o_hs$=_@L_;a8-AT>)!q`DaxIbh1CQ5W(T=vJLk+~-9=z)mhMM=3T7b&{g7HG6_GMhhXp0_&SdIR z45SQj7d8b_YkDa66XZ@jGgipOJf>$_RKjyVUs@R|-GUv%h(?R;Da&U5(ctJD7l4)$-veuXhuyN;$_ z!PtcKxF@a&(c%P_&eDRa*RoFH@ zXQL7dSaqUl*6L1C%d3h2B-)dDxqS9_+^VyFlP#v3X6mE3SVJ9XYP#1PS$gVOTVDBC?AwNwthn=8#RlTw^ zW^bB;wDL`y(1c;O^{`cIV&7q-j5@TD>UhHT@r31_OOl|I?5KjBYanBI$K9$TBLf&I znmV<*vjUWllr8K0ctR0h^0%F}Dmt5J1kPLM>6WvgF?tHPKxIZ-=7hMOvCeSYLu{dr z&r3^sfXWrPnLx@IiPYB$R)iHvB)YhD6r1R*U;%a&_nY-&&*dsMRY=4Ly z9;`oQ3F>dQBo@`Ck{xmZ73Me;Xt0aS*{~$ivEn_khWpsA!~(^Trnu5fSOkz=Zj+sy z$3KO3oUv=z4{-;Eo^c*)w6q2^7HiOtbw~7PCzEJOioeGqmE!M2qzqAo0 z2JINcquHdF3j~i(!cpwBr36z^8x zEOD9k2s;<2XZJ%tL5(lBXxJ4PM|%3TrAL<1Q|R1PuwdKIPFTK-mF=9cT({ntuQ-^qqSey3+_)i$xkv$DPw z@41g1Z&cwtl+IhA7Vm7-Hmi?W?qwfl4=KX;5YHyF*fFJ2{6$&Dl}h#otx88(Z?-5M zhH)ldSICWtGb-SqKa4<`-u&huEmxMnp{<#iS%pWu$H4?TAI_Z&k}W!L77>t5`To+#zj-u87$h zvg{kr+e5eFv^SZdGSYBoSCsp%n(dednk{L%!pSa*VUOG*$yYVTz`jdU%x+&4$yBmY zDchFnv?bL#aM(kv5s2_T*pjP9@i%afB%b;euKz+VsGQ7Dkxb+x_-TZN?Kq1V+Qn?x z%pFyPnPo?>aHlSuwZ|346~z}DgO=v?VqkhC#&xc9n>|_=Qxr4EDm+RT=J0u?jsj;J z>{#frHFhfP2yicOH$@Fgz`Y;HC8v-Q@%JJ8et(-WMoUAa%2PNr8fS*M1J|ei!K>B*%MmaUy;6-37CoSSj1hY>tv?Eg!wQL`T8nXhUj`!dX!bcG=QrlGQ<{}iMP26+ATXiBA$L)%o3cp z(IzuA8KM`jbFbixW|#$WuS1dig5K%|BKb*LMJaqq=+(BPq{J#|y~1pO=Xu`L-Ug?P`G!q9=KufNO!1CFfx$2>ZbASKo|# z-yI5X*i|I0f1oMCw3Xedb7^IbVfDqVMc-H?#*Hv=GLT}IP|~It@cvJo-^^QJ{A7y( zw&b11sWbKlkB!1z1=-l>)|dke!1w5I`n2Lq^d40T;nNO70u)))tf(4qK!-0{^vqn# z`r<{LTvexFH2i9m@BaQ zoL@cNP=(xM7J3TF9ry|o!<0erQ$r~>h!ax!&-)wcG@LMIwcbJ=`u6y6q;yA zR*01bUH#D3@a7?Ha&v%t8mD2uwNR%Q*_Y#Fkh0FRlRi<_*>*h>2_1B>w^H;y_&y)+ zuUMxerZJsMM)~I6m%;xl>3<(NW3yz~BU@zV2__6o}w<~UZ& zPQDjS{X+-!;$8R&1cWnB*-1av+ryfvG+F6dJW*+}rK>{E75F-}|0tV>wMOhxdq#j4 z!0+qBasPH0P0>@cZ`^)09MuopevN+=_ji#G?l@D@89=<4Fj(zY-y?y&`Z{fs-eni# z`MSLpWeio2Blxn}nUS5IsS-d858bC#R8-$XzVz6`_%GuPO?o2J=HnX{-yB>8S?NX# z6#B}6793?`QDy|n#J;!1C}!kLDXa%x3BU7{EqubMvqoEl(poAVc}l5Ns-vvkQt5X} z)zE5SFKgnSD!VCvoF|{%Gl}>yg6$WW!w0t1$Zh5 z<$oux+P(p*}J%I4BU70GcE=Vn|-iGHB%zO61`{y&P40}!oZ|5V29Fz!K z|J;;y+IYhroYf9DC~f7iSufF)XycN%vh%@p$(Ko&?N-NI$=wAycL<*7yXZTgrk

+Bh_^A@s$cfO;n2xFP`-lDDam@)ZS8xzxE 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 mSNz5N{u2)h4p<9utNpK5|EOrYb0W`QoaSdig zP=jEIStgHBlOZmNlZhD<^JJWCbK7JxMw3iyA`Q58Vqzm(zrS<4)oY&T{oX%5GN;cu zRds7Qb*k#rsVZl~^qB(3aqRY=f+aBGG);`90>|Crn1V6CRHk78h*Ps66kmG$8pn>8 zC?q(IbOb6N_yg0osa0NZfF|$*P#Ps59GQe~^uj>!1Qds034j=@@

hjuFuJ6h>*7 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

+ * Note: The native methods access a package-private java.io.FileDescriptor + * field to get and set the raw Linux file descriptor. This might break if the + * implementation of java.io.FileDescriptor is changed. + */ + +public class Exec { + static { + System.loadLibrary("exec"); + } + + /** + * Close a given file descriptor. + */ + public static native void close(FileDescriptor fd); + + /** + * Create a subprocess. Differs from java.lang.ProcessBuilder in that a pty + * is used to communicate with the subprocess. + *

+ * Callers are responsible for calling Exec.close() on the returned file + * descriptor. + * + * @param cmd The command to execute + * @param args An array of arguments to the command + * @param envVars An array of strings of the form "VAR=value" to be added to the + * environment of the process + * @param processId A one-element array to which the process ID of the started + * process will be written. + * @return the file descriptor of the started process. + */ + public static native FileDescriptor createSubprocess(String cmd, + String[] args, String[] envVars, int[] processId); + + /** + * Send SIGHUP to a process group. + */ + public static native void hangupProcessGroup(int processId); + + /** + * Causes the calling thread to wait for the process associated with the + * receiver to finish executing. + * + * @return The exit value of the Process being waited on + */ + public static native int waitFor(int processId); +} diff --git a/src/com/github/shadowsocks/ImageLoader.java b/src/com/github/shadowsocks/ImageLoader.java new file mode 100755 index 00000000..6d4378d1 --- /dev/null +++ b/src/com/github/shadowsocks/ImageLoader.java @@ -0,0 +1,215 @@ +package com.github.shadowsocks; + +import android.R; +import android.app.Activity; +import android.content.Context; +import android.graphics.Bitmap; +import android.graphics.BitmapFactory; +import android.graphics.drawable.BitmapDrawable; +import android.widget.ImageView; + +import java.io.File; +import java.io.FileInputStream; +import java.io.FileNotFoundException; +import java.util.HashMap; +import java.util.Stack; + +public class ImageLoader { + + // Used to display bitmap in the UI thread + class BitmapDisplayer implements Runnable { + Bitmap bitmap; + ImageView imageView; + + public BitmapDisplayer(Bitmap b, ImageView i) { + bitmap = b; + imageView = i; + } + + @Override + public void run() { + if (bitmap != null) + imageView.setImageBitmap(bitmap); + else + imageView.setImageResource(stub_id); + } + } + + class PhotosLoader extends Thread { + @Override + public void run() { + try { + while (true) { + // thread waits until there are any images to load in the + // queue + if (photosQueue.photosToLoad.size() == 0) + synchronized (photosQueue.photosToLoad) { + photosQueue.photosToLoad.wait(); + } + if (photosQueue.photosToLoad.size() != 0) { + PhotoToLoad photoToLoad; + synchronized (photosQueue.photosToLoad) { + photoToLoad = photosQueue.photosToLoad.pop(); + } + Bitmap bmp = getBitmap(photoToLoad.uid); + cache.put(photoToLoad.uid, bmp); + Object tag = photoToLoad.imageView.getTag(); + if (tag != null && ((Integer) tag) == photoToLoad.uid) { + BitmapDisplayer bd = new BitmapDisplayer(bmp, + photoToLoad.imageView); + Activity a = (Activity) photoToLoad.imageView + .getContext(); + a.runOnUiThread(bd); + } + } + if (Thread.interrupted()) + break; + } + } catch (InterruptedException e) { + // allow thread to exit + } + } + } + + // stores list of photos to download + class PhotosQueue { + private final Stack photosToLoad = new Stack(); + + // removes all instances of this ImageView + public void Clean(ImageView image) { + synchronized (photosToLoad) { + for (int j = 0; j < photosToLoad.size(); ) { + if (photosToLoad.get(j).imageView == image) photosToLoad.remove(j); + else ++j; + } + } + } + } + + // Task for the queue + private class PhotoToLoad { + public int uid; + public ImageView imageView; + + public PhotoToLoad(int u, ImageView i) { + uid = u; + imageView = i; + } + } + + // the simplest in-memory cache implementation. This should be replaced with + // something like SoftReference or BitmapOptions.inPurgeable(since 1.6) + private HashMap cache = new HashMap(); + + private File cacheDir; + + private Context context; + + final int stub_id = R.drawable.sym_def_app_icon; + + PhotosQueue photosQueue = new PhotosQueue(); + + PhotosLoader photoLoaderThread = new PhotosLoader(); + + public ImageLoader(Context c) { + // Make the background thead low priority. This way it will not affect + // the UI performance + photoLoaderThread.setPriority(Thread.NORM_PRIORITY - 1); + + context = c; + + // Find the dir to save cached images + cacheDir = context.getCacheDir(); + + } + + public void clearCache() { + // clear memory cache + cache.clear(); + + // clear SD cache + File[] files = cacheDir.listFiles(); + for (File f : files) + f.delete(); + } + + // decodes image and scales it to reduce memory consumption + private Bitmap decodeFile(File f) { + try { + // decode image size + BitmapFactory.Options o = new BitmapFactory.Options(); + o.inJustDecodeBounds = true; + BitmapFactory.decodeStream(new FileInputStream(f), null, o); + + // Find the correct scale value. It should be the power of 2. + final int REQUIRED_SIZE = 70; + int width_tmp = o.outWidth, height_tmp = o.outHeight; + int scale = 1; + while (true) { + if (width_tmp / 2 < REQUIRED_SIZE + || height_tmp / 2 < REQUIRED_SIZE) + break; + width_tmp /= 2; + height_tmp /= 2; + scale *= 2; + } + + // decode with inSampleSize + BitmapFactory.Options o2 = new BitmapFactory.Options(); + o2.inSampleSize = scale; + return BitmapFactory.decodeStream(new FileInputStream(f), null, o2); + } catch (FileNotFoundException e) { + } + return null; + } + + public void DisplayImage(int uid, Activity activity, ImageView imageView) { + if (cache.containsKey(uid)) + imageView.setImageBitmap(cache.get(uid)); + else { + queuePhoto(uid, activity, imageView); + imageView.setImageResource(stub_id); + } + } + + private Bitmap getBitmap(int uid) { + // I identify images by hashcode. Not a perfect solution, good for the + // demo. + String filename = String.valueOf(uid); + File f = new File(cacheDir, filename); + + // from SD cache + Bitmap b = decodeFile(f); + if (b != null) + return b; + + // from web + try { + BitmapDrawable icon = (BitmapDrawable) Utils.getAppIcon(context, + uid); + return icon.getBitmap(); + } catch (Exception ex) { + return null; + } + } + + private void queuePhoto(int uid, Activity activity, ImageView imageView) { + // This ImageView may be used for other images before. So there may be + // some old tasks in the queue. We need to discard them. + photosQueue.Clean(imageView); + PhotoToLoad p = new PhotoToLoad(uid, imageView); + synchronized (photosQueue.photosToLoad) { + photosQueue.photosToLoad.push(p); + photosQueue.photosToLoad.notifyAll(); + } + + // start thread if it's not started yet + if (photoLoaderThread.getState() == Thread.State.NEW) + photoLoaderThread.start(); + } + + public void stopThread() { + photoLoaderThread.interrupt(); + } + +} diff --git a/src/com/github/shadowsocks/ImageLoaderFactory.java b/src/com/github/shadowsocks/ImageLoaderFactory.java new file mode 100755 index 00000000..b858ad58 --- /dev/null +++ b/src/com/github/shadowsocks/ImageLoaderFactory.java @@ -0,0 +1,50 @@ +// dbartists - Douban artists client for Android +// Copyright (C) 2011 Max Lv +// +// Licensed under the Apache License, Version 2.0 (the "License"); you may not +// use this file except in compliance with the License. You may obtain a copy +// of the License at +// +// http://www.apache.org/licenses/LICENSE-2.0 +// +// Unless required by applicable law or agreed to in writing, software +// distributed under the License is distributed on an "AS IS" BASIS, WITHOUT +// WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the +// License for the specific language governing permissions and limitations +// under the License. +// +// +// ___====-_ _-====___ +// _--^^^#####// \\#####^^^--_ +// _-^##########// ( ) \\##########^-_ +// -############// |\^^/| \\############- +// _/############// (@::@) \\############\_ +// /#############(( \\// ))#############\ +// -###############\\ (oo) //###############- +// -#################\\ / VV \ //#################- +// -###################\\/ \//###################- +// _#/|##########/\######( /\ )######/\##########|\#_ +// |/ |#/\#/\#/\/ \#/\##\ | | /##/\#/ \/\#/\#/\#| \| +// ` |/ V V ` V \#\| | | |/#/ V ' V V \| ' +// ` ` ` ` / | | | | \ ' ' ' ' +// ( | | | | ) +// __\ | | | | /__ +// (vvv(VVV)(VVV)vvv) +// +// HERE BE DRAGONS + +package com.github.shadowsocks; + +import android.content.Context; + +public class ImageLoaderFactory { + + private static ImageLoader il = null; + + public static ImageLoader getImageLoader(Context context) { + if (il == null) { + il = new ImageLoader(context); + } + return il; + } +} diff --git a/src/com/github/shadowsocks/ProxyedApp.java b/src/com/github/shadowsocks/ProxyedApp.java new file mode 100755 index 00000000..7e747c25 --- /dev/null +++ b/src/com/github/shadowsocks/ProxyedApp.java @@ -0,0 +1,96 @@ +package com.github.shadowsocks; + +public class ProxyedApp { + + private boolean enabled; + private int uid; + private String username; + private String procname; + private String name; + + private boolean proxyed = false; + + /** + * @return the name + */ + public String getName() { + return name; + } + + /** + * @return the procname + */ + public String getProcname() { + return procname; + } + + /** + * @return the uid + */ + public int getUid() { + return uid; + } + + /** + * @return the username + */ + public String getUsername() { + return username; + } + + /** + * @return the enabled + */ + public boolean isEnabled() { + return enabled; + } + + /** + * @return the proxyed + */ + public boolean isProxyed() { + return proxyed; + } + + /** + * @param enabled the enabled to set + */ + public void setEnabled(boolean enabled) { + this.enabled = enabled; + } + + /** + * @param name the name to set + */ + public void setName(String name) { + this.name = name; + } + + /** + * @param procname the procname to set + */ + public void setProcname(String procname) { + this.procname = procname; + } + + /** + * @param proxyed the proxyed to set + */ + public void setProxyed(boolean proxyed) { + this.proxyed = proxyed; + } + + /** + * @param uid the uid to set + */ + public void setUid(int uid) { + this.uid = uid; + } + + /** + * @param username the username to set + */ + public void setUsername(String username) { + this.username = username; + } +} \ No newline at end of file diff --git a/src/com/github/shadowsocks/Shadowsocks.java b/src/com/github/shadowsocks/Shadowsocks.java new file mode 100644 index 00000000..584a565c --- /dev/null +++ b/src/com/github/shadowsocks/Shadowsocks.java @@ -0,0 +1,639 @@ +/* Shadowsocks - GoAgent / WallProxy client App for Android + * Copyright (C) 2012 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * + * ___====-_ _-====___ + * _--^^^#####// \\#####^^^--_ + * _-^##########// ( ) \\##########^-_ + * -############// |\^^/| \\############- + * _/############// (@::@) \\############\_ + * /#############(( \\// ))#############\ + * -###############\\ (oo) //###############- + * -#################\\ / VV \ //#################- + * -###################\\/ \//###################- + * _#/|##########/\######( /\ )######/\##########|\#_ + * |/ |#/\#/\#/\/ \#/\##\ | | /##/\#/ \/\#/\#/\#| \| + * ` |/ V V ` V \#\| | | |/#/ V ' V V \| ' + * ` ` ` ` / | | | | \ ' ' ' ' + * ( | | | | ) + * __\ | | | | /__ + * (vvv(VVV)(VVV)vvv) + * + * HERE BE DRAGONS + * + */ + +package com.github.shadowsocks; + +import android.app.AlertDialog; +import android.app.ProgressDialog; +import android.content.DialogInterface; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; +import android.content.SharedPreferences.OnSharedPreferenceChangeListener; +import android.content.pm.PackageManager.NameNotFoundException; +import android.content.res.AssetManager; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.preference.*; +import android.text.SpannableString; +import android.text.method.LinkMovementMethod; +import android.text.util.Linkify; +import android.util.Log; +import android.view.KeyEvent; +import android.view.Menu; +import android.view.MenuItem; +import android.widget.TextView; +import android.widget.Toast; +import com.google.analytics.tracking.android.EasyTracker; + +import java.io.FileOutputStream; +import java.io.IOException; +import java.io.InputStream; +import java.io.OutputStream; + +public class Shadowsocks extends PreferenceActivity implements + OnSharedPreferenceChangeListener { + + private static final String TAG = "Shadowsocks"; + + public static final String PREFS_NAME = "Shadowsocks"; + + private static final int MSG_CRASH_RECOVER = 1; + private static final int MSG_INITIAL_FINISH = 2; + + final Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + SharedPreferences settings = PreferenceManager + .getDefaultSharedPreferences(Shadowsocks.this); + Editor ed = settings.edit(); + switch (msg.what) { + case MSG_CRASH_RECOVER: + Toast.makeText(Shadowsocks.this, R.string.crash_alert, + Toast.LENGTH_LONG).show(); + ed.putBoolean("isRunning", false); + break; + case MSG_INITIAL_FINISH: + if (mProgressDialog != null) { + mProgressDialog.dismiss(); + mProgressDialog = null; + } + break; + } + ed.commit(); + super.handleMessage(msg); + } + }; + + private static ProgressDialog mProgressDialog = null; + + private CheckBoxPreference isAutoConnectCheck; + private CheckBoxPreference isGlobalProxyCheck; + private EditTextPreference proxyText; + private EditTextPreference portText; + private EditTextPreference remotePortText; + private EditTextPreference sitekeyText; + private CheckBoxPreference isGFWListCheck; + private CheckBoxPreference isRunningCheck; + private Preference proxyedApps; + private CheckBoxPreference isBypassAppsCheck; + + private void copyAssets(String path) { + + AssetManager assetManager = getAssets(); + String[] files = null; + try { + files = assetManager.list(path); + } catch (IOException e) { + Log.e(TAG, e.getMessage()); + } + if (files != null) { + for (String file : files) { + InputStream in = null; + OutputStream out = null; + try { + in = assetManager.open(file); + out = new FileOutputStream("/data/data/com.github.shadowsocks/" + + file); + copyFile(in, out); + in.close(); + in = null; + out.flush(); + out.close(); + out = null; + } catch (Exception e) { + Log.e(TAG, e.getMessage()); + } + } + } + } + + private void copyFile(InputStream in, OutputStream out) throws IOException { + byte[] buffer = new byte[1024]; + int read; + while ((read = in.read(buffer)) != -1) { + out.write(buffer, 0, read); + } + } + + private void crash_recovery() { + + Utils.runRootCommand(Utils.getIptables() + " -t nat -F OUTPUT"); + + Utils.runCommand(ShadowsocksService.BASE + "proxy.sh stop"); + + } + + private void disableAll() { + proxyText.setEnabled(false); + portText.setEnabled(false); + remotePortText.setEnabled(false); + sitekeyText.setEnabled(false); + proxyedApps.setEnabled(false); + isGFWListCheck.setEnabled(false); + isBypassAppsCheck.setEnabled(false); + + isAutoConnectCheck.setEnabled(false); + isGlobalProxyCheck.setEnabled(false); + } + + private void enableAll() { + proxyText.setEnabled(true); + portText.setEnabled(true); + remotePortText.setEnabled(true); + sitekeyText.setEnabled(true); + isGlobalProxyCheck.setEnabled(true); + isGFWListCheck.setEnabled(true); + if (!isGlobalProxyCheck.isChecked()) { + proxyedApps.setEnabled(true); + isBypassAppsCheck.setEnabled(true); + } + + isAutoConnectCheck.setEnabled(true); + } + + private boolean isTextEmpty(String s, String msg) { + if (s == null || s.length() <= 0) { + showAToast(msg); + return true; + } + return false; + } + + /** + * Called when the activity is first created. + */ + @Override + public void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + setContentView(R.layout.main); + addPreferencesFromResource(R.xml.shadowsocks_preference); + + proxyText = (EditTextPreference) findPreference("proxy"); + portText = (EditTextPreference) findPreference("port"); + remotePortText = (EditTextPreference) findPreference("remotePort"); + sitekeyText = (EditTextPreference) findPreference("sitekey"); + proxyedApps = findPreference("proxyedApps"); + + isRunningCheck = (CheckBoxPreference) findPreference("isRunning"); + isAutoConnectCheck = (CheckBoxPreference) findPreference("isAutoConnect"); + isGlobalProxyCheck = (CheckBoxPreference) findPreference("isGlobalProxy"); + isGFWListCheck = (CheckBoxPreference) findPreference("isGFWList"); + isBypassAppsCheck = (CheckBoxPreference) findPreference("isBypassApps"); + + if (mProgressDialog == null) + mProgressDialog = ProgressDialog.show(this, "", + getString(R.string.initializing), true, true); + + final SharedPreferences settings = PreferenceManager + .getDefaultSharedPreferences(this); + + new Thread() { + @Override + public void run() { + + Utils.isRoot(); + + String versionName; + try { + versionName = getPackageManager().getPackageInfo( + getPackageName(), 0).versionName; + } catch (NameNotFoundException e) { + versionName = "NONE"; + } + + if (!settings.getBoolean(versionName, false)) { + + Editor edit = settings.edit(); + edit.putBoolean(versionName, true); + edit.commit(); + + reset(); + + } + + handler.sendEmptyMessage(MSG_INITIAL_FINISH); + } + }.start(); + } + + @Override + public boolean onCreateOptionsMenu(Menu menu) { + menu.add(Menu.NONE, Menu.FIRST + 1, 1, getString(R.string.recovery)) + .setIcon(android.R.drawable.ic_menu_delete); + menu.add(Menu.NONE, Menu.FIRST + 2, 2, getString(R.string.about)) + .setIcon(android.R.drawable.ic_menu_info_details); + return true; + + } + + /** + * Called when the activity is closed. + */ + @Override + public void onDestroy() { + SharedPreferences settings = getSharedPreferences(PREFS_NAME, 0); + + SharedPreferences.Editor editor = settings.edit(); + editor.putBoolean("isConnected", ShadowsocksService.isServiceStarted()); + editor.commit(); + + if (mProgressDialog != null) { + mProgressDialog.dismiss(); + mProgressDialog = null; + } + + super.onDestroy(); + } + + @Override + public boolean onKeyDown(int keyCode, KeyEvent event) { + if (keyCode == KeyEvent.KEYCODE_BACK && event.getRepeatCount() == 0) { // 按下的如果是BACK,同时没有重复 + try { + finish(); + } catch (Exception ignore) { + // Nothing + } + return true; + } + return super.onKeyDown(keyCode, event); + } + + // 菜单项被选择事件 + @Override + public boolean onOptionsItemSelected(MenuItem item) { + switch (item.getItemId()) { + case Menu.FIRST + 1: + recovery(); + break; + case Menu.FIRST + 2: + String versionName = ""; + try { + versionName = getPackageManager().getPackageInfo( + getPackageName(), 0).versionName; + } catch (NameNotFoundException e) { + versionName = ""; + } + showAToast(getString(R.string.about) + " (" + versionName + ")\n\n" + + getString(R.string.copy_rights)); + break; + } + + return true; + } + + @Override + protected void onPause() { + super.onPause(); + + // Unregister the listener whenever a key changes + getPreferenceScreen().getSharedPreferences() + .unregisterOnSharedPreferenceChangeListener(this); + } + + @Override + public boolean onPreferenceTreeClick(PreferenceScreen preferenceScreen, + Preference preference) { + SharedPreferences settings = PreferenceManager + .getDefaultSharedPreferences(this); + + if (preference.getKey() != null + && preference.getKey().equals("proxyedApps")) { + Intent intent = new Intent(this, AppManager.class); + startActivity(intent); + } else if (preference.getKey() != null + && preference.getKey().equals("isRunning")) { + if (!serviceStart()) { + Editor edit = settings.edit(); + edit.putBoolean("isRunning", false); + edit.commit(); + } + } + return super.onPreferenceTreeClick(preferenceScreen, preference); + } + + @Override + protected void onResume() { + super.onResume(); + SharedPreferences settings = PreferenceManager + .getDefaultSharedPreferences(this); + + if (settings.getBoolean("isSystemProxy", false)) { + isGlobalProxyCheck.setEnabled(false); + isGFWListCheck.setEnabled(false); + proxyedApps.setEnabled(false); + isBypassAppsCheck.setEnabled(false); + } else { + if (settings.getBoolean("isGlobalProxy", false)) { + proxyedApps.setEnabled(false); + isBypassAppsCheck.setEnabled(false); + } else { + proxyedApps.setEnabled(true); + isBypassAppsCheck.setEnabled(true); + } + } + + sitekeyText.setEnabled(true); + + Editor edit = settings.edit(); + + if (ShadowsocksService.isServiceStarted()) { + edit.putBoolean("isRunning", true); + } else { + if (settings.getBoolean("isRunning", false)) { + new Thread() { + @Override + public void run() { + crash_recovery(); + handler.sendEmptyMessage(MSG_CRASH_RECOVER); + } + }.start(); + } + edit.putBoolean("isRunning", false); + } + + edit.commit(); + + if (settings.getBoolean("isRunning", false)) { + isRunningCheck.setChecked(true); + disableAll(); + } else { + isRunningCheck.setChecked(false); + enableAll(); + } + + // Setup the initial values + + if (!settings.getString("sitekey", "").equals("")) + sitekeyText.setSummary(settings.getString("sitekey", "")); + + if (!settings.getString("port", "").equals("")) + portText.setSummary(settings.getString("port", + getString(R.string.port_summary))); + + if (!settings.getString("remotePort", "").equals("")) + portText.setSummary(settings.getString("remotePort", + getString(R.string.port_summary))); + + if (!settings.getString("proxy", "").equals("")) + proxyText.setSummary(settings.getString("proxy", + getString(R.string.proxy_summary))); + + // Set up a listener whenever a key changes + getPreferenceScreen().getSharedPreferences() + .registerOnSharedPreferenceChangeListener(this); + } + + @Override + public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, + String key) { + // Let's do something a preference value changes + SharedPreferences settings = PreferenceManager + .getDefaultSharedPreferences(this); + + if (key.equals("isConnecting")) { + if (settings.getBoolean("isConnecting", false)) { + Log.d(TAG, "Connecting start"); + if (mProgressDialog == null) + mProgressDialog = ProgressDialog.show(this, "", + getString(R.string.connecting), true, true); + } else { + Log.d(TAG, "Connecting finish"); + if (mProgressDialog != null) { + mProgressDialog.dismiss(); + mProgressDialog = null; + } + } + } + + if (key.equals("isGlobalProxy")) { + if (settings.getBoolean("isGlobalProxy", false)) { + proxyedApps.setEnabled(false); + isBypassAppsCheck.setEnabled(false); + } else { + proxyedApps.setEnabled(true); + isBypassAppsCheck.setEnabled(true); + } + } + + if (key.equals("isRunning")) { + if (settings.getBoolean("isRunning", false)) { + disableAll(); + isRunningCheck.setChecked(true); + } else { + isRunningCheck.setChecked(false); + enableAll(); + } + } + + if (key.equals("remotePort")) + if (settings.getString("remotePort", "").equals("")) + remotePortText.setSummary(getString(R.string.remote_port_summary)); + else + remotePortText.setSummary(settings.getString("remotePort", "")); + else if (key.equals("port")) + if (settings.getString("port", "").equals("")) + portText.setSummary(getString(R.string.port_summary)); + else + portText.setSummary(settings.getString("port", "")); + else if (key.equals("sitekey")) + if (settings.getString("sitekey", "").equals("")) + sitekeyText.setSummary(getString(R.string.sitekey_summary)); + else + sitekeyText.setSummary(settings.getString("sitekey", "")); + else if (key.equals("proxy")) + if (settings.getString("proxy", "").equals("")) { + proxyText.setSummary(getString(R.string.proxy_summary)); + } else { + proxyText.setSummary(settings.getString("proxy", "")); + } + } + + @Override + public void onStart() { + super.onStart(); + EasyTracker.getInstance().activityStart(this); + } + + @Override + public void onStop() { + super.onStop(); + EasyTracker.getInstance().activityStop(this); + } + + public void reset() { + StringBuilder sb = new StringBuilder(); + sb.append(Utils.getIptables()).append(" -t nat -F OUTPUT").append("\n"); + sb.append("kill -9 `cat /data/data/com.github.shadowsocks/pdnsd.pid`").append("\n"); + sb.append("kill -9 `cat /data/data/com.github.shadowsocks/redsocks.pid`").append("\n"); + sb.append("kill -9 `cat /data/data/com.github.shadowsocks/shadowsocks.pid`").append("\n"); + sb.append("killall pdnsd").append("\n"); + sb.append("killall redsocks").append("\n"); + sb.append("killall shadowsocks").append("\n"); + Utils.runRootCommand(sb.toString()); + + copyAssets(""); + + Utils.runCommand("chmod 755 /data/data/com.github.shadowsocks/iptables\n" + + "chmod 755 /data/data/com.github.shadowsocks/redsocks\n" + + "chmod 755 /data/data/com.github.shadowsocks/pdnsd\n" + + "chmod 755 /data/data/com.github.shadowsocks/shadowsocks\n" + ); + } + + private void recovery() { + + if (mProgressDialog == null) + mProgressDialog = ProgressDialog.show(this, "", getString(R.string.recovering), + true, true); + + final Handler h = new Handler() { + @Override + public void handleMessage(Message msg) { + if (mProgressDialog != null) { + mProgressDialog.dismiss(); + mProgressDialog = null; + } + } + }; + + try { + stopService(new Intent(this, ShadowsocksService.class)); + } catch (Exception e) { + // Nothing + } + + new Thread() { + @Override + public void run() { + + reset(); + + h.sendEmptyMessage(0); + } + }.start(); + + } + + /** + * Called when connect button is clicked. + */ + public boolean serviceStart() { + + if (ShadowsocksService.isServiceStarted()) { + try { + stopService(new Intent(this, ShadowsocksService.class)); + } catch (Exception e) { + // Nothing + } + return false; + } + + SharedPreferences settings = PreferenceManager + .getDefaultSharedPreferences(this); + + final String proxy = settings.getString("proxy", ""); + if (isTextEmpty(proxy, getString(R.string.proxy_empty))) + return false; + + if (proxy.contains("proxyofmax.appspot.com")) { + final TextView message = new TextView(this); + message.setPadding(10, 5, 10, 5); + final SpannableString s = new SpannableString( + getText(R.string.default_proxy_alert)); + Linkify.addLinks(s, Linkify.WEB_URLS); + message.setText(s); + message.setMovementMethod(LinkMovementMethod.getInstance()); + + new AlertDialog.Builder(this) + .setTitle(R.string.warning) + .setCancelable(false) + .setIcon(android.R.drawable.ic_dialog_info) + .setNegativeButton(getString(R.string.ok_iknow), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, + int id) { + dialog.cancel(); + } + }).setView(message).create().show(); + } + + String portText = settings.getString("port", ""); + if (isTextEmpty(portText, getString(R.string.port_empty))) + return false; + try { + int port = Integer.valueOf(portText); + if (port <= 1024) { + this.showAToast(getString(R.string.port_alert)); + return false; + } + } catch (Exception e) { + this.showAToast(getString(R.string.port_alert)); + return false; + } + + try { + Intent it = new Intent(this, ShadowsocksService.class); + startService(it); + } catch (Exception e) { + // Nothing + return false; + } + + return true; + } + + private void showAToast(String msg) { + AlertDialog.Builder builder = new AlertDialog.Builder(this); + builder.setMessage(msg) + .setCancelable(false) + .setNegativeButton(getString(R.string.ok_iknow), + new DialogInterface.OnClickListener() { + @Override + public void onClick(DialogInterface dialog, int id) { + dialog.cancel(); + } + }); + AlertDialog alert = builder.create(); + alert.show(); + } + +} diff --git a/src/com/github/shadowsocks/ShadowsocksApplication.java b/src/com/github/shadowsocks/ShadowsocksApplication.java new file mode 100755 index 00000000..b0ac76c6 --- /dev/null +++ b/src/com/github/shadowsocks/ShadowsocksApplication.java @@ -0,0 +1,13 @@ +package com.github.shadowsocks; + +import android.app.Application; +import com.google.analytics.tracking.android.EasyTracker; + +public class ShadowsocksApplication extends Application { + + @Override + public void onCreate() { + EasyTracker.getInstance().setContext(this); + } + +} diff --git a/src/com/github/shadowsocks/ShadowsocksService.java b/src/com/github/shadowsocks/ShadowsocksService.java new file mode 100755 index 00000000..32ae7fbe --- /dev/null +++ b/src/com/github/shadowsocks/ShadowsocksService.java @@ -0,0 +1,575 @@ +/* gaeproxy - GAppProxy / WallProxy client App for Android + * Copyright (C) 2011 + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + * + * + * ___====-_ _-====___ + * _--^^^#####// \\#####^^^--_ + * _-^##########// ( ) \\##########^-_ + * -############// |\^^/| \\############- + * _/############// (@::@) \\############\_ + * /#############(( \\// ))#############\ + * -###############\\ (oo) //###############- + * -#################\\ / VV \ //#################- + * -###################\\/ \//###################- + * _#/|##########/\######( /\ )######/\##########|\#_ + * |/ |#/\#/\#/\/ \#/\##\ | | /##/\#/ \/\#/\#/\#| \| + * ` |/ V V ` V \#\| | | |/#/ V ' V V \| ' + * ` ` ` ` / | | | | \ ' ' ' ' + * ( | | | | ) + * __\ | | | | /__ + * (vvv(VVV)(VVV)vvv) + * + * HERE BE DRAGONS + * + */ + +package com.github.shadowsocks; + +import android.app.Notification; +import android.app.NotificationManager; +import android.app.PendingIntent; +import android.app.Service; +import android.content.Context; +import android.content.Intent; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; +import android.content.pm.PackageInfo; +import android.content.pm.PackageManager; +import android.os.Handler; +import android.os.IBinder; +import android.os.Message; +import android.os.PowerManager; +import android.preference.PreferenceManager; +import android.util.Log; +import com.google.analytics.tracking.android.EasyTracker; + +import java.io.DataOutputStream; +import java.lang.ref.WeakReference; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.HashSet; + +public class ShadowsocksService extends Service { + + private Notification notification; + private NotificationManager notificationManager; + private PendingIntent pendIntent; + private PowerManager.WakeLock mWakeLock; + + public static final String BASE = "/data/data/com.github.shadowsocks/"; + private static final int MSG_CONNECT_START = 0; + private static final int MSG_CONNECT_FINISH = 1; + private static final int MSG_CONNECT_SUCCESS = 2; + private static final int MSG_CONNECT_FAIL = 3; + private static final int MSG_HOST_CHANGE = 4; + private static final int MSG_STOP_SELF = 5; + + final static String CMD_IPTABLES_RETURN = " -t nat -A OUTPUT -p tcp -d 0.0.0.0 -j RETURN\n"; + + final static String CMD_IPTABLES_REDIRECT_ADD_HTTP = " -t nat -A OUTPUT -p tcp " + + "--dport 80 -j REDIRECT --to 8123\n"; + final static String CMD_IPTABLES_REDIRECT_ADD_HTTPS = " -t nat -A OUTPUT -p tcp " + + "--dport 443 -j REDIRECT --to 8124\n"; + + final static String CMD_IPTABLES_DNAT_ADD_HTTP = " -t nat -A OUTPUT -p tcp " + + "--dport 80 -j DNAT --to-destination 127.0.0.1:8123\n"; + final static String CMD_IPTABLES_DNAT_ADD_HTTPS = " -t nat -A OUTPUT -p tcp " + + "--dport 443 -j DNAT --to-destination 127.0.0.1:8124\n"; + + private static final String TAG = "ShadowsocksService"; + private static final String DEFAULT_HOST = "74.125.128.18"; + private final static int DNS_PORT = 8053; + + private Process httpProcess = null; + private DataOutputStream httpOS = null; + + private String appHost; + private int remotePort; + private int port; + private String sitekey; + + private SharedPreferences settings = null; + + private boolean hasRedirectSupport = true; + private boolean isGlobalProxy = false; + private boolean isGFWList = false; + private boolean isBypassApps = false; + + private ProxyedApp apps[]; + + private static final Class[] mStartForegroundSignature = new Class[]{ + int.class, Notification.class}; + private static final Class[] mStopForegroundSignature = new Class[]{boolean.class}; + private static final Class[] mSetForegroundSignature = new Class[]{boolean.class}; + + private Method mSetForeground; + private Method mStartForeground; + private Method mStopForeground; + + private Object[] mSetForegroundArgs = new Object[1]; + private Object[] mStartForegroundArgs = new Object[2]; + private Object[] mStopForegroundArgs = new Object[1]; + + /* + * This is a hack see + * http://www.mail-archive.com/android-developers@googlegroups + * .com/msg18298.html we are not really able to decide if the service was + * started. So we remember a week reference to it. We set it if we are + * running and clear it if we are stopped. If anything goes wrong, the + * reference will hopefully vanish + */ + private static WeakReference sRunningInstance = null; + + public static boolean isServiceStarted() { + final boolean isServiceStarted; + if (sRunningInstance == null) { + isServiceStarted = false; + } else if (sRunningInstance.get() == null) { + isServiceStarted = false; + sRunningInstance = null; + } else { + isServiceStarted = true; + } + return isServiceStarted; + } + + final Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + Editor ed = settings.edit(); + switch (msg.what) { + case MSG_CONNECT_START: + ed.putBoolean("isConnecting", true); + + PowerManager pm = (PowerManager) getSystemService(Context.POWER_SERVICE); + mWakeLock = pm.newWakeLock(PowerManager.SCREEN_DIM_WAKE_LOCK + | PowerManager.ON_AFTER_RELEASE, "GAEProxy"); + + mWakeLock.acquire(); + + break; + case MSG_CONNECT_FINISH: + ed.putBoolean("isConnecting", false); + + if (mWakeLock != null && mWakeLock.isHeld()) + mWakeLock.release(); + + break; + case MSG_CONNECT_SUCCESS: + ed.putBoolean("isRunning", true); + break; + case MSG_CONNECT_FAIL: + ed.putBoolean("isRunning", false); + break; + case MSG_HOST_CHANGE: + ed.putString("appHost", appHost); + break; + case MSG_STOP_SELF: + stopSelf(); + break; + } + ed.commit(); + super.handleMessage(msg); + } + }; + + public void startShadowsocksDaemon() { + final String cmd = String.format(BASE + + "shadowsocks \"%s\" \"%d\" \"%d\" \"%s\"", + appHost, remotePort, port, sitekey); + Utils.runRootCommand(cmd); + } + + public void startDnsDaemon() { + final String cmd = BASE + "pdnsd -c " + BASE + "pdnsd.conf"; + Utils.runRootCommand(cmd); + } + + private String getVersionName() { + String version; + try { + PackageInfo pi = getPackageManager().getPackageInfo( + getPackageName(), 0); + version = pi.versionName; + } catch (PackageManager.NameNotFoundException e) { + version = "Package name not found"; + } + return version; + } + + public void handleCommand(Intent intent) { + + if (intent == null) { + stopSelf(); + return; + } + + appHost = settings.getString("proxy", "127.0.0.1"); + sitekey = settings.getString("sitekey", "default"); + try { + remotePort = Integer.valueOf(settings.getString("remotePort", "1984")); + } catch (NumberFormatException ex) { + remotePort = 1984; + } + try { + port = Integer.valueOf(settings.getString("port", "1984")); + } catch (NumberFormatException ex) { + port = 1984; + } + + isGlobalProxy = settings.getBoolean("isGlobalProxy", false); + isGFWList = settings.getBoolean("isGFWList", false); + isBypassApps = settings.getBoolean("isBypassApps", false); + + new Thread(new Runnable() { + @Override + public void run() { + + handler.sendEmptyMessage(MSG_CONNECT_START); + + Log.d(TAG, "IPTABLES: " + Utils.getIptables()); + + // Test for Redirect Support + hasRedirectSupport = Utils.getHasRedirectSupport(); + + if (handleConnection()) { + // Connection and forward successful + notifyAlert(getString(R.string.forward_success), + getString(R.string.service_running)); + + handler.sendEmptyMessageDelayed(MSG_CONNECT_SUCCESS, 500); + + + } else { + // Connection or forward unsuccessful + notifyAlert(getString(R.string.forward_fail), + getString(R.string.service_failed)); + + stopSelf(); + handler.sendEmptyMessageDelayed(MSG_CONNECT_FAIL, 500); + } + + handler.sendEmptyMessageDelayed(MSG_CONNECT_FINISH, 500); + + } + }).start(); + markServiceStarted(); + } + + /** + * Called when the activity is first created. + */ + public boolean handleConnection() { + + startShadowsocksDaemon(); + startDnsDaemon(); + setupIptables(); + + return true; + } + + private void initSoundVibrateLights(Notification notification) { + notification.sound = null; + notification.defaults |= Notification.DEFAULT_LIGHTS; + } + + void invokeMethod(Method method, Object[] args) { + try { + method.invoke(this, mStartForegroundArgs); + } catch (InvocationTargetException e) { + // Should not happen. + Log.w(TAG, "Unable to invoke method", e); + } catch (IllegalAccessException e) { + // Should not happen. + Log.w(TAG, "Unable to invoke method", e); + } + } + + private void markServiceStarted() { + sRunningInstance = new WeakReference(this); + } + + private void markServiceStopped() { + sRunningInstance = null; + } + + private void notifyAlert(String title, String info) { + notification.icon = R.drawable.ic_stat_gaeproxy; + notification.tickerText = title; + notification.flags = Notification.FLAG_ONGOING_EVENT; + initSoundVibrateLights(notification); + // notification.defaults = Notification.DEFAULT_SOUND; + notification.setLatestEventInfo(this, getString(R.string.app_name), + info, pendIntent); + startForegroundCompat(1, notification); + } + + private void notifyAlert(String title, String info, int flags) { + notification.icon = R.drawable.ic_stat_gaeproxy; + notification.tickerText = title; + notification.flags = flags; + initSoundVibrateLights(notification); + notification.setLatestEventInfo(this, getString(R.string.app_name), + info, pendIntent); + notificationManager.notify(0, notification); + } + + @Override + public IBinder onBind(Intent intent) { + return null; + } + + @Override + public void onCreate() { + super.onCreate(); + + EasyTracker.getTracker().trackEvent("service", "start", + getVersionName(), 0L); + + settings = PreferenceManager.getDefaultSharedPreferences(this); + notificationManager = (NotificationManager) this + .getSystemService(NOTIFICATION_SERVICE); + + Intent intent = new Intent(this, Shadowsocks.class); + intent.setFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP); + pendIntent = PendingIntent.getActivity(this, 0, intent, 0); + notification = new Notification(); + + try { + mStartForeground = getClass().getMethod("startForeground", + mStartForegroundSignature); + mStopForeground = getClass().getMethod("stopForeground", + mStopForegroundSignature); + } catch (NoSuchMethodException e) { + // Running on an older platform. + mStartForeground = mStopForeground = null; + } + + try { + mSetForeground = getClass().getMethod("setForeground", + mSetForegroundSignature); + } catch (NoSuchMethodException e) { + throw new IllegalStateException( + "OS doesn't have Service.startForeground OR Service.setForeground!"); + } + } + + /** + * Called when the activity is closed. + */ + @Override + public void onDestroy() { + + EasyTracker.getTracker().trackEvent("service", "stop", + getVersionName(), 0L); + + stopForegroundCompat(1); + + notifyAlert(getString(R.string.forward_stop), + getString(R.string.service_stopped), + Notification.FLAG_AUTO_CANCEL); + + try { + if (httpOS != null) { + httpOS.close(); + httpOS = null; + } + if (httpProcess != null) { + httpProcess.destroy(); + httpProcess = null; + } + } catch (Exception e) { + Log.e(TAG, "HTTP Server close unexpected"); + } + + new Thread() { + @Override + public void run() { + + // Make sure the connection is closed, important here + onDisconnect(); + + } + }.start(); + + Editor ed = settings.edit(); + ed.putBoolean("isRunning", false); + ed.putBoolean("isConnecting", false); + ed.commit(); + + try { + notificationManager.cancel(0); + } catch (Exception ignore) { + // Nothing + } + + super.onDestroy(); + + markServiceStopped(); + } + + private void onDisconnect() { + Utils.runRootCommand(Utils.getIptables() + " -t nat -F OUTPUT"); + StringBuilder sb = new StringBuilder(); + sb.append("kill -9 `cat /data/data/com.github.shadowsocks/pdnsd.pid`").append("\n"); + sb.append("kill -9 `cat /data/data/com.github.shadowsocks/redsocks.pid`").append("\n"); + sb.append("kill -9 `cat /data/data/com.github.shadowsocks/shadowsocks.pid`").append("\n"); + Utils.runRootCommand(sb.toString()); + } + + // This is the old onStart method that will be called on the pre-2.0 + // platform. On 2.0 or later we override onStartCommand() so this + // method will not be called. + @Override + public void onStart(Intent intent, int startId) { + + handleCommand(intent); + + } + + @Override + public int onStartCommand(Intent intent, int flags, int startId) { + handleCommand(intent); + // We want this service to continue running until it is explicitly + // stopped, so return sticky. + return START_STICKY; + } + + private boolean setupIptables() { + + StringBuilder init_sb = new StringBuilder(); + + StringBuilder http_sb = new StringBuilder(); + + StringBuilder https_sb = new StringBuilder(); + + init_sb.append(Utils.getIptables()).append(" -t nat -F OUTPUT\n"); + + if (hasRedirectSupport) { + init_sb.append(Utils.getIptables()).append(" -t nat -A OUTPUT -p udp --dport 53 -j REDIRECT --to ").append(DNS_PORT).append("\n"); + } else { + init_sb.append(Utils.getIptables()).append(" -t nat -A OUTPUT -p udp --dport 53 -j DNAT --to-destination 127.0.0.1:").append(DNS_PORT).append("\n"); + } + + String cmd_bypass = Utils.getIptables() + CMD_IPTABLES_RETURN; + + init_sb.append(cmd_bypass.replace("-d 0.0.0.0", "--dport " + remotePort)); + + init_sb.append(cmd_bypass.replace("-d 0.0.0.0", "-m owner --uid-owner " + + getApplicationInfo().uid)); + + if (isGFWList) { + String[] chn_list = getResources().getStringArray(R.array.chn_list); + + for (String item : chn_list) { + init_sb.append(cmd_bypass.replace("0.0.0.0", item)); + } + } + if (isGlobalProxy || isBypassApps) { + http_sb.append(hasRedirectSupport ? Utils.getIptables() + + CMD_IPTABLES_REDIRECT_ADD_HTTP : Utils.getIptables() + + CMD_IPTABLES_DNAT_ADD_HTTP); + https_sb.append(hasRedirectSupport ? Utils.getIptables() + + CMD_IPTABLES_REDIRECT_ADD_HTTPS : Utils.getIptables() + + CMD_IPTABLES_DNAT_ADD_HTTPS); + } + if (!isGlobalProxy) { + // for proxy specified apps + if (apps == null || apps.length <= 0) + apps = AppManager.getProxyedApps(this); + + HashSet uidSet = new HashSet(); + for (ProxyedApp app : apps) { + if (app.isProxyed()) { + uidSet.add(app.getUid()); + } + } + for (int uid : uidSet) { + if (!isBypassApps) { + http_sb.append((hasRedirectSupport ? Utils.getIptables() + + CMD_IPTABLES_REDIRECT_ADD_HTTP : Utils.getIptables() + + CMD_IPTABLES_DNAT_ADD_HTTP).replace("-t nat", + "-t nat -m owner --uid-owner " + uid)); + https_sb.append((hasRedirectSupport ? Utils.getIptables() + + CMD_IPTABLES_REDIRECT_ADD_HTTPS : Utils.getIptables() + + CMD_IPTABLES_DNAT_ADD_HTTPS).replace("-t nat", + "-t nat -m owner --uid-owner " + uid)); + } else { + init_sb.append(cmd_bypass.replace("-d 0.0.0.0", "-m owner --uid-owner " + uid)); + } + } + } + + String init_rules = init_sb.toString(); + Utils.runRootCommand(init_rules, 30 * 1000); + + String redt_rules = http_sb.toString(); + + redt_rules += https_sb.toString(); + + Utils.runRootCommand(redt_rules); + + return true; + + } + + /** + * This is a wrapper around the new startForeground method, using the older + * APIs if it is not available. + */ + void startForegroundCompat(int id, Notification notification) { + // If we have the new startForeground API, then use it. + if (mStartForeground != null) { + mStartForegroundArgs[0] = id; + mStartForegroundArgs[1] = notification; + invokeMethod(mStartForeground, mStartForegroundArgs); + return; + } + + // Fall back on the old API. + mSetForegroundArgs[0] = Boolean.TRUE; + invokeMethod(mSetForeground, mSetForegroundArgs); + notificationManager.notify(id, notification); + } + + /** + * This is a wrapper around the new stopForeground method, using the older + * APIs if it is not available. + */ + void stopForegroundCompat(int id) { + // If we have the new stopForeground API, then use it. + if (mStopForeground != null) { + mStopForegroundArgs[0] = Boolean.TRUE; + try { + mStopForeground.invoke(this, mStopForegroundArgs); + } catch (InvocationTargetException e) { + // Should not happen. + Log.w(TAG, "Unable to invoke stopForeground", e); + } catch (IllegalAccessException e) { + // Should not happen. + Log.w(TAG, "Unable to invoke stopForeground", e); + } + return; + } + + // Fall back on the old API. Note to cancel BEFORE changing the + // foreground state, since we could be killed at that point. + notificationManager.cancel(id); + mSetForegroundArgs[0] = Boolean.FALSE; + invokeMethod(mSetForeground, mSetForegroundArgs); + } + +} diff --git a/src/com/github/shadowsocks/Utils.java b/src/com/github/shadowsocks/Utils.java new file mode 100755 index 00000000..5470ce6a --- /dev/null +++ b/src/com/github/shadowsocks/Utils.java @@ -0,0 +1,427 @@ +package com.github.shadowsocks; + +import android.content.Context; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.content.pm.PackageManager.NameNotFoundException; +import android.graphics.drawable.Drawable; +import android.os.Environment; +import android.util.Log; + +import java.io.*; +import java.util.ArrayList; + +public class Utils { + + /** + * Internal thread used to execute scripts (as root or not). + */ + private static final class ScriptRunner extends Thread { + private final File file; + private final String script; + private final StringBuilder res; + private final boolean asroot; + public int exitcode = -1; + // private Process exec; + private int mProcId; + private FileDescriptor mTermFd; + + /** + * Creates a new script runner. + * + * @param file temporary script file + * @param script script to run + * @param res response output + * @param asroot if true, executes the script as root + */ + public ScriptRunner(File file, String script, StringBuilder res, + boolean asroot) { + this.file = file; + this.script = script; + this.res = res; + this.asroot = asroot; + } + + private int createSubprocess(int[] processId, String cmd) { + ArrayList argList = parse(cmd); + String arg0 = argList.get(0); + String[] args = argList.toArray(new String[1]); + + mTermFd = Exec.createSubprocess(arg0, args, null, processId); + return processId[0]; + } + + /** + * Destroy this script runner + */ + @Override + public synchronized void destroy() { + try { + Exec.hangupProcessGroup(mProcId); + Exec.close(mTermFd); + } catch (NoClassDefFoundError ignore) { + // Nothing + } + } + + private ArrayList parse(String cmd) { + final int PLAIN = 0; + final int WHITESPACE = 1; + final int INQUOTE = 2; + int state = WHITESPACE; + ArrayList result = new ArrayList(); + int cmdLen = cmd.length(); + StringBuilder builder = new StringBuilder(); + for (int i = 0; i < cmdLen; i++) { + char c = cmd.charAt(i); + if (state == PLAIN) { + if (Character.isWhitespace(c)) { + result.add(builder.toString()); + builder.delete(0, builder.length()); + state = WHITESPACE; + } else if (c == '"') { + state = INQUOTE; + } else { + builder.append(c); + } + } else if (state == WHITESPACE) { + if (Character.isWhitespace(c)) { + // do nothing + } else if (c == '"') { + state = INQUOTE; + } else { + state = PLAIN; + builder.append(c); + } + } else if (state == INQUOTE) { + if (c == '\\') { + if (i + 1 < cmdLen) { + i += 1; + builder.append(cmd.charAt(i)); + } + } else if (c == '"') { + state = PLAIN; + } else { + builder.append(c); + } + } + } + if (builder.length() > 0) { + result.add(builder.toString()); + } + return result; + } + + @Override + public void run() { + try { + new File(DEFOUT_FILE).createNewFile(); + file.createNewFile(); + final String abspath = file.getAbsolutePath(); + + // TODO: Rewrite this line + // make sure we have execution permission on the script file + // Runtime.getRuntime().exec("chmod 755 " + abspath).waitFor(); + + // Write the script to be executed + final OutputStreamWriter out = new OutputStreamWriter( + new FileOutputStream(file)); + out.write("#!/system/bin/sh\n"); + out.write(script); + if (!script.endsWith("\n")) + out.write("\n"); + out.write("exit\n"); + out.flush(); + out.close(); + + if (this.asroot) { + // Create the "su" request to run the script + // exec = Runtime.getRuntime().exec( + // root_shell + " -c " + abspath); + + int pid[] = new int[1]; + mProcId = createSubprocess(pid, root_shell + " -c " + + abspath); + } else { + // Create the "sh" request to run the script + // exec = Runtime.getRuntime().exec(getShell() + " " + + // abspath); + + int pid[] = new int[1]; + mProcId = createSubprocess(pid, getShell() + " " + abspath); + } + + final InputStream stdout = new FileInputStream(DEFOUT_FILE); + final byte buf[] = new byte[8192]; + int read = 0; + + exitcode = Exec.waitFor(mProcId); + + // Read stdout + while (stdout.available() > 0) { + read = stdout.read(buf); + if (res != null) + res.append(new String(buf, 0, read)); + } + + } catch (Exception ex) { + if (res != null) + res.append("\n" + ex); + } finally { + destroy(); + } + } + } + + public final static String TAG = "Shadowsocks"; + + public final static String DEFAULT_SHELL = "/system/bin/sh"; + public final static String DEFAULT_ROOT = "/system/bin/su"; + + public final static String ALTERNATIVE_ROOT = "/system/xbin/su"; + public final static String DEFAULT_IPTABLES = "/data/data/com.github.shadowsocks/iptables"; + public final static String ALTERNATIVE_IPTABLES = "/system/bin/iptables"; + public final static String SCRIPT_FILE = "/data/data/com.github.shadowsocks/script"; + public final static String DEFOUT_FILE = "/data/data/com.github.shadowsocks/defout"; + + public final static int TIME_OUT = -99; + private static boolean initialized = false; + private static int hasRedirectSupport = -1; + + private static int isRoot = -1; + private static String shell = null; + private static String root_shell = null; + private static String iptables = null; + + private static String data_path = null; + + private static void checkIptables() { + + if (!isRoot()) { + iptables = DEFAULT_IPTABLES; + return; + } + + // Check iptables binary + iptables = DEFAULT_IPTABLES; + + String lines = null; + + boolean compatible = false; + boolean version = false; + + StringBuilder sb = new StringBuilder(); + String command = iptables + " --version\n" + iptables + + " -L -t nat -n\n" + "exit\n"; + + int exitcode = runScript(command, sb, 10 * 1000, true); + + if (exitcode == TIME_OUT) + return; + + lines = sb.toString(); + + if (lines.contains("OUTPUT")) { + compatible = true; + } + if (lines.contains("v1.4.")) { + version = true; + } + + if (!compatible || !version) { + iptables = ALTERNATIVE_IPTABLES; + if (!new File(iptables).exists()) + iptables = "iptables"; + } + + } + + public static Drawable getAppIcon(Context c, int uid) { + PackageManager pm = c.getPackageManager(); + Drawable appIcon = c.getResources().getDrawable( + android.R.drawable.sym_def_app_icon); + String[] packages = pm.getPackagesForUid(uid); + + if (packages != null) { + if (packages.length == 1) { + try { + ApplicationInfo appInfo = pm.getApplicationInfo( + packages[0], 0); + appIcon = pm.getApplicationIcon(appInfo); + } catch (NameNotFoundException e) { + Log.e(c.getPackageName(), + "No package found matching with the uid " + uid); + } + } + } else { + Log.e(c.getPackageName(), "Package not found for uid " + uid); + } + + return appIcon; + } + + public static String getDataPath(Context ctx) { + + if (data_path == null) { + + if (Environment.MEDIA_MOUNTED.equals(Environment + .getExternalStorageState())) { + data_path = Environment.getExternalStorageDirectory() + .getAbsolutePath(); + } else { + data_path = ctx.getFilesDir().getAbsolutePath(); + } + + Log.d(TAG, "Python Data Path: " + data_path); + } + + return data_path; + } + + public static boolean getHasRedirectSupport() { + if (hasRedirectSupport == -1) + initHasRedirectSupported(); + return hasRedirectSupport == 1 ? true : false; + } + + public static String getIptables() { + if (iptables == null) + checkIptables(); + return iptables; + } + + private static String getShell() { + if (shell == null) { + shell = DEFAULT_SHELL; + if (!new File(shell).exists()) + shell = "sh"; + } + return shell; + } + + public static void initHasRedirectSupported() { + + if (!Utils.isRoot()) + return; + + StringBuilder sb = new StringBuilder(); + String command = Utils.getIptables() + + " -t nat -A OUTPUT -p udp --dport 54 -j REDIRECT --to 8154"; + + int exitcode = runScript(command, sb, 10 * 1000, true); + + String lines = sb.toString(); + + hasRedirectSupport = 1; + + // flush the check command + Utils.runRootCommand(command.replace("-A", "-D")); + + if (exitcode == TIME_OUT) + return; + + if (lines.contains("No chain/target/match")) { + hasRedirectSupport = 0; + } + } + + public static boolean isInitialized() { + if (initialized) + return true; + else { + initialized = true; + return false; + } + + } + + public static boolean isRoot() { + + if (isRoot != -1) + return isRoot == 1 ? true : false; + + // switch between binaries + if (new File(DEFAULT_ROOT).exists()) { + root_shell = DEFAULT_ROOT; + } else if (new File(ALTERNATIVE_ROOT).exists()) { + root_shell = ALTERNATIVE_ROOT; + } else { + root_shell = "su"; + } + + String lines = null; + + StringBuilder sb = new StringBuilder(); + String command = "ls /\n" + "exit\n"; + + int exitcode = runScript(command, sb, 10 * 1000, true); + + if (exitcode == TIME_OUT) { + return false; + } + + lines = sb.toString(); + + if (lines.contains("system")) { + isRoot = 1; + } + + return isRoot == 1 ? true : false; + } + + public static boolean runCommand(String command) { + + return runCommand(command, 10 * 1000); + + } + + public static boolean runCommand(String command, int timeout) { + + Log.d(TAG, command); + + runScript(command, null, timeout, false); + + return true; + } + + public static boolean runRootCommand(String command) { + + return runRootCommand(command, 10 * 1000); + + } + + public static boolean runRootCommand(String command, int timeout) { + + if (!isRoot()) + return false; + + Log.d(TAG, command); + + runScript(command, null, timeout, true); + + return true; + } + + private synchronized static int runScript(String script, StringBuilder res, + long timeout, boolean asroot) { + final File file = new File(SCRIPT_FILE); + final ScriptRunner runner = new ScriptRunner(file, script, res, asroot); + runner.start(); + try { + if (timeout > 0) { + runner.join(timeout); + } else { + runner.join(); + } + if (runner.isAlive()) { + // Timed-out + runner.destroy(); + runner.join(1000); + return TIME_OUT; + } + } catch (InterruptedException ex) { + return TIME_OUT; + } + return runner.exitcode; + } +} diff --git a/travis.keystore b/travis.keystore new file mode 100755 index 0000000000000000000000000000000000000000..fb6d8520d609a8a14dd6c4057497c34c7e637ef1 GIT binary patch literal 2261 zcmd5-`8N~{7oOd|jvD(O8ezyxc$-9#eNPA(Oo(PMOJ<1I$k-`MS+mm&l`UIR%37$D zLZU2%5VB?c^q%iK=lv7DAD$nc=bn4dJ zY;%~6En7x~{UPsNPhiglb)*u%q}{Jiqe1k89Y->Y{YGyh)1GeX1g7;#9s%{0H+J|(?;k&8LPf1>8F zC?`Y>O_j>xy_<{<*D&olVFBc+;lF)f77uW;wtKI$q1s@M7*%N6`iql_jgc*~geWE)}YD^pS*cI^4ZD5bo#7F)JK{2 zOqp$I+$Ql_2BsgJbh)TEcA;r0OpS@$B>FGcJ``w=k)hy^`daU9tfuC~+*d^GM-|fe z$b(hiJ_#hfTN_cUZaLrab716bYK#%6s7#={j3fQ!$kc7I%v`%sWL)E~FIu6-C5B7^ zPX}`N1af^TBQQuZ(7p0CXhP)dZo(6XM^<5I+YuMUJ^31~8DEJB^4U+4gmA{@>Um+z zt&s%B*9c?VsqX7f!}E|J6|#$xyy%M_R$(`5yad+qb#)7<7fIG>4Pxo>;IrvQ$~_pl zpB`~sC!8)iP5Gx#<%p?|Ux@~gMbG}ACKi(JY~NRt0qv__|iM0({3= zn)r$`jBl6d{ixp%B1CTRCPVz8m!LieT)JQ^Z=uzulKdS!w}hF{<97AL!jZS9`JRL) zzQYU#ti8u{0Y9(QlV-zxlY9t zd+v1QTo@C)X9tP7e_K6ZHu_hN1@G`Ou78nWk=JPmg<)r(k zlV~+bDajIe{X@irz7f9FGs`YWIIqlnbC&YcYa0H*vy6LZ!=txLn5Sd6N`5hU{;vUu zb(!l0ridtXih4S7ZtV7w!z4+*G!@izTH&L*aiWjE+x|2bWWBp)u5HvLHdmZhY?%MK z1~5fC4nXnHFL#+YS-PED$x2lUgK+xTx>XGtea2C#gr?e~ zI@q4HYZ77fEg^8DV8JQGyl8AJ{>WIQPwM>T$i5sSz0in2Y)lYE?36m)B9f<~Zd4zV zQOv;k#u1_)pQ(nJ6&XCnm0Rsa8@{28Ck}I%eb42QFEGaPb(JqCW_af2xHX0L2LyWT z4}dco)@q4n0jAp?LFcitDeuow^P}4gYhbx4?ov@s;tUr9-$8`&^y*Tx*tzsV(So~X zP`&^IPx?dF)%X==T5`zH>}QJ+B5_tqZpfxpNLKyYKgkGnQb(f>0uh{uVt`{&3{YSJ z7z6}?AU5W5(kMO{7m{hh+~7M%M<@Ul8Li2K;(~$CLtt>w87oa8l)xXt3Fox;#Swgb zaekTt2R#Q82OMTY@g@>{G{sPeKLR&g(3s+lBgmd7_)+n}BtJ4uQwgQ`r^Ex7vcU!8 z0s`;>vNpj)FFc9lNAQs~C6LH|WC|JoznNe-%n}zOYe7XxBltA6P`W4`O_a9QaUB-~ zpEe4msfGS8{lD3h0hIr@g$Ex7%m4}iPz)e9hyerwA{+1ZRR#3eg5GGnjlUFs{mX5P zy;scm!t$(3=ON{Fp-Ena447fZQ`DKuje+n%$+#|yzuwi z4g2NsPd383Uq%C$@(gY6^G9Eq>C&lB0d6<%&;}|Qk-ttM%718C*8#1)TAQXaYaJJF zr1hVuEBs5SZhbd#W4+>{v@82p@y{9On$(^T2xZ!_o8>Mqj|@xDM#6pg(qgcidfcNo z>?-o7$C6ucpo^~p3B{{e+s$V=Hz$bm{mHwBfFLjs0Q|Q@2S;|`5D=i_*uecdz>FWB z)nn}3xWbcg$v3G^huDzMk8X8(UkS@E zvAher7f!Q|D$#8-5_w?-P3H-Ns7

`QiNf73^C+&yKa7wKm6OWgU%)vdzt+ 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 WQ}svh)DVUayA^Qnsz3@1J^pX*tRqqY literal 0 HcmV?d00001 diff --git a/assets/shadowsocks b/assets/shadowsocks new file mode 100755 index 0000000000000000000000000000000000000000..453daa2c70cdc63489bdf662f1ad9c747844b959 GIT binary patch literal 42312 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 Km)iB@(fu2oa9WT6 literal 0 HcmV?d00001 diff --git a/jni/Android.mk b/jni/Android.mk index 91464352..4ff57c15 100755 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -24,18 +24,15 @@ LOCAL_SRC_FILES := \ include $(BUILD_STATIC_LIBRARY) -#include $(CLEAR_VARS) +include $(CLEAR_VARS) -#PDNSD_SOURCES := $(wildcard $(LOCAL_PATH)/pdnsd/*.c) +PDNSD_SOURCES := $(wildcard $(LOCAL_PATH)/pdnsd/*.c) -#LOCAL_MODULE := pdnsd -#LOCAL_SRC_FILES := $(PDNSD_SOURCES:$(LOCAL_PATH)%=%) +LOCAL_MODULE := pdnsd +LOCAL_SRC_FILES := $(PDNSD_SOURCES:$(LOCAL_PATH)%=%) +LOCAL_CFLAGS := -Wall -O2 -I$(LOCAL_PATH)/pdnsd -#LOCAL_CFLAGS := -O3 - -#LOCAL_STATIC_LIBRARIES := - -#include $(BUILD_STATIC_LIBRARY) +include $(BUILD_EXECUTABLE) include $(CLEAR_VARS) @@ -47,6 +44,17 @@ LOCAL_STATIC_LIBRARIES := libev libcrypto LOCAL_LDLIBS := -llog +include $(BUILD_EXECUTABLE) + +include $(CLEAR_VARS) + +LOCAL_MODULE:= libexec + +LOCAL_SRC_FILES:= \ + termExec.cpp + +LOCAL_LDLIBS := -ldl -llog + include $(BUILD_SHARED_LIBRARY) subdirs := $(addprefix $(LOCAL_PATH)/openssl/,$(addsuffix /Android.mk, \ diff --git a/jni/pdnsd/conff.c b/jni/pdnsd/conff.c index 83b2f686..32f4e885 100644 --- a/jni/pdnsd/conff.c +++ b/jni/pdnsd/conff.c @@ -166,35 +166,6 @@ int read_config_file(const char *nm, globparm_t *global, servparm_array *servers *errstr=NULL; goto close_file; } - else if (sb.st_uid!=init_uid) { - /* Note by Paul Rombouts: - Perhaps we should use getpwuid_r() instead of getpwuid(), which is not necessarily thread safe. - As long as getpwuid() is only used by only one thread, it should be OK, - but it is something to keep in mind. - */ - struct passwd *pws; - char owner[24],user[24]; - if((pws=getpwuid(sb.st_uid))) - strncp(owner,pws->pw_name,sizeof(owner)); - else - sprintf(owner,"%i",sb.st_uid); - if((pws=getpwuid(init_uid))) - strncp(user,pws->pw_name,sizeof(user)); - else - sprintf(user,"%i",init_uid); - if(asprintf(errstr, - "Error: %s file %s is owned by '%s', but pdnsd was started as user '%s'.", - conftype,nm,owner,user)<0) - *errstr=NULL; - goto close_file; - } - else if ((sb.st_mode&(S_IWGRP|S_IWOTH))) { - if(asprintf(errstr, - "Error: Bad %s file permissions: file %s must be only writeable by the user.", - conftype,nm)<0) - *errstr=NULL; - goto close_file; - } } retval=confparse(in,NULL,global,servers,includedepth,errstr); diff --git a/jni/pdnsd/config.h b/jni/pdnsd/config.h index 7d0a69ab..601afae7 100644 --- a/jni/pdnsd/config.h +++ b/jni/pdnsd/config.h @@ -40,7 +40,7 @@ * In normal operation, you will currently only need IPv4. */ #define ENABLE_IPV4 1 #define DEFAULT_IPV4 1 -/* #undef ENABLE_IPV6 */ +#undef ENABLE_IPV6 /* In all pdnsd versions before 1.0.6, DNS queries were always done over * TCP. Now, you have the choice. You can control that behaviour using @@ -55,7 +55,7 @@ * error or times out, the query is retried using UDP. * UDP_TCP: UDP, then TCP. If the UDP reply is truncated (i.e. the tc flag is set), * the query is retried using TCP. */ -#define M_PRESET UDP_ONLY +#define M_PRESET TCP_ONLY /* In addition to choosing the presets, you may also completely disable * one of the protocols (TCP for preset UDP_ONLY and UDP for preset TCP_ONLY). @@ -104,7 +104,7 @@ * default: native; others: gdbm */ #define CACHE_DBM DBM_NATIVE -#define CACHEDIR "/var/cache/pdnsd" +#define CACHEDIR "/data/data/com.github.shadowsocks" #define TEMPDIR "/tmp"; @@ -214,10 +214,10 @@ #define HAVE_FCNTL_H 1 /* Define to 1 if you have the `getline' function. */ -#define HAVE_GETLINE 1 +//#define HAVE_GETLINE 1 /* Define to 1 if you have the `getpwnam_r' function. */ -#define HAVE_GETPWNAM_R 1 +//#define HAVE_GETPWNAM_R 1 /* Define to 1 if you have the `gettimeofday' function. */ #define HAVE_GETTIMEOFDAY 1 @@ -241,7 +241,7 @@ #define HAVE_MEMORY_H 1 /* Define to 1 if you have the `mempcpy' function. */ -#define HAVE_MEMPCPY 1 +//#define HAVE_MEMPCPY 1 /* Define to 1 if you have the `mkfifo' function. */ #define HAVE_MKFIFO 1 @@ -277,10 +277,10 @@ #define HAVE_STDLIB_H 1 /* Define to 1 if you have the `stpcpy' function. */ -#define HAVE_STPCPY 1 +//#define HAVE_STPCPY 1 /* Define to 1 if you have the `stpncpy' function. */ -#define HAVE_STPNCPY 1 +//#define HAVE_STPNCPY 1 /* Define to 1 if you have the `strdup' function. */ #define HAVE_STRDUP 1 diff --git a/jni/pdnsd/main.c b/jni/pdnsd/main.c index 1190b77c..c9568765 100644 --- a/jni/pdnsd/main.c +++ b/jni/pdnsd/main.c @@ -67,7 +67,7 @@ FILE *dbg_file=NULL; volatile int tcp_socket=-1; volatile int udp_socket=-1; sigset_t sigs_msk; -char *conf_file=CONFDIR"/pdnsd.conf"; +char *conf_file="pdnsd.conf"; /* version and licensing information */ @@ -140,7 +140,7 @@ static const char help_message[] = "\n" "-c\t\t--or--\n" "--config-file\tspecifies the file the configuration is read from.\n" - "\t\tDefault is " CONFDIR "/pdnsd.conf\n" + "\t\tDefault is " "pdnsd.conf\n" #ifdef ENABLE_IPV4 "-4\t\tswitches to IPv4 mode.\n" "\t\t" diff --git a/jni/shadowsocks/local.c b/jni/shadowsocks/local.c index 52dfc14b..cc89c84f 100644 --- a/jni/shadowsocks/local.c +++ b/jni/shadowsocks/local.c @@ -18,7 +18,6 @@ #include #include #include -#include #include "local.h" #include "encrypt.h" @@ -38,440 +37,469 @@ static char *_server; static char *_remote_port; struct client_ctx { - ev_io io; - int fd; + ev_io io; + int fd; }; int setnonblocking(int fd) { - int flags; - if (-1 ==(flags = fcntl(fd, F_GETFL, 0))) - flags = 0; - return fcntl(fd, F_SETFL, flags | O_NONBLOCK); + int flags; + if (-1 ==(flags = fcntl(fd, F_GETFL, 0))) + flags = 0; + return fcntl(fd, F_SETFL, flags | O_NONBLOCK); } int create_and_bind(const char *port) { - struct addrinfo hints; - struct addrinfo *result, *rp; - int s, listen_sock; + struct addrinfo hints; + struct addrinfo *result, *rp; + int s, listen_sock; - memset(&hints, 0, sizeof(struct addrinfo)); - hints.ai_family = AF_UNSPEC; /* Return IPv4 and IPv6 choices */ - hints.ai_socktype = SOCK_STREAM; /* We want a TCP socket */ - hints.ai_flags = AI_PASSIVE; /* All interfaces */ + memset(&hints, 0, sizeof(struct addrinfo)); + hints.ai_family = AF_UNSPEC; /* Return IPv4 and IPv6 choices */ + hints.ai_socktype = SOCK_STREAM; /* We want a TCP socket */ + hints.ai_flags = AI_PASSIVE; /* All interfaces */ - s = getaddrinfo("0.0.0.0", port, &hints, &result); - if (s != 0) { - fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(s)); - return -1; - } + s = getaddrinfo("0.0.0.0", port, &hints, &result); + if (s != 0) { + fprintf(stderr, "getaddrinfo: %s\n", gai_strerror(s)); + return -1; + } - for (rp = result; rp != NULL; rp = rp->ai_next) { - listen_sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); - int opt = 1; - setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); - if (listen_sock == -1) - continue; + for (rp = result; rp != NULL; rp = rp->ai_next) { + listen_sock = socket(rp->ai_family, rp->ai_socktype, rp->ai_protocol); + int opt = 1; + setsockopt(listen_sock, SOL_SOCKET, SO_REUSEADDR, &opt, sizeof(opt)); + if (listen_sock == -1) + continue; - s = bind(listen_sock, rp->ai_addr, rp->ai_addrlen); - if (s == 0) { - /* We managed to bind successfully! */ - break; - } else { - perror("bind"); - } + s = bind(listen_sock, rp->ai_addr, rp->ai_addrlen); + if (s == 0) { + /* We managed to bind successfully! */ + break; + } else { + perror("bind"); + } - close(listen_sock); - } + close(listen_sock); + } - if (rp == NULL) { - fprintf(stderr, "Could not bind\n"); - return -1; - } + if (rp == NULL) { + fprintf(stderr, "Could not bind\n"); + return -1; + } - freeaddrinfo(result); + freeaddrinfo(result); - return listen_sock; + return listen_sock; } static void server_recv_cb (EV_P_ ev_io *w, int revents) { - struct server_ctx *server_recv_ctx = (struct server_ctx *)w; - struct server *server = server_recv_ctx->server; - struct remote *remote = server->remote; - if (remote == NULL) { - close_and_free_server(EV_A_ server); - return; - } - while (1) { - ssize_t r = recv(server->fd, remote->buf, BUF_SIZE, 0); - if (r == 0) { - // connection closed - remote->buf_len = 0; - close_and_free_server(EV_A_ server); - if (remote != NULL) { - ev_io_start(EV_A_ &remote->send_ctx->io); - } - return; - } else if(r < 0) { - perror("recv"); - if (errno == EAGAIN) { - // no data - // continue to wait for recv - break; - } else { - close_and_free_server(EV_A_ server); - close_and_free_remote(EV_A_ remote); - return; - } - } - encrypt(remote->buf, r); - int w = send(remote->fd, remote->buf, r, MSG_NOSIGNAL); - if(w == -1) { - perror("send"); - if (errno == EAGAIN) { - // no data, wait for send - ev_io_stop(EV_A_ &server_recv_ctx->io); - ev_io_start(EV_A_ &remote->send_ctx->io); - break; - } else { - close_and_free_server(EV_A_ server); - close_and_free_remote(EV_A_ remote); - return; - } - } else if(w < r) { - char *pt; - for (pt = remote->buf; pt < pt + min(w, BUF_SIZE); pt++) { - *pt = *(pt + w); - } - remote->buf_len = r - w; - ev_io_stop(EV_A_ &server_recv_ctx->io); - ev_io_start(EV_A_ &remote->send_ctx->io); - break; - } - } + struct server_ctx *server_recv_ctx = (struct server_ctx *)w; + struct server *server = server_recv_ctx->server; + struct remote *remote = server->remote; + if (remote == NULL) { + close_and_free_server(EV_A_ server); + return; + } + while (1) { + ssize_t r = recv(server->fd, remote->buf, BUF_SIZE, 0); + if (r == 0) { + // connection closed + remote->buf_len = 0; + close_and_free_server(EV_A_ server); + if (remote != NULL) { + ev_io_start(EV_A_ &remote->send_ctx->io); + } + return; + } else if(r < 0) { + perror("recv"); + if (errno == EAGAIN) { + // no data + // continue to wait for recv + break; + } else { + close_and_free_server(EV_A_ server); + close_and_free_remote(EV_A_ remote); + return; + } + } + encrypt(remote->buf, r); + int w = send(remote->fd, remote->buf, r, MSG_NOSIGNAL); + if(w == -1) { + perror("send"); + if (errno == EAGAIN) { + // no data, wait for send + ev_io_stop(EV_A_ &server_recv_ctx->io); + ev_io_start(EV_A_ &remote->send_ctx->io); + break; + } else { + close_and_free_server(EV_A_ server); + close_and_free_remote(EV_A_ remote); + return; + } + } else if(w < r) { + char *pt; + for (pt = remote->buf; pt < pt + min(w, BUF_SIZE); pt++) { + *pt = *(pt + w); + } + remote->buf_len = r - w; + ev_io_stop(EV_A_ &server_recv_ctx->io); + ev_io_start(EV_A_ &remote->send_ctx->io); + break; + } + } } static void server_send_cb (EV_P_ ev_io *w, int revents) { - struct server_ctx *server_send_ctx = (struct server_ctx *)w; - struct server *server = server_send_ctx->server; - struct remote *remote = server->remote; - if (server->buf_len == 0) { - // close and free - close_and_free_server(EV_A_ server); - close_and_free_remote(EV_A_ remote); - return; - } else { - // has data to send - ssize_t r = send(server->fd, server->buf, - server->buf_len, 0); - if (r < 0) { - perror("send"); - if (errno != EAGAIN) { - close_and_free_server(EV_A_ server); - close_and_free_remote(EV_A_ remote); - return; - } - return; - } - if (r < server->buf_len) { - // printf("r=%d\n", r); - // printf("server->buf_len=%d\n", server->buf_len); - // partly sent, move memory, wait for the next time to send - char *pt; - for (pt = server->buf; pt < pt + min(r, BUF_SIZE); pt++) { - *pt = *(pt + r); - } - server->buf_len -= r; - return; - } else { - // all sent out, wait for reading - ev_io_stop(EV_A_ &server_send_ctx->io); - if (remote != NULL) { - ev_io_start(EV_A_ &remote->recv_ctx->io); - } else { - close_and_free_server(EV_A_ server); - close_and_free_remote(EV_A_ remote); - return; - } - } - } + struct server_ctx *server_send_ctx = (struct server_ctx *)w; + struct server *server = server_send_ctx->server; + struct remote *remote = server->remote; + if (server->buf_len == 0) { + // close and free + close_and_free_server(EV_A_ server); + close_and_free_remote(EV_A_ remote); + return; + } else { + // has data to send + ssize_t r = send(server->fd, server->buf, + server->buf_len, 0); + if (r < 0) { + perror("send"); + if (errno != EAGAIN) { + close_and_free_server(EV_A_ server); + close_and_free_remote(EV_A_ remote); + return; + } + return; + } + if (r < server->buf_len) { + // printf("r=%d\n", r); + // printf("server->buf_len=%d\n", server->buf_len); + // partly sent, move memory, wait for the next time to send + char *pt; + for (pt = server->buf; pt < pt + min(r, BUF_SIZE); pt++) { + *pt = *(pt + r); + } + server->buf_len -= r; + return; + } else { + // all sent out, wait for reading + ev_io_stop(EV_A_ &server_send_ctx->io); + if (remote != NULL) { + ev_io_start(EV_A_ &remote->recv_ctx->io); + } else { + close_and_free_server(EV_A_ server); + close_and_free_remote(EV_A_ remote); + return; + } + } + } } static void remote_recv_cb (EV_P_ ev_io *w, int revents) { - struct remote_ctx *remote_recv_ctx = (struct remote_ctx *)w; - struct remote *remote = remote_recv_ctx->remote; - struct server *server = remote->server; - if (server == NULL) { - close_and_free_remote(EV_A_ remote); - return; - } - while (1) { - ssize_t r = recv(remote->fd, server->buf, BUF_SIZE, 0); - // printf("after recv: r=%d\n", r); - if (r == 0) { - // connection closed - server->buf_len = 0; - close_and_free_remote(EV_A_ remote); - if (server != NULL) { - ev_io_start(EV_A_ &server->send_ctx->io); - } - return; - } else if(r < 0) { - perror("recv"); - if (errno == EAGAIN) { - // no data - // continue to wait for recv - break; - } else { - close_and_free_server(EV_A_ server); - close_and_free_remote(EV_A_ remote); - return; - } - } - decrypt(server->buf, r); - int w = send(server->fd, server->buf, r, MSG_NOSIGNAL); - // printf("after send: w=%d\n", w); - if(w == -1) { - perror("send"); - if (errno == EAGAIN) { - // no data, wait for send - ev_io_stop(EV_A_ &remote_recv_ctx->io); - ev_io_start(EV_A_ &server->send_ctx->io); - break; - } else { - close_and_free_server(EV_A_ server); - close_and_free_remote(EV_A_ remote); - return; - } - } else if(w < r) { - char *pt; - for (pt = server->buf; pt < pt + min(w, BUF_SIZE); pt++) { - *pt = *(pt + w); - } - server->buf_len = r - w; - ev_io_stop(EV_A_ &remote_recv_ctx->io); - ev_io_start(EV_A_ &server->send_ctx->io); - break; - } - } + struct remote_ctx *remote_recv_ctx = (struct remote_ctx *)w; + struct remote *remote = remote_recv_ctx->remote; + struct server *server = remote->server; + if (server == NULL) { + close_and_free_remote(EV_A_ remote); + return; + } + while (1) { + ssize_t r = recv(remote->fd, server->buf, BUF_SIZE, 0); + // printf("after recv: r=%d\n", r); + if (r == 0) { + // connection closed + server->buf_len = 0; + close_and_free_remote(EV_A_ remote); + if (server != NULL) { + ev_io_start(EV_A_ &server->send_ctx->io); + } + return; + } else if(r < 0) { + perror("recv"); + if (errno == EAGAIN) { + // no data + // continue to wait for recv + break; + } else { + close_and_free_server(EV_A_ server); + close_and_free_remote(EV_A_ remote); + return; + } + } + decrypt(server->buf, r); + int w = send(server->fd, server->buf, r, MSG_NOSIGNAL); + // printf("after send: w=%d\n", w); + if(w == -1) { + perror("send"); + if (errno == EAGAIN) { + // no data, wait for send + ev_io_stop(EV_A_ &remote_recv_ctx->io); + ev_io_start(EV_A_ &server->send_ctx->io); + break; + } else { + close_and_free_server(EV_A_ server); + close_and_free_remote(EV_A_ remote); + return; + } + } else if(w < r) { + char *pt; + for (pt = server->buf; pt < pt + min(w, BUF_SIZE); pt++) { + *pt = *(pt + w); + } + server->buf_len = r - w; + ev_io_stop(EV_A_ &remote_recv_ctx->io); + ev_io_start(EV_A_ &server->send_ctx->io); + break; + } + } } static void remote_send_cb (EV_P_ ev_io *w, int revents) { - struct remote_ctx *remote_send_ctx = (struct remote_ctx *)w; - struct remote *remote = remote_send_ctx->remote; - struct server *server = remote->server; - if (!remote_send_ctx->connected) { - socklen_t len; - struct sockaddr_storage addr; - len = sizeof addr; - int r = getpeername(remote->fd, (struct sockaddr*)&addr, &len); - if (r == 0) { - remote_send_ctx->connected = 1; - ev_io_stop(EV_A_ &remote_send_ctx->io); - ev_io_start(EV_A_ &server->recv_ctx->io); - ev_io_start(EV_A_ &remote->recv_ctx->io); - } else { - perror("getpeername"); - // not connected - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } - } else { - if (remote->buf_len == 0) { - // close and free - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } else { - // has data to send - ssize_t r = send(remote->fd, remote->buf, - remote->buf_len, 0); - if (r < 0) { - perror("send"); - if (errno != EAGAIN) { - // close and free - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } - return; - } - if (r < remote->buf_len) { - // partly sent, move memory, wait for the next time to send - char *pt; - for (pt = remote->buf; pt < pt + min(r, BUF_SIZE); pt++) { - *pt = *(pt + r); - } - remote->buf_len -= r; - return; - } else { - // all sent out, wait for reading - ev_io_stop(EV_A_ &remote_send_ctx->io); - if (server != NULL) { - ev_io_start(EV_A_ &server->recv_ctx->io); - } else { - close_and_free_remote(EV_A_ remote); - close_and_free_server(EV_A_ server); - return; - } - } - } + struct remote_ctx *remote_send_ctx = (struct remote_ctx *)w; + struct remote *remote = remote_send_ctx->remote; + struct server *server = remote->server; + if (!remote_send_ctx->connected) { + socklen_t len; + struct sockaddr_storage addr; + len = sizeof addr; + int r = getpeername(remote->fd, (struct sockaddr*)&addr, &len); + if (r == 0) { + remote_send_ctx->connected = 1; + ev_io_stop(EV_A_ &remote_send_ctx->io); + ev_io_start(EV_A_ &server->recv_ctx->io); + ev_io_start(EV_A_ &remote->recv_ctx->io); + } else { + perror("getpeername"); + // not connected + close_and_free_remote(EV_A_ remote); + close_and_free_server(EV_A_ server); + return; + } + } else { + if (remote->buf_len == 0) { + // close and free + close_and_free_remote(EV_A_ remote); + close_and_free_server(EV_A_ server); + return; + } else { + // has data to send + ssize_t r = send(remote->fd, remote->buf, + remote->buf_len, 0); + if (r < 0) { + perror("send"); + if (errno != EAGAIN) { + // close and free + close_and_free_remote(EV_A_ remote); + close_and_free_server(EV_A_ server); + return; + } + return; + } + if (r < remote->buf_len) { + // partly sent, move memory, wait for the next time to send + char *pt; + for (pt = remote->buf; pt < pt + min(r, BUF_SIZE); pt++) { + *pt = *(pt + r); + } + remote->buf_len -= r; + return; + } else { + // all sent out, wait for reading + ev_io_stop(EV_A_ &remote_send_ctx->io); + if (server != NULL) { + ev_io_start(EV_A_ &server->recv_ctx->io); + } else { + close_and_free_remote(EV_A_ remote); + close_and_free_server(EV_A_ server); + return; + } + } + } - } + } } struct remote* new_remote(int fd) { - struct remote *remote; - remote = malloc(sizeof(struct remote)); - remote->fd = fd; - remote->recv_ctx = malloc(sizeof(struct remote_ctx)); - remote->send_ctx = malloc(sizeof(struct remote_ctx)); - ev_io_init(&remote->recv_ctx->io, remote_recv_cb, fd, EV_READ); - ev_io_init(&remote->send_ctx->io, remote_send_cb, fd, EV_WRITE); - remote->recv_ctx->remote = remote; - remote->recv_ctx->connected = 0; - remote->send_ctx->remote = remote; - remote->send_ctx->connected = 0; - fprintf(stderr, "new remote\n"); - return remote; + struct remote *remote; + remote = malloc(sizeof(struct remote)); + remote->fd = fd; + remote->recv_ctx = malloc(sizeof(struct remote_ctx)); + remote->send_ctx = malloc(sizeof(struct remote_ctx)); + ev_io_init(&remote->recv_ctx->io, remote_recv_cb, fd, EV_READ); + ev_io_init(&remote->send_ctx->io, remote_send_cb, fd, EV_WRITE); + remote->recv_ctx->remote = remote; + remote->recv_ctx->connected = 0; + remote->send_ctx->remote = remote; + remote->send_ctx->connected = 0; + fprintf(stderr, "new remote\n"); + return remote; } void free_remote(struct remote *remote) { - if (remote != NULL) { - if (remote->server != NULL) { - remote->server->remote = NULL; - } - free(remote->recv_ctx); - free(remote->send_ctx); - free(remote); - fprintf(stderr, "free remote\n"); - } + if (remote != NULL) { + if (remote->server != NULL) { + remote->server->remote = NULL; + } + free(remote->recv_ctx); + free(remote->send_ctx); + free(remote); + fprintf(stderr, "free remote\n"); + } } void close_and_free_remote(EV_P_ struct remote *remote) { - if (remote != NULL) { - ev_io_stop(EV_A_ &remote->send_ctx->io); - ev_io_stop(EV_A_ &remote->recv_ctx->io); - close(remote->fd); - free_remote(remote); - } + if (remote != NULL) { + ev_io_stop(EV_A_ &remote->send_ctx->io); + ev_io_stop(EV_A_ &remote->recv_ctx->io); + close(remote->fd); + free_remote(remote); + } } struct server* new_server(int fd) { - struct server *server; - server = malloc(sizeof(struct server)); - server->fd = fd; - server->recv_ctx = malloc(sizeof(struct server_ctx)); - server->send_ctx = malloc(sizeof(struct server_ctx)); - ev_io_init(&server->recv_ctx->io, server_recv_cb, fd, EV_READ); - ev_io_init(&server->send_ctx->io, server_send_cb, fd, EV_WRITE); - server->recv_ctx->server = server; - server->recv_ctx->connected = 0; - server->send_ctx->server = server; - server->send_ctx->connected = 0; - fprintf(stderr, "new server\n"); - return server; + struct server *server; + server = malloc(sizeof(struct server)); + server->fd = fd; + server->recv_ctx = malloc(sizeof(struct server_ctx)); + server->send_ctx = malloc(sizeof(struct server_ctx)); + ev_io_init(&server->recv_ctx->io, server_recv_cb, fd, EV_READ); + ev_io_init(&server->send_ctx->io, server_send_cb, fd, EV_WRITE); + server->recv_ctx->server = server; + server->recv_ctx->connected = 0; + server->send_ctx->server = server; + server->send_ctx->connected = 0; + fprintf(stderr, "new server\n"); + return server; } void free_server(struct server *server) { - if (server != NULL) { - if (server->remote != NULL) { - server->remote->server = NULL; - } - free(server->recv_ctx); - free(server->send_ctx); - free(server); - fprintf(stderr, "free server\n"); - } + if (server != NULL) { + if (server->remote != NULL) { + server->remote->server = NULL; + } + free(server->recv_ctx); + free(server->send_ctx); + free(server); + fprintf(stderr, "free server\n"); + } } void close_and_free_server(EV_P_ struct server *server) { - if (server != NULL) { - ev_io_stop(EV_A_ &server->send_ctx->io); - ev_io_stop(EV_A_ &server->recv_ctx->io); - close(server->fd); - free_server(server); - } + if (server != NULL) { + ev_io_stop(EV_A_ &server->send_ctx->io); + ev_io_stop(EV_A_ &server->recv_ctx->io); + close(server->fd); + free_server(server); + } } static void accept_cb (EV_P_ ev_io *w, int revents) { - struct listen_ctx *listener = (struct listen_ctx *)w; - int serverfd; - while (1) { - serverfd = accept(listener->fd, NULL, NULL); - if (serverfd == -1) { - perror("accept"); - break; - } - setnonblocking(serverfd); - struct server *server = new_server(serverfd); - struct addrinfo hints, *res; - int sockfd; - memset(&hints, 0, sizeof hints); - hints.ai_family = AF_UNSPEC; - hints.ai_socktype = SOCK_STREAM; - getaddrinfo(_server, _remote_port, &hints, &res); - sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol); - if (sockfd < 0) { - perror("socket"); - close(sockfd); - free_server(server); - continue; - } - setnonblocking(sockfd); - struct remote *remote = new_remote(sockfd); - server->remote = remote; - remote->server = server; - connect(sockfd, res->ai_addr, res->ai_addrlen); - freeaddrinfo(res); - // listen to remote connected event - ev_io_start(EV_A_ &remote->send_ctx->io); - break; - } + struct listen_ctx *listener = (struct listen_ctx *)w; + int serverfd; + while (1) { + serverfd = accept(listener->fd, NULL, NULL); + if (serverfd == -1) { + perror("accept"); + break; + } + setnonblocking(serverfd); + struct server *server = new_server(serverfd); + struct addrinfo hints, *res; + int sockfd; + memset(&hints, 0, sizeof hints); + hints.ai_family = AF_UNSPEC; + hints.ai_socktype = SOCK_STREAM; + getaddrinfo(_server, _remote_port, &hints, &res); + sockfd = socket(res->ai_family, res->ai_socktype, res->ai_protocol); + if (sockfd < 0) { + perror("socket"); + close(sockfd); + free_server(server); + continue; + } + setnonblocking(sockfd); + struct remote *remote = new_remote(sockfd); + server->remote = remote; + remote->server = server; + connect(sockfd, res->ai_addr, res->ai_addrlen); + freeaddrinfo(res); + // listen to remote connected event + ev_io_start(EV_A_ &remote->send_ctx->io); + break; + } } -int start_local (const char *server, const char *remote_port, - const char *port, const char *key) +int main (int argc, char **argv) { + if (argc < 5) + return -1; + + const char *server = argv[1]; + const char *remote_port = argv[2]; + const char *port = argv[3]; + const char *key = argv[4]; + + /* Our process ID and Session ID */ + pid_t pid, sid; + + /* Fork off the parent process */ + pid = fork(); + if (pid < 0) { + exit(EXIT_FAILURE); + } + /* If we got a good PID, then + we can exit the parent process. */ + if (pid > 0) { + FILE *file = fopen("/data/data/com.github.shadowsocks/shadowsocks.pid", "w"); + fprintf(file, "%d", pid); + fclose(file); + exit(EXIT_SUCCESS); + } + + /* Change the file mode mask */ + umask(0); + + /* Open any logs here */ + + /* Create a new SID for the child process */ + sid = setsid(); + if (sid < 0) { + /* Log the failure */ + exit(EXIT_FAILURE); + } + + + /* Change the current working directory */ + if ((chdir("/")) < 0) { + /* Log the failure */ + exit(EXIT_FAILURE); + } + + /* Close out the standard file descriptors */ + close(STDIN_FILENO); + close(STDOUT_FILENO); + close(STDERR_FILENO); + _server = strdup(server); _remote_port = strdup(remote_port); - fprintf(stderr, "calculating ciphers\n"); - get_table(key); + fprintf(stderr, "calculating ciphers\n"); + get_table(key); - int listenfd; - listenfd = create_and_bind(port); - if (listenfd < 0) { - LOGE("bind() error.."); - return 1; - } - if (listen(listenfd, SOMAXCONN) == -1) { - LOGE("listen() error."); - return 1; - } - LOGD("server listening at port %s\n", port); - - setnonblocking(listenfd); - struct listen_ctx listen_ctx; - listen_ctx.fd = listenfd; - struct ev_loop *loop = EV_DEFAULT; - ev_io_init (&listen_ctx.io, accept_cb, listenfd, EV_READ); - ev_io_start (loop, &listen_ctx.io); - ev_run (loop, 0); - return 0; -} - -jint Java_com_github_shadowsocks_Local_main(JNIEnv *env, jobject thiz, jstring server_str, - jstring remote_port_str, jstring port_str, jstring key_str) { - - const char *server = (*env)->GetStringUTFChars(env, server_str, 0); - const char *remote_port = (*env)->GetStringUTFChars(env, remote_port_str, 0); - const char *port = (*env)->GetStringUTFChars(env, port_str, 0); - const char *key = (*env)->GetStringUTFChars(env, key_str, 0); - - int ret = start_local(server, remote_port, port, key); - - (*env)->ReleaseStringUTFChars(env, server_str, server); - (*env)->ReleaseStringUTFChars(env, remote_port_str, remote_port); - (*env)->ReleaseStringUTFChars(env, port_str, port); - (*env)->ReleaseStringUTFChars(env, key_str, key); - - return ret; + int listenfd; + listenfd = create_and_bind(port); + if (listenfd < 0) { + LOGE("bind() error.."); + return 1; + } + if (listen(listenfd, SOMAXCONN) == -1) { + LOGE("listen() error."); + return 1; + } + LOGD("server listening at port %s\n", port); + setnonblocking(listenfd); + struct listen_ctx listen_ctx; + listen_ctx.fd = listenfd; + struct ev_loop *loop = EV_DEFAULT; + ev_io_init (&listen_ctx.io, accept_cb, listenfd, EV_READ); + ev_io_start (loop, &listen_ctx.io); + ev_run (loop, 0); + return 0; } diff --git a/jni/termExec.cpp b/jni/termExec.cpp new file mode 100644 index 00000000..e2c83d2b --- /dev/null +++ b/jni/termExec.cpp @@ -0,0 +1,400 @@ +/* + * Copyright (C) 2008 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define LOG_TAG "Exec" + +#include "jni.h" +#include + +#define LOGI(...) do { __android_log_print(ANDROID_LOG_INFO, LOG_TAG, __VA_ARGS__); } while(0) +#define LOGW(...) do { __android_log_print(ANDROID_LOG_WARN, LOG_TAG, __VA_ARGS__); } while(0) +#define LOGE(...) do { __android_log_print(ANDROID_LOG_ERROR, LOG_TAG, __VA_ARGS__); } while(0) + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +static jclass class_fileDescriptor; +static jfieldID field_fileDescriptor_descriptor; +static jmethodID method_fileDescriptor_init; + +typedef unsigned short char16_t; + +class String8 { +public: + String8() { + mString = 0; + } + + ~String8() { + if (mString) { + free(mString); + } + } + + void set(const char16_t* o, size_t numChars) { + if (mString) { + free(mString); + } + mString = (char*) malloc(numChars + 1); + if (!mString) { + return; + } + for (size_t i = 0; i < numChars; i++) { + mString[i] = (char) o[i]; + } + mString[numChars] = '\0'; + } + + const char* string() { + return mString; + } +private: + char* mString; +}; + +static int throwOutOfMemoryError(JNIEnv *env, const char *message) +{ + jclass exClass; + const char *className = "java/lang/OutOfMemoryError"; + + exClass = env->FindClass(className); + return env->ThrowNew(exClass, message); +} + +static int create_subprocess(const char *cmd, + char *const argv[], char *const envp[], int* pProcessId) +{ + char filename[] = "/data/data/com.github.shadowsocks/defout"; + char script[] = "/data/data/com.github.shadowsocks/script"; + pid_t pid; + + if (chmod(script, 0755) < 0) { + LOGE("error to chmod\n"); + exit(-1); + } + + int defout = open(filename, O_RDWR | O_CREAT | O_TRUNC, 0600); + + if(defout < 0) { + LOGE("open file error\n"); + exit(-1); + } + + pid = fork(); + + if(pid < 0) { + LOGE("- fork failed: %s -\n", strerror(errno)); + return -1; + } + + if(pid == 0){ + + //setsid(); + + dup2(defout, 1); + dup2(defout, 2); + + if (envp) { + for (; *envp; ++envp) { + putenv(*envp); + } + } + + execv(cmd, argv); + exit(-1); + } else { + *pProcessId = (int) pid; + return defout; + } +} + + +static jobject android_os_Exec_createSubProcess(JNIEnv *env, jobject clazz, + jstring cmd, jobjectArray args, jobjectArray envVars, + jintArray processIdArray) +{ + const jchar* str = cmd ? env->GetStringCritical(cmd, 0) : 0; + String8 cmd_8; + if (str) { + cmd_8.set(str, env->GetStringLength(cmd)); + env->ReleaseStringCritical(cmd, str); + } + + jsize size = args ? env->GetArrayLength(args) : 0; + char **argv = NULL; + String8 tmp_8; + if (size > 0) { + argv = (char **)malloc((size+1)*sizeof(char *)); + if (!argv) { + throwOutOfMemoryError(env, "Couldn't allocate argv array"); + return NULL; + } + for (int i = 0; i < size; ++i) { + jstring arg = reinterpret_cast(env->GetObjectArrayElement(args, i)); + str = env->GetStringCritical(arg, 0); + if (!str) { + throwOutOfMemoryError(env, "Couldn't get argument from array"); + return NULL; + } + tmp_8.set(str, env->GetStringLength(arg)); + env->ReleaseStringCritical(arg, str); + argv[i] = strdup(tmp_8.string()); + } + argv[size] = NULL; + } + + size = envVars ? env->GetArrayLength(envVars) : 0; + char **envp = NULL; + if (size > 0) { + envp = (char **)malloc((size+1)*sizeof(char *)); + if (!envp) { + throwOutOfMemoryError(env, "Couldn't allocate envp array"); + return NULL; + } + for (int i = 0; i < size; ++i) { + jstring var = reinterpret_cast(env->GetObjectArrayElement(envVars, i)); + str = env->GetStringCritical(var, 0); + if (!str) { + throwOutOfMemoryError(env, "Couldn't get env var from array"); + return NULL; + } + tmp_8.set(str, env->GetStringLength(var)); + env->ReleaseStringCritical(var, str); + envp[i] = strdup(tmp_8.string()); + } + envp[size] = NULL; + } + + int procId; + int ptm = create_subprocess(cmd_8.string(), argv, envp, &procId); + + if (argv) { + for (char **tmp = argv; *tmp; ++tmp) { + free(*tmp); + } + free(argv); + } + if (envp) { + for (char **tmp = envp; *tmp; ++tmp) { + free(*tmp); + } + free(envp); + } + + if (processIdArray) { + int procIdLen = env->GetArrayLength(processIdArray); + if (procIdLen > 0) { + jboolean isCopy; + + int* pProcId = (int*) env->GetPrimitiveArrayCritical(processIdArray, &isCopy); + if (pProcId) { + *pProcId = procId; + env->ReleasePrimitiveArrayCritical(processIdArray, pProcId, 0); + } + } + } + + jobject result = env->NewObject(class_fileDescriptor, method_fileDescriptor_init); + + if (!result) { + LOGE("Couldn't create a FileDescriptor."); + } + else { + env->SetIntField(result, field_fileDescriptor_descriptor, ptm); + } + + return result; +} + + +static int android_os_Exec_waitFor(JNIEnv *env, jobject clazz, + jint procId) { + int status; + waitpid(procId, &status, 0); + int result = 0; + if (WIFEXITED(status)) { + result = WEXITSTATUS(status); + } + return result; +} + +static void android_os_Exec_close(JNIEnv *env, jobject clazz, jobject fileDescriptor) +{ + int fd; + + fd = env->GetIntField(fileDescriptor, field_fileDescriptor_descriptor); + + if (env->ExceptionOccurred() != NULL) { + return; + } + + close(fd); +} + +static void android_os_Exec_hangupProcessGroup(JNIEnv *env, jobject clazz, + jint procId) { + kill(-procId, SIGHUP); +} + + +static int register_FileDescriptor(JNIEnv *env) +{ + jclass localRef_class_fileDescriptor = env->FindClass("java/io/FileDescriptor"); + + if (localRef_class_fileDescriptor == NULL) { + LOGE("Can't find class java/io/FileDescriptor"); + return -1; + } + + class_fileDescriptor = (jclass) env->NewGlobalRef(localRef_class_fileDescriptor); + + env->DeleteLocalRef(localRef_class_fileDescriptor); + + if (class_fileDescriptor == NULL) { + LOGE("Can't get global ref to class java/io/FileDescriptor"); + return -1; + } + + field_fileDescriptor_descriptor = env->GetFieldID(class_fileDescriptor, "descriptor", "I"); + + if (field_fileDescriptor_descriptor == NULL) { + LOGE("Can't find FileDescriptor.descriptor"); + return -1; + } + + method_fileDescriptor_init = env->GetMethodID(class_fileDescriptor, "", "()V"); + if (method_fileDescriptor_init == NULL) { + LOGE("Can't find FileDescriptor.init"); + return -1; + } + return 0; +} + + +static const char *classPathName = "com/github/shadowsocks/Exec"; + +static JNINativeMethod method_table[] = { + { "createSubprocess", "(Ljava/lang/String;[Ljava/lang/String;[Ljava/lang/String;[I)Ljava/io/FileDescriptor;", + (void*) android_os_Exec_createSubProcess }, + { "waitFor", "(I)I", + (void*) android_os_Exec_waitFor}, + { "close", "(Ljava/io/FileDescriptor;)V", + (void*) android_os_Exec_close}, + { "hangupProcessGroup", "(I)V", + (void*) android_os_Exec_hangupProcessGroup} +}; + +/* + * Register several native methods for one class. + */ +static int registerNativeMethods(JNIEnv* env, const char* className, + JNINativeMethod* gMethods, int numMethods) +{ + jclass clazz; + + clazz = env->FindClass(className); + if (clazz == NULL) { + LOGE("Native registration unable to find class '%s'", className); + return JNI_FALSE; + } + if (env->RegisterNatives(clazz, gMethods, numMethods) < 0) { + LOGE("RegisterNatives failed for '%s'", className); + return JNI_FALSE; + } + + return JNI_TRUE; +} + +/* + * Register native methods for all classes we know about. + * + * returns JNI_TRUE on success. + */ +static int registerNatives(JNIEnv* env) +{ + if (!registerNativeMethods(env, classPathName, method_table, + sizeof(method_table) / sizeof(method_table[0]))) { + return JNI_FALSE; + } + + return JNI_TRUE; +} + + +// ---------------------------------------------------------------------------- + +/* + * This is called by the VM when the shared library is first loaded. + */ + +typedef union { + JNIEnv* env; + void* venv; +} UnionJNIEnvToVoid; + +jint JNI_OnLoad(JavaVM* vm, void* reserved) { + UnionJNIEnvToVoid uenv; + uenv.venv = NULL; + jint result = -1; + JNIEnv* env = NULL; + + LOGI("JNI_OnLoad"); + + if (vm->GetEnv(&uenv.venv, JNI_VERSION_1_4) != JNI_OK) { + LOGE("ERROR: GetEnv failed"); + goto bail; + } + env = uenv.env; + + if ((result = register_FileDescriptor(env)) < 0) { + LOGE("ERROR: registerFileDescriptor failed"); + goto bail; + } + + if (registerNatives(env) != JNI_TRUE) { + LOGE("ERROR: registerNatives failed"); + goto bail; + } + + result = JNI_VERSION_1_4; + +bail: + return result; +} diff --git a/pom.xml b/pom.xml new file mode 100755 index 00000000..a412dca7 --- /dev/null +++ b/pom.xml @@ -0,0 +1,222 @@ + + + 4.0.0 + com.github.shadowsocks + shadowsocks + 1.0 + apk + Shadowsocks + + + + madeye-maven-repository + http://madeye-maven-repository.googlecode.com/git + + true + + + false + + + + + + + UTF-8 + + + + + + com.google.android + android + 4.1.1.4 + provided + + + + com.google.android.analytics + analytics + V2 + + + + commons-codec + commons-codec + 1.5 + + + + + ${project.artifactId} + src + + + + maven-jarsigner-plugin + 1.2 + + + com.jayway.maven.plugins.android.generation2 + android-maven-plugin + 3.4.1 + true + + + + + + org.apache.maven.plugins + maven-surefire-plugin + 2.12.4 + + true + + + + org.codehaus.mojo + build-helper-maven-plugin + 1.5 + + + org.apache.maven.plugins + maven-jarsigner-plugin + + + signing + + sign + + package + true + + + + ${project.build.directory}/${project.artifactId}.apk + + ${sign.keystore} + ${sign.alias} + ${sign.storepass} + ${sign.keypass} + true + + -sigalgMD5withRSA + -digestalgSHA1 + + + + + + + com.jayway.maven.plugins.android.generation2 + android-maven-plugin + + + alignApk + install + + zipalign + + + + true + + true + + false + + + true + false + ${project.build.directory}/${project.artifactId}.apk + ${project.build.directory}/${project.artifactId}-${project.version}.apk + + + + 16 + + + + + + + + debug-sign + + + ${basedir}/local.properties + + + + ${basedir}/travis.keystore + travis + travis + travis + + + + release-sign + + + ${basedir}/local.properties + + + + + + org.codehaus.mojo + properties-maven-plugin + 1.0-alpha-2 + + + initialize + + read-project-properties + + + + ${basedir}/local.properties + + + + + + + + + + travis + + + TRAVIS + true + + + + + + org.codehaus.mojo + exec-maven-plugin + + + deploy-to-sae + install + + exec + + + + + ${basedir}/deploy + + ${project.build.directory} + ${project.artifactId}-${project.version}.apk + + + + + + + + diff --git a/res/drawable-hdpi-v11/ic_stat_gaeproxy.png b/res/drawable-hdpi-v11/ic_stat_gaeproxy.png new file mode 100755 index 0000000000000000000000000000000000000000..87d800798c5829009009c1dd7fe07a780287e595 GIT binary patch literal 654 zcmV;90&)F`P)sB3PJM2#O%q5lkV7SeyY1TaArc2Ldq|{15zrg@}z7FYusL@`B*prV*uo=;|Bvh3Z=#DysAz{~93eEWXSeKR|=Ue+CJ-W}t~ih)cs z5?3g$kf{Qu@msHm2gS}hX&BBmdxVT;(C5GNpD@_A+fH3bs<;C>(Fp-S{1Fx~;wlnsluQ?@drHK*yMsD#KOG8+3Dk1XiHawNakY z-@MQ`7oaU1YLv?%=H>qzXbgbY8pKneWE;3?R7f_%`oQ1*!o7d2L|&nG%=O)N2%!E< zYXZnC#{FG8av<3dzoIe)A<0^RS`32%<~hG_q8v3IEs&a)1pR~tAfFhrS&kz)M&zuk zMV&}uuSf9}W zREKqobc?7CP#63^DUxNG&E;~_27`eU1mRCS9v7+G#{%jJAZq7%eiy=TBuSbfqAbhy z@%VxHVWZL52TYm-yAx2YR+k}i+Uay2_j&Vs5}lb5l|=;o}jqi zYPF_O*v800{Ae>Yx~aSLo4G)c~?EolalkVaEx6;smowaVnKsFdB_EGKYmpj3uP%3VqTBfKUk< zn17Ry_tn5 literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/ic_stat_gaeproxy.png b/res/drawable-hdpi/ic_stat_gaeproxy.png new file mode 100755 index 0000000000000000000000000000000000000000..7915f888259102660531aac43b70f32d51e82e4b GIT binary patch literal 1155 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 X!bD!tTXnd>00000NkvXXu0mjf60OIS literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/ing.png b/res/drawable-hdpi/ing.png new file mode 100644 index 0000000000000000000000000000000000000000..42ff8f387fc171a0d7754139ac789fb05cc812f9 GIT binary patch literal 10146 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 Qp#T5?07*qoM6N<$f?D^w*#H0l literal 0 HcmV?d00001 diff --git a/res/drawable-hdpi/off.png b/res/drawable-hdpi/off.png new file mode 100644 index 0000000000000000000000000000000000000000..14670b7f88fdb7a3505abb060bee0de611656cf7 GIT binary patch literal 8518 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 literal 0 HcmV?d00001 diff --git a/res/drawable-ldpi-v9/ic_stat_gaeproxy.png b/res/drawable-ldpi-v9/ic_stat_gaeproxy.png new file mode 100755 index 0000000000000000000000000000000000000000..acb9f873a7aac2d7225f525201de9aef88b1c9e0 GIT binary patch literal 303 zcmV+~0nq-5P)LRl;mY(Wchq5`{yo}M0&KY#u#;N;}=1S)3y_3PIQAnvNF zs+xe+2AE(&LjxZd5CA>@5~%M#&R``bAr6Pc2LQ)mV-!>E)nxzx002ovPDHLkV1l*t Bgt`C# literal 0 HcmV?d00001 diff --git a/res/drawable-ldpi/ic_stat_gaeproxy.png b/res/drawable-ldpi/ic_stat_gaeproxy.png new file mode 100755 index 0000000000000000000000000000000000000000..5d24f04ffba0bddcdad73770368562d0cc6d3c58 GIT binary patch literal 573 zcmV-D0>b@?P)9L67?BiV@2SSVs4ky2Bv#?DG9l4Ngr6{RSm?#|-gz11jLFdG}Pkp)(>n$%3$ zu=5ci`9AkOr<{5>)44Uz_B`+J|Gdw6|04XLL_f#^5A%3Dxy53UWf(>-bbv@CI%&1q z--E%R$e!V0!C>$xCsL_YLRr}Db~q6=8jS}E7Kua{g+d`1bT=Lj2h?gcE)<_E6bdm9 z58MDsMxzl=PfyrxxA^+{!uforz8{ZA)a!K`=J)$4m{cl7B9XxJ^D{`7P^;BgE|_?TrD1Njn}U_gWlSa$6pKZ?yu5I!SoQmTWHK3^&%%bo zAq{i6TnyXOUHN<-4u=Eba2QIZ5_-KJ>2wtfL?WT;aXOud$K$YAEZA%|==FMdeSPK9-F3ZQ zF&>X;n89FR#A5M(Kib>vhUs)l!^p4al9AmM3?#b=HrZ@8qhT72=J@#dD4);gf?>oD z;y;ncOz&ni8vSFp+kdgsgo?ez$H&LtYPFi6c2g+eJD>0v0;c@~4Cm1lV44CI00000 LNkvXXu0mjfnh6c= literal 0 HcmV?d00001 diff --git a/res/drawable-ldpi/icon.png b/res/drawable-ldpi/icon.png new file mode 100644 index 0000000000000000000000000000000000000000..566cd440721243d538ccacc673d409ec1bb298ef GIT binary patch literal 3139 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 literal 0 HcmV?d00001 diff --git a/res/drawable-ldpi/ing.png b/res/drawable-ldpi/ing.png new file mode 100644 index 0000000000000000000000000000000000000000..7305012ba0aec1418d528f5ddc5f1b283964c60b GIT binary patch literal 5157 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 literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi-v9/ic_stat_gaeproxy.png b/res/drawable-mdpi-v9/ic_stat_gaeproxy.png new file mode 100755 index 0000000000000000000000000000000000000000..46fd0ad803198c30659a9f6485a6e87e812d2520 GIT binary patch literal 407 zcmV;I0cie-P)X1^@s6IQ*`u0004ANkl|x^ z#&-Dk@87Eb{{6cSG~hGPFe4TgmcPu*%wCz9nfs6p!7yOjv}udJeft&*)R5`HXOOQgK*jk`> zw17+npdsIiii(8shCyd%=MkVnGhjgK78DfRgemUm=(qr6%T`oW5H!FQXybM+F0SW5 zr}qOjeE?#guV23g0L5Pe4G_oc0+1xoHeVps4RnP%&@~J|Z~glF_wROK_%u{kSA$#v z2Y9nHF#05b8hL=x_Y~;&@7T(Y(ehx>mItI1^#G3Lj2gr!qul@i002ovPDHLkV1lSR By-@%F literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/ic_stat_gaeproxy.png b/res/drawable-mdpi/ic_stat_gaeproxy.png new file mode 100755 index 0000000000000000000000000000000000000000..aaba1b9c4a2227b609c677dc3d19fa569f14b64e GIT binary patch literal 769 zcmV+c1OEJpP)P000>X1^@s6#OZ}&0008WNklcv6&|+G&DyX1E z!nCRAgJ_@@6-bLDV#XPw4+KH&>&-ov=`lB7EmXXlw|Mv5pYPst&Q*m93{?dT$Vg95 z&!?-atFMwIeJmALsZ>828ymmu?d^T1wPeI@xBsrGsd=Z-XuzIDJNNhZxV^mvd;W>X zvx>R9joC7}VR_3$NFU zm)p6svxBLrDX@$zh`YPH!|Lj)h}dj4MWnU06%!K^$Ye5@o}R|Z$qAa8nh*>ILGNO* z7`C>y6p^*HH4*9W?^i?ufdB>v2N8)xu(7crFV@o1g7)@yj$U3~Dk5yYh_Ee@lj;HHipcTtv50hZbVyZI zRRxn-v%}=%Bwv&c_~__}XP4P*2ECh|o#ko#ay&jhQXPp1%M?X~f(duK-544gg27)c}I6pt9Tdin^x(4+$)&+hglSuPx#1ZP1_K>z@;j|==^1poj532;bRa{vGi!vFvd!vV){sAK>D02p*dSaefwW^{L9 za%BKeVQFr3E>1;MAa*k@Gd8K`;w1n85)Vm4K~!i%?OAtJmG`oZ<|erc_FjXE(kzGw zirDA~BA}vz3JTIuz=FLOL{#9=L_wOOVj&1(!wA@Wi`cu-#N_7Y-n5&-zI%R(NnT!p zX>Ywh!dkP=;qaZ`H+yE!%$|?eUi<6kuL%4Vf!`bf{oWJaptaWTJ+TMPhBlPHyXyD$ zanUpN8B8az?HI!6WMf=tCR`_OKrfqF&kW4{VhPNW_P1BM@gH#! zquEryx37jbzhl_PzslNeA=c$o;K=FwxI?EOKKVBufABe;eE7XRCJ_1j?!!-U>)t<6 ze(Eti0yAOMH|SfQbB{roM-VOl2>*We3`YD7(!z^3tTgKDkDi0VF@5n)lpcM63s*nF z)m#5i(Z2WSUwHK7GdzAuqvP`a!TWTcpUdAq{P+ueKs$2wF+2lPVLULLKmw~6j2on! z4Z*xs6Oh#VO*(6?H{PhZ-ek$T2ThyRbp2~|{w)Kui2;V@lb#v&34qDqNQBPLM`7t* z96s?Fr!IbgicpJ`xD%t!#D5J;k%!p^42G~M5oVR zeWt*cpL!n$jy%M!{dbVF>jp+l+JK&eXQ;Eg_6zyOz%t;fTChE5 zNA36vZQ3VXY_m;sK?e!vI%3UhQCJR(g^ATHm5FYalR+v~Sh#u^#humJ zoN%_&SDMrMNH}ST)fIYJc0dPFI~pT&qZX#-Yh7Jjrfu^Q0C``Z-6pFmo$uCvG7p@= zzC9P#W3u5MT!INv?;>zs8D0t`iNu`C$Y4Zs3T|L4sgb|uHu6huvrum#yZ8{6 z?y^PTx;hBUs*CxB23WIgJp*t7i#2BuvGk}q({X$*%p8`Wr`1gK7&sNZ?I%`6r1yCm zf5H%&(9DsrpV_2ozFb^THF*>UWcfv4Rp!_-0IyqUu? z*m!P+gU=2H!YksS0x@;@F)WBbjp)>Kq{C%Z+!^_mD#BSit|4Q`dCbqV!z4{T0;o#> zT9}q!AB%SPz@oG*DwAQ0j$quhQVjFk4hxqxib^I{GZ30!hc#s;&>S^G(h*A}mJdK& zsRfo68X+RPDZ+ELZ_X*!9`YmS^-RatX7r2M4d{HNN~yWyQuK9-L4Wro3?8)+4&FQA z;=c!DBMD+|8K$i`hIwmGVHvqB*$`R@Jv6x|FelR;Udy!L6RVAYlzIrwsE^3a4G^`x z2^Q`$$Fzh5_{}zNvQy!@dEZ2?wRMnc6NOfaNN+maYjrd;@I9Zo!a=g%}mKpQ%5@ znyA2x=;K&GE-y_wif$`FxajWLVr!Fy$W_$M|*NLnL=XE(;QJhs4{Z)3?W zD@>f9j^V-kFl54Z3?hJt1b-x!IwSF2TcjLzLfT<>q#km^>S8NI<#a@7di}eRTk5&} z#Cb-)7OQ@?bRFTp6tAi6JoK`jLja3eWbqg{ay@LkNTmtysGE+PT8f}~<%-9%VoxX# zOIR1nQ_doqKvtxcB2?2C-YXizZ%tzaB{jvA^yZkF)e1B7+F{{NLqzX#LEy4Dj0oL| zsR>h%c4#CL4>%#U)E(HKma)U6tEVa1CUw>7XYhHsE#6qDRh#$5StsHh0yqZm>AO(0rAZ-d0lHv z&1jFAxt%aKPan|*mRMcjiN#q_NGkDyro;t_dtH&dZv@{D!-6f{5s}^+!KsZNglwoc z>Srf40T^+3y(eQ`3Rt?26qL}Xuk)%GHIM0c+YIG_eiB({wOnqaJ4G7-2zPFD%a=h}Z&0#Ox%` zX)Cr5!rV>W5Wb-`CZ{!r-|80MOjzB}CLl$t*3Say(rcU*DfFT6zsG<`)sOoy@_n3E zqMyrJ7T7viv6ZSK4%h=vb|POE;FKjtFq6Ygx{=UFY9MyQ1+2}u$b!BIP3CDNXB}f* z-0AC4xp7-Ku?8S>zQzgl|k+7+YJSy}l#b>DdkXMF4ue#sw01`xaA1qHf%y_U_vwX8k*b^;jEKMvF*^`!x|mBy5emEC+HYBjHn4fn7*k`73Tm& z)$2ks~- zQF`PalT7uv`q zPUj@f+IbzD3vZ(M-TOFn{4vTX@G4F}LD|WN*im#28Ji9vCMg4xSK4D*S_e#9ucK^w zx(-K=hDAKa&zdoZn6@B>RFmFN##u>9MmSsUM+m-$kTl?Ze81tq59b zi|Ok-V@|d%+ihponXhUd(!#|T(i*zPqgV$H*1rtEWUMm*e9FyBAvbr5#(?1|F92*+ z#p^=)j0oMQI*`bSNUBH~UefOqvM(tBD*BYmJE%?zD6?gGDL>5&5QKmc$$g;W9&)#z z!0MzzuBJ)woo|bv*iLW@8iPUZv8wZ#5P$?y-)tf}^%(hGJ3V{DngAHH2DqC}QY)T? zbLAI`78B|H)rvHSJAy1O0wljg z>^8RYz0fP0S&~kr$-apBt4a_Ql?%_{4H)K=3M-EkrMb)$*xLUsh1 z2XR!TN$g4jXkFfOllM|9k}VN_BB$rAIf0P5Y|Q~#aQ2o-pU0qO!i)f6=aXl26W*s55g|%3@AcwIIXHZXBsZ5K_?M_)x!hRAyvCOJ+vX zA#rXZ*F?#RWJf>=)x5cR326DAv)^u|YURCr&wl(im1&v!Jt-tb&XW;U?Yh_wd!^`C zU&NlTLt(-HiV0zX||*ZY^D74=WZAA8q)lEc6)? zjsB#PC{igf8_!M5#8xHlBs)^*@|pek?VK086$sbB5>@a+{Yw<(l;d7`u;TZ{ahdWW z(+BeV5_xgna#);Nret_^=<4=}oyYc9Ise0pb$fU$Ac!vngo*WRRnT(N=MJZdN~q+GXaS6F3R~LIxoe!Nhw+hgq$VRlp2$BBrx(S!6I#>?|;L{`~B+Z z{}4c@?ju@u>OOKaQ>hAC`m#jKk`9Z>vSZ3&qtxo~@71c~ghG{p=h5FoS`{jK4W^ov z$!;+;mNZ#HsW4ZmUK8tCDnN#cHeM3>Zz&r#)A>5TIr`OKIDppd(k+MVDtzBR(+Z zDoeTG0Ue`Z-;p-SbiT>&cE0+6j$Pe!nbLewsj9Vc$Vr=(F)xn+C3+&hgkIHDk|GrW zD8(t%k{XeR0!rhkWhqj%NEw=>DVS~1{NJ$OZ)@Axy5>jbzZRX2k;|LZ6G6147#c|ypqZsv}Rqgd0o-*no zbYAP%`u57#6GUAW_7K*@B~HgGNqOgaz{!jT=Q*9!Y|163UY(Q&PN4vRx%eVW^Y}>`Al4<`!R=$qihBKNT z&=o*zf#Rq{SzZNTXX7!X2^W)YZlJE=erx|#s}7czo3=JyUaR)s^muMNn()3J?M<58 z_jmuu0Fi$*w4mwGbq^fm23^yYBKAL;wH)07*qoM6N<$f;b}_&;S4c literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/ing.png b/res/drawable-mdpi/ing.png new file mode 100644 index 0000000000000000000000000000000000000000..e18492d253058aef2879a0b9f4d17959273b8131 GIT binary patch literal 7267 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 literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/off.png b/res/drawable-mdpi/off.png new file mode 100644 index 0000000000000000000000000000000000000000..f5053f887f75b7e3b0ca3f253c6032e0fc1ed8ba GIT binary patch literal 6213 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 literal 0 HcmV?d00001 diff --git a/res/drawable-mdpi/on.png b/res/drawable-mdpi/on.png new file mode 100644 index 0000000000000000000000000000000000000000..83326e95376a012a8703e7169d38293c786c5d8d GIT binary patch literal 7054 zcmV;98*$``P)004&%004{+008|`004nN004b?008NW002DY000@xb3BE2000U( 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 literal 0 HcmV?d00001 diff --git a/res/drawable-xhdpi-v11/ic_stat_gaeproxy.png b/res/drawable-xhdpi-v11/ic_stat_gaeproxy.png new file mode 100755 index 0000000000000000000000000000000000000000..e319e2678439d5fc601e95e76a3da56114cf877d GIT binary patch literal 842 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 M07*qoM6N<$g6{1Ol>h($ literal 0 HcmV?d00001 diff --git a/res/layout/gaeproxy_appwidget.xml b/res/layout/gaeproxy_appwidget.xml new file mode 100644 index 00000000..75d19fea --- /dev/null +++ b/res/layout/gaeproxy_appwidget.xml @@ -0,0 +1,8 @@ + + + + diff --git a/res/layout/layout_apps.xml b/res/layout/layout_apps.xml new file mode 100644 index 00000000..e9ce741c --- /dev/null +++ b/res/layout/layout_apps.xml @@ -0,0 +1,10 @@ + + + + + \ No newline at end of file diff --git a/res/layout/layout_apps_item.xml b/res/layout/layout_apps_item.xml new file mode 100644 index 00000000..ad821a9e --- /dev/null +++ b/res/layout/layout_apps_item.xml @@ -0,0 +1,18 @@ + + + + + + + + + + + + diff --git a/res/layout/layout_progress_bar.xml b/res/layout/layout_progress_bar.xml new file mode 100644 index 00000000..195e7f62 --- /dev/null +++ b/res/layout/layout_progress_bar.xml @@ -0,0 +1,17 @@ + + + + + + + + diff --git a/res/layout/main.xml b/res/layout/main.xml new file mode 100755 index 00000000..3c196e63 --- /dev/null +++ b/res/layout/main.xml @@ -0,0 +1,16 @@ + + + + + + \ No newline at end of file diff --git a/res/layout/overlay.xml b/res/layout/overlay.xml new file mode 100644 index 00000000..49c1b45f --- /dev/null +++ b/res/layout/overlay.xml @@ -0,0 +1,6 @@ + + \ No newline at end of file diff --git a/res/values-zh/strings.xml b/res/values-zh/strings.xml new file mode 100755 index 00000000..298afbad --- /dev/null +++ b/res/values-zh/strings.xml @@ -0,0 +1,537 @@ + + + + 正通过Shadowsocks连接到互联网 + Shadowsocks + Shadowsocks启用成功 + Shadowsocks启用失败 + Shadowsocks服务已停止 + 恢复连接中 + 恢复连接成功 + 服务已关闭 + 服务已启动 + Shadowsocks连接已关闭 + 请检查你的网络状况和账户信息 + 恢复连接失败 + 我知道了 + 代理地址 + 本地端口 + 密钥 + 自动连接 + 自动恢复连接 + 全局代理 + 关闭服务 + 启动服务 + 反馈 @ofmax + Shadowsocks设置 + 功能设置 + 后台服务 + 代理开关 + 开启 / 关闭后台服务 + Shadowsocks服务地址 + 本地代理服务器监听端口,任意大于1024的数字 + 加密密钥 + 端口必需是大于1024的数字 + 启动时自动打开代理服务 + 配置全局代理,需要 ROOT 权限以及 IPTABLES 的支持 + 端口不能为空 + 代理地址不能为空 + 模块管理 + 安装/卸载 + 安装/卸载依赖模块,请确认SD卡已插入,并连接到互联网 + 下载中... + 下载中...(100%处请耐心等待) + 请先安装依赖模块,滑动到底部,选择安装 + 请确认SD卡已插入 + 重置 + 解压缩中... + 分应用代理 + 为应用单独设置代理,需要 ROOT 权限以及 IPTABLES 的支持 + 白名单模式 + 选择的应用将不通过代理 + 选择使用Shadowsocks的应用: + 检测到一次非正常退出,状态已重置 + Shadowsocks是一款开源软件,依照GPLv3协议发布。\n\n如果您有任何问题,请前往项目网站进行反馈。 + \n\n(gaeproxy.googlecode.com) + 关于 + 代理类型 + 正在连接... + 正在初始化... + 正在重置... + 请修改你的代理地址,以 "https://" 开头 + HTTPS代理 + 重定向HTTPS流量,若遇到反复尝试无法连接的情况,请关闭此选项 + + + 通知设置 + 铃声 + 选择通知的铃声 + 震动 + 在连接状态改变时震动 + 正在加载应用列表... + 电子市场代理 + 帮助大陆用户从电子市场中获得程序更新(需要重启) + 国内路由 + 访问国内站点时忽略本地代理(实验性) + Shadowsocks正在启动 + Shadowsocks正在重新启动 + 内置浏览器 + 启动内置代理浏览器, 只针对没有ROOT权限或IPTABLES支持的用户 + 您正在使用默认的代理地址,此地址每天只有10G的带宽配额,也就说您将随时无法正常使用本应用\n\n因此,请尽快部署自己的服务器端,具体步骤和说明见:http://code.google.com/p/goagent/ + 警告 + + 系统代理 + 设置系统代理,无需ROOT权限,仅工作在Android 4.0及以上系统,并仅对当前Wifi连接生效 + + + + Zirco Browser + Zirco Browser - %s + 使用Zirco Browser让你更好的使用互联网 + 关于 + 版权: + http://code.google.com/p/zirco-browser/ + GPL v3 + 添加书签 + 书签 + 历史 + 下载 + 配置 + 打开 + 在新页中打开 + 下载 + 下载开始 + 下载结束 + 下载错误: %s + 页 %s + 页 %1$s: %2$s + 不能打开网址 + 本程序不支持这个网址: %s. + 书签 + 排序方式 + 增加书签 + 没有书签 + 打开新页 + 编辑书签 + 删除书签 + 导入书签 + 导出书签 + 清空所有书签 + 正在导入书签中... + 重在导出书签中... + 正在清空书签中... + 顺序 + 倒序 + 选择导入源 + Android浏览器的书签 + 选择导出目标 + 编辑书签 + 增加书签 + 显示名称: + 地址Location: + 历史 + 打开新页 + 删除 + Zirco Browser-下载 + 没有下载 + %s (取消) + %s (完成) + Zirco Browser - Ad 白名单 + 白名单是空的. + 添加至白名单 + 清空白名单 + 通用设置 + 主页设定 + 定义你的默认主页 + 是否全屏幕 + 在全屏幕模式下显示 (需要重新启动程序). + 页切换时是否显示对话框 + 如果选中,也切换时会有提示 + 浏览器设定 + 历史记录大小 + 每天历史记录大小 + 是否支持JavaScript + 如果不支持JavaScript,很多网站效果不能打开,建议打开. + 是否加载图像 + 使用或者不使用图像 + 隐私设定 + 管理你的上网痕迹,确保隐私 + 保存表单数据 + 可保存数据,减少你下次输入时间 + 保存密码 + 可保存密码,让你下次访问更加方便 + 允许cookie + 是否允许Cookie + 清空历史 + 清空表单数据 + 清空缓存 + 清空cookies + 工具条显示时间 + 显示工具条多长时间自动隐藏 + 1 秒 + 2 秒 + 3 秒 + 4 秒 + 5 秒 + + + @string/PreferencesActivity.BarDuration1sec + @string/PreferencesActivity.BarDuration2sec + @string/PreferencesActivity.BarDuration3sec + @string/PreferencesActivity.BarDuration4sec + @string/PreferencesActivity.BarDuration5sec + + + 1000 + 2000 + 3000 + 4000 + 5000 + + + 工具条图标 + 工具条图标位置 + 右 + 左 + 两边都有 + + + @string/PreferencesActivity.BubbleRight + @string/PreferencesActivity.BubbleLeft + @string/PreferencesActivity.BubbleBoth + + + right + left + both + + + Ad广告设定 + 是否允许 Ad-blocker + Ad广告必须要求JavaScript能使用 + 白名单 + 管理 Ad广告白名单. + 确定 + 取消 + 请等待 + 是 + 否 + 操作没有完成,是否继续? + 今天 (%s) + 昨天 (%s) + %1$s 以前 (%2$s) + JavaScript对话框 + 清空历史记录 + 正在清空历史记录... + 清空表单数据 + 正在清空表单数据... + 清空缓存 + 正在清空缓存... + 清空Cookies + 正在清空缓存... + SD卡不能使用 + 找不到SD卡 + SD卡不能使用 + 关闭 + yyyy-MM-dd\'T\'HH:mm:ss.SSS + + + 关于 + 关于 + 本程序信息. + + + 更多.. + 默认缩放级别 + 设定默认缩放 + 关闭 + 大 + 非常大 + + + @string/PreferencesActivity.DefaultZoomClose + @string/PreferencesActivity.DefaultZoomMedium + @string/PreferencesActivity.DefaultZoomFar + + + CLOSE + MEDIUM + FAR + + + 欢迎! + 使用最多的书签 + 历史记录 + 更新历史 + 更新日志 + 本应用程序更新日志 + 主页 + 主页 + 开始页 + 空白页 + 自定义 + + + @string/PreferencesActivity.HomepageStart + @string/PreferencesActivity.HomepageBlank + @string/PreferencesActivity.HomepageCustom + + + + http://www.google.com/m?hl=en&gl=us&client=ms-null&source=android-browser-key&q=%s + http://www.baidu.com/s?wd=%s + 搜索 URL + 自定义搜索URL + 搜索 + 搜索 + 谷歌 + 百度 + 自定义 + + + @string/PreferencesActivity.SearchUrlGoogle + @string/PreferencesActivity.SearchUrlWikipedia + @string/PreferencesActivity.SearchUrlCustom + + + 搜索 + 搜 + 开始页设定 + 自定义开始页. + 是否显示搜索栏 + 如果选中,首页显示搜索栏 + 显示最常用书签 + 如果选中,首页显示最常用书签 + 是否显示历史 + 如果选中,显示浏览历史 + 书签个数 + 首页中最常用的书签显示 + 当前历史记录数 + 在首页中显示的历史记录个数 + User agent(UA) + 定义UA,网站根据UA显示给适合你浏览器的网页 + User Agent + User agent + Android默认 + 桌面级 + 自定义 + + + @string/PreferencesActivity.UserAgentDefault + @string/PreferencesActivity.UserAgentDesktop + @string/PreferencesActivity.UserAgentCustom + + + Android浏览器的书签 + SD卡 + 导出完成 + 你的所有书签已经保存在[%s]中 + 导出失败 + 错误信息: %s. + 复制链接地址 + 显示图片 + 复制图片地址 + 下载图片 + 发送邮件 + 复制邮件地址 + 地址已经复制到粘贴板 + 下载开始. + 正在下载中. + 下载完成. + 下载已经取消. + 复制URL + 清空缓存 + 如果选中,当程序退出的时候清空缓存. + 自定义首页 + 自定义首页界面 + 退出 + 需要重启 + 效果改变后需要重新启动程序,是否马上重启 + + + 可以使用插件 + 关闭 + 需要的时候提示 + 打开 + + + @string/PreferencesActivity.PluginsAlwaysOff + @string/PreferencesActivity.PluginsOnDemand + @string/PreferencesActivity.PluginsAlwaysOn + + + OFF + ON_DEMAND + ON + + + 继续 + 安全警告 + 网站的安全证书存在问题 + 网站证书没有可信任的发行者 + 站点名和证书不匹配 + 证书已经过期 + 证书没有验证 + Zirco Browser-通过网关访问的网站列表 + 列表为空 + 添加一个网站 + 清空所有站点 + 移动网站列表 + 管理网站 + 通过google移动平台访问网站,会减少流量和加快速度. + 增加 + 清空 + 删除 + + + 声音键 + 选择声音键的功能 + 默认不改变 + 放大 + 选择不同页 + 前进/后退 + + + @string/PreferencesActivity.VolumeKeysActionDefault + @string/PreferencesActivity.VolumeKeysActionZoom + @string/PreferencesActivity.VolumeKeysActionSwitchTabs + @string/PreferencesActivity.VolumeKeysActionHistory + + + DEFAULT + ZOOM + SWITCH_TABS + HISTORY + + + + Share page + Share via + Share link url + Share image url + Share email address + + + Hide title bars + If checked, windows title bars will not be + displayed (need application restart). + Use wide viewport + If checked, browser will use a viewport similar to + desktop browsers. + Load pages with overview + If checked, pages will load zoomed out to show an + overview of the page. + Switch tabs method + Define how you can switch between open tabs. + Buttons + Fling + Both + + + @string/PreferencesActivity.SwitchTabButtons + @string/PreferencesActivity.SwitchTabFling + @string/PreferencesActivity.SwitchTabBoth + + + buttons + fling + both + + + + Today + Yesterday + Last 7 days + Last month + Older + 主页 + 菜单 + 分享 + 选择文本 + 移动网关 + This application include code from the GreenDroid + project (https://github.com/cyrilmottier/GreenDroid/), licensed under + the Apache license, version 2. + + + Firefox bookmarks synchronization + Manage the settings of the bookmarks + synchronization with Firefox Sync. + Use Firefox Sync + If checked, you can retrieve your bookmarks from + Firefox Sync. + Server + Set the Firefox Sync server. + User name + Enter your Firefox Sync user name. + Password + Enter your Firefox Sync password. + Key + Enter your Firefox Sync key. + Firefox bookmarks + Synchronize + Clear + Places + Firefox bookmarks are not synchronized. Setup your + account informations and do a synchronization. + No bookmarks in this folder. + Setup + Synchronize + Synchronization + Connecting to server... + Getting data... + Reading data: %1$s / %2$s + Writting data... + Synchronization failed. + Synchronization failed: %s + Invalid authentication token. Check your settings. + Server + Server + Firefox Sync server + Custom server + + + @string/WeaveServerPreferenceActivity.DefaultServer + @string/WeaveServerPreferenceActivity.CustomServer + + + Choose file for upload + Export history and bookmarks + Export done + Your history and bookmarks have been saved to %s. + Export failed + Error message: %s. + Import failed + This operation can take some times. Do you wish to + proceed? + Tools + Manage bookmarks and history + Import, export, clear history and bookmarks. + Export bookmarks and history + Export bookmarks and history to the SD card. + Import bookmarks and history + Import bookmarks and history from the SD card. + Clear history and/or bookmarks + Use with caution, this operation cannot be undone. + Clearing history and/or bookmarks... + Clear history and/or bookmarks + Bookmarks + History + All + Exporting history and bookmarks... + Importing history and bookmarks... + Choose the import source + 正在清空书签中... + Remove completed downloads + Find on page + Find on page + + diff --git a/res/values/analytics.xml b/res/values/analytics.xml new file mode 100755 index 00000000..6de05dfe --- /dev/null +++ b/res/values/analytics.xml @@ -0,0 +1,11 @@ + + + + UA-33136904-1 + + + true + + + true + \ No newline at end of file diff --git a/res/values/colors.xml b/res/values/colors.xml new file mode 100644 index 00000000..f3cb82f5 --- /dev/null +++ b/res/values/colors.xml @@ -0,0 +1,26 @@ + + + + + + #ff5e5e5e + #17170443 + #000000 + #646464 + #c8c8c8 + #323232 + + \ No newline at end of file diff --git a/res/values/strings.xml b/res/values/strings.xml new file mode 100755 index 00000000..309d28e5 --- /dev/null +++ b/res/values/strings.xml @@ -0,0 +1,169 @@ + + + + Running in the background. + Shadowsocks + Service started. + Service failed to start. + Shadowsocks service stopped. + Auto Reconnected + Reconnected successfully. + Service has been stopped already. + Service has been started already. + Proxy Service Stopped + Please check your network and login information + Cannot reconnect + OK, I know + Address + Local Port + Site Key + Auto Connect + Auto reconnect + Global Proxy + Disconnect + Connect + Feedback @ofmax + Shadowsocks Settings + Feature Settings + Proxy Switch + Service Controller + Enable / Disable Proxy + Shadowsocks URL + Listening port + Site key for GoAgent + The port number should be greater than 1024 + Start Shadowsocks at the startup + Set up the global proxy (needs ROOT permission and + IPTABLES support) + + Port should not be empty + Proxy should not be empty + Package configure + Install / Uninstall + Downloading + Downloading, Patient Please... + Install / Uninstall extra packages (need SD card) + Please install dependent module first! (Scroll to + the bottom, and select to install) + + Please make sure you have a SD CARD! + Reset + Unzipping... + Individual Proxy + Set individual proxy for apps (needs ROOT permission and IPTABLES support) + + Bypass Mode + Enable this option to bypass selected apps + Select apps to use with Shadowsocks: + An unexpected exit detected, context has been + recovered + + Shadowsocks is an open source project + published under + the GPLv3. \n\nIf you have any questions, please visit + our project page on + googlecode. \n\n(gaeproxy.googlecode.com) + + About + Proxy Type + + GAE + PaaS + + + + 209.0.0.0/8 + 72.0.0.0/8 + 74.0.0.0/8 + 68.0.0.0/8 + 69.0.0.0/8 + 66.0.0.0/8 + 64.0.0.0/8 + 199.0.0.0/8 + 168.0.0.0/8 + 67.0.0.0/8 + 173.0.0.0/8 + 202.248.0.0/16 + + + 1.0.0.0/8 + 14.0.0.0/8 + 27.0.0.0/8 + 36.0.0.0/8 + 39.0.0.0/8 + 42.0.0.0/8 + 49.0.0.0/8 + 58.0.0.0/7 + 60.0.0.0/7 + 96.0.0.0/3 + 128.0.0.0/4 + 171.0.0.0/8 + 175.0.0.0/8 + 180.0.0.0/8 + 182.0.0.0/8 + 183.0.0.0/8 + 202.0.0.0/8 + 203.0.0.0/8 + 210.0.0.0/8 + 211.0.0.0/8 + 216.0.0.0/5 + 192.168.0.0/16 + 10.0.0.0/8 + 172.16.0.0/12 + + + + d3dxZ3R4eHByb3h5LTF8d3dxZ3R4eHByb3h5LTJ8d3dxZ3R4eHByb3h5LTN8d3dxZ3R4eHByb3h5LTR8d3dxZ3R4eHByb3h5LTV8d3dxZ3R4eHByb3h5LTZ8d3dxZ3R4eHByb3h5LTd8d3dxZ3R4eHByb3h5LTh8d3dxZ3R4eHByb3h5LTl8d3dxZ3R4eHByb3h5LTEwfHd3cWd0eHhwcm94eTEtMXx3d3FndHh4cHJveHkxLTJ8d3dxZ3R4eHByb3h5MS0zfHd3cWd0eHhwcm94eTEtNHx3d3FndHh4cHJveHkxLTV8d3dxZ3R4eHByb3h5MS02fHd3cWd0eHhwcm94eTEtN3x3d3FndHh4cHJveHkxLTh8d3dxZ3R4eHByb3h5MS05fHd3cWd0eHhwcm94eTEtMTB8d3dxZ3R4eHByb3h5Mi0xfHd3cWd0eHhwcm94eTItMnx3d3FndHh4cHJveHkyLTN8d3dxZ3R4eHByb3h5Mi00fHd3cWd0eHhwcm94eTItNXx3d3FndHh4cHJveHkyLTZ8d3dxZ3R4eHByb3h5Mi03fHd3cWd0eHhwcm94eTItOHx3d3FndHh4cHJveHkyLTl8d3dxZ3R4eHByb3h5Mi0xMA== + + 2 + wwqgtxx-goagent + + Connecting… + Initializing… + Reseting… + Please modify your proxy host to start with + "https://" + + HTTPS Proxy + Proxy HTTPS through GAE, not compatible with most + apps + + + + Notification Settings + Ringtone + Select the notification\'s ringtone + Vibrate + Also vibrate when connection status changes + Loading app list… + Market Proxy + Only for users in China, help to update app from + Android Market (need reboot) + + CHN Route + Bypass all sites located in China (needs ROOT + permission and + IPTABLES support) + + Connecting to Shadowsocks + Reconnecting to Shadowsocks + GAE Browser + Start a browser through GAE proxy, for users + without root permission or iptables support + + You are using the default proxy, which has a quota + of only 10G bandwidth every day. Please deploy your own + servers to get + more free bandwidth quota with Google App Engine.\n\nYou can find more + information here: https://github.com/phus/goagent + + Warning + + System Proxy + Enable system wide proxy automatically without ROOT permission, + only works for Wifi on Android 4.0 and above. + + Remote Port + Server port of shadowsocks + + diff --git a/res/values/styles.xml b/res/values/styles.xml new file mode 100755 index 00000000..d4d1aa2e --- /dev/null +++ b/res/values/styles.xml @@ -0,0 +1,48 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/res/xml/shadowsocks_preference.xml b/res/xml/shadowsocks_preference.xml new file mode 100755 index 00000000..d8bfb8df --- /dev/null +++ b/res/xml/shadowsocks_preference.xml @@ -0,0 +1,71 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/src/com/github/shadowsocks/AppManager.java b/src/com/github/shadowsocks/AppManager.java new file mode 100755 index 00000000..f331864c --- /dev/null +++ b/src/com/github/shadowsocks/AppManager.java @@ -0,0 +1,416 @@ +/* Copyright (c) 2009, Nathan Freitas, Orbot / The Guardian Project - http://openideals.com/guardian */ +/* See LICENSE for licensing information */ + +package com.github.shadowsocks; + +import android.app.Activity; +import android.app.ProgressDialog; +import android.content.Context; +import android.content.SharedPreferences; +import android.content.SharedPreferences.Editor; +import android.content.pm.ApplicationInfo; +import android.content.pm.PackageManager; +import android.graphics.PixelFormat; +import android.os.Bundle; +import android.os.Handler; +import android.os.Message; +import android.preference.PreferenceManager; +import android.view.LayoutInflater; +import android.view.View; +import android.view.View.OnClickListener; +import android.view.ViewGroup; +import android.view.ViewGroup.LayoutParams; +import android.view.WindowManager; +import android.widget.*; +import android.widget.AbsListView.OnScrollListener; +import android.widget.CompoundButton.OnCheckedChangeListener; + +import java.util.*; + +public class AppManager extends Activity implements OnCheckedChangeListener, + OnClickListener { + + private static class ListEntry { + private CheckBox box; + private TextView text; + private ImageView icon; + } + + public static ProxyedApp[] getProxyedApps(Context context) { + + SharedPreferences prefs = PreferenceManager + .getDefaultSharedPreferences(context); + + String tordAppString = prefs.getString(PREFS_KEY_PROXYED, ""); + String[] tordApps; + + StringTokenizer st = new StringTokenizer(tordAppString, "|"); + tordApps = new String[st.countTokens()]; + int tordIdx = 0; + while (st.hasMoreTokens()) { + tordApps[tordIdx++] = st.nextToken(); + } + + Arrays.sort(tordApps); + + // else load the apps up + PackageManager pMgr = context.getPackageManager(); + + List lAppInfo = pMgr.getInstalledApplications(0); + + Iterator itAppInfo = lAppInfo.iterator(); + + Vector vectorApps = new Vector(); + + ApplicationInfo aInfo = null; + + while (itAppInfo.hasNext()) { + aInfo = itAppInfo.next(); + + // ignore system apps + if (aInfo.uid < 10000) + continue; + + ProxyedApp app = new ProxyedApp(); + + app.setUid(aInfo.uid); + + app.setUsername(pMgr.getNameForUid(app.getUid())); + + // check if this application is allowed + if (aInfo.packageName != null + && aInfo.packageName.equals("com.github.shadowsocks")) { + app.setProxyed(true); + } else if (Arrays.binarySearch(tordApps, app.getUsername()) >= 0) { + app.setProxyed(true); + } else { + app.setProxyed(false); + } + + vectorApps.add(app); + + } + + ProxyedApp[] apps = new ProxyedApp[vectorApps.size()]; + vectorApps.toArray(apps); + return apps; + } + + private ProxyedApp[] apps = null; + + private ListView listApps; + + private AppManager mAppManager; + private TextView overlay; + + private ProgressDialog pd = null; + private ListAdapter adapter; + + private ImageLoader dm; + + private static final int MSG_LOAD_START = 1; + + private static final int MSG_LOAD_FINISH = 2; + + public final static String PREFS_KEY_PROXYED = "Proxyed"; + + private boolean appsLoaded = false; + + final Handler handler = new Handler() { + @Override + public void handleMessage(Message msg) { + switch (msg.what) { + case MSG_LOAD_START: + pd = ProgressDialog.show(AppManager.this, "", + getString(R.string.loading), true, true); + break; + case MSG_LOAD_FINISH: + + listApps.setAdapter(adapter); + + listApps.setOnScrollListener(new OnScrollListener() { + + boolean visible; + + @Override + public void onScroll(AbsListView view, + int firstVisibleItem, int visibleItemCount, + int totalItemCount) { + if (visible) { + String name = apps[firstVisibleItem].getName(); + if (name != null && name.length() > 1) + overlay.setText(apps[firstVisibleItem] + .getName().substring(0, 1)); + else + overlay.setText("*"); + overlay.setVisibility(View.VISIBLE); + } + } + + @Override + public void onScrollStateChanged(AbsListView view, + int scrollState) { + visible = true; + if (scrollState == OnScrollListener.SCROLL_STATE_IDLE) { + overlay.setVisibility(View.INVISIBLE); + } + } + }); + + if (pd != null) { + pd.dismiss(); + pd = null; + } + break; + } + super.handleMessage(msg); + } + }; + + public void getApps(Context context) { + + SharedPreferences prefs = PreferenceManager + .getDefaultSharedPreferences(context); + + String tordAppString = prefs.getString(PREFS_KEY_PROXYED, ""); + String[] tordApps; + + StringTokenizer st = new StringTokenizer(tordAppString, "|"); + tordApps = new String[st.countTokens()]; + int tordIdx = 0; + while (st.hasMoreTokens()) { + tordApps[tordIdx++] = st.nextToken(); + } + + Arrays.sort(tordApps); + + Vector vectorApps = new Vector(); + + // else load the apps up + PackageManager pMgr = context.getPackageManager(); + + List lAppInfo = pMgr.getInstalledApplications(0); + + Iterator itAppInfo = lAppInfo.iterator(); + + ApplicationInfo aInfo = null; + + while (itAppInfo.hasNext()) { + aInfo = itAppInfo.next(); + + // ignore system apps + if (aInfo.uid < 10000) + continue; + + if (aInfo.processName == null) + continue; + if (pMgr.getApplicationLabel(aInfo) == null + || pMgr.getApplicationLabel(aInfo).toString().equals("")) + continue; + if (pMgr.getApplicationIcon(aInfo) == null) + continue; + + ProxyedApp tApp = new ProxyedApp(); + + tApp.setEnabled(aInfo.enabled); + tApp.setUid(aInfo.uid); + tApp.setUsername(pMgr.getNameForUid(tApp.getUid())); + tApp.setProcname(aInfo.processName); + tApp.setName(pMgr.getApplicationLabel(aInfo).toString()); + + // check if this application is allowed + if (Arrays.binarySearch(tordApps, tApp.getUsername()) >= 0) { + tApp.setProxyed(true); + } else { + tApp.setProxyed(false); + } + + vectorApps.add(tApp); + } + + apps = new ProxyedApp[vectorApps.size()]; + vectorApps.toArray(apps); + + } + + private void loadApps() { + getApps(this); + + Arrays.sort(apps, new Comparator() { + @Override + public int compare(ProxyedApp o1, ProxyedApp o2) { + if (o1 == null || o2 == null || o1.getName() == null + || o2.getName() == null) + return 1; + if (o1.isProxyed() == o2.isProxyed()) + return o1.getName().compareTo(o2.getName()); + if (o1.isProxyed()) + return -1; + return 1; + } + }); + + final LayoutInflater inflater = getLayoutInflater(); + + adapter = new ArrayAdapter(this, R.layout.layout_apps_item, + R.id.itemtext, apps) { + @Override + public View getView(int position, View convertView, ViewGroup parent) { + ListEntry entry; + if (convertView == null) { + // Inflate a new view + convertView = inflater.inflate(R.layout.layout_apps_item, + parent, false); + entry = new ListEntry(); + entry.icon = (ImageView) convertView + .findViewById(R.id.itemicon); + entry.box = (CheckBox) convertView + .findViewById(R.id.itemcheck); + entry.text = (TextView) convertView + .findViewById(R.id.itemtext); + + entry.text.setOnClickListener(mAppManager); + entry.text.setOnClickListener(mAppManager); + + convertView.setTag(entry); + + entry.box.setOnCheckedChangeListener(mAppManager); + } else { + // Convert an existing view + entry = (ListEntry) convertView.getTag(); + } + + final ProxyedApp app = apps[position]; + + entry.icon.setTag(app.getUid()); + + dm.DisplayImage(app.getUid(), + (Activity) convertView.getContext(), entry.icon); + + entry.text.setText(app.getName()); + + final CheckBox box = entry.box; + box.setTag(app); + box.setChecked(app.isProxyed()); + + entry.text.setTag(box); + + return convertView; + } + }; + + appsLoaded = true; + + } + + /** + * Called an application is check/unchecked + */ + @Override + public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { + final ProxyedApp app = (ProxyedApp) buttonView.getTag(); + if (app != null) { + app.setProxyed(isChecked); + } + + saveAppSettings(this); + + } + + @Override + public void onClick(View v) { + + CheckBox cbox = (CheckBox) v.getTag(); + + final ProxyedApp app = (ProxyedApp) cbox.getTag(); + if (app != null) { + app.setProxyed(!app.isProxyed()); + cbox.setChecked(app.isProxyed()); + } + + saveAppSettings(this); + + } + + @Override + protected void onCreate(Bundle savedInstanceState) { + super.onCreate(savedInstanceState); + + this.setContentView(R.layout.layout_apps); + + this.dm = ImageLoaderFactory.getImageLoader(this); + + this.overlay = (TextView) View.inflate(this, R.layout.overlay, null); + getWindowManager() + .addView( + overlay, + new WindowManager.LayoutParams( + LayoutParams.WRAP_CONTENT, + LayoutParams.WRAP_CONTENT, + WindowManager.LayoutParams.TYPE_APPLICATION, + WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE + | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE, + PixelFormat.TRANSLUCENT)); + + mAppManager = this; + + } + + @Override + protected void onResume() { + super.onResume(); + + new Thread() { + + @Override + public void run() { + handler.sendEmptyMessage(MSG_LOAD_START); + + listApps = (ListView) findViewById(R.id.applistview); + + if (!appsLoaded) + loadApps(); + handler.sendEmptyMessage(MSG_LOAD_FINISH); + } + }.start(); + + } + + /* + * (non-Javadoc) + * + * @see android.app.Activity#onStop() + */ + @Override + protected void onStop() { + super.onStop(); + + // Log.d(getClass().getName(),"Exiting Preferences"); + } + + public void saveAppSettings(Context context) { + if (apps == null) + return; + + SharedPreferences prefs = PreferenceManager + .getDefaultSharedPreferences(this); + + // final SharedPreferences prefs = + // context.getSharedPreferences(PREFS_KEY, 0); + + StringBuilder tordApps = new StringBuilder(); + + for (int i = 0; i < apps.length; i++) { + if (apps[i].isProxyed()) { + tordApps.append(apps[i].getUsername()); + tordApps.append("|"); + } + } + + Editor edit = prefs.edit(); + edit.putString(PREFS_KEY_PROXYED, tordApps.toString()); + edit.commit(); + + } + +} diff --git a/src/com/github/shadowsocks/Exec.java b/src/com/github/shadowsocks/Exec.java new file mode 100755 index 00000000..090723ad --- /dev/null +++ b/src/com/github/shadowsocks/Exec.java @@ -0,0 +1,69 @@ +/* + * Copyright (C) 2007 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package com.github.shadowsocks; + +import java.io.FileDescriptor; + +/** + * Utility methods for creating and managing a subprocess. + *