summaryrefslogtreecommitdiff
path: root/java/jni
diff options
context:
space:
mode:
authorGrant Limberg <glimberg@gmail.com>2016-09-05 13:52:29 -0700
committerGrant Limberg <glimberg@gmail.com>2016-09-05 13:52:29 -0700
commitd063f583eecbcd98837cbbb98a79ac604664625b (patch)
treece8fa058c9845af949eb70f7694beca3af3a779e /java/jni
parent01aa469591019d0412cd6714312467823aaacea9 (diff)
downloadinfinitytier-d063f583eecbcd98837cbbb98a79ac604664625b.tar.gz
infinitytier-d063f583eecbcd98837cbbb98a79ac604664625b.zip
Added VirtualNetworkRoute class and added it to VirtualNetworkConfig
Diffstat (limited to 'java/jni')
-rw-r--r--java/jni/ZT_jniutils.cpp104
-rw-r--r--java/jni/ZT_jniutils.h2
2 files changed, 105 insertions, 1 deletions
diff --git a/java/jni/ZT_jniutils.cpp b/java/jni/ZT_jniutils.cpp
index 512bf839..5f54751d 100644
--- a/java/jni/ZT_jniutils.cpp
+++ b/java/jni/ZT_jniutils.cpp
@@ -609,6 +609,7 @@ jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &vnetConfig)
jfieldID portErrorField = NULL;
jfieldID netconfRevisionField = NULL;
jfieldID assignedAddressesField = NULL;
+ jfieldID routesField = NULL;
vnetConfigClass = lookup.findClass("com/zerotier/sdk/VirtualNetworkConfig");
if(vnetConfigClass == NULL)
@@ -716,6 +717,13 @@ jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &vnetConfig)
return NULL;
}
+ routesField = lookup.findField(vnetConfigClass, "routes", "[Lcom/zerotier/sdk/VirtualNetworkRoute");
+ if(env->ExceptionCheck() || routesField == NULL)
+ {
+ LOGE("Error getting routes field");
+ return NULL;
+ }
+
env->SetLongField(vnetConfigObj, nwidField, vnetConfig.nwid);
env->SetLongField(vnetConfigObj, macField, vnetConfig.mac);
jstring nameStr = env->NewStringUTF(vnetConfig.name);
@@ -773,6 +781,34 @@ jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &vnetConfig)
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;
+ }
+
+ jobjectArray routesArrayObj = env->NewObjectArray(
+ vnetConfig.routeCount, virtualNetworkRouteClass, NULL);
+ if(env->ExceptionCheck() || routesArrayObj == NULL)
+ {
+ LOGE("Error creating VirtualNetworkRoute[] array");
+ return NULL;
+ }
+
+ for(unsigned int i = 0; i < vnetConfig.routeCount; ++i)
+ {
+ jobject routeObj = newVirtualNetworkRoute(env, vnetConfig.routes[i]);
+ env->SetObjectArrayElement(routesArrayObj, i, routeObj);
+ if(env->ExceptionCheck())
+ {
+ LOGE("Error assigning VirtualNetworkRoute to array");
+ return NULL;
+ }
+ }
+
+ env->SetObjectField(vnetConfigObj, routesField, routesArrayObj);
+
return vnetConfigObj;
}
@@ -831,6 +867,72 @@ jobject newVersion(JNIEnv *env, int major, int minor, int 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, "<init>", "()V");
+ if(env->ExceptionCheck() || routeConstructor == NULL)
+ {
+ return NULL;
+ }
+
+ jobject routeObj = env->NewObject(virtualNetworkRouteClass, routeConstructor);
+ 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);
+
+ return routeObj;
+}
+
#ifdef __cplusplus
}
-#endif \ No newline at end of file
+#endif
+
diff --git a/java/jni/ZT_jniutils.h b/java/jni/ZT_jniutils.h
index 34dfc471..4dec7201 100644
--- a/java/jni/ZT_jniutils.h
+++ b/java/jni/ZT_jniutils.h
@@ -42,6 +42,8 @@ jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &config);
jobject newVersion(JNIEnv *env, int major, int minor, int rev);
+jobject newVirtualNetworkRoute(JNIEnv *env, const ZT_VirtualNetworkRoute &route);
+
#ifdef __cplusplus
}
#endif