From a601f2382b30a0aeda83944543f7ceb9d88ee5eb Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Wed, 9 May 2012 12:49:20 +0200 Subject: Add tiny minivpn executable which uses the libopenvpn.so so we don't have to copy a big executable from assets to cache directory --- openvpn/Android.mk | 22 +++++++++++++++++++++- openvpn/src/openvpn/jniglue.c | 4 ++++ src/de/blinkt/openvpn/OpenVpnManagementThread.java | 13 +++++++++++-- 3 files changed, 36 insertions(+), 3 deletions(-) diff --git a/openvpn/Android.mk b/openvpn/Android.mk index 78849702..ca15c711 100644 --- a/openvpn/Android.mk +++ b/openvpn/Android.mk @@ -88,5 +88,25 @@ LOCAL_SRC_FILES:= src/openvpn/jniglue.c \ src/openvpn/status.c \ src/openvpn/tun.c -#include $(BUILD_SHARED_LIBRARY) +include $(BUILD_SHARED_LIBRARY) +#include $(BUILD_EXECUTABLE) + + +include $(CLEAR_VARS) + +LOCAL_LDLIBS := -llog +LOCAL_SRC_FILES:= src/openvpn/jniglue.c +LOCAL_MODULE = opvpnutil +include $(BUILD_SHARED_LIBRARY) + + +include $(CLEAR_VARS) + + +LOCAL_LDLIBS := -llog +LOCAL_SRC_FILES:= src/openvpn/testmain.c +LOCAL_MODULE = minivpn +LOCAL_SHARED_LIBRARIES=openvpn include $(BUILD_EXECUTABLE) + + diff --git a/openvpn/src/openvpn/jniglue.c b/openvpn/src/openvpn/jniglue.c index c79272d7..b28acba5 100644 --- a/openvpn/src/openvpn/jniglue.c +++ b/openvpn/src/openvpn/jniglue.c @@ -16,3 +16,7 @@ void android_openvpn_log(int level,const char* prefix,const char* prefix_sep,con __android_log_print(ANDROID_LOG_DEBUG,"openvpn","%s%s%s",prefix,prefix_sep,m1); } +void Java_de_blinkt_openvpn_OpenVpnManagementThread_jniclose(JNIEnv *env,jobject jo, jint fd) { + int ret = close(fd); + __android_log_print(ANDROID_LOG_DEBUG,"openvpn","fd close %d %d",fd,ret); +} diff --git a/src/de/blinkt/openvpn/OpenVpnManagementThread.java b/src/de/blinkt/openvpn/OpenVpnManagementThread.java index 31ea49e8..fb08898b 100644 --- a/src/de/blinkt/openvpn/OpenVpnManagementThread.java +++ b/src/de/blinkt/openvpn/OpenVpnManagementThread.java @@ -28,6 +28,9 @@ public class OpenVpnManagementThread implements Runnable { mOpenVPNService = openVpnService; } + static { + System.loadLibrary("opvpnutil"); + } public void managmentCommand(String cmd) { Log.d("openvpn", "mgmt cmd" + mSocket + " " +cmd + " " ); @@ -100,10 +103,11 @@ public class OpenVpnManagementThread implements Runnable { Log.d("Openvpn", "Got FD from socket: " + fd + " " + fdint); - mOpenVPNService.protect(fdint); + //mOpenVPNService.protect(fdint); //ParcelFileDescriptor pfd = ParcelFileDescriptor.fromFd(fdint); //pfd.close(); + jniclose(fdint); return; } catch (NoSuchMethodException e) { e.printStackTrace(); @@ -237,7 +241,8 @@ public class OpenVpnManagementThread implements Runnable { // Set the FileDescriptor to null to stop this mad behavior mSocket.setFileDescriptorsForSend(null); - pfd.close(); + + pfd.close(); return true; } catch (NoSuchMethodException e) { @@ -255,6 +260,10 @@ public class OpenVpnManagementThread implements Runnable { } + private native void jniclose(int fdint); + + + private void processPWCommand(String argument) { //argument has the form Need 'Private Key' password int p1 =argument.indexOf('\''); -- cgit v1.2.3