summaryrefslogtreecommitdiff
path: root/java/jni/ZT1_jniutils.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'java/jni/ZT1_jniutils.cpp')
-rw-r--r--java/jni/ZT1_jniutils.cpp55
1 files changed, 55 insertions, 0 deletions
diff --git a/java/jni/ZT1_jniutils.cpp b/java/jni/ZT1_jniutils.cpp
index fc97eb7d..4c4e8e60 100644
--- a/java/jni/ZT1_jniutils.cpp
+++ b/java/jni/ZT1_jniutils.cpp
@@ -301,6 +301,9 @@ bool appendItemToArrayList(JNIEnv *env, jobject array, jobject object)
jobject newInetAddress(JNIEnv *env, const sockaddr_storage &addr)
{
+ static jclass inetAddressClass = NULL;
+ static jmethodID inetAddress_getByAddress = NULL;
+
if(inetAddressClass == NULL)
{
inetAddressClass = env->FindClass("java/net/InetAddress");
@@ -356,6 +359,58 @@ jobject newInetAddress(JNIEnv *env, const sockaddr_storage &addr)
return inetAddressObj;
}
+jobject newInetSocketAddress(JNIEnv *env, const sockaddr_storage &addr)
+{
+ static jclass inetSocketAddressClass = NULL;
+ static jmethodID inetSocketAddress_constructor = NULL;
+
+ if(inetSocketAddressClass == NULL)
+ {
+ inetSocketAddressClass == env->FindClass("java/net/InetSocketAddress");
+ if(inetSocketAddressClass == NULL)
+ {
+ return NULL;
+ }
+ }
+
+ jobject inetAddressObject = newInetAddress(env, addr);
+
+ if(inetAddressObject == NULL)
+ {
+ return NULL;
+ }
+
+ if(inetSocketAddress_constructor == NULL)
+ {
+ inetSocketAddress_constructor = env->GetMethodID(
+ inetSocketAddressClass, "<init>", "(Ljava/net/InetAddress;I)V");
+ if(inetSocketAddress_constructor == NULL)
+ {
+ return NULL;
+ }
+ }
+
+ int port = 0;
+ switch(addr.ss_family)
+ {
+ case AF_INET6:
+ {
+ sockaddr_in6 *ipv6 = (sockaddr_in6*)&addr;
+ port = ipv6->sin6_port;
+ }
+ break;
+ case AF_INET:
+ {
+ sockaddr_in *ipv4 = (sockaddr_in*)&addr;
+ port = ipv4->sin_port;
+ }
+ break;
+ };
+
+ jobject inetSocketAddressObject = env->NewObject(inetSocketAddressClass, inetSocketAddress_constructor, inetAddressObject, port);
+ return inetSocketAddressObject;
+}
+
jobject newMulticastGroup(JNIEnv *env, const ZT1_MulticastGroup &mc)
{
static jclass multicastGroupClass = NULL;