make VirtualNetworkRoute a plain data class

This commit is contained in:
Brenton Bostick 2023-02-01 06:43:32 -05:00
parent d0c0585553
commit 809022b273
4 changed files with 58 additions and 49 deletions

View file

@ -110,15 +110,6 @@ jmethodID VirtualNetworkConfigOperation_fromInt_method;
jmethodID VirtualNetworkStatus_fromInt_method; jmethodID VirtualNetworkStatus_fromInt_method;
jmethodID VirtualNetworkType_fromInt_method; jmethodID VirtualNetworkType_fromInt_method;
//
// Instance fields
//
jfieldID VirtualNetworkRoute_flags_field;
jfieldID VirtualNetworkRoute_metric_field;
jfieldID VirtualNetworkRoute_target_field;
jfieldID VirtualNetworkRoute_via_field;
// //
// Enums // Enums
// //
@ -188,7 +179,7 @@ void setupJNICache(JavaVM *vm) {
EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_ctor = env->GetMethodID(VirtualNetworkConfig_class, "<init>", "(JJLjava/lang/String;Lcom/zerotier/sdk/VirtualNetworkStatus;Lcom/zerotier/sdk/VirtualNetworkType;IZZZIJ[Ljava/net/InetSocketAddress;[Lcom/zerotier/sdk/VirtualNetworkRoute;Lcom/zerotier/sdk/VirtualNetworkDNS;)V")); EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_ctor = env->GetMethodID(VirtualNetworkConfig_class, "<init>", "(JJLjava/lang/String;Lcom/zerotier/sdk/VirtualNetworkStatus;Lcom/zerotier/sdk/VirtualNetworkType;IZZZIJ[Ljava/net/InetSocketAddress;[Lcom/zerotier/sdk/VirtualNetworkRoute;Lcom/zerotier/sdk/VirtualNetworkDNS;)V"));
EXCEPTIONANDNULLCHECK(VirtualNetworkDNS_ctor = env->GetMethodID(VirtualNetworkDNS_class, "<init>", "(Ljava/lang/String;Ljava/util/ArrayList;)V")); EXCEPTIONANDNULLCHECK(VirtualNetworkDNS_ctor = env->GetMethodID(VirtualNetworkDNS_class, "<init>", "(Ljava/lang/String;Ljava/util/ArrayList;)V"));
EXCEPTIONANDNULLCHECK(VirtualNetworkFrameListener_onVirtualNetworkFrame_method = env->GetMethodID(VirtualNetworkFrameListener_class, "onVirtualNetworkFrame", "(JJJJJ[B)V")); EXCEPTIONANDNULLCHECK(VirtualNetworkFrameListener_onVirtualNetworkFrame_method = env->GetMethodID(VirtualNetworkFrameListener_class, "onVirtualNetworkFrame", "(JJJJJ[B)V"));
EXCEPTIONANDNULLCHECK(VirtualNetworkRoute_ctor = env->GetMethodID(VirtualNetworkRoute_class, "<init>", "()V")); EXCEPTIONANDNULLCHECK(VirtualNetworkRoute_ctor = env->GetMethodID(VirtualNetworkRoute_class, "<init>", "(Ljava/net/InetSocketAddress;Ljava/net/InetSocketAddress;II)V"));
// //
// Static methods // Static methods
@ -202,15 +193,6 @@ void setupJNICache(JavaVM *vm) {
EXCEPTIONANDNULLCHECK(VirtualNetworkStatus_fromInt_method = env->GetStaticMethodID(VirtualNetworkStatus_class, "fromInt", "(I)Lcom/zerotier/sdk/VirtualNetworkStatus;")); EXCEPTIONANDNULLCHECK(VirtualNetworkStatus_fromInt_method = env->GetStaticMethodID(VirtualNetworkStatus_class, "fromInt", "(I)Lcom/zerotier/sdk/VirtualNetworkStatus;"));
EXCEPTIONANDNULLCHECK(VirtualNetworkType_fromInt_method = env->GetStaticMethodID(VirtualNetworkType_class, "fromInt", "(I)Lcom/zerotier/sdk/VirtualNetworkType;")); EXCEPTIONANDNULLCHECK(VirtualNetworkType_fromInt_method = env->GetStaticMethodID(VirtualNetworkType_class, "fromInt", "(I)Lcom/zerotier/sdk/VirtualNetworkType;"));
//
// Instance fields
//
EXCEPTIONANDNULLCHECK(VirtualNetworkRoute_flags_field = env->GetFieldID(VirtualNetworkRoute_class, "flags", "I"));
EXCEPTIONANDNULLCHECK(VirtualNetworkRoute_metric_field = env->GetFieldID(VirtualNetworkRoute_class, "metric", "I"));
EXCEPTIONANDNULLCHECK(VirtualNetworkRoute_target_field = env->GetFieldID(VirtualNetworkRoute_class, "target", "Ljava/net/InetSocketAddress;"));
EXCEPTIONANDNULLCHECK(VirtualNetworkRoute_via_field = env->GetFieldID(VirtualNetworkRoute_class, "via", "Ljava/net/InetSocketAddress;"));
// //
// Enums // Enums
// //

View file

@ -79,15 +79,6 @@ extern jmethodID VirtualNetworkConfigOperation_fromInt_method;
extern jmethodID VirtualNetworkStatus_fromInt_method; extern jmethodID VirtualNetworkStatus_fromInt_method;
extern jmethodID VirtualNetworkType_fromInt_method; extern jmethodID VirtualNetworkType_fromInt_method;
//
// Instance fields
//
extern jfieldID VirtualNetworkRoute_flags_field;
extern jfieldID VirtualNetworkRoute_metric_field;
extern jfieldID VirtualNetworkRoute_target_field;
extern jfieldID VirtualNetworkRoute_via_field;
// //
// Enums // Enums
// //

View file

@ -336,19 +336,34 @@ jobject newVersion(JNIEnv *env, int major, int minor, int rev)
jobject newVirtualNetworkRoute(JNIEnv *env, const ZT_VirtualNetworkRoute &route) jobject newVirtualNetworkRoute(JNIEnv *env, const ZT_VirtualNetworkRoute &route)
{ {
jobject routeObj = env->NewObject(VirtualNetworkRoute_class, VirtualNetworkRoute_ctor); //
if(env->ExceptionCheck() || routeObj == NULL) // may be NULL
{ //
jobject targetObj = newInetSocketAddress(env, route.target);
if (env->ExceptionCheck()) {
return NULL; return NULL;
} }
jobject targetObj = newInetSocketAddress(env, route.target); //
// may be NULL
//
jobject viaObj = newInetSocketAddress(env, route.via); jobject viaObj = newInetSocketAddress(env, route.via);
if (env->ExceptionCheck()) {
return NULL;
}
env->SetObjectField(routeObj, VirtualNetworkRoute_target_field, targetObj); jobject routeObj = env->NewObject(
env->SetObjectField(routeObj, VirtualNetworkRoute_via_field, viaObj); VirtualNetworkRoute_class,
env->SetIntField(routeObj, VirtualNetworkRoute_flags_field, (jint)route.flags); VirtualNetworkRoute_ctor,
env->SetIntField(routeObj, VirtualNetworkRoute_metric_field, (jint)route.metric); targetObj,
viaObj,
route.flags,
route.metric);
if(env->ExceptionCheck() || routeObj == NULL)
{
LOGE("Exception creating VirtualNetworkRoute");
return NULL;
}
return routeObj; return routeObj;
} }

View file

@ -29,34 +29,39 @@ package com.zerotier.sdk;
import java.net.InetSocketAddress; import java.net.InetSocketAddress;
public final class VirtualNetworkRoute implements Comparable<VirtualNetworkRoute> /**
* A route to be pushed on a virtual network
*
* Defined in ZeroTierOne.h as ZT_VirtualNetworkRoute
*/
public class VirtualNetworkRoute implements Comparable<VirtualNetworkRoute>
{ {
private VirtualNetworkRoute() {
target = null;
via = null;
flags = 0;
metric = 0;
}
/** /**
* Target network / netmask bits (in port field) or NULL or 0.0.0.0/0 for default * Target network / netmask bits (in port field) or NULL or 0.0.0.0/0 for default
*/ */
public InetSocketAddress target; private final InetSocketAddress target;
/** /**
* Gateway IP address (port ignored) or NULL (family == 0) for LAN-local (no gateway) * Gateway IP address (port ignored) or NULL (family == 0) for LAN-local (no gateway)
*/ */
public InetSocketAddress via; private final InetSocketAddress via;
/** /**
* Route flags * Route flags
*/ */
public int flags; private final int flags;
/** /**
* Route metric (not currently used) * Route metric (not currently used)
*/ */
public int metric; private final int metric;
public VirtualNetworkRoute(InetSocketAddress target, InetSocketAddress via, int flags, int metric) {
this.target = target;
this.via = via;
this.flags = flags;
this.metric = metric;
}
@Override @Override
public String toString() { public String toString() {
@ -139,4 +144,20 @@ public final class VirtualNetworkRoute implements Comparable<VirtualNetworkRoute
return result; return result;
} }
public InetSocketAddress getTarget() {
return target;
}
public InetSocketAddress getVia() {
return via;
}
public int getFlags() {
return flags;
}
public int getMetric() {
return metric;
}
} }