From 3e4d8f433239c40311037616b1b8833a06651ae0 Mon Sep 17 00:00:00 2001 From: Arne Schwabe Date: Mon, 16 Apr 2012 19:21:14 +0200 Subject: Initial import --- src/de/blinkt/openvpn/OpenVPN.java | 78 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 78 insertions(+) create mode 100644 src/de/blinkt/openvpn/OpenVPN.java (limited to 'src/de/blinkt/openvpn/OpenVPN.java') diff --git a/src/de/blinkt/openvpn/OpenVPN.java b/src/de/blinkt/openvpn/OpenVPN.java new file mode 100644 index 00000000..7385726b --- /dev/null +++ b/src/de/blinkt/openvpn/OpenVPN.java @@ -0,0 +1,78 @@ +package de.blinkt.openvpn; + +import java.util.LinkedList; + +import android.os.ParcelFileDescriptor; +import android.util.Log; + +public class OpenVPN { + private static OpenVpnService mOpenVpnService; + private static String localip; + private static final int MAXLOGENTRIES = 500; + public static native int startOpenVPNThread(); + public static native int startOpenVPNThreadArgs(String argv[]); + private static final String TAG = "OpenVpn"; + + + public static LinkedList logbuffer = new LinkedList(); + private static int counter=0; + + + static { + System.loadLibrary("crypto"); + System.loadLibrary("ssl"); + System.loadLibrary("lzo"); + System.loadLibrary("openvpn"); + } + + static void addRoute(String dest,String mask, String gw) { + Log.i("openvpn" ,"Got Routing information " + dest + " " + mask + " " + gw ); + } + + synchronized static void logMessage(int level,String prefix, String message) + { + logbuffer.addFirst(prefix + " " + message); + if(logbuffer.size()>MAXLOGENTRIES) + logbuffer.removeLast(); + + // The garbage collector does not collect the String from native + // but kills me for logging 100 messages with too many references :( + // Force GC how and then to kill loose ends + if(counter++ % 50==0) + System.gc(); + } + + + static void addInterfaceInfo(int mtu, String local, String remote) + { + Log.i("openvpn","Got interface info M" + mtu + " L: " + local + "R: " + remote); + localip=local; + } + + public static void setCallback(OpenVpnService openVpnService) { + mOpenVpnService = openVpnService; + } + + public static boolean protectSocket (int sockfd) + { + boolean p = mOpenVpnService.protect(sockfd); + if(p) + Log.d("openvpn","Protected socket "+ sockfd); + else + Log.e("openvpn","Error protecting socket "+ sockfd); + return p; + } + + public static int openTunDevice() { + Log.d(TAG,"Opening tun device"); + ParcelFileDescriptor pfd = mOpenVpnService.openTun(localip); + return pfd.detachFd(); + } + //! Dummy method being called to force loading of JNI Libraries + public static void foo() { } + + synchronized public static String[] getlogbuffer() { + return (String[]) logbuffer.toArray(new String[logbuffer.size()]); + + } +} -- cgit v1.2.3