Skip to content

Commit

Permalink
temp fix for ANDROID-56: crash inside newNetworkConfig from too many …
Browse files Browse the repository at this point in the history
…args
  • Loading branch information
bostick committed Mar 7, 2023
1 parent eedf270 commit dd627cd
Show file tree
Hide file tree
Showing 3 changed files with 46 additions and 32 deletions.
10 changes: 9 additions & 1 deletion java/jni/ZT_jnicache.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -176,7 +176,15 @@ 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>", "(JJLjava/lang/String;Lcom/zerotier/sdk/VirtualNetworkStatus;Lcom/zerotier/sdk/VirtualNetworkType;IZZZIJ[Ljava/net/InetSocketAddress;[Lcom/zerotier/sdk/VirtualNetworkRoute;Lcom/zerotier/sdk/VirtualNetworkDNS;)V"));


//
// ANDROID-56: temporarily remove parameters to prevent crashing
//
// 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;IZZZ[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(VirtualNetworkFrameListener_onVirtualNetworkFrame_method = env->GetMethodID(VirtualNetworkFrameListener_class, "onVirtualNetworkFrame", "(JJJJJ[B)V"));
EXCEPTIONANDNULLCHECK(VirtualNetworkRoute_ctor = env->GetMethodID(VirtualNetworkRoute_class, "<init>", "(Ljava/net/InetSocketAddress;Ljava/net/InetSocketAddress;II)V"));
Expand Down
7 changes: 5 additions & 2 deletions java/jni/ZT_jniutils.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -307,8 +307,11 @@ jobject newNetworkConfig(JNIEnv *env, const ZT_VirtualNetworkConfig &vnetConfig)
vnetConfig.dhcp,
vnetConfig.bridge,
vnetConfig.broadcastEnabled,
vnetConfig.portError,
vnetConfig.netconfRevision,
//
// ANDROID-56: temporarily remove parameters to prevent crashing
//
// vnetConfig.portError,
// vnetConfig.netconfRevision,
assignedAddrArrayObj,
routesArrayObj,
dnsObj);
Expand Down
61 changes: 32 additions & 29 deletions java/src/com/zerotier/sdk/VirtualNetworkConfig.java
Original file line number Diff line number Diff line change
Expand Up @@ -66,17 +66,20 @@ public class VirtualNetworkConfig implements Comparable<VirtualNetworkConfig> {

private final boolean broadcastEnabled;

private final int portError;

private final long netconfRevision;
//
// ANDROID-56: temporarily remove parameters to prevent crashing
//
// private final int portError;
//
// private final long netconfRevision;

private final InetSocketAddress[] assignedAddresses;

private final VirtualNetworkRoute[] routes;

private final VirtualNetworkDNS dns;

public VirtualNetworkConfig(long nwid, long mac, String name, VirtualNetworkStatus status, VirtualNetworkType type, int mtu, boolean dhcp, boolean bridge, boolean broadcastEnabled, int portError, long netconfRevision, InetSocketAddress[] assignedAddresses, VirtualNetworkRoute[] routes, VirtualNetworkDNS dns) {
public VirtualNetworkConfig(long nwid, long mac, String name, VirtualNetworkStatus status, VirtualNetworkType type, int mtu, boolean dhcp, boolean bridge, boolean broadcastEnabled, InetSocketAddress[] assignedAddresses, VirtualNetworkRoute[] routes, VirtualNetworkDNS dns) {
this.nwid = nwid;
this.mac = mac;
this.name = name;
Expand All @@ -89,19 +92,19 @@ public VirtualNetworkConfig(long nwid, long mac, String name, VirtualNetworkStat
this.dhcp = dhcp;
this.bridge = bridge;
this.broadcastEnabled = broadcastEnabled;
this.portError = portError;
if (netconfRevision < 0) {
throw new RuntimeException("netconfRevision < 0: " + netconfRevision);
}
this.netconfRevision = netconfRevision;
// this.portError = portError;
// if (netconfRevision < 0) {
// throw new RuntimeException("netconfRevision < 0: " + netconfRevision);
// }
// this.netconfRevision = netconfRevision;
this.assignedAddresses = assignedAddresses;
this.routes = routes;
this.dns = dns;
}

@Override
public String toString() {
return "VirtualNetworkConfig(" + StringUtils.networkIdToString(nwid) + ", " + StringUtils.macAddressToString(mac) + ", " + name + ", " + status + ", " + type + ", " + mtu + ", " + dhcp + ", " + bridge + ", " + broadcastEnabled + ", " + portError + ", " + netconfRevision + ", " + Arrays.toString(assignedAddresses) + ", " + Arrays.toString(routes) + ", " + dns + ")";
return "VirtualNetworkConfig(" + StringUtils.networkIdToString(nwid) + ", " + StringUtils.macAddressToString(mac) + ", " + name + ", " + status + ", " + type + ", " + mtu + ", " + dhcp + ", " + bridge + ", " + broadcastEnabled + ", " + Arrays.toString(assignedAddresses) + ", " + Arrays.toString(routes) + ", " + dns + ")";
}

@Override
Expand Down Expand Up @@ -168,17 +171,17 @@ public boolean equals(Object o) {
return false;
}

if (this.portError != cfg.portError) {
Log.i(TAG, "Port Error Changed. Old: " + this.portError + ", New: " + cfg.portError);

return false;
}

if (this.netconfRevision != cfg.netconfRevision) {
Log.i(TAG, "NetConfRevision Changed. Old: " + this.netconfRevision + ", New: " + cfg.netconfRevision);

return false;
}
// if (this.portError != cfg.portError) {
// Log.i(TAG, "Port Error Changed. Old: " + this.portError + ", New: " + cfg.portError);
//
// return false;
// }
//
// if (this.netconfRevision != cfg.netconfRevision) {
// Log.i(TAG, "NetConfRevision Changed. Old: " + this.netconfRevision + ", New: " + cfg.netconfRevision);
//
// return false;
// }

if (!Arrays.equals(assignedAddresses, cfg.assignedAddresses)) {

Expand Down Expand Up @@ -277,8 +280,8 @@ public int hashCode() {
result = 37 * result + (dhcp ? 1 : 0);
result = 37 * result + (bridge ? 1 : 0);
result = 37 * result + (broadcastEnabled ? 1 : 0);
result = 37 * result + portError;
result = 37 * result + (int) (netconfRevision ^ (netconfRevision >>> 32));
// result = 37 * result + portError;
// result = 37 * result + (int) (netconfRevision ^ (netconfRevision >>> 32));
result = 37 * result + Arrays.hashCode(assignedAddresses);
result = 37 * result + Arrays.hashCode(routes);
result = 37 * result + (dns == null ? 0 : dns.hashCode());
Expand Down Expand Up @@ -359,18 +362,18 @@ public boolean isBroadcastEnabled() {
/**
* If the network is in PORT_ERROR state, this is the error most recently returned by the port config callback
*/
public int getPortError() {
return portError;
}
// public int getPortError() {
// return portError;
// }

/**
* Network config revision as reported by netconf master
*
* <p>If this is zero, it means we're still waiting for our netconf.</p>
*/
public long getNetconfRevision() {
return netconfRevision;
}
// public long getNetconfRevision() {
// return netconfRevision;
// }

/**
* ZeroTier-assigned addresses (in {@link InetSocketAddress} objects)
Expand Down

0 comments on commit dd627cd

Please sign in to comment.