Helper function added that retrieves a local IP address
[strongswan.git] / src / frontends / android / src / org / strongswan / android / logic / CharonVpnService.java
index d66a551..6b45465 100644 (file)
 
 package org.strongswan.android.logic;
 
 
 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.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;
 
 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();
 
         */
        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.
        /*
         * The libraries are extracted to /data/data/org.strongswan.android/...
         * during installation.