From 472206dfb23e8c2d285d5cdf19ba1444d07e4d52 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 10 Jun 2015 20:16:13 -0700 Subject: Rename JniCache to JniLookup Removed caching capabilities as the cached methods, fields, and objects appears to be broken on Android --- java/jni/Android.mk | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) (limited to 'java/jni/Android.mk') diff --git a/java/jni/Android.mk b/java/jni/Android.mk index bbf14348..9986c2c3 100644 --- a/java/jni/Android.mk +++ b/java/jni/Android.mk @@ -39,6 +39,6 @@ LOCAL_SRC_FILES := \ LOCAL_SRC_FILES += \ com_zerotierone_sdk_Node.cpp \ ZT1_jniutils.cpp \ - ZT1_jnicache.cpp + ZT1_jnilookup.cpp include $(BUILD_SHARED_LIBRARY) \ No newline at end of file -- cgit v1.2.3 From f803dd5ff46cc03e07364961eb23feb64b7697bd Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 1 Jul 2015 18:13:39 -0700 Subject: ... --- java/build.xml | 1 + java/jni/Android.mk | 1 + java/jni/com_zerotierone_sdk_Node.cpp | 8 +++++++- 3 files changed, 9 insertions(+), 1 deletion(-) (limited to 'java/jni/Android.mk') diff --git a/java/build.xml b/java/build.xml index 4bc1cdc0..4604ad66 100644 --- a/java/build.xml +++ b/java/build.xml @@ -42,6 +42,7 @@ + node == node); + if(ref->node != node) + { + LOGE("Nodes not equal. ref->node %p, node %p", ref->node, node); + return; + } JNIEnv *env = NULL; ref->jvm->GetEnv((void**)&env, JNI_VERSION_1_6); @@ -613,6 +617,8 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_node_1init( &VirtualNetworkConfigFunctionCallback, &EventCallback); + LOGI("Node Created."); + if(rc != ZT1_RESULT_OK) { LOGE("Error creating Node: %d", rc); -- cgit v1.2.3 From 0b7cd2f40a9502a797eff49db12f6f892e319f45 Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Wed, 1 Jul 2015 20:26:14 -0700 Subject: change some build settings. add a lock --- java/CMakeLists.txt | 1 + java/jni/Android.mk | 1 + java/jni/Application.mk | 6 +++--- java/jni/com_zerotierone_sdk_Node.cpp | 23 ++++++++++++++++++++--- 4 files changed, 25 insertions(+), 6 deletions(-) (limited to 'java/jni/Android.mk') diff --git a/java/CMakeLists.txt b/java/CMakeLists.txt index 382fd3cd..484517f8 100644 --- a/java/CMakeLists.txt +++ b/java/CMakeLists.txt @@ -59,6 +59,7 @@ set(src_files set(include_dirs ${CMAKE_CURRENT_SOURCE_DIR}/../include/ + ${CMAKE_CURRENT_SOURCE_DIR}/../node/ ${Java_INCLUDE_DIRS}) if(WIN32) diff --git a/java/jni/Android.mk b/java/jni/Android.mk index 15ba3875..56e6fb80 100644 --- a/java/jni/Android.mk +++ b/java/jni/Android.mk @@ -4,6 +4,7 @@ include $(CLEAR_VARS) LOCAL_MODULE := ZeroTierOneJNI LOCAL_C_INCLUDES := $(ZT1)/include +LOCAL_C_INCLUDES += $(ZT1)/node LOCAL_LDLIBS := -llog # LOCAL_CFLAGS := -g diff --git a/java/jni/Application.mk b/java/jni/Application.mk index 8b6c8020..0f369730 100644 --- a/java/jni/Application.mk +++ b/java/jni/Application.mk @@ -1,5 +1,5 @@ -APP_ABI := armeabi armeabi-v7a arm64-v8a x86 -APP_STL := gnustl_static -APP_CPPFLAGS += -Wall -fPIE -fstack-protector -fexceptions +NDK_TOOLCHAIN_VERSION := clang +APP_STL := c++_static +APP_CPPFLAGS := -O2 -fPIE -fvectorize -Wall -fstack-protector -fexceptions -fno-strict-aliasing APP_PLATFORM := android-14 APP_ABI := all diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp index e8f7272b..e98342e7 100644 --- a/java/jni/com_zerotierone_sdk_Node.cpp +++ b/java/jni/com_zerotierone_sdk_Node.cpp @@ -30,6 +30,7 @@ #include "ZT1_jnilookup.h" #include +#include "Mutex.hpp" #include #include @@ -192,9 +193,9 @@ namespace { { LOGV("EventCallback"); JniRef *ref = (JniRef*)userData; - if(ref->node != node) + if(ref->node != node && event != ZT1_EVENT_UP) { - LOGE("Nodes not equal. ref->node %p, node %p", ref->node, node); + LOGE("Nodes not equal. ref->node %p, node %p. Event: %d", ref->node, node, event); return; } JNIEnv *env = NULL; @@ -478,9 +479,11 @@ namespace { typedef std::map NodeMap; static NodeMap nodeMap; + ZeroTier::Mutex nodeMapMutex; ZT1_Node* findNode(uint64_t nodeId) { + ZeroTier::Mutex::Lock lock(nodeMapMutex); NodeMap::iterator found = nodeMap.find(nodeId); if(found != nodeMap.end()) { @@ -633,8 +636,10 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_node_1init( return resultObject; } + ZeroTier::Mutex::Lock lock(nodeMapMutex); ref->node = node; nodeMap.insert(std::make_pair(ref->id, ref)); + return resultObject; } @@ -650,7 +655,12 @@ JNIEXPORT void JNICALL Java_com_zerotier_sdk_Node_node_1delete( LOGV("Destroying ZT1_Node struct"); uint64_t nodeId = (uint64_t)id; - NodeMap::iterator found = nodeMap.find(nodeId); + NodeMap::iterator found; + { + ZeroTier::Mutex::Lock lock(nodeMapMutex); + found = nodeMap.find(nodeId); + } + if(found != nodeMap.end()) { JniRef *ref = found->second; @@ -819,6 +829,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket( jbyteArray addressArray = (jbyteArray)env->CallObjectMethod(addrObject, getAddressMethod); if(addressArray == NULL) { + LOGE("Unable to call getAddress()"); // unable to call getAddress() return createResultObject(env, ZT1_RESULT_FATAL_ERROR_INTERNAL); } @@ -849,6 +860,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket( } else { + LOGE("Unknown IP version"); // unknown address type env->ReleasePrimitiveArrayCritical(addressArray, addr, 0); return createResultObject(env, ZT1_RESULT_FATAL_ERROR_INTERNAL); @@ -856,6 +868,11 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_processWirePacket( env->ReleasePrimitiveArrayCritical(addressArray, addr, 0); unsigned int packetLength = env->GetArrayLength(in_packetData); + if(packetLength == 0) + { + LOGE("Empty packet?!?"); + return createResultObject(env, ZT1_RESULT_FATAL_ERROR_INTERNAL); + } void *packetData = env->GetPrimitiveArrayCritical(in_packetData, NULL); void *localData = malloc(packetLength); memcpy(localData, packetData, packetLength); -- cgit v1.2.3 From b7df177f33fd7a98da18ed9f756ee7272982a65d Mon Sep 17 00:00:00 2001 From: Grant Limberg Date: Mon, 2 Nov 2015 19:18:55 -0800 Subject: updates for origin/edge --- java/jni/Android.mk | 2 +- java/jni/Application.mk | 2 +- java/jni/ZT_jniutils.cpp | 18 -------- java/jni/com_zerotierone_sdk_Node.cpp | 64 ++++++---------------------- java/src/com/zerotier/sdk/Event.java | 25 ----------- java/src/com/zerotier/sdk/EventListener.java | 15 ------- 6 files changed, 15 insertions(+), 111 deletions(-) (limited to 'java/jni/Android.mk') diff --git a/java/jni/Android.mk b/java/jni/Android.mk index 22dfe4f1..3da3b04b 100644 --- a/java/jni/Android.mk +++ b/java/jni/Android.mk @@ -15,7 +15,6 @@ LOCAL_SRC_FILES := \ $(ZT1)/ext/http-parser/http_parser.c \ $(ZT1)/node/C25519.cpp \ $(ZT1)/node/CertificateOfMembership.cpp \ - $(ZT1)/node/Defaults.cpp \ $(ZT1)/node/Dictionary.cpp \ $(ZT1)/node/Identity.cpp \ $(ZT1)/node/IncomingPacket.cpp \ @@ -26,6 +25,7 @@ LOCAL_SRC_FILES := \ $(ZT1)/node/Node.cpp \ $(ZT1)/node/OutboundMulticast.cpp \ $(ZT1)/node/Packet.cpp \ + $(ZT1)/node/Path.cpp \ $(ZT1)/node/Peer.cpp \ $(ZT1)/node/Poly1305.cpp \ $(ZT1)/node/Salsa20.cpp \ diff --git a/java/jni/Application.mk b/java/jni/Application.mk index 2a789787..608e94c0 100644 --- a/java/jni/Application.mk +++ b/java/jni/Application.mk @@ -1,5 +1,5 @@ NDK_TOOLCHAIN_VERSION := clang APP_STL := c++_static -APP_CPPFLAGS := -O3 -fPIC -fPIE -fvectorize -Wall -fstack-protector -fexceptions -fno-strict-aliasing -DZT_NO_TYPE_PUNNING=1 +APP_CPPFLAGS := -O3 -fPIC -fPIE -fvectorize -Wall -fstack-protector -fexceptions -fno-strict-aliasing -Wno-deprecated-register -DZT_NO_TYPE_PUNNING=1 APP_PLATFORM := android-14 APP_ABI := all diff --git a/java/jni/ZT_jniutils.cpp b/java/jni/ZT_jniutils.cpp index bd8d8708..ae1aa929 100644 --- a/java/jni/ZT_jniutils.cpp +++ b/java/jni/ZT_jniutils.cpp @@ -133,15 +133,6 @@ jobject createEvent(JNIEnv *env, ZT_Event event) case ZT_EVENT_FATAL_ERROR_IDENTITY_COLLISION: fieldName = "EVENT_FATAL_ERROR_IDENTITY_COLLISION"; break; - case ZT_EVENT_SAW_MORE_RECENT_VERSION: - fieldName = "EVENT_SAW_MORE_RECENT_VERSION"; - break; - case ZT_EVENT_AUTHENTICATION_FAILURE: - fieldName = "EVENT_AUTHENTICATION_FAILURE"; - break; - case ZT_EVENT_INVALID_PACKET: - fieldName = "EVENT_INVALID_PACKET"; - break; case ZT_EVENT_TRACE: fieldName = "EVENT_TRACE"; break; @@ -425,7 +416,6 @@ jobject newPeerPhysicalPath(JNIEnv *env, const ZT_PeerPhysicalPath &ppp) jfieldID addressField = NULL; jfieldID lastSendField = NULL; jfieldID lastReceiveField = NULL; - jfieldID fixedField = NULL; jfieldID activeField = NULL; jfieldID preferredField = NULL; @@ -459,13 +449,6 @@ jobject newPeerPhysicalPath(JNIEnv *env, const ZT_PeerPhysicalPath &ppp) return NULL; } - fixedField = lookup.findField(pppClass, "fixed", "Z"); - if(env->ExceptionCheck() || fixedField == NULL) - { - LOGE("Error finding fixed field"); - return NULL; - } - activeField = lookup.findField(pppClass, "active", "Z"); if(env->ExceptionCheck() || activeField == NULL) { @@ -503,7 +486,6 @@ jobject newPeerPhysicalPath(JNIEnv *env, const ZT_PeerPhysicalPath &ppp) env->SetObjectField(pppObject, addressField, addressObject); env->SetLongField(pppObject, lastSendField, ppp.lastSend); env->SetLongField(pppObject, lastReceiveField, ppp.lastReceive); - env->SetBooleanField(pppObject, fixedField, ppp.fixed); env->SetBooleanField(pppObject, activeField, ppp.active); env->SetBooleanField(pppObject, preferredField, ppp.preferred); diff --git a/java/jni/com_zerotierone_sdk_Node.cpp b/java/jni/com_zerotierone_sdk_Node.cpp index e6042649..a4c677b7 100644 --- a/java/jni/com_zerotierone_sdk_Node.cpp +++ b/java/jni/com_zerotierone_sdk_Node.cpp @@ -134,7 +134,8 @@ namespace { (jlong)nwid, operationObject, networkConfigObject); } - void VirtualNetworkFrameFunctionCallback(ZT_Node *node,void *userData, + void VirtualNetworkFrameFunctionCallback(ZT_Node *node, + void *userData, uint64_t nwid, uint64_t sourceMac, uint64_t destMac, @@ -189,7 +190,10 @@ namespace { } - void EventCallback(ZT_Node *node,void *userData,enum ZT_Event event, const void *data) + void EventCallback(ZT_Node *node, + void *userData, + enum ZT_Event event, + const void *data) { LOGV("EventCallback"); JniRef *ref = (JniRef*)userData; @@ -217,25 +221,6 @@ namespace { return; } - - jmethodID onOutOfDateMethod = lookup.findMethod(eventListenerClass, - "onOutOfDate", "(Lcom/zerotier/sdk/Version;)V"); - if(onOutOfDateMethod == NULL) - { - LOGE("Couldn't find onOutOfDate method"); - return; - } - - - jmethodID onNetworkErrorMethod = lookup.findMethod(eventListenerClass, - "onNetworkError", "(Lcom/zerotier/sdk/Event;Ljava/net/InetSocketAddress;)V"); - if(onNetworkErrorMethod == NULL) - { - LOGE("Couldn't find onNetworkError method"); - return; - } - - jmethodID onTraceMethod = lookup.findMethod(eventListenerClass, "onTrace", "(Ljava/lang/String;)V"); if(onTraceMethod == NULL) @@ -263,31 +248,6 @@ namespace { env->CallVoidMethod(ref->eventListener, onEventMethod, eventObject); } break; - case ZT_EVENT_SAW_MORE_RECENT_VERSION: - { - LOGV("Version Event"); - // call onOutOfDate() - if(data != NULL) - { - int *version = (int*)data; - jobject verisonObj = newVersion(env, version[0], version[1], version[2], 0); - env->CallVoidMethod(ref->eventListener, onOutOfDateMethod, verisonObj); - } - } - break; - case ZT_EVENT_AUTHENTICATION_FAILURE: - case ZT_EVENT_INVALID_PACKET: - { - LOGV("Network Error Event"); - // call onNetworkError() - if(data != NULL) - { - sockaddr_storage *addr = (sockaddr_storage*)data; - jobject addressObj = newInetSocketAddress(env, *addr); - env->CallVoidMethod(ref->eventListener, onNetworkErrorMethod, addressObj); - } - } - break; case ZT_EVENT_TRACE: { LOGV("Trace Event"); @@ -303,7 +263,8 @@ namespace { } } - long DataStoreGetFunction(ZT_Node *node,void *userData, + long DataStoreGetFunction(ZT_Node *node, + void *userData, const char *objectName, void *buffer, unsigned long bufferSize, @@ -375,7 +336,8 @@ namespace { return retval; } - int DataStorePutFunction(ZT_Node *node,void *userData, + int DataStorePutFunction(ZT_Node *node, + void *userData, const char *objectName, const void *buffer, unsigned long bufferSize, @@ -440,7 +402,8 @@ namespace { } } - int WirePacketSendFunction(ZT_Node *node,void *userData,\ + int WirePacketSendFunction(ZT_Node *node, + void *userData, const struct sockaddr_storage *localAddress, const struct sockaddr_storage *remoteAddress, const void *buffer, @@ -625,8 +588,7 @@ JNIEXPORT jobject JNICALL Java_com_zerotier_sdk_Node_node_1init( &WirePacketSendFunction, &VirtualNetworkFrameFunctionCallback, &VirtualNetworkConfigFunctionCallback, - &EventCallback, - NULL); + &EventCallback); if(rc != ZT_RESULT_OK) { diff --git a/java/src/com/zerotier/sdk/Event.java b/java/src/com/zerotier/sdk/Event.java index 436b1b22..22d350e1 100644 --- a/java/src/com/zerotier/sdk/Event.java +++ b/java/src/com/zerotier/sdk/Event.java @@ -86,31 +86,6 @@ public enum Event { * umbrellas prevent rain and smoke detectors prevent fires. They do, right?

*/ EVENT_FATAL_ERROR_IDENTITY_COLLISION, - - /** - * A more recent version was observed on the network - * - *

Right now this is only triggered if a hub or rootserver reports a - * more recent version, and only once. It can be used to trigger a - * software update check.

- * - *

Meta-data: {@link Version}, more recent version number

- */ - EVENT_SAW_MORE_RECENT_VERSION, - - /** - * A packet failed authentication - * - *

Meta-data: {@link InetSocketAddress} containing origin address of packet

- */ - EVENT_AUTHENTICATION_FAILURE, - - /** - * A received packet was not valid - * - *

Meta-data: {@link InetSocketAddress} containing origin address of packet

- */ - EVENT_INVALID_PACKET, /** * Trace (debugging) message diff --git a/java/src/com/zerotier/sdk/EventListener.java b/java/src/com/zerotier/sdk/EventListener.java index bb191c1d..91050aaa 100644 --- a/java/src/com/zerotier/sdk/EventListener.java +++ b/java/src/com/zerotier/sdk/EventListener.java @@ -41,21 +41,6 @@ public interface EventListener { */ public void onEvent(Event event); - /** - * Callback for network error events: {@link Event.EVENT_AUTHENTICATION_FAILURE}, {link Event.EVENT_INVALID_PACKET} - * - * @param event {@link Event} enum - * @param source {@link InetSocketAddress} containing the origin address of the packet - */ - public void onNetworkError(Event event, InetSocketAddress source); - - /** - * Callback when the node detects that it's out of date. - * - * @param newVersion {@link Version} object with the latest version of ZeroTier One - */ - public void onOutOfDate(Version newVersion); - /** * Trace messages * -- cgit v1.2.3