Helper function added that retrieves a local IP address
authorTobias Brunner <tobias@strongswan.org>
Wed, 8 Aug 2012 11:20:34 +0000 (13:20 +0200)
committerTobias Brunner <tobias@strongswan.org>
Mon, 13 Aug 2012 09:00:28 +0000 (11:00 +0200)
src/frontends/android/src/org/strongswan/android/logic/CharonVpnService.java

index d66a551..6b45465 100644 (file)
 
 package org.strongswan.android.logic;
 
+import java.net.InetAddress;
+import java.net.NetworkInterface;
+import java.net.SocketException;
 import java.security.cert.CertificateEncodingException;
 import java.security.cert.X509Certificate;
 import java.util.ArrayList;
+import java.util.Enumeration;
 
 import org.strongswan.android.data.VpnProfile;
 import org.strongswan.android.data.VpnProfileDataSource;
@@ -399,6 +403,39 @@ public class CharonVpnService extends VpnService implements Runnable
         */
        public native void deinitializeCharon();
 
+       /**
+        * Helper function that retrieves a local IPv4 address.
+        *
+        * @return string representation of an IPv4 address, or null if none found
+        */
+       private static String getLocalIPv4Address()
+       {
+               try
+               {
+                       Enumeration<NetworkInterface> en = NetworkInterface.getNetworkInterfaces();
+                       while (en.hasMoreElements())
+                       {
+                               NetworkInterface intf = en.nextElement();
+
+                               Enumeration<InetAddress> enumIpAddr = intf.getInetAddresses();
+                               while (enumIpAddr.hasMoreElements())
+                               {
+                                       InetAddress inetAddress = enumIpAddr.nextElement();
+                                       if (!inetAddress.isLoopbackAddress() && inetAddress.getAddress().length == 4)
+                                       {
+                                               return inetAddress.getHostAddress().toString();
+                                       }
+                               }
+                       }
+               }
+               catch (SocketException ex)
+               {
+                       ex.printStackTrace();
+                       return null;
+               }
+               return null;
+       }
+
        /*
         * The libraries are extracted to /data/data/org.strongswan.android/...
         * during installation.