/*
- * Copyright (C) 2014-2017 Tobias Brunner
+ * Copyright (C) 2014-2019 Tobias Brunner
* HSR Hochschule fuer Technik Rapperswil
*
* This program is free software; you can redistribute it and/or modify it
package org.strongswan.android.utils;
+import java.net.InetAddress;
+import java.net.UnknownHostException;
+
public class Utils
{
static final char[] HEXDIGITS = "0123456789abcdef".toCharArray();
* @return true if valid
*/
public native static boolean isProposalValid(boolean ike, String proposal);
+
+ /**
+ * Parse an IP address without doing a name lookup
+ *
+ * @param address IP address string
+ * @return address bytes if valid
+ */
+ private native static byte[] parseInetAddressBytes(String address);
+
+ /**
+ * Parse an IP address without doing a name lookup (as compared to InetAddress.fromName())
+ *
+ * @param address IP address string
+ * @return address if valid
+ * @throws UnknownHostException if address is invalid
+ */
+ public static InetAddress parseInetAddress(String address) throws UnknownHostException
+ {
+ byte[] bytes = parseInetAddressBytes(address);
+ if (bytes == null)
+ {
+ throw new UnknownHostException();
+ }
+ return InetAddress.getByAddress(bytes);
+ }
}
/*
- * Copyright (C) 2012-2018 Tobias Brunner
+ * Copyright (C) 2012-2019 Tobias Brunner
* Copyright (C) 2012 Giuliano Grassi
* Copyright (C) 2012 Ralf Sager
* HSR Hochschule fuer Technik Rapperswil
library_deinit();
return valid;
}
+
+/**
+ * Utility function to parse an IP address from a string (static, so `this` is the class)
+ */
+JNI_METHOD_P(org_strongswan_android_utils, Utils, parseInetAddressBytes, jbyteArray,
+ jstring address)
+{
+ jbyteArray bytes;
+ host_t *host;
+ char *str;
+
+ dbg = dbg_android;
+
+ if (!library_init(NULL, "charon"))
+ {
+ library_deinit();
+ return NULL;
+ }
+ str = androidjni_convert_jstring(env, address);
+ host = host_create_from_string(str, 0);
+ if (!host)
+ {
+ free(str);
+ return NULL;
+ }
+ bytes = byte_array_from_chunk(env, host->get_address(host));
+ host->destroy(host);
+ free(str);
+ library_deinit();
+ return bytes;
+}