From b16ac605ce725c09cd92d2b5e7d6f9e5997ccb06 Mon Sep 17 00:00:00 2001 From: Max Lv Date: Tue, 1 Jan 2013 10:26:45 +0800 Subject: [PATCH] rc4 works now, fix #3 --- assets/shadowsocks | Bin 128488 -> 128488 bytes jni/shadowsocks/encrypt.c | 83 ++++++++------------ jni/shadowsocks/encrypt.h | 12 ++- jni/shadowsocks/local.c | 44 ++++++++--- jni/shadowsocks/local.h | 2 + libs/armeabi/shadowsocks | Bin 128488 -> 128488 bytes src/com/github/shadowsocks/Shadowsocks.java | 30 ++++--- 7 files changed, 89 insertions(+), 82 deletions(-) diff --git a/assets/shadowsocks b/assets/shadowsocks index 557abd4ba37e8fa46e672666a46c7c295d305539..9e9eb45f8c9a4d8897d2c4df1999388390a990d5 100755 GIT binary patch delta 32646 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

P`ntyU@yv+(o;~?tp3OXSTXB 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 EvEXv)-WtT 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 diff --git a/jni/shadowsocks/encrypt.c b/jni/shadowsocks/encrypt.c index 788c4a0f..c104a95a 100755 --- a/jni/shadowsocks/encrypt.c +++ b/jni/shadowsocks/encrypt.c @@ -111,11 +111,11 @@ static void mergesort(uint8_t array[], int length) merge(left, llength, right, middle); } -void encrypt(char *buf, int len) { - if (_method == RC4_ENC) { +void encrypt(char *buf, int len, EVP_CIPHER_CTX *ctx) { + if (ctx != NULL) { int outlen; unsigned char mybuf[BUF_SIZE]; - EVP_CipherUpdate(&ctx, mybuf, &outlen, (unsigned char*)buf, len); + EVP_CipherUpdate(ctx, mybuf, &outlen, (unsigned char*)buf, len); memcpy(buf, mybuf, len); } else { char *end = buf + len; @@ -126,11 +126,11 @@ void encrypt(char *buf, int len) { } } -void decrypt(char *buf, int len) { - if (_method == RC4_ENC) { +void decrypt(char *buf, int len, EVP_CIPHER_CTX *ctx) { + if (ctx != NULL) { int outlen; unsigned char mybuf[BUF_SIZE]; - EVP_CipherUpdate(&ctx, mybuf, &outlen, (unsigned char*) buf, len); + EVP_CipherUpdate(ctx, mybuf, &outlen, (unsigned char*) buf, len); memcpy(buf, mybuf, len); } else { char *end = buf + len; @@ -141,51 +141,36 @@ void decrypt(char *buf, int len) { } } -int send_encrypt(int sock, char *buf, int len, int flags) { - char mybuf[BUF_SIZE]; - memcpy(mybuf, buf, len); - encrypt(mybuf, len); - return send(sock, mybuf, len, flags); +void enc_ctx_init(EVP_CIPHER_CTX *ctx, const char *pass, int enc) { + unsigned char key[EVP_MAX_KEY_LENGTH]; + unsigned char iv[EVP_MAX_IV_LENGTH]; + int key_len = EVP_BytesToKey(EVP_rc4(), EVP_md5(), NULL, (unsigned char*) pass, + strlen(pass), 1, key, iv); + EVP_CIPHER_CTX_init(ctx); + EVP_CipherInit_ex(ctx, EVP_rc4(), NULL, NULL, NULL, enc); + if (!EVP_CIPHER_CTX_set_key_length(ctx, key_len)) { + LOGE("Invalid key length: %d", key_len); + EVP_CIPHER_CTX_cleanup(ctx); + exit(EXIT_FAILURE); + } + EVP_CipherInit_ex(ctx, NULL, NULL, key, iv, enc); } -int recv_decrypt(int sock, char *buf, int len, int flags) { - char mybuf[BUF_SIZE]; - int result = recv(sock, mybuf, len, flags); - memcpy(buf, mybuf, len); - decrypt(buf, len); - return result; -} +void get_table(const char *pass) { + uint8_t *table = encrypt_table; + uint8_t *tmp_hash = MD5((unsigned char *) pass, strlen(pass), NULL); + _a = htole64(*(uint64_t *) tmp_hash); + uint32_t i; -void get_table(const char* pass) { - if (_method == RC4_ENC) { - unsigned char key[EVP_MAX_KEY_LENGTH]; - unsigned char iv[EVP_MAX_IV_LENGTH]; - int key_len = EVP_BytesToKey(EVP_rc4(), EVP_md5(), NULL, (unsigned char*) pass, - strlen(pass), 1, key, iv); - EVP_CIPHER_CTX_init(&ctx); - EVP_CipherInit_ex(&ctx, EVP_rc4(), NULL, NULL, NULL, 1); - if (!EVP_CIPHER_CTX_set_key_length(&ctx, key_len)) { - LOGE("Invalid key length: %d", key_len); - EVP_CIPHER_CTX_cleanup(&ctx); - exit(EXIT_FAILURE); - } - EVP_CipherInit_ex(&ctx, NULL, NULL, key, iv, 1); - } else { - uint8_t *table = encrypt_table; - uint8_t *tmp_hash = MD5((unsigned char *) pass, strlen(pass), NULL); - _a = htole64(*(uint64_t *) tmp_hash); - uint32_t i; - - for(i = 0; i < 256; ++i) { - table[i] = i; - } - for(i = 1; i < 1024; ++i) { - _i = i; - mergesort(table, 256); - } - for(i = 0; i < 256; ++i) { - // gen decrypt table from encrypt table - decrypt_table[encrypt_table[i]] = i; - } + for(i = 0; i < 256; ++i) { + table[i] = i; + } + for(i = 1; i < 1024; ++i) { + _i = i; + mergesort(table, 256); + } + for(i = 0; i < 256; ++i) { + // gen decrypt table from encrypt table + decrypt_table[encrypt_table[i]] = i; } } diff --git a/jni/shadowsocks/encrypt.h b/jni/shadowsocks/encrypt.h index 84fa8880..a17cb6a1 100755 --- a/jni/shadowsocks/encrypt.h +++ b/jni/shadowsocks/encrypt.h @@ -10,18 +10,16 @@ #define BUF_SIZE 4096 -#define TABLE_ENC 0 -#define RC4_ENC 1 +#define TABLE 0 +#define RC4 1 unsigned char encrypt_table[256]; unsigned char decrypt_table[256]; -EVP_CIPHER_CTX ctx; void get_table(const char* key); -void encrypt(char *buf, int len); -void decrypt(char *buf, int len); -int send_encrypt(int sock, char *buf, int len, int flags); -int recv_decrypt(int sock, char *buf, int len, int flags); +void encrypt(char *buf, int len, EVP_CIPHER_CTX *ctx); +void decrypt(char *buf, int len, EVP_CIPHER_CTX *ctx); +void enc_ctx_init(EVP_CIPHER_CTX *ctx, const char *pass, int enc); unsigned int _i; unsigned long long _a; diff --git a/jni/shadowsocks/local.c b/jni/shadowsocks/local.c index d523273b..4e46fb08 100644 --- a/jni/shadowsocks/local.c +++ b/jni/shadowsocks/local.c @@ -28,6 +28,7 @@ static char *_server; static char *_remote_port; static int _timeout; +static char *_key; int setnonblocking(int fd) { int flags; @@ -123,7 +124,7 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) { // local socks5 server if (server->stage == 5) { - encrypt(remote->buf, r); + encrypt(remote->buf, r, server->e_ctx); int w = send(remote->fd, remote->buf, r, 0); if(w == -1) { if (errno == EAGAIN) { @@ -186,7 +187,6 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) { size_t in_addr_len = sizeof(struct in_addr); memcpy(addr_to_send + addr_len, server->buf + 4, in_addr_len + 2); addr_len += in_addr_len + 2; - addr_to_send[addr_len] = 0; } else if (request->atyp == 3) { // Domain name @@ -198,7 +198,6 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) { // get port addr_to_send[addr_len++] = *(unsigned char *)(server->buf + 4 + 1 + name_len); addr_to_send[addr_len++] = *(unsigned char *)(server->buf + 4 + 1 + name_len + 1); - addr_to_send[addr_len] = 0; } else { LOGE("unsupported addrtype: %d\n", request->atyp); close_and_free_remote(EV_A_ remote); @@ -206,7 +205,8 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) { return; } - send_encrypt(remote->fd, addr_to_send, addr_len, 0); + encrypt(addr_to_send, addr_len, server->e_ctx); + send(remote->fd, addr_to_send, addr_len, 0); // Fake reply struct socks5_response response; @@ -233,7 +233,6 @@ static void server_recv_cb (EV_P_ ev_io *w, int revents) { } server->stage = 5; - } } } @@ -333,7 +332,7 @@ static void remote_recv_cb (EV_P_ ev_io *w, int revents) { return; } } - decrypt(server->buf, r); + decrypt(server->buf, r, server->d_ctx); int w = send(server->fd, server->buf, r, MSG_NOSIGNAL); if(w == -1) { if (errno == EAGAIN) { @@ -482,6 +481,15 @@ struct server* new_server(int fd) { server->send_ctx->server = server; server->send_ctx->connected = 0; server->stage = 0; + if (_method == RC4) { + server->e_ctx = malloc(sizeof(EVP_CIPHER_CTX)); + server->d_ctx = malloc(sizeof(EVP_CIPHER_CTX)); + enc_ctx_init(server->e_ctx, _key, 1); + enc_ctx_init(server->d_ctx, _key, 0); + } else { + server->e_ctx = NULL; + server->d_ctx = NULL; + } return server; } void free_server(struct server *server) { @@ -489,6 +497,12 @@ void free_server(struct server *server) { if (server->remote != NULL) { server->remote->server = NULL; } + if (_method == RC4) { + EVP_CIPHER_CTX_cleanup(server->e_ctx); + EVP_CIPHER_CTX_cleanup(server->d_ctx); + free(server->e_ctx); + free(server->d_ctx); + } free(server->recv_ctx); free(server->send_ctx); free(server); @@ -603,12 +617,6 @@ int main (int argc, char **argv) exit(EXIT_FAILURE); } - if (method != NULL) { - if (strcmp(method, "rc4") == 0) { - _method = RC4_ENC; - } - } - if (f_flags) { /* Our process ID and Session ID */ @@ -658,12 +666,22 @@ int main (int argc, char **argv) fclose(file); } + // init global variables _server = strdup(server); _remote_port = strdup(remote_port); _timeout = atoi(timeout); + _key = key; + _method = TABLE; + if (method != NULL) { + if (strcmp(method, "rc4") == 0) { + _method = RC4; + } + } LOGD("calculating ciphers %d", _method); - get_table(key); + if (_method != RC4) { + get_table(key); + } int listenfd; listenfd = create_and_bind(port); diff --git a/jni/shadowsocks/local.h b/jni/shadowsocks/local.h index 60a94e6e..b2aed3bc 100644 --- a/jni/shadowsocks/local.h +++ b/jni/shadowsocks/local.h @@ -21,6 +21,8 @@ struct server { char buf[BUF_SIZE]; // server send from, remote recv into char stage; int buf_len; + EVP_CIPHER_CTX *e_ctx; + EVP_CIPHER_CTX *d_ctx; struct server_ctx *recv_ctx; struct server_ctx *send_ctx; struct remote *remote; diff --git a/libs/armeabi/shadowsocks b/libs/armeabi/shadowsocks index 557abd4ba37e8fa46e672666a46c7c295d305539..9e9eb45f8c9a4d8897d2c4df1999388390a990d5 100755 GIT binary patch delta 32646 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

P`ntyU@yv+(o;~?tp3OXSTXB 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 EvEXv)-WtT z)V78l%R=@3ShD?PcXC4Y&9JSi6?ZZ!jT|!v3<%Y$h4ZbK;Id~Ma>(^%Kj)k_$}+nm zU;m*fr;*B7hQh-`jQxz=${7vD!b3l&IjsCji>T#g+7#Po%)R)}j7kF~Yen{k*bUK- z1~~?b%7e*?# z$7VkoJTs?Bf-Xf4x};KFitLi?(r9Cs_2m=SM=F_XvZK?&aM-RhZZ+=4!CPPN+B(tb z9N-($21BM`f%7N21gyhB*C9`K{ypsc&^$T3!%TUdqC3SH{r%4f)xyX!GuGz%V_BPLSer|aWo@oKt{Gi3#s@1S zr|NXu$$IIreY;&Pv2VA|rNc3%U*6hm+o{#bb{$l3jLPx4<({g1c~w!4B9*TxN)p-^ zhyi(nv_vi0l_t(us+A>vIBBdFwX_%) zlqDr^acaoLu^uMT=Zd!0zpc7n%kpp2s-v%a^f zWIra?sJ{It2ompJ>I z`pP*xHrpH!lGsLXKhFzt9cu+=w!SHsAf@o!8#xq%Pz}HWT+i*K@0htD()8Eu1~nX; zb@V=l!>66z7}<8(dK^BrZHG_Y*g7=};-ZWZMzwHksef#gQMSO15{EQ*+sRUx;TtP; z*+nzoM&V4iTJqmM!wMzj%7K-K{V~Y4r9Q~@imnn<dM)M6kIrp4T`qj7=i<^A!e6^ zjZ{5zRH$dr%j>R%UzLq1!fRy0z@nmlMMXVbl}}@3$OrK?6IU2z_;?JTlclVaOYx2D zUPh&%l65Ux-JswydMP{Fc8R{2{XX0!^ONX!<8%Yo-;k>WDOq1<>o8b5Y=y{Nd7D0w ztz>?eEpKY!xp;e)VQw7A9vd|c7Y%z~Dyn6c)6Z1DGRw(lI{ZBTEI2y>w<0wYR~a|u ze1I;WL`6%<8HlbLiA#-I&H!82V&msI{cKfLGcC?h19YnvVxQH@?Gx>+?-MoMATz0z z+dJAx-&~JnM7J!6Uv3=EnmW1NyUjKvCMbA^t(ChoA>3GIx$rC|HYg#c+k^O+nArxO z#2JPLdIv1fxMymLQdssn3gZob?O3bLO+URE?{%)ZYDl}x@R$brSiNzEK?d#jOm1c( zUWY}wuf`2UsdKFsnQgU7^=g3gQs|~dG>es4$?Wyw$+1r<%`s-a*^fEf9lvxU& zHq^VMG=t`8lk1PIbU#l?QP*`cI;>h>LkV;%yrDg--`+LpsSAc3_f%^cxqAw zm*c$NWwU0yip%NQKUC#7l62Uon@?9g_Fr(~4#OBjqeMr&r`{{U8}G?Ji9U&Hqbiw3 z@3ctQOI2fL7%C?QPP;rPFiCBBDDridXY5!*&BR7{E3Jg?O@^cl&nRW3E_Is0VOOAD zNz@famip-(OuL$6X+xjpQ1@x4Y4-Vx6_B{)m=ChpE%pLNg%d~F3Snqq%fn*WV!I92x~0Y_?=f(+qM1OtCgcZ zIw~61E3>iK5Mlf!-YapXv65zt{WabqSQzbyvWAO`@l!Qm?5<4Y^8zbV& zCB!Clh*1JRjW-AMQu6z#EwsqDS#4t@jOKd3$E$T-DQ5q$1XGYcT2WhCEhEbgMZU^v z854mk-e>V<|7ay|(0q)vH1bVWl(Eu!2P}2;e@-#Ex1VR!6|O9sZYh$+aj2Ghl@MfOyR#zDRRtZ$`3C7Q)S2PS(cov(#Cnl9r zq6E2OtrUMHpq*Y>E44!<-{n+{t{BrB7sna6|0uKEz{et8VMvLbsq>zcSsFh%ZQO^g zC#RvDUVD%g!Y*SpK ztqJa|cF=BO%*L8ExT?#^eAkRJOOWQ%q;|u7`DOSdqyJe^MqI)vaaiZC1~_7ipUcB7 zyx!5jvRY>OF0Ud!m1>Di;?z0Xu_ig{ui95l>o%#CcPP*?F*hFD^`;tto9UJst46I` zi*{;1ZE=ehI?u=2cP+})@3oAUlhrp`vsTe+OKoPW*VU7Lk<)cvnv-7j^VEk&s=LYu zlv)mIOW$kiwf(6>VzoxaS*oA71ALYC+k3;+QR&TE*HtTAd*YDj*vKI>#P+UsR~s2R z5u5Xm&}cP8^Ka8z9j1NUrjyS3C+&EfTDn?KwHs|d_qg`tNKOb&wnf&TbGB+9w`~)# z`iT;x;s$PV!fw^!YN;jkNp4_vT)tZ6N~tCFiL<`cvhT^lNRO;iOPa0kAo`rMGO|NZ zIryX$SI=i{msd!7l094rs(Dj3cB!SIwzS<{^@TPztZsu>Kd8!~?^We4KJqtvYqhq+ z<@+`s8(Gm_#p8g1Pp#IWrB-XWb}Ve2X-UClTvU?|pAP&X-chdvx5vln+R>$!1qFxd zZRx25x!owW81VtJS|dkP8ekcw6>RBwsBXdl`#$Rxc{K2TTxHuke`K*kcBO9h^he*D zZIGo+#K-d&Sw}G}K7bdW43q~AhT>rZt_S+-@5jvzxE1K9Wwo!ax@wQx-;Umrk11w3 z^5eLJzoGMsEY-g-2Ri|uVRVfuWfhK9{Tu4X8cQupFzn+@d7rgfc3NAEzgy!(qT236 z!d(nKL#xoSYWYbRA~W+5`p0NZJC1b=$WudHu}wp?Z55S0qX#BY;-l# z4TnRSrAt|6j@%MFFS}rCJ*?+*xPS2;OnE=N-MY3lSk|cdayHbMPVD zO4_Ht4_z|-itkK+JIt}s;Y@ei^!I8%N7i?Gn4u~`+RMlZ>SJwWr@1)fayqrZf$w8z zP;UC$$2oqqCGz*{HBu|$L&XYgVSTQG&*ZhTTXYXMHuW#H)WoIcRAzYRjLe?K z+(0#Hpi&&)9FGi2EG5rY1P)Z3_3Mn;ak%TdIVz{bveh=1I$0%_joPoq=-_GS_rRu# zF@7CC8}(~XPa9?9$g4;9ve4ZwRlNxFkmli&8Z)B4Wd7}ij zNU-0+7iY)^k}}Iu%|B|SS}}c5)HW4YrbaQh)!#L@*a>Q~Ha+&9$C!df15zTDtT&HJ zEF-iJyKeGdm0x1{tH4_Q;5FA@_|;j+poU*{J~vk8O(m+N{J<; zAQz{Ya$|e8oMa_9@jSZkt$HNyC@xD%kkic)OIn^>qDm}#wBNgbTJ=L~ciSF+ccoml z(LENa)3oP3+Eh=-|2fCcUu_p1S-z9n;t5VW_XDbOUyFzvQf|&ZRXKvbnuoO1xV9c& z_Er_w!;1eh%=V=AJZ_@z_Q&~&cX6NeETKh0yKH5Hx-Q6D?-QVRSY2XStC@NZ_Zsn7 zS)Z4n`Z=W);!=C*Yejjkz3e#z7wo>h+WC7vRZdf)Wj0FuvPP2x`>;25 zC`v=^K(D@Pnbut)KBMY)eO#1-V6HnDfCnwXx^yM|gd?^zH&nB^7YW3N6)?-x?B z*;`Atmfxq9ZvY0rz701<$d`x{`dyR?${=+6r?>ChTdm>u%-^IgYJ&F7(3NUit<5l> ziska$upye`!=ktMTT7kC+K6F|<+{IWm{C`6t9E0UpG(E*!Dv2(tl7kE7we$ufJGxZ*2#?pI zkd}x%db_AiANQ+zL+dc>n44QM| zZ5|#p9G8a;+TM>MyiVqiObE>gJ?x>!_1E7u;Em;wrcMYB9Fr&aO;*bttE|JdHF88q z^*Y{q?Opq{o)df;T*`Myb3N&p=8b!YQD5Lz5D#q~quljg`f2!BBcGigTHjd8<^Qa$ znJ}bU7^X8EPb0oZdSL%nL%(i~RxT+b^HM(;uG zpSOITwfg|zMUG+;srK4NivD$0%{7Ti(RTXtFEYaPcaK>xP=k{<~GG7j^ zdvkj`HAYuctZrQ;p>xz!Rrw(O_GhuG+a*kWAcmNwHCytl zdR{ACGSTI1f$Z)C?c=4bb@f(g`<6CWpKAA(PH;=b31~H0tqZgP%jT=kwcGePGkxfC zld20?uHFCqX|r?7@TJ{pMcImWEwT)`ata42X3-Yi4G}-&BUmL^f~KzM?e_Ij9RH9T z+Taz7DsA~rQ34>}*do)+w}2kAE^GLj^fZl-h8VlIt+dXtvlN9(AGgaDScu}x~|Q`Blvm(sfT@-g7$r+ zDZ0y{?ThyGVSKfL!TX_|jsDC-iZUMkW6}q2&>Y$yO2?B}qz+PY5Kk$PKx~sZw2sL6 z12AMbtSj2WG`yvtdmq{r>A{;HsC5hWD+-<#C?BAWM2h#}J5n5v2hpY@N05E#t-i`p z8~nHz&oz(}C=WvGhv<-N=)biGZyd;dbT3Qqyv;|gk-Z!5jz|h3SJGi<-$&bBo4!3( zSMzcDkJ}wpH7Whq9rqloc6b_?=&(ttUr8&MJtnb1qPPB)1v@G=2e)Orc7KA)jsKqV zs`^9=-unaI-u~X(S?67#wcWSG!}1k&5Yib5*0T0}qGo8(`zJg9umvmBLp!^Fq1s%F zPMeLp|DV!6cDl3~8()h!;H7R)?|Z;fUY(ZSE#qzlb$)vAZ;Mo&(megh#mcJMTKoC; z{`g+iKXaxUk-jO@OQ+V=4qO_ptB|EtyZp8KC_UqHe^uw+FumHF7xJos__bfNJg7)Nl7$0?|wcV3K?Y^Lm)r9Yom8dYQ$r0_c_EwXtt71|r zcCeb<0jtqgM4OAY3fi!6S%5TiC|dE;XvL>R*cb35T5<14dMB&N8~qE=>d|gTD=T)C zo`mO~;>BpwcInJ5J4@ZP(>%h~k!s$8R+c=(XkXICUF=Kh8f70LMcUoY=Fk{>|7U1r zOO;5QWHu+n!c$fAQMA{wC6w;=Eft0K3i_p$EjJ5oCi+8qV0bKoxiLB}`~$mn=7gRo zz{jDL1sQc< ze-@8^na=>L$+QBnbD+HtH^@H1is2X_)xkVsgnh)*wsxoa7qqelw`~1s=4`Z6F#bd7 z-|cALG75E<1LicevLFx9?sPa{Uh$#5?mAjpKl8XTQcp8aL2C-f1XdHaq79P;LMxt% z)_`^o>uI)jr}>JsyDOV_PLTtEJBwB;b z)Bfj!&@aO$p_K)@C3P%--+a59(aM4cnHFHvV*(*)Q_zN@-H0|Et&DKxQ~L~E7ut`7 zFtoCXr=gVvIVmj;%A<>{jeZc(AGhF3vCeET(phR7NM01`YpF_(m`lt_%Uc@dJAlAs#*8BeK=RN zGQ%lo9Wk64t*bN6|7GZK2c)2t30}9gJIw{sV#$-fuut%ctxYpaD`$oK3j3xEM=LX& zg;w@$8a-{L)pQ!~n$n&_dkC!zS8Quj&4yL7K&Auc^XQO$q}ODCRPzY5(tniwj;k?X z$GYZ2Xk~#C*4P(dBU%Uaw_IyAC1D1kXk`u0qaBBSX=QqT$@UqW(I&v>v40QRR1-#s zOR>*z4_X=Fq4Z-7&Fk#_d!)s_Jh$FH+_DY!HBCh;TWpW5O*QADm4nWEqxep9S7|Zc zA+$w!Lq3gGj*Tm}Iu>k`)nv*=p$*5p6cwJ2u~Gerjt|%@x12 z&-guCyVD$x_8f*wLVKQVTB?ir9QtL3w>I0iOv^3y6*!Gn7Vs8Y`;5PmC3Q8Q-ztS& zX6J488R(_mUCumZyR?$Dk?e2;P&8u@* zM=LAho@?(9LOTV+x4}1krqsFz&BZJf=2=bqFvD3-?KAd%W*@;1tt|1zzpbYISku#* z`Xbatr_RLz6QYH`Xjx_6L0b@6+R85^s7weLPH3 zgI+|R1C!L0^_Ll!vakv$@qx*bI=`_Wj43dQo)hwBls!snFb_%IQ*VBK3 z{f^Y8`@b1$pTQr%yNDkP^*BNftPt^szx#R()6K#sY@i%3jW~RHSQRAj-GR~V3#*r` zrl?-NP0`sJsSB2Me2=4cgmp=7CWG`qXMd#rf2J}7_F?i+3}Tvq&dEpv3?ggZfm8Ve zWsv20PF)K9Nlt2{J^OXhmAubV6y#x zq0fUYK_WT)W%?S}CZrSnI(8LG-<_bIAMjA@ql^d}JWpO%BdsEW7}|Mh2nquNR(Ix*&u9h4{5xSk>f- zn^doEdUX0DLokTEpN-`t>%p2L3G@l{cCbifDE!@5G^|f@7ADzg2s(!$!%>&*KbfPB zgH1q2(5KQrfk{Tvr@vLTd!D`~dG5Lv`H((~!yks7MiSw27Mke4!X%?P`~v!Qm}Crn z5nZ0}O2*Qc(DPtL^VBBFI27b`Ud}=p3a)rSJRbJ$t1?WV{QOI7&U)w!K_E`U{7IhzlbGSM4e!!t zz&=Ih!sOAM@)rx+fcubnwgP^GmVNJ6Km_HQhu{giS-%&==D+m}D(njxDVO zZ#42+50oUMTMA!tgnckc3Vj#-2u!k$eu$m{ldPwoqW=VwY@q)_|HB0Q1KEgz?3=4B zJcLO$(eKco!6aY8Wy|HztuV=E`g3}P&+w@S*+PFyuMU%#zCuA}>{M#s623smR=Ov> z4otEQF4u$V^k%Sj$aZ>ddK~NnWCy)IeI{%n@--Z<x1 zeF^;x>^I~PeHHx%><)4mF0))uzYlwg9HDOzmy1vt&}oUPe2Z>begm^tLd`3Hm{LILu_kkCQ0KzCX@FH<%;?Cj0Dr`ui{m zzFD;SZ}d?x$tn6D^hq$uY5G072_`x7&qXMog{45rS&s0Mo&uA6Pq)%{z$EA3a_w*{ zv+v_0Fv$<}D)gUVk{{`{%XksG4wU@FLPL&F0F#`jx1yKF7psz=>EZN-Fv&0USb8)} z@+-X`J<$YAL@ux}l!aL^$#3*=^p!BlMfxZ7T`@=m9Xv75XuHdzj=Z{T#hNOmfZcCgpb)CIcmZaD*H5r7+2L`Xl;w znB-4-A^i+Ya)bVseitUWNq4r&v4Zoj2q?M5LM2-PU##O>V##f~p56o|xkIl{kAg|= z(woyigh{gL?dhMwJ~iRTJr<%^*aDN>r}w6xgh?LIKcL@)NgmQi)8D`(kLXkARq-1& zlE2_4Ic-cVGzUs@IKmQoZ73he_Vh2ht5N$y>T<6br+Fk`fjs(&xh@rSw_!?J!9heG&b8n8Zq7MSlpB$XlYU z@Fu(CNjQF0%MDRckaw+}9Ki!7(ZS_?J&j%iCUKyDORo)+IMTnP*M&)(=s(bdVZkf0 z|D9R5z(PwDBrf#J^mZ_bEByvN0w!^z-=jytB<1M2^d2xtd2!kQ&sgXOl(=(*SMKE9wx!B zoY@vAn0^N)sX}i>FM>&`(%aLmD{=nghfD}nfU=nY7UwRjqqy~L3 zeJD&)lRlC@9wzaT>yK>G@hnUSO7tAzWBO;XwTLf$Hhl+7Qj7j6{UA(Io4%ZW1}5>N z{8`vU{}Uz&pzomP!6bq7y>$Fz6nwVAEjRrzy&6nXm!3g4`2$0cdMy0F zLIkWEQlI`C{e9R7B#3^MJ^?lbX+XbCpAM5Wq(7oBhao1V5erXP*p7mvG5sa|I7|{u zFQsR}Bu(f}I{OyQfk~RuJ?OC#7M{W+Vf3kVmo>O5BJJrWdR>^L1N}34BuvtgzLMS_CJD#%T>3itwVUkX8*`$Z*-@qgWdItSCOwyVDgU)0>SS|r2MizeK2-z@6 z7y4ED3z#H|ew*%!-#?W^(;v}&VUig76M9nDZM{T(v9xqU|)gp zFiCg12Ynt)(t}==z7{4i#j)VaLMl+wlU|p83MT1A52jy)NqW;;(Qm;dedz7!&ta0j zb~h=VSx}N8NI#Cyja~&N=}+%V4}wYJ>4WL*VUhv#k@Vg$$@}#2Ht&qzDgjCcvhXoS zm=BW-qR*zUg-Hg}KXuUAo{p!&Btz)SIs8$WB!Rw$eg!5OO5a3(3X=?@@1VP;;MhWj z)A!PA!4Q)&f`!8@yoZ8hBt3)P2__ju|AF2ECi#&58-0`vizL#o(kH?sqiv2W*=-ig zK*<=6@QAL#wjpEbPw0nWCy{aVm-KV6Ysh%GT%Stmd9Xs{Bf7IAucU8*>N;FzS*Rcd zygXq3ND|$f-VW9YnMn7i_k;~WCea(xC&T6;lj$w!$uQH`_%VfrFcwb0Bp=f|)6c*p zQ|aC5Kf*GRPw4&WH(`=#a7V0A0{sz8GF`5u@{DK%3on4`dORD(2(k@E)BRy}k(qG( zr;MdHfCVG7IQ%$zGuV5`Y`8p|`iR~R))|=tmj#;W$SY|NU>^iG*0#dO9AOA-9Ac(V zr%#8?mC$F?7sFN|^XPNw8(>?J`SefeyG+1c$O0A?v#<|#9QhP3TWC4`N7(PkLbx1U ztLWEZH<3kfdHA(~o)3G0d`90ve+`qE7Ndawl>ID}0jqDo!$zQNx-@zSOtKU%n=YN+ z78Z#tgUbSaOYaYpEQiaR+-dr7*vH7{b~h>KSy%y-e8CYi>04lu6>wRg>+~J4ZxP&x z+x#Xy3-$oPZKlod&@C|CMm)}^-?KT+|9>_GZXIk};vq-Cm%~b91aFwOUGRwB8YaQp zf$bw+9=#Jxf{UQdpVJ4yBsj}$UQ8bg8*9Q39Q3wLWMyG0OoBaOa~CK3^(7&SR!z{>N zdMe!k+rB!oPcAreRHw5L42(eb!(~$+q4$SPMAGOP^v_}2kpuK|^ph~jK{)@!fTFD1tvKTmn)i1{%s3hbzqVcba#3OnB*kA8a)Ok$)Nku`@#BcHsN~#78`V9I-nB*t=0(v$~a-RM<+;;vw213itDumI!& z{Rlk-Ci#tin%-&)?*H&ZxyZsVEEr&t-|1KAJz$bd`W<>-m?VpyOCJK0T%y0AkAO)o z%aas2xJp(KYWB-iOpOe|yoC4aJj zUm})+UCDw;ZqOs?H(|EWyV7&vl3VnC^w%)SZF&OT82v5!V3K?E&*-gTlKb>k^avPYQXa6dk%ew3NFLI^rhfpFJff%3$HOFl(T~$jFi8&m z9DO-Vl52D9|BEba14gIQkrzyOCOJeknv^pUV6M4o$yucXh1N#vuT_-gtxm_+XU#FOdCux;CLcF3Ed6xOqF90iG7 zuf#Xe&%q>etjX>97WyTaM0&-y)9=9~ZuFh>XD~@Qo8#!*!$JvAQl2BE(VcM5CUK`9 zqF07VJm^R1^mC_Vu6y1ES%#A!(oz2^z-zYFiB7rEh>q0_g7aJupciy(0Y-Oj3tlg?`xtyo}Uk!JCB~n4}(EPcMc^>eKz` zqxiBlLzzjP#B4;V?-T`WE_Bm?Vn6oxTJniKg$QZ`x_X zT`USQEbL)nA50QUPotlPNxISx(X(KZZuFz{M=(iu`bqj5n52hXe`FV&X2BDm(1Rt1WAia>@7$zA+FQT`FNe0u4=~1v= z$OrTi`WV<4`BxZ2Sg_p@U{}mQL6Sgslsg5ymct}N>8|uIVUl5VcRKzifFc=AuSow9 zCK(|v@BdX;xDJ$zA%2kAPeb-=y@>beV94@Fg*a)0{ILs z4?vF4yTW=Qi)~&3mtGb=2F^=fnT3Ba^#wXNB1U+8`S^{0n+#SRAquE(gaOdLnExvdQK+c^%553$LZXwaAwo!JWPj zb`04}uS(B?T}QUiYtiq*{zAT@*QY;$6(L*cA>wlJd<)d!+4MFR+HeFnm}EO#4&z9= zKTNU%E?c4#y$MY6H5~sbMtXCY}B2qxLX>3>9@4wLMaHxHTdR2CKhCHpwS9Qqe9$$t7m`g)iojs7`(2TXE+ zzLuUQ!y*UiUzV3^7G5WSl5`fn<_JH+B!}qx=vgqyVfqpJEtup8{X2RNO!6)LNBRpB z@C9;|g^Mhd!X(G&*XXYJu0nF0euwS_lboRcMXv>uoTNXcH-Je@87#bFp(RlA9lea+ z5hgiBcXmeyUNJDqY4plP+mqf0COJd*qJIFBoVB}2@n#_rDEXcv_|hlAB^jR>; z5A^!JhUl23l$8Rk3VBs1}a*^JLo(+@yP9H$egGn;!AJB_nk}UdgdKpY|32u^omdJuD zzVMP<<_P2Im0^-A^htC*Omda}3B4Xna*aNV9s-m6L7(f+4{vROlItuiXFqWi-nf6*_{Lt&B} zx+#l=IG`k#g=_RgnB+12Cfy8Mg5<&F?lGIb5w;u2hs&GOL;6|RWu$`b+vi*f``l-S&JHg;ijbG|K)MsY=&gplqBo+~hlL^*dJB3q zY+&-eoA^r!bp&gf|6RZznrFWu_giZZc?PJ@aw)+GY7NM{eQL&?CU-zc}2)m2u=>6y_zSs6b z9Owf)Y+oRF1;d&nPH_1MG|1+yOs!$zh$~#?JB-tbhV??+=ws*uVIz=o^hxybu&GFS z`V6`W_8H<%pGRK_+i(>3rXDOTVPOXf#}H4r+!(E*Ux3{}D$qC3|At8_ayr}T&iEeR z3#mlkL-&VCD#Odmz2PAi!hjMlTR~Ay(fhz8Rp7EfztD%nBvt8`>62iRYV=$5xiCp} zxZJ%z5|?|^6rjYLg#wPS7bd9zmtFHW{S-`6lm3>T1(W#D9X#y^RPcKh@2{XwL zUlzPrQ1Pn{l3H{hdPSI|Ha(DDTMY4|H=;LzN&M+8=DB31VS5NASQe zcT`6j&_~nj!`dMY=@aPPVf~Rt^pEMIVM$11`b@f64_t%IFv)xLL-d0%No)EE`tLAFDE%zG2qtM`bDSYRvrq%SIwNVz5i;o=V3Kz9 zKj_0@k}&!m`U;q&J^c|q119M}FA$eA^e>>KBMX0X1PA=ejwGD^h8_fyM9|d=_QR|j zOcF_VrB8xMI?*f8lVK+LVPK&e3#VX`&U9aT4oqUC*P&N9g$pOrh2DtX1SW~1H>dZ7 zNuuQpm4l)U3$uWd7>*E5-v*P!(!0=qgGsv5yVET&NjG|5y4z{I$xLiCZ(x=1bA-(9+>FZ%TklysU^iw9_L!=K2i&^kGg98zf zzp*ScSVy*&OHJC7@&k3z;0@4ootVewqFXCK*M)MtA)l_c_Ri^grpo zFi9f)7QGd$l?gvavv8M%XqaRS{XTspOfr`Kh&~Qx3q6-U2`(8=&!@{gB_F{}i1L($ zML@{}j_{nm8YW4i7ty!FBopZt`azgv68#PR7no!+y|e;9Jw60VpK#NS3B?83ruV-e711>?x!Gfk^kH&0X{IKRM&q^sBgm^3 z{#lHdx;*(SsclToklF#(yrt%Lj(ydoFL}#j)m8P8PTgNWB{#`aYr4JW099;*yPmgC z*h~7<>dABSFyY3@o6xw0vF2nOGKzhUwjp~ZKbIj#Bzxpz$SJJJ#|kgg0`$pLWo=eq zEB&((<-&9bwYgSBnT~(t9IeCCU=`N_4E-AY8ORg#M<9n`?d2ar<0TvJ=zq5MzTf|E z9vA*SkG9J3cZx;t6x}hg!I}7cgjPN~>u3Mp!r5xcrTJ=$8sFm&DI7y~%O6zW>uR3- z;nU~>wW&#tg2d@M+Z6sOzoz}uFKq@^b?3}~R^C3x?_pQ)MUl+?pVtpq+INQ&mw%YD z5yRPcj(yxr42Su4|7Sc~I}WQO1O97@sAOZt|IAvp`(z9!3;oYaY_?c(=O=2ie+dTH zgM@1!j@W8G?Ds?Ko?QAwjWxN0r6hw_K|6jMYVW-2;2FLj;*ET^5!r-nu+MeZZv4L- z@Qu+GM3%&WX~=7@3qH?>;5j4v(Vqe1$a#dXZ@+)4wpXj3!QZhFllbG$ z3^YR`zO7oQKGUgj$xeT(wVe_%fyCqnf2)CRGA;R^u!kh~Ma4}fpN0{_l4qmWxnK(3 zQHzqd{;dW$+5VsI$vZO|g{{YC}^oIZd diff --git a/src/com/github/shadowsocks/Shadowsocks.java b/src/com/github/shadowsocks/Shadowsocks.java index adfd3921..829f9046 100755 --- a/src/com/github/shadowsocks/Shadowsocks.java +++ b/src/com/github/shadowsocks/Shadowsocks.java @@ -405,31 +405,35 @@ public class Shadowsocks extends PreferenceActivity implements } } - - if (key.equals("remotePort")) - if (settings.getString("remotePort", "").equals("")) + if (key.equals("remotePort")) { + if (settings.getString("remotePort", "").equals("")) { remotePortText.setSummary(getString(R.string.remote_port_summary)); - else + } else { remotePortText.setSummary(settings.getString("remotePort", "")); - else if (key.equals("port")) - if (settings.getString("port", "").equals("")) + } + } else if (key.equals("port")) { + if (settings.getString("port", "").equals("")) { portText.setSummary(getString(R.string.port_summary)); - else + } else { portText.setSummary(settings.getString("port", "")); - else if (key.equals("sitekey")) - if (settings.getString("sitekey", "").equals("")) + } + } else if (key.equals("sitekey")) { + if (settings.getString("sitekey", "").equals("")) { sitekeyText.setSummary(getString(R.string.sitekey_summary)); - else + } else { sitekeyText.setSummary(settings.getString("sitekey", "")); - else if (key.equals("encMethod")) - if (!settings.getString("encMethod", "").equals("")) + } + } else if (key.equals("encMethod")) { + if (!settings.getString("encMethod", "").equals("")) { encMethodText.setSummary(settings.getString("encMethod", "")); - else if (key.equals("proxy")) + } + } else if (key.equals("proxy")) { if (settings.getString("proxy", "").equals("")) { proxyText.setSummary(getString(R.string.proxy_summary)); } else { proxyText.setSummary(settings.getString("proxy", "")); } + } } @Override