aboutsummaryrefslogtreecommitdiffstats
path: root/src/net/java/sip/communicator/impl/netaddr
diff options
context:
space:
mode:
authorEmil Ivov <emcho@jitsi.org>2006-12-04 21:43:45 +0000
committerEmil Ivov <emcho@jitsi.org>2006-12-04 21:43:45 +0000
commitb6593380c08dfc30bead9b00fdc4b33800959f0c (patch)
tree8c905ae5c473c32241264aa73ddf16b98a110113 /src/net/java/sip/communicator/impl/netaddr
parent75cb7535b10ae0fdf1b775461295e764660782ad (diff)
downloadjitsi-b6593380c08dfc30bead9b00fdc4b33800959f0c.zip
jitsi-b6593380c08dfc30bead9b00fdc4b33800959f0c.tar.gz
jitsi-b6593380c08dfc30bead9b00fdc4b33800959f0c.tar.bz2
Made the getLocalHost() method slightly more aware of ipv6 addresses on Windows.
Diffstat (limited to 'src/net/java/sip/communicator/impl/netaddr')
-rw-r--r--src/net/java/sip/communicator/impl/netaddr/NetworkAddressManagerServiceImpl.java38
1 files changed, 36 insertions, 2 deletions
diff --git a/src/net/java/sip/communicator/impl/netaddr/NetworkAddressManagerServiceImpl.java b/src/net/java/sip/communicator/impl/netaddr/NetworkAddressManagerServiceImpl.java
index 71add8c..8bbf9de 100644
--- a/src/net/java/sip/communicator/impl/netaddr/NetworkAddressManagerServiceImpl.java
+++ b/src/net/java/sip/communicator/impl/netaddr/NetworkAddressManagerServiceImpl.java
@@ -14,6 +14,7 @@ import net.java.sip.communicator.service.netaddr.*;
import net.java.sip.communicator.util.*;
import net.java.stun4j.*;
import net.java.stun4j.client.*;
+import java.util.*;
/**
@@ -244,10 +245,42 @@ public class NetworkAddressManagerServiceImpl
{
try
{
- localHost = InetAddress.getLocalHost();
+ //all that's inside the if is an ugly IPv6 hack
+ //(good ol' IPv6 - always causing more problems that it solves.)
+ if (intendedDestination instanceof Inet6Address)
+ {
+ //return the first globally routable ipv6 address we find
+ //on the machine (and hope it's a good one)
+ Enumeration interfaces
+ = NetworkInterface.getNetworkInterfaces();
+
+ while (interfaces.hasMoreElements())
+ {
+ NetworkInterface iface
+ = (NetworkInterface)interfaces.nextElement();
+ Enumeration addresses = iface.getInetAddresses();
+ while(addresses.hasMoreElements())
+ {
+ InetAddress address
+ = (InetAddress)addresses.nextElement();
+ if(address instanceof Inet6Address)
+ {
+ if(!address.isAnyLocalAddress()
+ && !address.isLinkLocalAddress()
+ && !address.isSiteLocalAddress()
+ && !address.isLoopbackAddress())
+ {
+ return address;
+ }
+ }
+ }
+ }
+ }
+ else
+ localHost = InetAddress.getLocalHost();
/** @todo test on windows for ipv6 cases */
}
- catch (UnknownHostException ex)
+ catch (Exception ex)
{
//sigh ... ok return 0.0.0.0
logger.warn("Failed to get localhost ", ex);
@@ -257,6 +290,7 @@ public class NetworkAddressManagerServiceImpl
return localHost;
}
+
/**
* The method queries a Stun server for a binding for the specified port.
* @param port the port to resolve (the stun message gets sent trhough that