make VirtualNetworkConfig a plain data class

This commit is contained in:
Brenton Bostick 2023-02-01 06:36:34 -05:00
commit 54fd7c7e9a
5 changed files with 130 additions and 104 deletions

View file

@ -114,20 +114,6 @@ jmethodID VirtualNetworkType_fromInt_method;
// Instance fields
//
jfieldID VirtualNetworkConfig_assignedAddresses_field;
jfieldID VirtualNetworkConfig_bridge_field;
jfieldID VirtualNetworkConfig_broadcastEnabled_field;
jfieldID VirtualNetworkConfig_dhcp_field;
jfieldID VirtualNetworkConfig_dns_field;
jfieldID VirtualNetworkConfig_enabled_field;
jfieldID VirtualNetworkConfig_mac_field;
jfieldID VirtualNetworkConfig_mtu_field;
jfieldID VirtualNetworkConfig_name_field;
jfieldID VirtualNetworkConfig_nwid_field;
jfieldID VirtualNetworkConfig_portError_field;
jfieldID VirtualNetworkConfig_routes_field;
jfieldID VirtualNetworkConfig_status_field;
jfieldID VirtualNetworkConfig_type_field;
jfieldID VirtualNetworkDNS_domain_field;
jfieldID VirtualNetworkDNS_servers_field;
jfieldID VirtualNetworkRoute_flags_field;
@ -201,7 +187,7 @@ void setupJNICache(JavaVM *vm) {
EXCEPTIONANDNULLCHECK(Peer_ctor = env->GetMethodID(Peer_class, "<init>", "(JIIIILcom/zerotier/sdk/PeerRole;[Lcom/zerotier/sdk/PeerPhysicalPath;)V"));
EXCEPTIONANDNULLCHECK(Version_ctor = env->GetMethodID(Version_class, "<init>", "(III)V"));
EXCEPTIONANDNULLCHECK(VirtualNetworkConfigListener_onNetworkConfigurationUpdated_method = env->GetMethodID(VirtualNetworkConfigListener_class, "onNetworkConfigurationUpdated", "(JLcom/zerotier/sdk/VirtualNetworkConfigOperation;Lcom/zerotier/sdk/VirtualNetworkConfig;)I"));
EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_ctor = env->GetMethodID(VirtualNetworkConfig_class, "<init>", "()V"));
EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_ctor = env->GetMethodID(VirtualNetworkConfig_class, "<init>", "(JJLjava/lang/String;Lcom/zerotier/sdk/VirtualNetworkStatus;Lcom/zerotier/sdk/VirtualNetworkType;IZZZIZJ[Ljava/net/InetSocketAddress;[Lcom/zerotier/sdk/VirtualNetworkRoute;Lcom/zerotier/sdk/VirtualNetworkDNS;)V"));
EXCEPTIONANDNULLCHECK(VirtualNetworkDNS_ctor = env->GetMethodID(VirtualNetworkDNS_class, "<init>", "()V"));
EXCEPTIONANDNULLCHECK(VirtualNetworkFrameListener_onVirtualNetworkFrame_method = env->GetMethodID(VirtualNetworkFrameListener_class, "onVirtualNetworkFrame", "(JJJJJ[B)V"));
EXCEPTIONANDNULLCHECK(VirtualNetworkRoute_ctor = env->GetMethodID(VirtualNetworkRoute_class, "<init>", "()V"));
@ -222,20 +208,6 @@ void setupJNICache(JavaVM *vm) {
// Instance fields
//
EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_assignedAddresses_field = env->GetFieldID(VirtualNetworkConfig_class, "assignedAddresses", "[Ljava/net/InetSocketAddress;"));
EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_bridge_field = env->GetFieldID(VirtualNetworkConfig_class, "bridge", "Z"));
EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_broadcastEnabled_field = env->GetFieldID(VirtualNetworkConfig_class, "broadcastEnabled", "Z"));
EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_dhcp_field = env->GetFieldID(VirtualNetworkConfig_class, "dhcp", "Z"));
EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_dns_field = env->GetFieldID(VirtualNetworkConfig_class, "dns", "Lcom/zerotier/sdk/VirtualNetworkDNS;"));
EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_enabled_field = env->GetFieldID(VirtualNetworkConfig_class, "enabled", "Z"));
EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_mac_field = env->GetFieldID(VirtualNetworkConfig_class, "mac", "J"));
EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_mtu_field = env->GetFieldID(VirtualNetworkConfig_class, "mtu", "I"));
EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_name_field = env->GetFieldID(VirtualNetworkConfig_class, "name", "Ljava/lang/String;"));
EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_nwid_field = env->GetFieldID(VirtualNetworkConfig_class, "nwid", "J"));
EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_portError_field = env->GetFieldID(VirtualNetworkConfig_class, "portError", "I"));
EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_routes_field = env->GetFieldID(VirtualNetworkConfig_class, "routes", "[Lcom/zerotier/sdk/VirtualNetworkRoute;"));
EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_status_field = env->GetFieldID(VirtualNetworkConfig_class, "status", "Lcom/zerotier/sdk/VirtualNetworkStatus;"));
EXCEPTIONANDNULLCHECK(VirtualNetworkConfig_type_field = env->GetFieldID(VirtualNetworkConfig_class, "type", "Lcom/zerotier/sdk/VirtualNetworkType;"));
EXCEPTIONANDNULLCHECK(VirtualNetworkDNS_domain_field = env->GetFieldID(VirtualNetworkDNS_class, "domain", "Ljava/lang/String;"));
EXCEPTIONANDNULLCHECK(VirtualNetworkDNS_servers_field = env->GetFieldID(VirtualNetworkDNS_class, "servers", "Ljava/util/ArrayList;"));
EXCEPTIONANDNULLCHECK(VirtualNetworkRoute_flags_field = env->GetFieldID(VirtualNetworkRoute_class, "flags", "I"));

View file

@ -83,20 +83,6 @@ extern jmethodID VirtualNetworkType_fromInt_method;
// Instance fields
//
extern jfieldID VirtualNetworkConfig_assignedAddresses_field;
extern jfieldID VirtualNetworkConfig_bridge_field;
extern jfieldID VirtualNetworkConfig_broadcastEnabled_field;
extern jfieldID VirtualNetworkConfig_dhcp_field;
extern jfieldID VirtualNetworkConfig_dns_field;
extern jfieldID VirtualNetworkConfig_enabled_field;
extern jfieldID VirtualNetworkConfig_mac_field;
extern jfieldID VirtualNetworkConfig_mtu_field;
extern jfieldID VirtualNetworkConfig_name_field;
extern jfieldID VirtualNetworkConfig_nwid_field;
extern jfieldID VirtualNetworkConfig_portError_field;
extern jfieldID VirtualNetworkConfig_routes_field;
extern jfieldID VirtualNetworkConfig_status_field;
extern jfieldID VirtualNetworkConfig_type_field;
extern jfieldID VirtualNetworkDNS_domain_field;
extern jfieldID VirtualNetworkDNS_servers_field;
extern jfieldID VirtualNetworkRoute_flags_field;

View file

@ -258,54 +258,66 @@ jobject newPeer(JNIEnv *env, const ZT_Peer &peer)
jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &vnetConfig)
{
jobject vnetConfigObj = env->NewObject(VirtualNetworkConfig_class, VirtualNetworkConfig_ctor);
if(env->ExceptionCheck() || vnetConfigObj == NULL)
{
LOGE("Error creating new VirtualNetworkConfig object");
return NULL;
}
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)
{
LOGE("Exception creating new string");
return NULL; // out of memory
}
env->SetObjectField(vnetConfigObj, VirtualNetworkConfig_name_field, nameStr);
jobject statusObject = createVirtualNetworkStatus(env, vnetConfig.status);
if(env->ExceptionCheck() || statusObject == NULL)
{
return NULL;
}
env->SetObjectField(vnetConfigObj, VirtualNetworkConfig_status_field, statusObject);
jobject typeObject = createVirtualNetworkType(env, vnetConfig.type);
if(env->ExceptionCheck() || typeObject == NULL)
{
return NULL;
}
env->SetObjectField(vnetConfigObj, VirtualNetworkConfig_type_field, typeObject);
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 = newInetSocketAddressArray(env, vnetConfig.assignedAddresses, vnetConfig.assignedAddressCount);
env->SetObjectField(vnetConfigObj, VirtualNetworkConfig_assignedAddresses_field, assignedAddrArrayObj);
if (env->ExceptionCheck() || assignedAddrArrayObj == NULL) {
return NULL;
}
jobjectArray routesArrayObj = newVirtualNetworkRouteArray(env, vnetConfig.routes, vnetConfig.routeCount);
env->SetObjectField(vnetConfigObj, VirtualNetworkConfig_routes_field, routesArrayObj);
jobject dnsObj = newVirtualNetworkDNS(env, vnetConfig.dns);
if (dnsObj != NULL) {
env->SetObjectField(vnetConfigObj, VirtualNetworkConfig_dns_field, dnsObj);
if (env->ExceptionCheck() || routesArrayObj == NULL) {
return NULL;
}
//
// may be NULL
//
jobject dnsObj = newVirtualNetworkDNS(env, vnetConfig.dns);
if(env->ExceptionCheck()) {
return NULL;
}
jobject vnetConfigObj = env->NewObject(
VirtualNetworkConfig_class,
VirtualNetworkConfig_ctor,
vnetConfig.nwid,
vnetConfig.mac,
nameStr,
statusObject,
typeObject,
vnetConfig.mtu,
vnetConfig.dhcp,
vnetConfig.bridge,
vnetConfig.broadcastEnabled,
vnetConfig.portError,
vnetConfig.netconfRevision,
assignedAddrArrayObj,
routesArrayObj,
dnsObj);
if(env->ExceptionCheck() || vnetConfigObj == NULL)
{
LOGE("Error creating new VirtualNetworkConfig object");
return NULL;
}
return vnetConfigObj;
}

View file

@ -124,13 +124,17 @@ namespace {
return -101;
}
jobject networkConfigObject = newNetworkConfig(env, *config);
if(networkConfigObject == NULL)
{
LOGE("Error creating VirtualNetworkConfig object");
if (config == NULL) {
LOGE("Config is NULL");
return -102;
}
jobject networkConfigObject = newNetworkConfig(env, *config);
if(env->ExceptionCheck() || networkConfigObject == NULL)
{
return -103;
}
return env->CallIntMethod(
ref->configListener,
VirtualNetworkConfigListener_onNetworkConfigurationUpdated_method,