diff options
Diffstat (limited to 'src/de/blinkt/openvpn/OpenVpnService.java')
-rw-r--r-- | src/de/blinkt/openvpn/OpenVpnService.java | 73 |
1 files changed, 68 insertions, 5 deletions
diff --git a/src/de/blinkt/openvpn/OpenVpnService.java b/src/de/blinkt/openvpn/OpenVpnService.java index 076fe7b5..b4ae411a 100644 --- a/src/de/blinkt/openvpn/OpenVpnService.java +++ b/src/de/blinkt/openvpn/OpenVpnService.java @@ -17,8 +17,11 @@ package de.blinkt.openvpn; import java.io.IOException; +import java.lang.reflect.Array; import java.util.Vector; +import de.blinkt.openvpn.OpenVpnService.CIDRIP; + import android.app.PendingIntent; import android.content.Intent; import android.net.LocalSocket; @@ -83,11 +86,30 @@ public class OpenVpnService extends VpnService implements Handler.Callback { public String toString() { return String.format("%s/%d",mIp,len); } + + public boolean normalise(){ + long ip=0; + + String[] ipt = mIp.split("\\."); + + ip += Long.parseLong(ipt[0])<< 24; + ip += Integer.parseInt(ipt[1])<< 16; + ip += Integer.parseInt(ipt[2])<< 8; + ip += Integer.parseInt(ipt[3]); + + long newip = ip & (0xffffffffl << (32 -len)); + if (newip != ip){ + mIp = String.format("%d.%d.%d.%d", (newip & 0xff000000) >> 24,(newip & 0xff0000) >> 16, (newip & 0xff00) >> 8 ,newip & 0xff); + return true; + } else { + return false; + } + } } @Override public void onRevoke() { - mSocketManager.managmentCommand("signal SIGINT\n"); + OpenVpnManagementThread.stopOpenVPN(); mServiceThread=null; stopSelf(); }; @@ -128,8 +150,12 @@ public class OpenVpnService extends VpnService implements Handler.Callback { } // Stop the previous session by interrupting the thread. - if (mSocketManager != null) { - mSocketManager.managmentCommand("signal SIGINT\n"); + if(OpenVpnManagementThread.stopOpenVPN()){ + // an old was asked to exit, wait 2s + try { + Thread.sleep(2000); + } catch (InterruptedException e) { + } } if (mServiceThread!=null) { @@ -210,13 +236,25 @@ public class OpenVpnService extends VpnService implements Handler.Callback { if(mDomain!=null) builder.addSearchDomain(mDomain); - + String bconfig[] = new String[5]; + + bconfig[0]= getString(R.string.last_openvpn_tun_config); + bconfig[1] = String.format(getString(R.string.local_ip_info,mLocalIP.mIp,mLocalIP.len)); + bconfig[2] = String.format(getString(R.string.dns_server_info, joinString(mDnslist))); + bconfig[3] = String.format(getString(R.string.dns_domain_info, mDomain)); + bconfig[4] = String.format(getString(R.string.routes_info, joinString(mRoutes))); + + + OpenVPN.logBuilderConfig(bconfig); + mDnslist.clear(); mRoutes.clear(); builder.setSession(mProfile.mName + " - " + mLocalIP); + + // Let the configure Button show the Log Intent intent = new Intent(getBaseContext(),LogWindow.class); PendingIntent startLW = PendingIntent.getActivity(getApplicationContext(), 0, intent, 0); @@ -233,6 +271,23 @@ public class OpenVpnService extends VpnService implements Handler.Callback { } + + // Ugly, but java has no such method + private <T> String joinString(Vector<T> vec) { + String ret = ""; + if(vec.size() > 0); + ret = vec.get(0).toString(); + for(int i=1;i < vec.size();i++) { + ret = ret + ", " + vec.get(i).toString(); + } + return ret; + } + + + + + + public void addDNS(String dns) { mDnslist.add(dns); } @@ -246,7 +301,15 @@ public class OpenVpnService extends VpnService implements Handler.Callback { public void addRoute(String dest, String mask) { - mRoutes.add(new CIDRIP(dest, mask)); + CIDRIP route = new CIDRIP(dest, mask); + if(route.len == 32 && !mask.equals("255.255.255.255")) { + OpenVPN.logMessage(0, "", String.format(getString(R.string.route_not_cidr,dest,mask))); + } + + if(route.normalise()) + OpenVPN.logMessage(0, "", String.format(getString(R.string.route_not_netip,dest,route.len,route.mIp))); + + mRoutes.add(route); } |