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.cpp78
1 files changed, 78 insertions, 0 deletions
diff --git a/java/jni/ZT1_jniutils.cpp b/java/jni/ZT1_jniutils.cpp
index 82f5dba8..8d1a25c4 100644
--- a/java/jni/ZT1_jniutils.cpp
+++ b/java/jni/ZT1_jniutils.cpp
@@ -879,6 +879,84 @@ jobject newNetworkConfig(JNIEnv *env, const ZT1_VirtualNetworkConfig &vnetConfig
return vnetConfigObj;
}
+jobject newVersion(JNIEnv *env, int major, int minor, int rev, long featureFlags)
+{
+ // create a com.zerotierone.sdk.Version object
+ static jclass versionClass = NULL;
+ static jmethodID versionConstructor = NULL;
+
+ if(versionClass == NULL)
+ {
+ versionClass = env->FindClass("com/zerotierone/sdk/Version");
+ if(versionClass == NULL)
+ {
+ return NULL;
+ }
+ }
+
+ if(versionConstructor == NULL)
+ {
+ versionConstructor = env->GetMethodID(
+ versionClass, "<init>", "()V");
+ if(versionConstructor == NULL)
+ {
+ return NULL;
+ }
+ }
+
+ jobject versionObj = env->NewObject(versionClass, versionConstructor);
+ if(versionObj == NULL)
+ {
+ return NULL;
+ }
+
+ // copy data to Version object
+ static jfieldID majorField = NULL;
+ static jfieldID minorField = NULL;
+ static jfieldID revisionField = NULL;
+ static jfieldID featureFlagsField = NULL;
+
+ if(majorField == NULL)
+ {
+ majorField = env->GetFieldID(versionClass, "major", "I");
+ if(majorField = NULL)
+ {
+ return NULL;
+ }
+ }
+
+ if(minorField == NULL)
+ {
+ minorField = env->GetFieldID(versionClass, "minor", "I");
+ if(minorField == NULL)
+ {
+ return NULL;
+ }
+ }
+
+ if(revisionField == NULL)
+ {
+ revisionField = env->GetFieldID(versionClass, "revision", "I");
+ if(revisionField == NULL)
+ {
+ return NULL;
+ }
+ }
+
+ if(featureFlagsField == NULL)
+ {
+ featureFlagsField = env->GetFieldID(versionClass, "featureFlags", "J");
+ if(featureFlagsField == NULL)
+ {
+ return NULL;
+ }
+ }
+
+ env->SetIntField(versionObj, majorField, (jint)major);
+ env->SetIntField(versionObj, minorField, (jint)minor);
+ env->SetIntField(versionObj, revisionField, (jint)rev);
+ env->SetLongField(versionObj, featureFlagsField, (jlong)featureFlags);
+}
#ifdef __cplusplus
}