From 1a97b5467b2585a3e6a3c0adc612b7b80ad5bc23 Mon Sep 17 00:00:00 2001 From: Brenton Bostick Date: Mon, 30 Jan 2023 17:11:39 -0500 Subject: [PATCH] ANDROID-48: use ZT_jnicache.cpp and remove ZT_jnilookup.cpp and ZT_jniarray.cpp --- java/jni/ZT_jniarray.cpp | 112 ----- java/jni/ZT_jniarray.h | 60 --- java/jni/ZT_jnilookup.cpp | 160 ------ java/jni/ZT_jnilookup.h | 54 --- java/jni/ZT_jniutils.cpp | 672 ++++---------------------- java/jni/com_zerotierone_sdk_Node.cpp | 468 +++--------------- 6 files changed, 164 insertions(+), 1362 deletions(-) delete mode 100644 java/jni/ZT_jniarray.cpp delete mode 100644 java/jni/ZT_jniarray.h delete mode 100644 java/jni/ZT_jnilookup.cpp delete mode 100644 java/jni/ZT_jnilookup.h diff --git a/java/jni/ZT_jniarray.cpp b/java/jni/ZT_jniarray.cpp deleted file mode 100644 index a1cae76ed..000000000 --- a/java/jni/ZT_jniarray.cpp +++ /dev/null @@ -1,112 +0,0 @@ -// -// Created by Grant Limberg on 10/21/20. -// - -#include "ZT_jniarray.h" -#include -#include -#include - -jclass java_util_ArrayList; -jmethodID java_util_ArrayList_; -jmethodID java_util_ArrayList_size; -jmethodID java_util_ArrayList_get; -jmethodID java_util_ArrayList_add; - -void InitListJNI(JNIEnv* env) { - java_util_ArrayList = static_cast(env->NewGlobalRef(env->FindClass("java/util/ArrayList"))); - java_util_ArrayList_ = env->GetMethodID(java_util_ArrayList, "", "(I)V"); - java_util_ArrayList_size = env->GetMethodID (java_util_ArrayList, "size", "()I"); - java_util_ArrayList_get = env->GetMethodID(java_util_ArrayList, "get", "(I)Ljava/lang/Object;"); - java_util_ArrayList_add = env->GetMethodID(java_util_ArrayList, "add", "(Ljava/lang/Object;)Z"); -} - -jclass ListJNI::getListClass(JNIEnv* env) { - jclass jclazz = env->FindClass("java/util/List"); - assert(jclazz != nullptr); - return jclazz; -} - -jclass ListJNI::getArrayListClass(JNIEnv* env) { - jclass jclazz = env->FindClass("java/util/ArrayList"); - assert(jclazz != nullptr); - return jclazz; -} - -jclass ListJNI::getIteratorClass(JNIEnv* env) { - jclass jclazz = env->FindClass("java/util/Iterator"); - assert(jclazz != nullptr); - return jclazz; -} - -jmethodID ListJNI::getIteratorMethod(JNIEnv* env) { - static jmethodID mid = env->GetMethodID( - getListClass(env), "iterator", "()Ljava/util/Iterator;"); - assert(mid != nullptr); - return mid; -} - -jmethodID ListJNI::getHasNextMethod(JNIEnv* env) { - static jmethodID mid = env->GetMethodID( - getIteratorClass(env), "hasNext", "()Z"); - assert(mid != nullptr); - return mid; -} - -jmethodID ListJNI::getNextMethod(JNIEnv* env) { - static jmethodID mid = env->GetMethodID( - getIteratorClass(env), "next", "()Ljava/lang/Object;"); - assert(mid != nullptr); - return mid; -} - -jmethodID ListJNI::getArrayListConstructorMethodId(JNIEnv* env, jclass jclazz) { - static jmethodID mid = env->GetMethodID( - jclazz, "", "(I)V"); - assert(mid != nullptr); - return mid; -} - -jmethodID ListJNI::getListAddMethodId(JNIEnv* env) { - static jmethodID mid = env->GetMethodID( - getListClass(env), "add", "(Ljava/lang/Object;)Z"); - assert(mid != nullptr); - return mid; -} - -jclass ByteJNI::getByteClass(JNIEnv* env) { - jclass jclazz = env->FindClass("java/lang/Byte"); - assert(jclazz != nullptr); - return jclazz; -} - -jmethodID ByteJNI::getByteValueMethod(JNIEnv* env) { - static jmethodID mid = env->GetMethodID( - getByteClass(env), "byteValue", "()B"); - assert(mid != nullptr); - return mid; -} - -jobject cppToJava(JNIEnv* env, std::vector vector) { - jobject result = env->NewObject(java_util_ArrayList, java_util_ArrayList_, vector.size()); - for (std::string s: vector) { - jstring element = env->NewStringUTF(s.c_str()); - env->CallBooleanMethod(result, java_util_ArrayList_add, element); - env->DeleteLocalRef(element); - } - return result; -} - -std::vector javaToCpp(JNIEnv* env, jobject arrayList) { - jint len = env->CallIntMethod(arrayList, java_util_ArrayList_size); - std::vector result; - result.reserve(len); - for (jint i=0; i(env->CallObjectMethod(arrayList, java_util_ArrayList_get, i)); - const char* pchars = env->GetStringUTFChars(element, nullptr); - result.emplace_back(pchars); - env->ReleaseStringUTFChars(element, pchars); - env->DeleteLocalRef(element); - } - return result; -} diff --git a/java/jni/ZT_jniarray.h b/java/jni/ZT_jniarray.h deleted file mode 100644 index d93c87b9c..000000000 --- a/java/jni/ZT_jniarray.h +++ /dev/null @@ -1,60 +0,0 @@ -// -// Created by Grant Limberg on 10/21/20. -// - -#ifndef ZEROTIERANDROID_ZT_JNIARRAY_H -#define ZEROTIERANDROID_ZT_JNIARRAY_H - -#include -#include -#include - -extern jclass java_util_ArrayList; -extern jmethodID java_util_ArrayList_; -extern jmethodID java_util_ArrayList_size; -extern jmethodID java_util_ArrayList_get; -extern jmethodID java_util_ArrayList_add; - -void InitListJNI(JNIEnv* env); - -class ListJNI { -public: - // Get the java class id of java.util.List. - static jclass getListClass(JNIEnv* env); - - // Get the java class id of java.util.ArrayList. - static jclass getArrayListClass(JNIEnv* env); - - // Get the java class id of java.util.Iterator. - static jclass getIteratorClass(JNIEnv* env); - - // Get the java method id of java.util.List.iterator(). - static jmethodID getIteratorMethod(JNIEnv* env); - - // Get the java method id of java.util.Iterator.hasNext(). - static jmethodID getHasNextMethod(JNIEnv* env); - - // Get the java method id of java.util.Iterator.next(). - static jmethodID getNextMethod(JNIEnv* env); - - // Get the java method id of arrayList constructor. - static jmethodID getArrayListConstructorMethodId(JNIEnv* env, jclass jclazz); - - // Get the java method id of java.util.List.add(). - static jmethodID getListAddMethodId(JNIEnv* env); -}; - -class ByteJNI { -public: - // Get the java class id of java.lang.Byte. - static jclass getByteClass(JNIEnv* env); - - // Get the java method id of java.lang.Byte.byteValue. - static jmethodID getByteValueMethod(JNIEnv* env); -}; - -jobject cppToJava(JNIEnv* env, std::vector vector); - -std::vector javaToCpp(JNIEnv* env, jobject arrayList); - -#endif //ZEROTIERANDROID_ZT_JNIARRAY_H diff --git a/java/jni/ZT_jnilookup.cpp b/java/jni/ZT_jnilookup.cpp deleted file mode 100644 index fc76f6762..000000000 --- a/java/jni/ZT_jnilookup.cpp +++ /dev/null @@ -1,160 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2015 ZeroTier, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * -- - * - * ZeroTier may be used and distributed under the terms of the GPLv3, which - * are available at: http://www.gnu.org/licenses/gpl-3.0.html - * - * If you would like to embed ZeroTier into a commercial application or - * redistribute it in a modified binary form, please contact ZeroTier Networks - * LLC. Start here: http://www.zerotier.com/ - */ - -#include "ZT_jnilookup.h" -#include "ZT_jniutils.h" - -#define LOG_TAG "Lookup" - -JniLookup::JniLookup() - : m_jvm(NULL) -{ - LOGV("JNI Cache Created"); -} - -JniLookup::JniLookup(JavaVM *jvm) - : m_jvm(jvm) -{ - LOGV("JNI Cache Created"); -} - -JniLookup::~JniLookup() -{ - LOGV("JNI Cache Destroyed"); -} - - -void JniLookup::setJavaVM(JavaVM *jvm) -{ - LOGV("Assigned JVM to object"); - m_jvm = jvm; -} - - -jclass JniLookup::findClass(const std::string &name) -{ - if(!m_jvm) - return NULL; - - // get the class from the JVM - JNIEnv *env = NULL; - if(m_jvm->GetEnv((void**)&env, JNI_VERSION_1_6) != JNI_OK) - { - LOGE("Error retrieving JNI Environment"); - return NULL; - } - const char *c = name.c_str(); - jclass cls = env->FindClass(c); - if(env->ExceptionCheck()) - { - LOGE("Error finding class: %s", name.c_str()); - return NULL; - } - - return cls; -} - - -jmethodID JniLookup::findMethod(jclass cls, const std::string &methodName, const std::string &methodSig) -{ - if(!m_jvm) - return NULL; - - JNIEnv *env = NULL; - if(m_jvm->GetEnv((void**)&env, JNI_VERSION_1_6) != JNI_OK) - { - return NULL; - } - - jmethodID mid = env->GetMethodID(cls, methodName.c_str(), methodSig.c_str()); - if(env->ExceptionCheck()) - { - return NULL; - } - - return mid; -} - -jmethodID JniLookup::findStaticMethod(jclass cls, const std::string &methodName, const std::string &methodSig) -{ - if(!m_jvm) - return NULL; - - JNIEnv *env = NULL; - if(m_jvm->GetEnv((void**)&env, JNI_VERSION_1_6) != JNI_OK) - { - return NULL; - } - - jmethodID mid = env->GetStaticMethodID(cls, methodName.c_str(), methodSig.c_str()); - if(env->ExceptionCheck()) - { - return NULL; - } - - return mid; -} - -jfieldID JniLookup::findField(jclass cls, const std::string &fieldName, const std::string &typeStr) -{ - if(!m_jvm) - return NULL; - - JNIEnv *env = NULL; - if(m_jvm->GetEnv((void**)&env, JNI_VERSION_1_6) != JNI_OK) - { - return NULL; - } - - jfieldID fid = env->GetFieldID(cls, fieldName.c_str(), typeStr.c_str()); - if(env->ExceptionCheck()) - { - return NULL; - } - - return fid; -} - -jfieldID JniLookup::findStaticField(jclass cls, const std::string &fieldName, const std::string &typeStr) -{ - if(!m_jvm) - return NULL; - - JNIEnv *env = NULL; - if(m_jvm->GetEnv((void**)&env, JNI_VERSION_1_6) != JNI_OK) - { - return NULL; - } - - jfieldID fid = env->GetStaticFieldID(cls, fieldName.c_str(), typeStr.c_str()); - if(env->ExceptionCheck()) - { - return NULL; - } - - return fid; -} \ No newline at end of file diff --git a/java/jni/ZT_jnilookup.h b/java/jni/ZT_jnilookup.h deleted file mode 100644 index f5bd97d7d..000000000 --- a/java/jni/ZT_jnilookup.h +++ /dev/null @@ -1,54 +0,0 @@ -/* - * ZeroTier One - Network Virtualization Everywhere - * Copyright (C) 2011-2015 ZeroTier, Inc. - * - * This program is free software: you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation, either version 3 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License - * along with this program. If not, see . - * - * -- - * - * ZeroTier may be used and distributed under the terms of the GPLv3, which - * are available at: http://www.gnu.org/licenses/gpl-3.0.html - * - * If you would like to embed ZeroTier into a commercial application or - * redistribute it in a modified binary form, please contact ZeroTier Networks - * LLC. Start here: http://www.zerotier.com/ - */ - -#ifndef ZT_JNILOOKUP_H_ -#define ZT_JNILOOKUP_H_ - -#include -#include -#include - - - -class JniLookup { -public: - JniLookup(); - JniLookup(JavaVM *jvm); - ~JniLookup(); - - void setJavaVM(JavaVM *jvm); - - jclass findClass(const std::string &name); - jmethodID findMethod(jclass cls, const std::string &methodName, const std::string &methodSig); - jmethodID findStaticMethod(jclass cls, const std::string &methodName, const std::string &methodSig); - jfieldID findField(jclass cls, const std::string &fieldName, const std::string &typeStr); - jfieldID findStaticField(jclass cls, const std::string &fieldName, const std::string &typeStr); -private: - JavaVM *m_jvm; -}; - -#endif \ No newline at end of file diff --git a/java/jni/ZT_jniutils.cpp b/java/jni/ZT_jniutils.cpp index efc4b7289..0ed59fab9 100644 --- a/java/jni/ZT_jniutils.cpp +++ b/java/jni/ZT_jniutils.cpp @@ -17,8 +17,8 @@ */ #include "ZT_jniutils.h" -#include "ZT_jnilookup.h" -#include "ZT_jniarray.h" + +#include "ZT_jnicache.h" #include #include @@ -30,64 +30,46 @@ #define LOG_TAG "Utils" -extern JniLookup lookup; - jobject createResultObject(JNIEnv *env, ZT_ResultCode code) { - jclass resultClass = NULL; - jobject resultObject = NULL; - resultClass = lookup.findClass("com/zerotier/sdk/ResultCode"); - if(resultClass == NULL) - { - LOGE("Couldn't find ResultCode class"); - return NULL; // exception thrown - } - - std::string fieldName; + jfieldID field; switch(code) { case ZT_RESULT_OK: case ZT_RESULT_OK_IGNORED: LOGV("ZT_RESULT_OK"); - fieldName = "RESULT_OK"; + field = ResultCode_RESULT_OK_field; break; case ZT_RESULT_FATAL_ERROR_OUT_OF_MEMORY: LOGV("ZT_RESULT_FATAL_ERROR_OUT_OF_MEMORY"); - fieldName = "RESULT_FATAL_ERROR_OUT_OF_MEMORY"; + field = ResultCode_RESULT_FATAL_ERROR_OUT_OF_MEMORY_field; break; case ZT_RESULT_FATAL_ERROR_DATA_STORE_FAILED: LOGV("ZT_RESULT_FATAL_ERROR_DATA_STORE_FAILED"); - fieldName = "RESULT_FATAL_ERROR_DATA_STORE_FAILED"; + field = ResultCode_RESULT_FATAL_ERROR_DATA_STORE_FAILED_field; break; case ZT_RESULT_ERROR_NETWORK_NOT_FOUND: LOGV("ZT_RESULT_ERROR_NETWORK_NOT_FOUND"); - fieldName = "RESULT_ERROR_NETWORK_NOT_FOUND"; + field = ResultCode_RESULT_ERROR_NETWORK_NOT_FOUND_field; break; case ZT_RESULT_ERROR_UNSUPPORTED_OPERATION: LOGV("ZT_RESULT_ERROR_UNSUPPORTED_OPERATION"); - fieldName = "RESULT_ERROR_UNSUPPORTED_OPERATION"; + field = ResultCode_RESULT_ERROR_UNSUPPORTED_OPERATION_field; break; case ZT_RESULT_ERROR_BAD_PARAMETER: LOGV("ZT_RESULT_ERROR_BAD_PARAMETER"); - fieldName = "RESULT_ERROR_BAD_PARAMETER"; + field = ResultCode_RESULT_ERROR_BAD_PARAMETER_field; break; case ZT_RESULT_FATAL_ERROR_INTERNAL: default: LOGV("ZT_RESULT_FATAL_ERROR_INTERNAL"); - fieldName = "RESULT_FATAL_ERROR_INTERNAL"; + field = ResultCode_RESULT_FATAL_ERROR_INTERNAL_field; break; } - jfieldID enumField = lookup.findStaticField(resultClass, fieldName.c_str(), "Lcom/zerotier/sdk/ResultCode;"); - if(env->ExceptionCheck() || enumField == NULL) - { - LOGE("Error on FindStaticField"); - return NULL; - } - - resultObject = env->GetStaticObjectField(resultClass, enumField); + resultObject = env->GetStaticObjectField(ResultCode_class, field); if(env->ExceptionCheck() || resultObject == NULL) { LOGE("Error on GetStaticObjectField"); @@ -100,206 +82,147 @@ jobject createVirtualNetworkStatus(JNIEnv *env, ZT_VirtualNetworkStatus status) { jobject statusObject = NULL; - jclass statusClass = lookup.findClass("com/zerotier/sdk/VirtualNetworkStatus"); - if(statusClass == NULL) - { - return NULL; // exception thrown - } - - std::string fieldName; + jfieldID field; switch(status) { case ZT_NETWORK_STATUS_REQUESTING_CONFIGURATION: - fieldName = "NETWORK_STATUS_REQUESTING_CONFIGURATION"; + field = VirtualNetworkStatus_NETWORK_STATUS_REQUESTING_CONFIGURATION_field; break; case ZT_NETWORK_STATUS_OK: - fieldName = "NETWORK_STATUS_OK"; + field = VirtualNetworkStatus_NETWORK_STATUS_OK_field; break; case ZT_NETWORK_STATUS_AUTHENTICATION_REQUIRED: - fieldName = "NETWORK_STATUS_AUTHENTICATION_REQUIRED"; + field = VirtualNetworkStatus_NETWORK_STATUS_AUTHENTICATION_REQUIRED_field; break; case ZT_NETWORK_STATUS_ACCESS_DENIED: - fieldName = "NETWORK_STATUS_ACCESS_DENIED"; + field = VirtualNetworkStatus_NETWORK_STATUS_ACCESS_DENIED_field; break; case ZT_NETWORK_STATUS_NOT_FOUND: - fieldName = "NETWORK_STATUS_NOT_FOUND"; + field = VirtualNetworkStatus_NETWORK_STATUS_NOT_FOUND_field; break; case ZT_NETWORK_STATUS_PORT_ERROR: - fieldName = "NETWORK_STATUS_PORT_ERROR"; + field = VirtualNetworkStatus_NETWORK_STATUS_PORT_ERROR_field; break; case ZT_NETWORK_STATUS_CLIENT_TOO_OLD: - fieldName = "NETWORK_STATUS_CLIENT_TOO_OLD"; + field = VirtualNetworkStatus_NETWORK_STATUS_CLIENT_TOO_OLD_field; break; } - jfieldID enumField = lookup.findStaticField(statusClass, fieldName.c_str(), "Lcom/zerotier/sdk/VirtualNetworkStatus;"); - - statusObject = env->GetStaticObjectField(statusClass, enumField); + statusObject = env->GetStaticObjectField(VirtualNetworkStatus_class, field); return statusObject; } jobject createEvent(JNIEnv *env, ZT_Event event) { - jclass eventClass = NULL; jobject eventObject = NULL; - eventClass = lookup.findClass("com/zerotier/sdk/Event"); - if(eventClass == NULL) - { - return NULL; - } - - std::string fieldName; + jfieldID field; switch(event) { case ZT_EVENT_UP: - fieldName = "EVENT_UP"; + field = Event_EVENT_UP_field; break; case ZT_EVENT_OFFLINE: - fieldName = "EVENT_OFFLINE"; + field = Event_EVENT_OFFLINE_field; break; case ZT_EVENT_ONLINE: - fieldName = "EVENT_ONLINE"; + field = Event_EVENT_ONLINE_field; break; case ZT_EVENT_DOWN: - fieldName = "EVENT_DOWN"; + field = Event_EVENT_DOWN_field; break; case ZT_EVENT_FATAL_ERROR_IDENTITY_COLLISION: - fieldName = "EVENT_FATAL_ERROR_IDENTITY_COLLISION"; + field = Event_EVENT_FATAL_ERROR_IDENTITY_COLLISION_field; break; case ZT_EVENT_TRACE: - fieldName = "EVENT_TRACE"; + field = Event_EVENT_TRACE_field; break; case ZT_EVENT_USER_MESSAGE: - fieldName = "EVENT_USER_MESSAGE"; + field = Event_EVENT_USER_MESSAGE_field; break; case ZT_EVENT_REMOTE_TRACE: - fieldName = "EVENT_REMOTE_TRACE"; + field = Event_EVENT_REMOTE_TRACE_field; break; default: break; } - jfieldID enumField = lookup.findStaticField(eventClass, fieldName.c_str(), "Lcom/zerotier/sdk/Event;"); - - eventObject = env->GetStaticObjectField(eventClass, enumField); + eventObject = env->GetStaticObjectField(Event_class, field); return eventObject; } jobject createPeerRole(JNIEnv *env, ZT_PeerRole role) { - jclass peerRoleClass = NULL; jobject peerRoleObject = NULL; - peerRoleClass = lookup.findClass("com/zerotier/sdk/PeerRole"); - if(peerRoleClass == NULL) - { - return NULL; - } - - std::string fieldName; + jfieldID field; switch(role) { case ZT_PEER_ROLE_LEAF: - fieldName = "PEER_ROLE_LEAF"; + field = PeerRole_PEER_ROLE_LEAF_field; break; case ZT_PEER_ROLE_MOON: - fieldName = "PEER_ROLE_MOON"; + field = PeerRole_PEER_ROLE_MOON_field; break; case ZT_PEER_ROLE_PLANET: - fieldName = "PEER_ROLE_PLANET"; + field = PeerRole_PEER_ROLE_PLANET_field; break; } - jfieldID enumField = lookup.findStaticField(peerRoleClass, fieldName.c_str(), "Lcom/zerotier/sdk/PeerRole;"); - - peerRoleObject = env->GetStaticObjectField(peerRoleClass, enumField); + peerRoleObject = env->GetStaticObjectField(PeerRole_class, field); return peerRoleObject; } jobject createVirtualNetworkType(JNIEnv *env, ZT_VirtualNetworkType type) { - jclass vntypeClass = NULL; jobject vntypeObject = NULL; - vntypeClass = lookup.findClass("com/zerotier/sdk/VirtualNetworkType"); - if(env->ExceptionCheck() || vntypeClass == NULL) - { - return NULL; - } - - std::string fieldName; + jfieldID field; switch(type) { case ZT_NETWORK_TYPE_PRIVATE: - fieldName = "NETWORK_TYPE_PRIVATE"; + field = VirtualNetworkType_NETWORK_TYPE_PRIVATE_field; break; case ZT_NETWORK_TYPE_PUBLIC: - fieldName = "NETWORK_TYPE_PUBLIC"; + field = VirtualNetworkType_NETWORK_TYPE_PUBLIC_field; break; } - jfieldID enumField = lookup.findStaticField(vntypeClass, fieldName.c_str(), "Lcom/zerotier/sdk/VirtualNetworkType;"); - vntypeObject = env->GetStaticObjectField(vntypeClass, enumField); + vntypeObject = env->GetStaticObjectField(VirtualNetworkType_class, field); return vntypeObject; } jobject createVirtualNetworkConfigOperation(JNIEnv *env, ZT_VirtualNetworkConfigOperation op) { - jclass vnetConfigOpClass = NULL; jobject vnetConfigOpObject = NULL; - vnetConfigOpClass = lookup.findClass("com/zerotier/sdk/VirtualNetworkConfigOperation"); - if(env->ExceptionCheck() || vnetConfigOpClass == NULL) - { - return NULL; - } - - std::string fieldName; + jfieldID field; switch(op) { case ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_UP: - fieldName = "VIRTUAL_NETWORK_CONFIG_OPERATION_UP"; + field = VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_UP_field; break; case ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE: - fieldName = "VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE"; + field = VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_CONFIG_UPDATE_field; break; case ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN: - fieldName = "VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN"; + field = VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_DOWN_field; break; case ZT_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY: - fieldName = "VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY"; + field = VirtualNetworkConfigOperation_VIRTUAL_NETWORK_CONFIG_OPERATION_DESTROY_field; break; } - jfieldID enumField = lookup.findStaticField(vnetConfigOpClass, fieldName.c_str(), "Lcom/zerotier/sdk/VirtualNetworkConfigOperation;"); - vnetConfigOpObject = env->GetStaticObjectField(vnetConfigOpClass, enumField); + vnetConfigOpObject = env->GetStaticObjectField(VirtualNetworkConfigOperation_class, field); return vnetConfigOpObject; } jobject newInetAddress(JNIEnv *env, const sockaddr_storage &addr) { LOGV("newInetAddress"); - jclass inetAddressClass = NULL; - jmethodID inetAddress_getByAddress = NULL; - - inetAddressClass = lookup.findClass("java/net/InetAddress"); - if(env->ExceptionCheck() || inetAddressClass == NULL) - { - LOGE("Error finding InetAddress class"); - return NULL; - } - - inetAddress_getByAddress = lookup.findStaticMethod( - inetAddressClass, "getByAddress", "([B)Ljava/net/InetAddress;"); - if(env->ExceptionCheck() || inetAddress_getByAddress == NULL) - { - LOGE("Error finding getByAddress() static method"); - return NULL; - } jobject inetAddressObj = NULL; switch(addr.ss_family) @@ -316,7 +239,7 @@ jobject newInetAddress(JNIEnv *env, const sockaddr_storage &addr) env->SetByteArrayRegion(buff, 0, 16, (jbyte*)ipv6->sin6_addr.s6_addr); inetAddressObj = env->CallStaticObjectMethod( - inetAddressClass, inetAddress_getByAddress, buff); + InetAddress_class, InetAddress_getByAddress_method, buff); } break; case AF_INET: @@ -331,7 +254,7 @@ jobject newInetAddress(JNIEnv *env, const sockaddr_storage &addr) env->SetByteArrayRegion(buff, 0, 4, (jbyte*)&ipv4->sin_addr); inetAddressObj = env->CallStaticObjectMethod( - inetAddressClass, inetAddress_getByAddress, buff); + InetAddress_class, InetAddress_getByAddress_method, buff); } break; } @@ -346,15 +269,6 @@ jobject newInetAddress(JNIEnv *env, const sockaddr_storage &addr) jobject newInetSocketAddress(JNIEnv *env, const sockaddr_storage &addr) { LOGV("newInetSocketAddress Called"); - jclass inetSocketAddressClass = NULL; - jmethodID inetSocketAddress_constructor = NULL; - - inetSocketAddressClass = lookup.findClass("java/net/InetSocketAddress"); - if(env->ExceptionCheck() || inetSocketAddressClass == NULL) - { - LOGE("Error finding InetSocketAddress Class"); - return NULL; - } jobject inetAddressObject = NULL; @@ -373,14 +287,6 @@ jobject newInetSocketAddress(JNIEnv *env, const sockaddr_storage &addr) return NULL; } - inetSocketAddress_constructor = lookup.findMethod( - inetSocketAddressClass, "", "(Ljava/net/InetAddress;I)V"); - if(env->ExceptionCheck() || inetSocketAddress_constructor == NULL) - { - LOGE("Error finding InetSocketAddress constructor"); - return NULL; - } - int port = 0; switch(addr.ss_family) { @@ -407,7 +313,7 @@ jobject newInetSocketAddress(JNIEnv *env, const sockaddr_storage &addr) } - jobject inetSocketAddressObject = env->NewObject(inetSocketAddressClass, inetSocketAddress_constructor, inetAddressObject, port); + jobject inetSocketAddressObject = env->NewObject(InetSocketAddress_class, InetSocketAddress_ctor, inetAddressObject, port); if(env->ExceptionCheck() || inetSocketAddressObject == NULL) { LOGE("Error creating InetSocketAddress object"); } @@ -417,58 +323,8 @@ jobject newInetSocketAddress(JNIEnv *env, const sockaddr_storage &addr) jobject newPeerPhysicalPath(JNIEnv *env, const ZT_PeerPhysicalPath &ppp) { LOGV("newPeerPhysicalPath Called"); - jclass pppClass = NULL; - jfieldID addressField = NULL; - jfieldID lastSendField = NULL; - jfieldID lastReceiveField = NULL; - jfieldID preferredField = NULL; - - jmethodID ppp_constructor = NULL; - - pppClass = lookup.findClass("com/zerotier/sdk/PeerPhysicalPath"); - if(env->ExceptionCheck() || pppClass == NULL) - { - LOGE("Error finding PeerPhysicalPath class"); - return NULL; - } - - addressField = lookup.findField(pppClass, "address", "Ljava/net/InetSocketAddress;"); - if(env->ExceptionCheck() || addressField == NULL) - { - LOGE("Error finding address field"); - return NULL; - } - - lastSendField = lookup.findField(pppClass, "lastSend", "J"); - if(env->ExceptionCheck() || lastSendField == NULL) - { - LOGE("Error finding lastSend field"); - return NULL; - } - - lastReceiveField = lookup.findField(pppClass, "lastReceive", "J"); - if(env->ExceptionCheck() || lastReceiveField == NULL) - { - LOGE("Error finding lastReceive field"); - return NULL; - } - - preferredField = lookup.findField(pppClass, "preferred", "Z"); - if(env->ExceptionCheck() || preferredField == NULL) - { - LOGE("Error finding preferred field"); - return NULL; - } - - ppp_constructor = lookup.findMethod(pppClass, "", "()V"); - if(env->ExceptionCheck() || ppp_constructor == NULL) - { - LOGE("Error finding PeerPhysicalPath constructor"); - return NULL; - } - - jobject pppObject = env->NewObject(pppClass, ppp_constructor); + jobject pppObject = env->NewObject(PeerPhysicalPath_class, PeerPhysicalPath_ctor); if(env->ExceptionCheck() || pppObject == NULL) { LOGE("Error creating PPP object"); @@ -481,10 +337,10 @@ jobject newPeerPhysicalPath(JNIEnv *env, const ZT_PeerPhysicalPath &ppp) return NULL; } - env->SetObjectField(pppObject, addressField, addressObject); - env->SetLongField(pppObject, lastSendField, ppp.lastSend); - env->SetLongField(pppObject, lastReceiveField, ppp.lastReceive); - env->SetBooleanField(pppObject, preferredField, ppp.preferred); + env->SetObjectField(pppObject, PeerPhysicalPath_address_field, addressObject); + env->SetLongField(pppObject, PeerPhysicalPath_lastSend_field, ppp.lastSend); + env->SetLongField(pppObject, PeerPhysicalPath_lastReceive_field, ppp.lastReceive); + env->SetBooleanField(pppObject, PeerPhysicalPath_preferred_field, ppp.preferred); if(env->ExceptionCheck()) { LOGE("Exception assigning fields to PeerPhysicalPath object"); @@ -497,104 +353,22 @@ jobject newPeer(JNIEnv *env, const ZT_Peer &peer) { LOGV("newPeer called"); - jclass peerClass = NULL; - - jfieldID addressField = NULL; - jfieldID versionMajorField = NULL; - jfieldID versionMinorField = NULL; - jfieldID versionRevField = NULL; - jfieldID latencyField = NULL; - jfieldID roleField = NULL; - jfieldID pathsField = NULL; - - jmethodID peer_constructor = NULL; - - peerClass = lookup.findClass("com/zerotier/sdk/Peer"); - if(env->ExceptionCheck() || peerClass == NULL) - { - LOGE("Error finding Peer class"); - return NULL; - } - - addressField = lookup.findField(peerClass, "address", "J"); - if(env->ExceptionCheck() || addressField == NULL) - { - LOGE("Error finding address field of Peer object"); - return NULL; - } - - versionMajorField = lookup.findField(peerClass, "versionMajor", "I"); - if(env->ExceptionCheck() || versionMajorField == NULL) - { - LOGE("Error finding versionMajor field of Peer object"); - return NULL; - } - - versionMinorField = lookup.findField(peerClass, "versionMinor", "I"); - if(env->ExceptionCheck() || versionMinorField == NULL) - { - LOGE("Error finding versionMinor field of Peer object"); - return NULL; - } - - versionRevField = lookup.findField(peerClass, "versionRev", "I"); - if(env->ExceptionCheck() || versionRevField == NULL) - { - LOGE("Error finding versionRev field of Peer object"); - return NULL; - } - - latencyField = lookup.findField(peerClass, "latency", "I"); - if(env->ExceptionCheck() || latencyField == NULL) - { - LOGE("Error finding latency field of Peer object"); - return NULL; - } - - roleField = lookup.findField(peerClass, "role", "Lcom/zerotier/sdk/PeerRole;"); - if(env->ExceptionCheck() || roleField == NULL) - { - LOGE("Error finding role field of Peer object"); - return NULL; - } - - pathsField = lookup.findField(peerClass, "paths", "[Lcom/zerotier/sdk/PeerPhysicalPath;"); - if(env->ExceptionCheck() || pathsField == NULL) - { - LOGE("Error finding paths field of Peer object"); - return NULL; - } - - peer_constructor = lookup.findMethod(peerClass, "", "()V"); - if(env->ExceptionCheck() || peer_constructor == NULL) - { - LOGE("Error finding Peer constructor"); - return NULL; - } - - jobject peerObject = env->NewObject(peerClass, peer_constructor); + jobject peerObject = env->NewObject(Peer_class, Peer_ctor); if(env->ExceptionCheck() || peerObject == NULL) { LOGE("Error creating Peer object"); return NULL; // out of memory } - env->SetLongField(peerObject, addressField, (jlong)peer.address); - env->SetIntField(peerObject, versionMajorField, peer.versionMajor); - env->SetIntField(peerObject, versionMinorField, peer.versionMinor); - env->SetIntField(peerObject, versionRevField, peer.versionRev); - env->SetIntField(peerObject, latencyField, peer.latency); - env->SetObjectField(peerObject, roleField, createPeerRole(env, peer.role)); - - jclass peerPhysicalPathClass = lookup.findClass("com/zerotier/sdk/PeerPhysicalPath"); - if(env->ExceptionCheck() || peerPhysicalPathClass == NULL) - { - LOGE("Error finding PeerPhysicalPath class"); - return NULL; - } + env->SetLongField(peerObject, Peer_address_field, (jlong)peer.address); + env->SetIntField(peerObject, Peer_versionMajor_field, peer.versionMajor); + env->SetIntField(peerObject, Peer_versionMinor_field, peer.versionMinor); + env->SetIntField(peerObject, Peer_versionRev_field, peer.versionRev); + env->SetIntField(peerObject, Peer_latency_field, peer.latency); + env->SetObjectField(peerObject, Peer_role_field, createPeerRole(env, peer.role)); jobjectArray arrayObject = env->NewObjectArray( - peer.pathCount, peerPhysicalPathClass, NULL); + peer.pathCount, PeerPhysicalPath_class, NULL); if(env->ExceptionCheck() || arrayObject == NULL) { LOGE("Error creating PeerPhysicalPath[] array"); @@ -614,190 +388,51 @@ jobject newPeer(JNIEnv *env, const ZT_Peer &peer) env->DeleteLocalRef(path); } - env->SetObjectField(peerObject, pathsField, arrayObject); + env->SetObjectField(peerObject, Peer_paths_field, arrayObject); return peerObject; } jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &vnetConfig) { - jclass vnetConfigClass = NULL; - jmethodID vnetConfig_constructor = NULL; - jfieldID nwidField = NULL; - jfieldID macField = NULL; - jfieldID nameField = NULL; - jfieldID statusField = NULL; - jfieldID typeField = NULL; - jfieldID mtuField = NULL; - jfieldID dhcpField = NULL; - jfieldID bridgeField = NULL; - jfieldID broadcastEnabledField = NULL; - jfieldID portErrorField = NULL; - jfieldID netconfRevisionField = NULL; - jfieldID assignedAddressesField = NULL; - jfieldID routesField = NULL; - jfieldID dnsField = NULL; - - vnetConfigClass = lookup.findClass("com/zerotier/sdk/VirtualNetworkConfig"); - if(vnetConfigClass == NULL) - { - LOGE("Couldn't find com.zerotier.sdk.VirtualNetworkConfig"); - return NULL; - } - - vnetConfig_constructor = lookup.findMethod( - vnetConfigClass, "", "()V"); - if(env->ExceptionCheck() || vnetConfig_constructor == NULL) - { - LOGE("Couldn't find VirtualNetworkConfig Constructor"); - return NULL; - } - - jobject vnetConfigObj = env->NewObject(vnetConfigClass, vnetConfig_constructor); + jobject vnetConfigObj = env->NewObject(VirtualNetworkConfig_class, VirtualNetworkConfig_ctor); if(env->ExceptionCheck() || vnetConfigObj == NULL) { LOGE("Error creating new VirtualNetworkConfig object"); return NULL; } - nwidField = lookup.findField(vnetConfigClass, "nwid", "J"); - if(env->ExceptionCheck() || nwidField == NULL) - { - LOGE("Error getting nwid field"); - return NULL; - } - - macField = lookup.findField(vnetConfigClass, "mac", "J"); - if(env->ExceptionCheck() || macField == NULL) - { - LOGE("Error getting mac field"); - return NULL; - } - - nameField = lookup.findField(vnetConfigClass, "name", "Ljava/lang/String;"); - if(env->ExceptionCheck() || nameField == NULL) - { - LOGE("Error getting name field"); - return NULL; - } - - statusField = lookup.findField(vnetConfigClass, "status", "Lcom/zerotier/sdk/VirtualNetworkStatus;"); - if(env->ExceptionCheck() || statusField == NULL) - { - LOGE("Error getting status field"); - return NULL; - } - - typeField = lookup.findField(vnetConfigClass, "type", "Lcom/zerotier/sdk/VirtualNetworkType;"); - if(env->ExceptionCheck() || typeField == NULL) - { - LOGE("Error getting type field"); - return NULL; - } - - mtuField = lookup.findField(vnetConfigClass, "mtu", "I"); - if(env->ExceptionCheck() || mtuField == NULL) - { - LOGE("Error getting mtu field"); - return NULL; - } - - dhcpField = lookup.findField(vnetConfigClass, "dhcp", "Z"); - if(env->ExceptionCheck() || dhcpField == NULL) - { - LOGE("Error getting dhcp field"); - return NULL; - } - - bridgeField = lookup.findField(vnetConfigClass, "bridge", "Z"); - if(env->ExceptionCheck() || bridgeField == NULL) - { - LOGE("Error getting bridge field"); - return NULL; - } - - broadcastEnabledField = lookup.findField(vnetConfigClass, "broadcastEnabled", "Z"); - if(env->ExceptionCheck() || broadcastEnabledField == NULL) - { - LOGE("Error getting broadcastEnabled field"); - return NULL; - } - - portErrorField = lookup.findField(vnetConfigClass, "portError", "I"); - if(env->ExceptionCheck() || portErrorField == NULL) - { - LOGE("Error getting portError field"); - return NULL; - } - - netconfRevisionField = lookup.findField(vnetConfigClass, "netconfRevision", "J"); - if(env->ExceptionCheck() || netconfRevisionField == NULL) - { - LOGE("Error getting netconfRevision field"); - return NULL; - } - - assignedAddressesField = lookup.findField(vnetConfigClass, "assignedAddresses", - "[Ljava/net/InetSocketAddress;"); - if(env->ExceptionCheck() || assignedAddressesField == NULL) - { - LOGE("Error getting assignedAddresses field"); - return NULL; - } - - routesField = lookup.findField(vnetConfigClass, "routes", - "[Lcom/zerotier/sdk/VirtualNetworkRoute;"); - if(env->ExceptionCheck() || routesField == NULL) - { - LOGE("Error getting routes field"); - return NULL; - } - - dnsField = lookup.findField(vnetConfigClass, "dns", "Lcom/zerotier/sdk/VirtualNetworkDNS;"); - if(env->ExceptionCheck() || dnsField == NULL) - { - LOGE("Error getting DNS field"); - return NULL; - } - - env->SetLongField(vnetConfigObj, nwidField, vnetConfig.nwid); - env->SetLongField(vnetConfigObj, macField, vnetConfig.mac); + env->SetLongField(vnetConfigObj, VirtualNetworkConfig_nwid_field, vnetConfig.nwid); + env->SetLongField(vnetConfigObj, VirtualNetworkConfig_mac_field, vnetConfig.mac); jstring nameStr = env->NewStringUTF(vnetConfig.name); if(env->ExceptionCheck() || nameStr == NULL) { return NULL; // out of memory } - env->SetObjectField(vnetConfigObj, nameField, nameStr); + env->SetObjectField(vnetConfigObj, VirtualNetworkConfig_name_field, nameStr); jobject statusObject = createVirtualNetworkStatus(env, vnetConfig.status); if(env->ExceptionCheck() || statusObject == NULL) { return NULL; } - env->SetObjectField(vnetConfigObj, statusField, statusObject); + env->SetObjectField(vnetConfigObj, VirtualNetworkConfig_status_field, statusObject); jobject typeObject = createVirtualNetworkType(env, vnetConfig.type); if(env->ExceptionCheck() || typeObject == NULL) { return NULL; } - env->SetObjectField(vnetConfigObj, typeField, typeObject); + env->SetObjectField(vnetConfigObj, VirtualNetworkConfig_type_field, typeObject); - env->SetIntField(vnetConfigObj, mtuField, (int)vnetConfig.mtu); - env->SetBooleanField(vnetConfigObj, dhcpField, vnetConfig.dhcp); - env->SetBooleanField(vnetConfigObj, bridgeField, vnetConfig.bridge); - env->SetBooleanField(vnetConfigObj, broadcastEnabledField, vnetConfig.broadcastEnabled); - env->SetIntField(vnetConfigObj, portErrorField, vnetConfig.portError); - - jclass inetSocketAddressClass = lookup.findClass("java/net/InetSocketAddress"); - if(env->ExceptionCheck() || inetSocketAddressClass == NULL) - { - LOGE("Error finding InetSocketAddress class"); - return NULL; - } + env->SetIntField(vnetConfigObj, VirtualNetworkConfig_mtu_field, (int)vnetConfig.mtu); + env->SetBooleanField(vnetConfigObj, VirtualNetworkConfig_dhcp_field, vnetConfig.dhcp); + env->SetBooleanField(vnetConfigObj, VirtualNetworkConfig_bridge_field, vnetConfig.bridge); + env->SetBooleanField(vnetConfigObj, VirtualNetworkConfig_broadcastEnabled_field, vnetConfig.broadcastEnabled); + env->SetIntField(vnetConfigObj, VirtualNetworkConfig_portError_field, vnetConfig.portError); jobjectArray assignedAddrArrayObj = env->NewObjectArray( - vnetConfig.assignedAddressCount, inetSocketAddressClass, NULL); + vnetConfig.assignedAddressCount, InetSocketAddress_class, NULL); if(env->ExceptionCheck() || assignedAddrArrayObj == NULL) { LOGE("Error creating InetSocketAddress[] array"); @@ -817,17 +452,10 @@ jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &vnetConfig) env->DeleteLocalRef(inetAddrObj); } - env->SetObjectField(vnetConfigObj, assignedAddressesField, assignedAddrArrayObj); - - jclass virtualNetworkRouteClass = lookup.findClass("com/zerotier/sdk/VirtualNetworkRoute"); - if(env->ExceptionCheck() || virtualNetworkRouteClass == NULL) - { - LOGE("Error finding VirtualNetworkRoute class"); - return NULL; - } + env->SetObjectField(vnetConfigObj, VirtualNetworkConfig_assignedAddresses_field, assignedAddrArrayObj); jobjectArray routesArrayObj = env->NewObjectArray( - vnetConfig.routeCount, virtualNetworkRouteClass, NULL); + vnetConfig.routeCount, VirtualNetworkRoute_class, NULL); if(env->ExceptionCheck() || routesArrayObj == NULL) { LOGE("Error creating VirtualNetworkRoute[] array"); @@ -847,174 +475,62 @@ jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &vnetConfig) env->DeleteLocalRef(routeObj); } - env->SetObjectField(vnetConfigObj, routesField, routesArrayObj); + env->SetObjectField(vnetConfigObj, VirtualNetworkConfig_routes_field, routesArrayObj); jobject dnsObj = newVirtualNetworkDNS(env, vnetConfig.dns); if (dnsObj != NULL) { - env->SetObjectField(vnetConfigObj, dnsField, dnsObj); + env->SetObjectField(vnetConfigObj, VirtualNetworkConfig_dns_field, dnsObj); } return vnetConfigObj; } jobject newVersion(JNIEnv *env, int major, int minor, int rev) { - // create a com.zerotier.sdk.Version object - jclass versionClass = NULL; - jmethodID versionConstructor = NULL; - - versionClass = lookup.findClass("com/zerotier/sdk/Version"); - if(env->ExceptionCheck() || versionClass == NULL) - { - return NULL; - } - - versionConstructor = lookup.findMethod( - versionClass, "", "()V"); - if(env->ExceptionCheck() || versionConstructor == NULL) - { - return NULL; - } - - jobject versionObj = env->NewObject(versionClass, versionConstructor); + // create a com.zerotier.sdk.Version object + jobject versionObj = env->NewObject(Version_class, Version_ctor); if(env->ExceptionCheck() || versionObj == NULL) { return NULL; } - // copy data to Version object - jfieldID majorField = NULL; - jfieldID minorField = NULL; - jfieldID revisionField = NULL; - - majorField = lookup.findField(versionClass, "major", "I"); - if(env->ExceptionCheck() || majorField == NULL) - { - return NULL; - } - - minorField = lookup.findField(versionClass, "minor", "I"); - if(env->ExceptionCheck() || minorField == NULL) - { - return NULL; - } - - revisionField = lookup.findField(versionClass, "revision", "I"); - if(env->ExceptionCheck() || revisionField == NULL) - { - return NULL; - } - - env->SetIntField(versionObj, majorField, (jint)major); - env->SetIntField(versionObj, minorField, (jint)minor); - env->SetIntField(versionObj, revisionField, (jint)rev); + env->SetIntField(versionObj, Version_major_field, (jint)major); + env->SetIntField(versionObj, Version_minor_field, (jint)minor); + env->SetIntField(versionObj, Version_revision_field, (jint)rev); return versionObj; } jobject newVirtualNetworkRoute(JNIEnv *env, const ZT_VirtualNetworkRoute &route) { - jclass virtualNetworkRouteClass = NULL; - jmethodID routeConstructor = NULL; - - virtualNetworkRouteClass = lookup.findClass("com/zerotier/sdk/VirtualNetworkRoute"); - if(env->ExceptionCheck() || virtualNetworkRouteClass == NULL) - { - return NULL; - } - - routeConstructor = lookup.findMethod(virtualNetworkRouteClass, "", "()V"); - if(env->ExceptionCheck() || routeConstructor == NULL) - { - return NULL; - } - - jobject routeObj = env->NewObject(virtualNetworkRouteClass, routeConstructor); + jobject routeObj = env->NewObject(VirtualNetworkRoute_class, VirtualNetworkRoute_ctor); if(env->ExceptionCheck() || routeObj == NULL) { return NULL; } - jfieldID targetField = NULL; - jfieldID viaField = NULL; - jfieldID flagsField = NULL; - jfieldID metricField = NULL; - - targetField = lookup.findField(virtualNetworkRouteClass, "target", - "Ljava/net/InetSocketAddress;"); - if(env->ExceptionCheck() || targetField == NULL) - { - return NULL; - } - - viaField = lookup.findField(virtualNetworkRouteClass, "via", - "Ljava/net/InetSocketAddress;"); - if(env->ExceptionCheck() || targetField == NULL) - { - return NULL; - } - - flagsField = lookup.findField(virtualNetworkRouteClass, "flags", "I"); - if(env->ExceptionCheck() || flagsField == NULL) - { - return NULL; - } - - metricField = lookup.findField(virtualNetworkRouteClass, "metric", "I"); - if(env->ExceptionCheck() || metricField == NULL) - { - return NULL; - } - jobject targetObj = newInetSocketAddress(env, route.target); jobject viaObj = newInetSocketAddress(env, route.via); - env->SetObjectField(routeObj, targetField, targetObj); - env->SetObjectField(routeObj, viaField, viaObj); - env->SetIntField(routeObj, flagsField, (jint)route.flags); - env->SetIntField(routeObj, metricField, (jint)route.metric); + env->SetObjectField(routeObj, VirtualNetworkRoute_target_field, targetObj); + env->SetObjectField(routeObj, VirtualNetworkRoute_via_field, viaObj); + env->SetIntField(routeObj, VirtualNetworkRoute_flags_field, (jint)route.flags); + env->SetIntField(routeObj, VirtualNetworkRoute_metric_field, (jint)route.metric); return routeObj; } jobject newVirtualNetworkDNS(JNIEnv *env, const ZT_VirtualNetworkDNS &dns) { - jclass virtualNetworkDNSClass = NULL; - jmethodID dnsConstructor = NULL; - - virtualNetworkDNSClass = lookup.findClass("com/zerotier/sdk/VirtualNetworkDNS"); - if (env->ExceptionCheck() || virtualNetworkDNSClass == NULL) { - return NULL; - } - - dnsConstructor = lookup.findMethod(virtualNetworkDNSClass, "", "()V"); - if(env->ExceptionCheck() || dnsConstructor == NULL) { - return NULL; - } - - jobject dnsObj = env->NewObject(virtualNetworkDNSClass, dnsConstructor); + jobject dnsObj = env->NewObject(VirtualNetworkDNS_class, VirtualNetworkDNS_ctor); if(env->ExceptionCheck() || dnsObj == NULL) { return NULL; } - jfieldID domainField = NULL; - jfieldID serversField = NULL; - - domainField = lookup.findField(virtualNetworkDNSClass, "domain", "Ljava/lang/String;"); - if(env->ExceptionCheck() || domainField == NULL) - { - return NULL; - } - - serversField = lookup.findField(virtualNetworkDNSClass, "servers", "Ljava/util/ArrayList;"); - if(env->ExceptionCheck() || serversField == NULL) { - return NULL; - } - if (strlen(dns.domain) > 0) { - InitListJNI(env); + jstring domain = env->NewStringUTF(dns.domain); - jobject addrArray = env->NewObject(java_util_ArrayList, java_util_ArrayList_, 0); + jobject addrArray = env->NewObject(ArrayList_class, ArrayList_ctor, 0); struct sockaddr_storage nullAddr; memset(&nullAddr, 0, sizeof(struct sockaddr_storage)); @@ -1023,13 +539,13 @@ jobject newVirtualNetworkDNS(JNIEnv *env, const ZT_VirtualNetworkDNS &dns) if (memcmp(&tmp, &nullAddr, sizeof(struct sockaddr_storage)) != 0) { jobject addr = newInetSocketAddress(env, tmp); - env->CallBooleanMethod(addrArray, java_util_ArrayList_add, addr); + env->CallBooleanMethod(addrArray, ArrayList_add_method, addr); env->DeleteLocalRef(addr); } } - env->SetObjectField(dnsObj, domainField, domain); - env->SetObjectField(dnsObj, serversField, addrArray); + env->SetObjectField(dnsObj, VirtualNetworkDNS_domain_field, domain); + env->SetObjectField(dnsObj, VirtualNetworkDNS_servers_field, addrArray); return dnsObj; } diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp index b649b9c61..780feed02 100644 --- a/java/jni/com_zerotierone_sdk_Node.cpp +++ b/java/jni/com_zerotierone_sdk_Node.cpp @@ -29,7 +29,6 @@ #include "ZT_jnicache.h" #include "ZT_jniutils.h" -#include "ZT_jnilookup.h" #include #include "Mutex.hpp" @@ -41,9 +40,6 @@ #define LOG_TAG "Node" -// global static JNI Lookup Object -JniLookup lookup; - namespace { struct JniRef { @@ -117,39 +113,23 @@ namespace { return -100; } - jclass configListenerClass = env->GetObjectClass(ref->configListener); - if(configListenerClass == NULL) - { - LOGE("Couldn't find class for VirtualNetworkConfigListener instance"); - return -101; - } - - jmethodID configListenerCallbackMethod = lookup.findMethod(configListenerClass, - "onNetworkConfigurationUpdated", - "(JLcom/zerotier/sdk/VirtualNetworkConfigOperation;Lcom/zerotier/sdk/VirtualNetworkConfig;)I"); - if(configListenerCallbackMethod == NULL) - { - LOGE("Couldn't find onVirtualNetworkFrame() method"); - return -102; - } - jobject operationObject = createVirtualNetworkConfigOperation(env, operation); if(operationObject == NULL) { LOGE("Error creating VirtualNetworkConfigOperation object"); - return -103; + return -101; } jobject networkConfigObject = newNetworkConfig(env, *config); if(networkConfigObject == NULL) { LOGE("Error creating VirtualNetworkConfig object"); - return -104; + return -102; } return env->CallIntMethod( ref->configListener, - configListenerCallbackMethod, + VirtualNetworkConfigListener_onNetworkConfigurationUpdated_method, (jlong)nwid, operationObject, networkConfigObject); } @@ -180,22 +160,6 @@ namespace { return; } - jclass frameListenerClass = env->GetObjectClass(ref->frameListener); - if(env->ExceptionCheck() || frameListenerClass == NULL) - { - LOGE("Couldn't find class for VirtualNetworkFrameListener instance"); - return; - } - - jmethodID frameListenerCallbackMethod = lookup.findMethod( - frameListenerClass, - "onVirtualNetworkFrame", "(JJJJJ[B)V"); - if(env->ExceptionCheck() || frameListenerCallbackMethod == NULL) - { - LOGE("Couldn't find onVirtualNetworkFrame() method"); - return; - } - jbyteArray dataArray = env->NewByteArray(frameLength); if(env->ExceptionCheck() || dataArray == NULL) { @@ -213,7 +177,7 @@ namespace { return; } - env->CallVoidMethod(ref->frameListener, frameListenerCallbackMethod, (jlong)nwid, (jlong)sourceMac, (jlong)destMac, (jlong)etherType, (jlong)vlanid, dataArray); + env->CallVoidMethod(ref->frameListener, VirtualNetworkFrameListener_onVirtualNetworkFrame_method, (jlong)nwid, (jlong)sourceMac, (jlong)destMac, (jlong)etherType, (jlong)vlanid, dataArray); } @@ -236,26 +200,6 @@ namespace { return; } - jclass eventListenerClass = env->GetObjectClass(ref->eventListener); - if (eventListenerClass == NULL) { - LOGE("Couldn't class for EventListener instance"); - return; - } - - jmethodID onEventMethod = lookup.findMethod(eventListenerClass, - "onEvent", "(Lcom/zerotier/sdk/Event;)V"); - if (onEventMethod == NULL) { - LOGE("Couldn't find onEvent method"); - return; - } - - jmethodID onTraceMethod = lookup.findMethod(eventListenerClass, - "onTrace", "(Ljava/lang/String;)V"); - if (onTraceMethod == NULL) { - LOGE("Couldn't find onTrace method"); - return; - } - jobject eventObject = createEvent(env, event); if (eventObject == NULL) { return; @@ -264,28 +208,28 @@ namespace { switch (event) { case ZT_EVENT_UP: { LOGD("Event Up"); - env->CallVoidMethod(ref->eventListener, onEventMethod, eventObject); + env->CallVoidMethod(ref->eventListener, EventListener_onEvent_method, eventObject); break; } case ZT_EVENT_OFFLINE: { LOGD("Event Offline"); - env->CallVoidMethod(ref->eventListener, onEventMethod, eventObject); + env->CallVoidMethod(ref->eventListener, EventListener_onEvent_method, eventObject); break; } case ZT_EVENT_ONLINE: { LOGD("Event Online"); - env->CallVoidMethod(ref->eventListener, onEventMethod, eventObject); + env->CallVoidMethod(ref->eventListener, EventListener_onEvent_method, eventObject); break; } case ZT_EVENT_DOWN: { LOGD("Event Down"); - env->CallVoidMethod(ref->eventListener, onEventMethod, eventObject); + env->CallVoidMethod(ref->eventListener, EventListener_onEvent_method, eventObject); break; } case ZT_EVENT_FATAL_ERROR_IDENTITY_COLLISION: { LOGV("Identity Collision"); // call onEvent() - env->CallVoidMethod(ref->eventListener, onEventMethod, eventObject); + env->CallVoidMethod(ref->eventListener, EventListener_onEvent_method, eventObject); } break; case ZT_EVENT_TRACE: { @@ -294,7 +238,7 @@ namespace { if (data != NULL) { const char *message = (const char *) data; jstring messageStr = env->NewStringUTF(message); - env->CallVoidMethod(ref->eventListener, onTraceMethod, messageStr); + env->CallVoidMethod(ref->eventListener, EventListener_onTrace_method, messageStr); } } break; @@ -352,31 +296,6 @@ namespace { return; } - jclass dataStorePutClass = env->GetObjectClass(ref->dataStorePutListener); - if (dataStorePutClass == NULL) - { - LOGE("Couldn't find class for DataStorePutListener instance"); - return; - } - - jmethodID dataStorePutCallbackMethod = lookup.findMethod( - dataStorePutClass, - "onDataStorePut", - "(Ljava/lang/String;[BZ)I"); - if(dataStorePutCallbackMethod == NULL) - { - LOGE("Couldn't find onDataStorePut method"); - return; - } - - jmethodID deleteMethod = lookup.findMethod(dataStorePutClass, - "onDelete", "(Ljava/lang/String;)I"); - if(deleteMethod == NULL) - { - LOGE("Couldn't find onDelete method"); - return; - } - jstring nameStr = env->NewStringUTF(p); if (bufferLength >= 0) { @@ -392,11 +311,11 @@ namespace { env->SetByteArrayRegion(bufferObj, 0, bufferLength, (jbyte*)buffer); env->CallIntMethod(ref->dataStorePutListener, - dataStorePutCallbackMethod, + DataStorePutListener_onDataStorePut_method, nameStr, bufferObj, secure); } else { LOGD("JNI: Delete file: %s", p); - env->CallIntMethod(ref->dataStorePutListener, deleteMethod, nameStr); + env->CallIntMethod(ref->dataStorePutListener, DataStorePutListener_onDelete_method, nameStr); } } @@ -445,42 +364,25 @@ namespace { return -102; } - jclass dataStoreGetClass = env->GetObjectClass(ref->dataStoreGetListener); - if(dataStoreGetClass == NULL) - { - LOGE("Couldn't find class for DataStoreGetListener instance"); - return -103; - } - - jmethodID dataStoreGetCallbackMethod = lookup.findMethod( - dataStoreGetClass, - "onDataStoreGet", - "(Ljava/lang/String;[B)J"); - if(dataStoreGetCallbackMethod == NULL) - { - LOGE("Couldn't find onDataStoreGet method"); - return -104; - } - jstring nameStr = env->NewStringUTF(p); if(nameStr == NULL) { LOGE("Error creating name string object"); - return -105; // out of memory + return -103; // out of memory } jbyteArray bufferObj = env->NewByteArray(bufferLength); if(bufferObj == NULL) { LOGE("Error creating byte[] buffer of size: %u", bufferLength); - return -106; + return -104; } LOGV("Calling onDataStoreGet(%s, %p)", p, buffer); int retval = (int)env->CallLongMethod( ref->dataStoreGetListener, - dataStoreGetCallbackMethod, + DataStoreGetListener_onDataStoreGet_method, nameStr, bufferObj); @@ -517,25 +419,10 @@ namespace { return -100; } - jclass packetSenderClass = env->GetObjectClass(ref->packetSender); - if(packetSenderClass == NULL) - { - LOGE("Couldn't find class for PacketSender instance"); - return -101; - } - - jmethodID packetSenderCallbackMethod = lookup.findMethod(packetSenderClass, - "onSendPacketRequested", "(JLjava/net/InetSocketAddress;[BI)I"); - if(packetSenderCallbackMethod == NULL) - { - LOGE("Couldn't find onSendPacketRequested method"); - return -102; - } - jobject remoteAddressObj = newInetSocketAddress(env, *remoteAddress); jbyteArray bufferObj = env->NewByteArray(bufferSize); env->SetByteArrayRegion(bufferObj, 0, bufferSize, (jbyte*)buffer); - int retval = env->CallIntMethod(ref->packetSender, packetSenderCallbackMethod, localSocket, remoteAddressObj, bufferObj); + int retval = env->CallIntMethod(ref->packetSender, PacketSender_onSendPacketRequested_method, localSocket, remoteAddressObj, bufferObj); LOGV("JNI Packet Sender returned: %d", retval); return retval; @@ -558,21 +445,6 @@ namespace { JNIEnv *env = NULL; ref->jvm->GetEnv((void**)&env, JNI_VERSION_1_6); - jclass pathCheckerClass = env->GetObjectClass(ref->pathChecker); - if(pathCheckerClass == NULL) - { - LOGE("Couldn't find class for PathChecker instance"); - return true; - } - - jmethodID pathCheckCallbackMethod = lookup.findMethod(pathCheckerClass, - "onPathCheck", "(JJLjava/net/InetSocketAddress;)Z"); - if(pathCheckCallbackMethod == NULL) - { - LOGE("Couldn't find onPathCheck method implementation"); - return true; - } - // // was: // struct sockaddr_storage nullAddress = {0}; @@ -600,7 +472,7 @@ namespace { remoteAddressObj = newInetSocketAddress(env, *remoteAddress); } - return env->CallBooleanMethod(ref->pathChecker, pathCheckCallbackMethod, address, localSocket, remoteAddressObj); + return env->CallBooleanMethod(ref->pathChecker, PathChecker_onPathCheck_method, address, localSocket, remoteAddressObj); } int PathLookupFunction(ZT_Node *node, @@ -620,65 +492,17 @@ namespace { JNIEnv *env = NULL; ref->jvm->GetEnv((void**)&env, JNI_VERSION_1_6); - jclass pathCheckerClass = env->GetObjectClass(ref->pathChecker); - if(pathCheckerClass == NULL) - { - LOGE("Couldn't find class for PathChecker instance"); - return false; - } - - jmethodID pathLookupMethod = lookup.findMethod(pathCheckerClass, - "onPathLookup", "(JI)Ljava/net/InetSocketAddress;"); - if(pathLookupMethod == NULL) { - return false; - } - - jobject sockAddressObject = env->CallObjectMethod(ref->pathChecker, pathLookupMethod, address, ss_family); + jobject sockAddressObject = env->CallObjectMethod(ref->pathChecker, PathChecker_onPathLookup_method, address, ss_family); if(sockAddressObject == NULL) { LOGE("Unable to call onPathLookup implementation"); return false; } - jclass inetSockAddressClass = env->GetObjectClass(sockAddressObject); - if(inetSockAddressClass == NULL) - { - LOGE("Unable to find InetSocketAddress class"); - return false; - } + jint port = env->CallIntMethod(sockAddressObject, InetSocketAddress_getPort_method); + jobject addressObject = env->CallObjectMethod(sockAddressObject, InetSocketAddress_getAddress_method); - jmethodID getAddressMethod = lookup.findMethod(inetSockAddressClass, "getAddress", "()Ljava/net/InetAddress;"); - if(getAddressMethod == NULL) - { - LOGE("Unable to find InetSocketAddress.getAddress() method"); - return false; - } - - jmethodID getPortMethod = lookup.findMethod(inetSockAddressClass, "getPort", "()I"); - if(getPortMethod == NULL) - { - LOGE("Unable to find InetSocketAddress.getPort() method"); - return false; - } - - jint port = env->CallIntMethod(sockAddressObject, getPortMethod); - jobject addressObject = env->CallObjectMethod(sockAddressObject, getAddressMethod); - - jclass inetAddressClass = lookup.findClass("java/net/InetAddress"); - if(inetAddressClass == NULL) - { - LOGE("Unable to find InetAddress class"); - return false; - } - - getAddressMethod = lookup.findMethod(inetAddressClass, "getAddress", "()[B"); - if(getAddressMethod == NULL) - { - LOGE("Unable to find InetAddress.getAddress() method"); - return false; - } - - jbyteArray addressBytes = (jbyteArray)env->CallObjectMethod(addressObject, getAddressMethod); + jbyteArray addressBytes = (jbyteArray)env->CallObjectMethod(addressObject, InetAddress_getAddress_method); if(addressBytes == NULL) { LOGE("Unable to call InetAddress.getBytes()"); @@ -738,10 +562,7 @@ extern "C" { JNIEXPORT jint JNICALL JNI_OnLoad(JavaVM *vm, void *reserved) { - lookup.setJavaVM(vm); - setupJNICache(vm); - return JNI_VERSION_1_6; } @@ -760,112 +581,59 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_node_1init( JNIEnv *env, jobject obj, jlong now) { LOGV("Creating ZT_Node struct"); - jobject resultObject = createResultObject(env, ZT_RESULT_OK); + jobject resultObject = ResultCode_RESULT_OK_enum; ZT_Node *node; JniRef *ref = new JniRef; ref->id = (int64_t)now; env->GetJavaVM(&ref->jvm); - jclass cls = env->GetObjectClass(obj); - jfieldID fid = lookup.findField( - cls, "getListener", "Lcom/zerotier/sdk/DataStoreGetListener;"); - - if(fid == NULL) - { - return NULL; // exception already thrown - } - - jobject tmp = env->GetObjectField(obj, fid); - if(tmp == NULL) + jobject dataStoreGetListener = env->GetObjectField(obj, Node_getListener_field); + if(dataStoreGetListener == NULL) { return NULL; } - ref->dataStoreGetListener = env->NewGlobalRef(tmp); + ref->dataStoreGetListener = env->NewGlobalRef(dataStoreGetListener); - fid = lookup.findField( - cls, "putListener", "Lcom/zerotier/sdk/DataStorePutListener;"); - - if(fid == NULL) - { - return NULL; // exception already thrown - } - - tmp = env->GetObjectField(obj, fid); - if(tmp == NULL) + jobject dataStorePutListener = env->GetObjectField(obj, Node_putListener_field); + if(dataStorePutListener == NULL) { return NULL; } - ref->dataStorePutListener = env->NewGlobalRef(tmp); + ref->dataStorePutListener = env->NewGlobalRef(dataStorePutListener); - fid = lookup.findField( - cls, "sender", "Lcom/zerotier/sdk/PacketSender;"); - if(fid == NULL) - { - return NULL; // exception already thrown - } - - tmp = env->GetObjectField(obj, fid); - if(tmp == NULL) + jobject packetSender = env->GetObjectField(obj, Node_sender_field); + if(packetSender == NULL) { return NULL; } - ref->packetSender = env->NewGlobalRef(tmp); + ref->packetSender = env->NewGlobalRef(packetSender); - fid = lookup.findField( - cls, "frameListener", "Lcom/zerotier/sdk/VirtualNetworkFrameListener;"); - if(fid == NULL) - { - return NULL; // exception already thrown - } - - tmp = env->GetObjectField(obj, fid); - if(tmp == NULL) + jobject frameListener = env->GetObjectField(obj, Node_frameListener_field); + if(frameListener == NULL) { return NULL; } - ref->frameListener = env->NewGlobalRef(tmp); + ref->frameListener = env->NewGlobalRef(frameListener); - fid = lookup.findField( - cls, "configListener", "Lcom/zerotier/sdk/VirtualNetworkConfigListener;"); - if(fid == NULL) - { - return NULL; // exception already thrown - } - - tmp = env->GetObjectField(obj, fid); - if(tmp == NULL) + jobject configListener = env->GetObjectField(obj, Node_configListener_field); + if(configListener == NULL) { return NULL; } - ref->configListener = env->NewGlobalRef(tmp); + ref->configListener = env->NewGlobalRef(configListener); - fid = lookup.findField( - cls, "eventListener", "Lcom/zerotier/sdk/EventListener;"); - if(fid == NULL) + jobject eventListener = env->GetObjectField(obj, Node_eventListener_field); + if(eventListener == NULL) { return NULL; } + ref->eventListener = env->NewGlobalRef(eventListener); - tmp = env->GetObjectField(obj, fid); - if(tmp == NULL) + jobject pathChecker = env->GetObjectField(obj, Node_pathChecker_field); + if(pathChecker != NULL) { - return NULL; - } - ref->eventListener = env->NewGlobalRef(tmp); - - fid = lookup.findField( - cls, "pathChecker", "Lcom/zerotier/sdk/PathChecker;"); - if(fid == NULL) - { - LOGE("no path checker?"); - return NULL; - } - - tmp = env->GetObjectField(obj, fid); - if(tmp != NULL) - { - ref->pathChecker = env->NewGlobalRef(tmp); + ref->pathChecker = env->NewGlobalRef(pathChecker); } ref->callbacks->stateGetFunction = &StateGetFunction; @@ -961,14 +729,14 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processVirtualNetworkFrame( if(node == NULL) { // cannot find valid node. We should never get here. - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); + return ResultCode_RESULT_FATAL_ERROR_INTERNAL_enum; } unsigned int nbtd_len = env->GetArrayLength(out_nextBackgroundTaskDeadline); if(nbtd_len < 1) { // array for next background task length has 0 elements! - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); + return ResultCode_RESULT_FATAL_ERROR_INTERNAL_enum; } int64_t now = (int64_t)in_now; @@ -1028,75 +796,40 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket( { // cannot find valid node. We should never get here. LOGE("Couldn't find a valid node!"); - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); + return ResultCode_RESULT_FATAL_ERROR_INTERNAL_enum; } unsigned int nbtd_len = (unsigned int)env->GetArrayLength(out_nextBackgroundTaskDeadline); if(nbtd_len < 1) { LOGE("nbtd_len < 1"); - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); + return ResultCode_RESULT_FATAL_ERROR_INTERNAL_enum; } int64_t now = (int64_t)in_now; - // get the java.net.InetSocketAddress class and getAddress() method - jclass inetAddressClass = lookup.findClass("java/net/InetAddress"); - if(inetAddressClass == NULL) - { - LOGE("Can't find InetAddress class"); - // can't find java.net.InetAddress - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); - } - - jmethodID getAddressMethod = lookup.findMethod( - inetAddressClass, "getAddress", "()[B"); - if(getAddressMethod == NULL) - { - // cant find InetAddress.getAddress() - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); - } - - jclass InetSocketAddressClass = lookup.findClass("java/net/InetSocketAddress"); - if(InetSocketAddressClass == NULL) - { - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); - } - - jmethodID inetSockGetAddressMethod = lookup.findMethod( - InetSocketAddressClass, "getAddress", "()Ljava/net/InetAddress;"); - - jobject remoteAddrObject = env->CallObjectMethod(in_remoteAddress, inetSockGetAddressMethod); + jobject remoteAddrObject = env->CallObjectMethod(in_remoteAddress, InetSocketAddress_getAddress_method); if(remoteAddrObject == NULL) { - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); - } - - jmethodID inetSock_getPort = lookup.findMethod( - InetSocketAddressClass, "getPort", "()I"); - - if(env->ExceptionCheck() || inetSock_getPort == NULL) - { - LOGE("Couldn't find getPort method on InetSocketAddress"); - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); + return ResultCode_RESULT_FATAL_ERROR_INTERNAL_enum; } // call InetSocketAddress.getPort() - int remotePort = env->CallIntMethod(in_remoteAddress, inetSock_getPort); + int remotePort = env->CallIntMethod(in_remoteAddress, InetSocketAddress_getPort_method); if(env->ExceptionCheck()) { LOGE("Exception calling InetSocketAddress.getPort()"); - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); + return ResultCode_RESULT_FATAL_ERROR_INTERNAL_enum; } // Call InetAddress.getAddress() - jbyteArray remoteAddressArray = (jbyteArray)env->CallObjectMethod(remoteAddrObject, getAddressMethod); + jbyteArray remoteAddressArray = (jbyteArray)env->CallObjectMethod(remoteAddrObject, InetAddress_getAddress_method); if(remoteAddressArray == NULL) { LOGE("Unable to call getAddress()"); // unable to call getAddress() - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); + return ResultCode_RESULT_FATAL_ERROR_INTERNAL_enum; } unsigned int addrSize = env->GetArrayLength(remoteAddressArray); @@ -1129,7 +862,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket( LOGE("Unknown IP version"); // unknown address type env->ReleasePrimitiveArrayCritical(remoteAddressArray, addr, 0); - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); + return ResultCode_RESULT_FATAL_ERROR_INTERNAL_enum; } env->ReleasePrimitiveArrayCritical(remoteAddressArray, addr, 0); @@ -1137,7 +870,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket( if(packetLength == 0) { LOGE("Empty packet?!?"); - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); + return ResultCode_RESULT_FATAL_ERROR_INTERNAL_enum; } void *packetData = env->GetPrimitiveArrayCritical(in_packetData, NULL); void *localData = malloc(packetLength); @@ -1185,13 +918,13 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processBackgroundTasks( if(node == NULL) { // cannot find valid node. We should never get here. - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); + return ResultCode_RESULT_FATAL_ERROR_INTERNAL_enum; } unsigned int nbtd_len = env->GetArrayLength(out_nextBackgroundTaskDeadline); if(nbtd_len < 1) { - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); + return ResultCode_RESULT_FATAL_ERROR_INTERNAL_enum; } int64_t now = (int64_t)in_now; @@ -1219,7 +952,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_join( if(node == NULL) { // cannot find valid node. We should never get here. - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); + return ResultCode_RESULT_FATAL_ERROR_INTERNAL_enum; } uint64_t nwid = (uint64_t)in_nwid; @@ -1242,7 +975,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_leave( if(node == NULL) { // cannot find valid node. We should never get here. - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); + return ResultCode_RESULT_FATAL_ERROR_INTERNAL_enum; } uint64_t nwid = (uint64_t)in_nwid; @@ -1269,7 +1002,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_multicastSubscribe( if(node == NULL) { // cannot find valid node. We should never get here. - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); + return ResultCode_RESULT_FATAL_ERROR_INTERNAL_enum; } uint64_t nwid = (uint64_t)in_nwid; @@ -1299,7 +1032,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_multicastUnsubscribe( if(node == NULL) { // cannot find valid node. We should never get here. - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); + return ResultCode_RESULT_FATAL_ERROR_INTERNAL_enum; } uint64_t nwid = (uint64_t)in_nwid; @@ -1327,7 +1060,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_orbit( ZT_Node *node = findNode(nodeId); if(node == NULL) { - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); + return ResultCode_RESULT_FATAL_ERROR_INTERNAL_enum; } uint64_t moonWorldId = (uint64_t)in_moonWorldId; @@ -1351,7 +1084,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_deorbit( ZT_Node *node = findNode(nodeId); if(node == NULL) { - return createResultObject(env, ZT_RESULT_FATAL_ERROR_INTERNAL); + return ResultCode_RESULT_FATAL_ERROR_INTERNAL_enum; } uint64_t moonWorldId = (uint64_t)in_moonWorldId; @@ -1396,24 +1129,8 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_status return 0; } - jclass nodeStatusClass = NULL; - jmethodID nodeStatusConstructor = NULL; - // create a com.zerotier.sdk.NodeStatus object - nodeStatusClass = lookup.findClass("com/zerotier/sdk/NodeStatus"); - if(nodeStatusClass == NULL) - { - return NULL; - } - - nodeStatusConstructor = lookup.findMethod( - nodeStatusClass, "", "()V"); - if(nodeStatusConstructor == NULL) - { - return NULL; - } - - jobject nodeStatusObj = env->NewObject(nodeStatusClass, nodeStatusConstructor); + jobject nodeStatusObj = env->NewObject(NodeStatus_class, NodeStatus_ctor); if(nodeStatusObj == NULL) { return NULL; @@ -1422,52 +1139,23 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_status ZT_NodeStatus nodeStatus; ZT_Node_status(node, &nodeStatus); - jfieldID addressField = NULL; - jfieldID publicIdentityField = NULL; - jfieldID secretIdentityField = NULL; - jfieldID onlineField = NULL; - - addressField = lookup.findField(nodeStatusClass, "address", "J"); - if(addressField == NULL) - { - return NULL; - } - - publicIdentityField = lookup.findField(nodeStatusClass, "publicIdentity", "Ljava/lang/String;"); - if(publicIdentityField == NULL) - { - return NULL; - } - - secretIdentityField = lookup.findField(nodeStatusClass, "secretIdentity", "Ljava/lang/String;"); - if(secretIdentityField == NULL) - { - return NULL; - } - - onlineField = lookup.findField(nodeStatusClass, "online", "Z"); - if(onlineField == NULL) - { - return NULL; - } - - env->SetLongField(nodeStatusObj, addressField, nodeStatus.address); + env->SetLongField(nodeStatusObj, NodeStatus_address_field, nodeStatus.address); jstring pubIdentStr = env->NewStringUTF(nodeStatus.publicIdentity); if(pubIdentStr == NULL) { return NULL; // out of memory } - env->SetObjectField(nodeStatusObj, publicIdentityField, pubIdentStr); + env->SetObjectField(nodeStatusObj, NodeStatus_publicIdentity_field, pubIdentStr); jstring secIdentStr = env->NewStringUTF(nodeStatus.secretIdentity); if(secIdentStr == NULL) { return NULL; // out of memory } - env->SetObjectField(nodeStatusObj, secretIdentityField, secIdentStr); + env->SetObjectField(nodeStatusObj, NodeStatus_secretIdentity_field, secIdentStr); - env->SetBooleanField(nodeStatusObj, onlineField, nodeStatus.online); + env->SetBooleanField(nodeStatusObj, NodeStatus_online_field, nodeStatus.online); return nodeStatusObj; } @@ -1538,16 +1226,8 @@ JNIEXPORT jobjectArray JNICALL Java_com_zerotier_sdk_Node_peers( return NULL; } - jclass peerClass = lookup.findClass("com/zerotier/sdk/Peer"); - if(env->ExceptionCheck() || peerClass == NULL) - { - LOGE("Error finding Peer class"); - ZT_Node_freeQueryResult(node, peerList); - return NULL; - } - jobjectArray peerArrayObj = env->NewObjectArray( - peerList->peerCount, peerClass, NULL); + peerList->peerCount, Peer_class, NULL); if(env->ExceptionCheck() || peerArrayObj == NULL) { @@ -1598,16 +1278,8 @@ JNIEXPORT jobjectArray JNICALL Java_com_zerotier_sdk_Node_networks( return NULL; } - jclass vnetConfigClass = lookup.findClass("com/zerotier/sdk/VirtualNetworkConfig"); - if(env->ExceptionCheck() || vnetConfigClass == NULL) - { - LOGE("Error finding VirtualNetworkConfig class"); - ZT_Node_freeQueryResult(node, networkList); - return NULL; - } - jobjectArray networkListObject = env->NewObjectArray( - networkList->networkCount, vnetConfigClass, NULL); + networkList->networkCount, VirtualNetworkConfig_class, NULL); if(env->ExceptionCheck() || networkListObject == NULL) { LOGE("Error creating VirtualNetworkConfig[] array");