From a5014a620b5341b08cf1134b7282b9657b32e35c Mon Sep 17 00:00:00 2001 From: Max Lv Date: Tue, 8 Jan 2013 21:21:19 +0800 Subject: [PATCH] new libsystem --- jni/Android.mk | 8 +- jni/node.c | 10 -- jni/system.cpp | 97 ++++++++++++++++++ jni/termExec.cpp | 2 +- libs/armeabi/libexec.so | Bin 17576 -> 17576 bytes libs/armeabi/{libnode.so => libsystem.so} | Bin 13432 -> 13444 bytes src/com/github/shadowsocks/Exec.java | 2 +- .../shadowsocks/ShadowsocksService.java | 4 +- .../shadowsocks/{Node.java => System.java} | 4 +- 9 files changed, 107 insertions(+), 20 deletions(-) delete mode 100644 jni/node.c create mode 100644 jni/system.cpp rename libs/armeabi/{libnode.so => libsystem.so} (54%) rename src/com/github/shadowsocks/{Node.java => System.java} (96%) diff --git a/jni/Android.mk b/jni/Android.mk index 0213c71b..162205d4 100755 --- a/jni/Android.mk +++ b/jni/Android.mk @@ -61,7 +61,7 @@ include $(BUILD_EXECUTABLE) include $(CLEAR_VARS) -LOCAL_MODULE:= libexec +LOCAL_MODULE:= exec LOCAL_SRC_FILES:= \ termExec.cpp @@ -72,12 +72,12 @@ include $(BUILD_SHARED_LIBRARY) include $(CLEAR_VARS) -LOCAL_MODULE:= node +LOCAL_MODULE:= system LOCAL_SRC_FILES:= \ - node.c + system.cpp -LOCAL_LDLIBS := -ldl +LOCAL_LDLIBS := -ldl -llog include $(BUILD_SHARED_LIBRARY) diff --git a/jni/node.c b/jni/node.c deleted file mode 100644 index b1a4dd95..00000000 --- a/jni/node.c +++ /dev/null @@ -1,10 +0,0 @@ -#include - -void Java_com_github_shadowsocks_Node_exec(JNIEnv *env, jobject thiz, jstring cmd) { - const char *str = (*env)->GetStringUTFChars(env, cmd, 0); - setenv("LD_LIBRARY_PATH", "/vendor/lib:/system/lib", 1); - setegid(getgid()); - seteuid(getuid()); - system(str); - (*env)->ReleaseStringUTFChars(env, cmd, str); -} diff --git a/jni/system.cpp b/jni/system.cpp new file mode 100644 index 00000000..fa2d3dc8 --- /dev/null +++ b/jni/system.cpp @@ -0,0 +1,97 @@ +#define LOG_TAG "Shadowsocks" + +#include "jni.h" +#include +#include +#include +#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) + +void Java_com_github_shadowsocks_Node_exec(JNIEnv *env, jobject thiz, jstring cmd) { + const char *str = env->GetStringUTFChars(cmd, 0); + setenv("LD_LIBRARY_PATH", "/vendor/lib:/system/lib", 1); + setegid(getgid()); + seteuid(getuid()); + system(str); + env->ReleaseStringUTFChars(cmd, str); +} + +static const char *classPathName = "com/github/shadowsocks/System"; + +static JNINativeMethod method_table[] = { + { "exec", "(Ljava/lang/String;)V", + (void*) Java_com_github_shadowsocks_Node_exec } +}; + +/* + * 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 (registerNatives(env) != JNI_TRUE) { + LOGE("ERROR: registerNatives failed"); + goto bail; + } + + result = JNI_VERSION_1_4; + +bail: + return result; +} diff --git a/jni/termExec.cpp b/jni/termExec.cpp index f8881eda..a01c84bb 100644 --- a/jni/termExec.cpp +++ b/jni/termExec.cpp @@ -30,7 +30,7 @@ * limitations under the License. */ -#define LOG_TAG "Exec" +#define LOG_TAG "Shadowsocks" #include "jni.h" #include diff --git a/libs/armeabi/libexec.so b/libs/armeabi/libexec.so index 302f782cbfce24870f59734fa275fc62eba61952..f16d8678563933182913f4a390b3ceaf1b1206f2 100755 GIT binary patch delta 200 zcmZ3{$+)7EaY72~Jv|17dmA&uMR>U+85nL^Gca5bXJB~0`K*XCW8gv{lZAnip$kY) z1>$)?%m!4l07xGPVvy1!KztL3?*Z`@Al@Lx!0-@A{{Z3$D+UHN2?mBDpqLSmeze(9 z?5`+ya7JQEetB_za(3}%CmngA%^7xc7&Ya9F3|^KMnMLK=|Flu5YH4~U|0gAR{?P< WkbMkD-`uS0aGil-t}MR=Jd85nL^Gca5bXJB}-`K*XCW8f?xlZAnip&3Z` z0r7MoW&y~2Kx2UPM<9-{VqlP$U|=W$ifIGs+nXK5 z{))1=R-`6x_SBIVnjFBxzB$8g4x^?x&>0#)%qYmfFab!<0OFYf3=DID^kN`R1+w=8 T=}Vh+9j-Gm>ThOsUd#vpyd*4Q diff --git a/libs/armeabi/libnode.so b/libs/armeabi/libsystem.so similarity index 54% rename from libs/armeabi/libnode.so rename to libs/armeabi/libsystem.so index 869e1f3e3bd11f428cb82def96c0cecd7f412500..4ab8fd1a8bce6cc629ebf894f51aed60075bc64b 100755 GIT binary patch delta 3243 zcmbVPZERE589vv!PGXZ#Hy=$3m*mDtnz)oWcG5zi8)-338$}_6LbLr?>cl2CHFg>s z)<$gC-H=KpBvPGhibUE*Tc)OTZ38Y6KSDoLT2&R5Km!dby18vKl{Q-fWdtb8-Shfh zlRN+1ksd$qbKY~#eb2{z@9~Ym{@{=-Jp6LSrpJC&#TdcNP;86|py4{;ryBO5f{?BI zP2e&3$KWTVItVWxsdG))8B60+I0&MS&Y76cIBEzZhPXx8s63m`*pp~gz;c)moGt}0 zo=FQZ>46MAn4w?D&@W}^A?OqLFqR9Z=e^FD!aha-lX}Imj1Heb+nTjX8@r-@o}n*h z=)Y-AQ@>aZcHN+90=F}CmZ0F_dPH_av;ylgVbCt`PggM3OaV4whA*O` z%FfsWdc?0ncR;Vx^?T3MpiU75DfS6`^=s)xVyK6+ag{c>+bf3eFKr8uR9d!>+VOBSR!a{5VIip?<`eH z^!aGazq>9PK?JNC*a(yZZh&5-hX4w%5cml|Wi3z)JP1%?dKlOMH~}j60Z3eIHGt(| zSOVq((xnE*{eYQ~rI+>KDgZ~EtpV-^WMDb4jC<`X`E%A%K55NMYS(Z7}^yhfD^rA^feXahj9ntm!HY(WV>3-`VeDICEYB=4#+@fFKoY)22G;flF*fHmG1gp6 zu9*>&ugxq^9!loUzc(Y%j6XT_b=GGGzm|TOnn~M520PDSiw67l)ur~=4EF3*WyvvZ za9lFj=M45~gMG?iPZ{iYVdu)P%`n^8HzxT|@~oYrtGlEd~jmh=fLX+#GtSlB!mZ{FK z=C`c5%$xHc5O`vD{)>W1awV=WFAz*~i`;74VY;};du)Tk$;6koLX)t8Un%Gns`>W9 z*G)hEC$U(#Lon4k5<80jAPRdEH}Bn)WBJo9_50lBHJAU$H&@gs?|!E$laoi{?0Z#t zGv{c00*tfEPJk!h5##&+N&boWx5TQdT>F=*ypek}?wQlt#laJI9gSmCQvELJn$1)H z-1xyCwE9u-KJ=fxu4&>oZO0ysA6U>EfN5ZML(>wt3mqE4N2-s-XZ8B&TdMLl9@xLA zJvfh7+nvg`fY%rKWi-E_PPEuHJ-7Jm%MSKjFjhWtL(8`syv;}ir5iK zl2dr|DTVa|l(J-`3rcU4cnO~_)4l**uqpe~N9mTTMvz@nchn+mEt;g#Cgo%iKUS~< zOo_N2f_8rv0=%C6TQiudGi7pWPz0tdFM%mX(}kGwGd++p_$c4%d`j7mbWE3Cx>nLf zjxKMRWe8LFe?a5(R58{E&^4L0Y}&M5u5D@G?vNYn9+KVlu0%=wc0riuyItj0nkm6y z=D&B9S!kk!5q{EDZlPr(bnzJ|T2w+m&v%zw(y>kP2i@h?HasbXV*U$vS@sAfH)7|% zaoa6-F8BN`^rD#)Zu0Z)a&zkM0>A05G>>APMtMa;r8V^zp$>5iyuG2!LLZYce2kyw ndm3s48-Jyt+-z&cPVo;@`Z9jk@w*#qgeQ3ueqZ3;#*+U6DLctB delta 2628 zcmb7`eQZ-z7{=dQZnw6K(S5?Cqg~gnfZJFrSYQw#nOP9YLYg?kBnuFQ1PywN zS(HDf8#yCUL_jie&IPv>&5T1Azk&qg_|O<5Nkx``OgF;f=CW{o-rid{_CHVZ^f|xt z`QCHSIlZmVPB(XWl*)retJgGmiC9)bauO-9;}y_jhMG{oN;B&%@LtsSqMkJko~DC6 z6@iu_qNIjV%2G`|F}k}+9yNjyBf_q%)GlOTezeM_bXpBhrfg)^Cjrh}pTbY2a3qDB zQ+Ox1IgiK&=lNbG(nzf_S~=;K{yMTUzm>vAji!lTtQmbGF$Xx5!e4jDB1}1PWjK@0&zK*wAYx29`hOB$spXgxB zPagO;Jb;-z@Sm6qi8|*P1Kv!jSFj&;;fXez^;zIDDWIibm&7Z<)e>tF6daHW_JZRQ zcYx0>y!XzIfk(hyh>M@_Gw|*LOk(nn;0|z$$v42WV2{Z*1nRoa*qP|BQ2`1(C`dL4 zfNQ|RW`{bkyrhlbNd)LK>-VH^8+ak2N!GuU!oA??yY*T+o&8TiI$Z@v?lwrLe^NM8 zC2E!Gy(t_9cY5#;W`JwKm%(KwZv|5k(F*1QEaA&2Sb>7%u{Z>-DH1cPUzAuQYf z?3^{IiZn-|wqs}0GZoMCL821qQ3$((Dj{q$3PTS<*kbeu#OVPj2MR&eP!;qrR1R_S zK^)ssh+n)LS`H->&$9&L8wybxiG%k-SO>Zvnh!08GQ@tLTU3W^V$9(b9!0fc^~izJ z1!C5bQ8*98&(CSDVYI;XJh5S}dn@)hV-K7Na#Wl$!>$IB0uLdlSV$OjArls_WnJEeS^ly8;t`=tEt+YR?7Xpt(KqVtg%{|3$)1}Qz zT|t+}_2$}LXEx%_s>&13Wv*Agh@HuNO|k3>#@0Bq70V)BY{}YWvFc(V>qX^8tUNo% zqHGhZa-UY}#e2E$Tl{xo8}l|PmVL`&C-YCJ%8A&zMXS^87iRREwwm%AKZrwKzt(h9 z*ZTT;qJ40@Ng8JUNR77r$>rVA3HYF{YqNjp+6T7&=;Px?y94m<`TfyuldqX&i#I($`@b;J07P9{D|!`MT-rJEr>IGs2}d>r`1vl_tsS6Bn_spn%f zqw71<#FdH#_1CbQ9Vod1=VSOab}cVYFM$1H)4w$R9Gnl_MK~Wu{wm=k&!h5z>J}T8 zKe?sMYkYa|e>?x(@?UIfnnhgyS46SQ%I%6WB3=l%0~|YxV^1cInG@ezd_VEZ@H4SG z#CHL=o!5g^BW{6swOGxfAn3Ly-sw)z21ikjVUsd8$ z^x~&wEfK$g65naKb8HwRN4P>6)^4m(wyH}JFR;_gG~PdK`|9& diff --git a/src/com/github/shadowsocks/Exec.java b/src/com/github/shadowsocks/Exec.java index ef450766..66d2d7f5 100755 --- a/src/com/github/shadowsocks/Exec.java +++ b/src/com/github/shadowsocks/Exec.java @@ -28,7 +28,7 @@ import java.io.FileDescriptor; public class Exec { static { - System.loadLibrary("exec"); + java.lang.System.loadLibrary("exec"); } /** diff --git a/src/com/github/shadowsocks/ShadowsocksService.java b/src/com/github/shadowsocks/ShadowsocksService.java index a096b673..84ce223e 100755 --- a/src/com/github/shadowsocks/ShadowsocksService.java +++ b/src/com/github/shadowsocks/ShadowsocksService.java @@ -210,7 +210,7 @@ public class ShadowsocksService extends Service { final String cmd = String.format(BASE + "shadowsocks -s \"%s\" -p \"%d\" -l \"%d\" -k \"%s\" -m \"%s\"", appHost, remotePort, localPort, sitekey, encMethod); - Node.exec(cmd); + System.exec(cmd); } }.start(); } @@ -222,7 +222,7 @@ public class ShadowsocksService extends Service { final String cmd = String.format(BASE + "polipo proxyPort=%d socksParentProxy=127.0.0.1:%d daemonise=true pidFile=\"%s\" logLevel=1 logFile=\"%s\"", localPort + 1, localPort, BASE + "polipo.pid", BASE + "polipo.log"); - Node.exec(cmd); + System.exec(cmd); } }.start(); } diff --git a/src/com/github/shadowsocks/Node.java b/src/com/github/shadowsocks/System.java similarity index 96% rename from src/com/github/shadowsocks/Node.java rename to src/com/github/shadowsocks/System.java index 6756ce84..db5ef9b8 100755 --- a/src/com/github/shadowsocks/Node.java +++ b/src/com/github/shadowsocks/System.java @@ -38,9 +38,9 @@ package com.github.shadowsocks; -public class Node { +public class System { static { - System.loadLibrary("node"); + java.lang.System.loadLibrary("system"); } public static native void exec(String cmd);