diff --git a/pom.xml b/pom.xml index d51dff40..61350728 100644 --- a/pom.xml +++ b/pom.xml @@ -7,7 +7,7 @@ 1.0 ice4j - 3.2.62 + 3.2.63 bundle ice4j https://github.com/Red5/ice4j diff --git a/src/main/java/org/ice4j/ice/ConnectivityCheckClient.java b/src/main/java/org/ice4j/ice/ConnectivityCheckClient.java index d2d7d4c4..9e96d7d4 100644 --- a/src/main/java/org/ice4j/ice/ConnectivityCheckClient.java +++ b/src/main/java/org/ice4j/ice/ConnectivityCheckClient.java @@ -606,7 +606,7 @@ public void run() { } // Since we suspect that it is possible to startCheckForPair, processSuccessResponse and only then setStateInProgress, no synchronized // since the CandidatePair#setState method is atomically enabled. - TransactionID transactionID = startCheckForPair(pairToCheck); + TransactionID transactionID = startCheckForPair(pairToCheck, 50, 500, 2); //100, 1600, 6 if (transactionID == null) { logger.warn("Pair failed: {}", pairToCheck.toShortString()); pairToCheck.setStateFailed(); diff --git a/src/main/java/org/ice4j/ice/harvest/HostCandidateHarvester.java b/src/main/java/org/ice4j/ice/harvest/HostCandidateHarvester.java index 19e0b8a0..35c28c02 100644 --- a/src/main/java/org/ice4j/ice/harvest/HostCandidateHarvester.java +++ b/src/main/java/org/ice4j/ice/harvest/HostCandidateHarvester.java @@ -3,6 +3,7 @@ import java.io.IOException; import java.net.BindException; +import java.net.Inet4Address; import java.net.Inet6Address; import java.net.InetAddress; import java.net.NetworkInterface; @@ -166,11 +167,13 @@ private static void initializeAddressFilters() { allowedAddresses = new ArrayList<>(); } allowedAddresses.add(address); + logger.debug("Allowed: {}", allowedAddresses); } } String[] blockedAddressesStr = StackProperties.getStringArray(StackProperties.BLOCKED_ADDRESSES, ";"); // if allowed addresses is specified and blocked addresses are not, block all other addresses if (allowedAddressesStr != null && blockedAddressesStr == null) { + boolean isIPv6Disabled = StackProperties.getBoolean(StackProperties.DISABLE_IPv6, true); // create the blocked address holder if not done already if (blockedAddresses == null) { blockedAddresses = new ArrayList<>(); @@ -179,9 +182,20 @@ private static void initializeAddressFilters() { availableHostAddresses.forEach(ref -> { InetAddress addr = ref.getAddress(); if (!allowedAddresses.contains(addr)) { - blockedAddresses.add(addr); + if (addr instanceof Inet6Address) { + // dont automatically block ipv6 unless they are disabled + if (isIPv6Disabled) { + blockedAddresses.add(addr); + } else { + // ensure they are added to allowed, since they are bindable and not disabled + allowedAddresses.add(addr); + } + } else if (addr instanceof Inet4Address) { + blockedAddresses.add(addr); + } } }); + logger.debug("Allowed: {} blocked: {}", allowedAddresses, blockedAddresses); } else if (blockedAddressesStr != null) { for (String addressStr : blockedAddressesStr) { InetAddress address; @@ -196,6 +210,7 @@ private static void initializeAddressFilters() { } blockedAddresses.add(address); } + logger.debug("Blocked: {}", blockedAddresses); } } } @@ -419,17 +434,20 @@ static boolean isInterfaceAllowed(NetworkInterface iface) { * @return true if address is allowed to be used by this HostCandidateHarvester. */ static boolean isAddressAllowed(InetAddress address) { - if (address.isLoopbackAddress()) { - return false; - } + logger.debug("isAddressAllowed: {}", address); boolean ret = true; - List allowed = getAllowedAddresses(); - List blocked = getBlockedAddresses(); - if (allowed != null) { - ret = allowed.contains(address); - } - if (blocked != null) { - ret = ret && !blocked.contains(address); + if (!address.isLoopbackAddress()) { + List allowed = getAllowedAddresses(); + List blocked = getBlockedAddresses(); + if (allowed != null && allowed.size() > 0) { + ret = allowed.contains(address); + } + if (blocked != null && blocked.size() > 0) { + ret = ret && !blocked.contains(address); + } + } else { + // no loop back allowed + ret = false; } return ret; } diff --git a/src/test/java/org/ice4j/MessageEventDispatchingTest.java b/src/test/java/org/ice4j/MessageEventDispatchingTest.java index ffd6caae..d9bb9c00 100644 --- a/src/test/java/org/ice4j/MessageEventDispatchingTest.java +++ b/src/test/java/org/ice4j/MessageEventDispatchingTest.java @@ -83,6 +83,9 @@ public class MessageEventDispatchingTest extends TestCase { */ PlainResponseCollector responseCollector; + //static String IPAddress = "fe80::995e:3662:2b68:2410"; + static String IPAddress = "10.0.0.35"; + /** * junit setup method. * @@ -92,9 +95,9 @@ public class MessageEventDispatchingTest extends TestCase { protected void setUp() throws Exception { super.setUp(); logger.info("-------------------------------------------\nSettting up {}", getClass().getName()); - clientAddress = new TransportAddress("127.0.0.1", PortUtil.getPort(), Transport.UDP); - serverAddress = new TransportAddress("127.0.0.1", PortUtil.getPort(), Transport.UDP); - serverAddress2 = new TransportAddress("127.0.0.1", PortUtil.getPort(), Transport.UDP); + clientAddress = new TransportAddress(IPAddress, PortUtil.getPort(), Transport.UDP); + serverAddress = new TransportAddress(IPAddress, PortUtil.getPort(), Transport.UDP); + serverAddress2 = new TransportAddress(IPAddress, PortUtil.getPort(), Transport.UDP); stunStack = new StunStack(); // create the wrappers clientSock = new IceUdpSocketWrapper(clientAddress); diff --git a/src/test/java/org/ice4j/stack/ShallowStackTest.java b/src/test/java/org/ice4j/stack/ShallowStackTest.java index 53175038..3ba1132b 100644 --- a/src/test/java/org/ice4j/stack/ShallowStackTest.java +++ b/src/test/java/org/ice4j/stack/ShallowStackTest.java @@ -1,7 +1,6 @@ /* See LICENSE.md for license information */ package org.ice4j.stack; -import java.io.IOException; import java.net.DatagramPacket; import java.util.ArrayList; import java.util.Arrays; @@ -14,7 +13,6 @@ import org.ice4j.AbstractResponseCollector; import org.ice4j.BaseStunMessageEvent; import org.ice4j.MsgFixture; -import org.ice4j.StunException; import org.ice4j.StunFailureEvent; import org.ice4j.StunMessageEvent; import org.ice4j.StunResponseEvent; @@ -34,11 +32,9 @@ import org.ice4j.message.MessageFactory; import org.ice4j.message.Request; import org.ice4j.message.Response; -import org.ice4j.security.CredentialsAuthority; import org.ice4j.socket.IceSocketWrapper; import org.ice4j.socket.IceTcpSocketWrapper; import org.ice4j.socket.IceUdpSocketWrapper; -import org.ice4j.stunclient.ResponseSequenceServer; import org.ice4j.util.Utils; import org.junit.After; import org.junit.Before; @@ -75,7 +71,8 @@ public class ShallowStackTest extends TestCase { * Transport type to be used for the test. */ static Transport selectedTransport = Transport.UDP; - + + //static String IPAddress = "fe80::995e:3662:2b68:2410"; static String IPAddress = "10.0.0.35"; /** @@ -96,11 +93,12 @@ public ShallowStackTest(String name) { protected void setUp() throws Exception { super.setUp(); logger.info("--------------------------------------------------------------------------------------\nSettting up {}", getClass().getName()); + System.setProperty("org.ice4j.TERMINATION_DELAY", "500"); System.setProperty("org.ice4j.BIND_RETRIES", "1"); - System.setProperty("org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS", IPAddress); - System.setProperty("org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS", IPAddress); + //System.setProperty("org.ice4j.ice.harvest.NAT_HARVESTER_LOCAL_ADDRESS", IPAddress); + //System.setProperty("org.ice4j.ice.harvest.NAT_HARVESTER_PUBLIC_ADDRESS", IPAddress); System.setProperty("org.ice4j.ice.harvest.ALLOWED_ADDRESSES", IPAddress); - System.setProperty("org.ice4j.TERMINATION_DELAY", "500"); + System.setProperty("org.ice4j.ipv6.DISABLED", "false"); // initializes the mapping harvesters MappingCandidateHarvesters.getHarvesters(); //logger.info("setup");