From d4957dd9be8ef4484478510f5d3c6c974d3afe26 Mon Sep 17 00:00:00 2001 From: Jeff Ames Date: Mon, 25 May 2009 01:59:50 +0000 Subject: Update svn properties. --- OpenSim/Framework/NetworkUtil.cs | 442 +++++++++++++++++++-------------------- 1 file changed, 221 insertions(+), 221 deletions(-) (limited to 'OpenSim/Framework') diff --git a/OpenSim/Framework/NetworkUtil.cs b/OpenSim/Framework/NetworkUtil.cs index e3fb009..351020b 100644 --- a/OpenSim/Framework/NetworkUtil.cs +++ b/OpenSim/Framework/NetworkUtil.cs @@ -1,221 +1,221 @@ -using System; -using System.Collections.Generic; -using System.Net.Sockets; -using System.Net; -using System.Net.NetworkInformation; -using System.Reflection; -using log4net; - -namespace OpenSim.Framework -{ - /// - /// Handles NAT translation in a 'manner of speaking' - /// Allows you to return multiple different external - /// hostnames depending on the requestors network - /// - /// This enables standard port forwarding techniques - /// to work correctly with OpenSim. - /// - public static class NetworkUtil - { - // Logger - private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); - - private static bool m_disabled = true; - - public static bool Enabled - { - set { m_disabled = value; } - get { return m_disabled; } - } - - // IPv4Address, Subnet - static readonly Dictionary m_subnets = new Dictionary(); - - public static IPAddress GetIPFor(IPAddress user, IPAddress simulator) - { - if(m_disabled) - return simulator; - - // Check if we're accessing localhost. - foreach (IPAddress host in Dns.GetHostAddresses(Dns.GetHostName())) - { - if (host.Equals(user) && host.AddressFamily == AddressFamily.InterNetwork) - { - m_log.Info("[NetworkUtil] Localhost user detected, sending them '" + host + "' instead of '" + simulator + "'"); - return host; - } - } - - // Check for same LAN segment - foreach (KeyValuePair subnet in m_subnets) - { - byte[] subnetBytes = subnet.Value.GetAddressBytes(); - byte[] localBytes = subnet.Key.GetAddressBytes(); - byte[] destBytes = user.GetAddressBytes(); - - if (subnetBytes.Length != destBytes.Length || subnetBytes.Length != localBytes.Length) - return null; - - bool valid = true; - - for (int i = 0; i < subnetBytes.Length; i++) - { - if ((localBytes[i] & subnetBytes[i]) != (destBytes[i] & subnetBytes[i])) - { - valid = false; - break; - } - } - - if (subnet.Key.AddressFamily != AddressFamily.InterNetwork) - valid = false; - - if (valid) - { - m_log.Info("[NetworkUtil] Local LAN user detected, sending them '" + subnet.Key + "' instead of '" + simulator + "'"); - return subnet.Key; - } - } - - // Otherwise, return outside address - return simulator; - } - - private static IPAddress GetExternalIPFor(IPAddress destination, string defaultHostname) - { - // Adds IPv6 Support (Not that any of the major protocols supports it...) - if (destination.AddressFamily == AddressFamily.InterNetworkV6) - { - foreach (IPAddress host in Dns.GetHostAddresses(defaultHostname)) - { - if (host.AddressFamily == AddressFamily.InterNetworkV6) - { - m_log.Info("[NetworkUtil] Localhost user detected, sending them '" + host + "' instead of '" + defaultHostname + "'"); - return host; - } - } - } - - if(destination.AddressFamily != AddressFamily.InterNetwork) - return null; - - // Check if we're accessing localhost. - foreach (KeyValuePair pair in m_subnets) - { - IPAddress host = pair.Value; - if (host.Equals(destination) && host.AddressFamily == AddressFamily.InterNetwork) - { - m_log.Info("[NATROUTING] Localhost user detected, sending them '" + host + "' instead of '" + defaultHostname + "'"); - return destination; - } - } - - // Check for same LAN segment - foreach (KeyValuePair subnet in m_subnets) - { - byte[] subnetBytes = subnet.Value.GetAddressBytes(); - byte[] localBytes = subnet.Key.GetAddressBytes(); - byte[] destBytes = destination.GetAddressBytes(); - - if(subnetBytes.Length != destBytes.Length || subnetBytes.Length != localBytes.Length) - return null; - - bool valid = true; - - for(int i=0;i + /// Handles NAT translation in a 'manner of speaking' + /// Allows you to return multiple different external + /// hostnames depending on the requestors network + /// + /// This enables standard port forwarding techniques + /// to work correctly with OpenSim. + /// + public static class NetworkUtil + { + // Logger + private static readonly ILog m_log = LogManager.GetLogger(MethodBase.GetCurrentMethod().DeclaringType); + + private static bool m_disabled = true; + + public static bool Enabled + { + set { m_disabled = value; } + get { return m_disabled; } + } + + // IPv4Address, Subnet + static readonly Dictionary m_subnets = new Dictionary(); + + public static IPAddress GetIPFor(IPAddress user, IPAddress simulator) + { + if(m_disabled) + return simulator; + + // Check if we're accessing localhost. + foreach (IPAddress host in Dns.GetHostAddresses(Dns.GetHostName())) + { + if (host.Equals(user) && host.AddressFamily == AddressFamily.InterNetwork) + { + m_log.Info("[NetworkUtil] Localhost user detected, sending them '" + host + "' instead of '" + simulator + "'"); + return host; + } + } + + // Check for same LAN segment + foreach (KeyValuePair subnet in m_subnets) + { + byte[] subnetBytes = subnet.Value.GetAddressBytes(); + byte[] localBytes = subnet.Key.GetAddressBytes(); + byte[] destBytes = user.GetAddressBytes(); + + if (subnetBytes.Length != destBytes.Length || subnetBytes.Length != localBytes.Length) + return null; + + bool valid = true; + + for (int i = 0; i < subnetBytes.Length; i++) + { + if ((localBytes[i] & subnetBytes[i]) != (destBytes[i] & subnetBytes[i])) + { + valid = false; + break; + } + } + + if (subnet.Key.AddressFamily != AddressFamily.InterNetwork) + valid = false; + + if (valid) + { + m_log.Info("[NetworkUtil] Local LAN user detected, sending them '" + subnet.Key + "' instead of '" + simulator + "'"); + return subnet.Key; + } + } + + // Otherwise, return outside address + return simulator; + } + + private static IPAddress GetExternalIPFor(IPAddress destination, string defaultHostname) + { + // Adds IPv6 Support (Not that any of the major protocols supports it...) + if (destination.AddressFamily == AddressFamily.InterNetworkV6) + { + foreach (IPAddress host in Dns.GetHostAddresses(defaultHostname)) + { + if (host.AddressFamily == AddressFamily.InterNetworkV6) + { + m_log.Info("[NetworkUtil] Localhost user detected, sending them '" + host + "' instead of '" + defaultHostname + "'"); + return host; + } + } + } + + if(destination.AddressFamily != AddressFamily.InterNetwork) + return null; + + // Check if we're accessing localhost. + foreach (KeyValuePair pair in m_subnets) + { + IPAddress host = pair.Value; + if (host.Equals(destination) && host.AddressFamily == AddressFamily.InterNetwork) + { + m_log.Info("[NATROUTING] Localhost user detected, sending them '" + host + "' instead of '" + defaultHostname + "'"); + return destination; + } + } + + // Check for same LAN segment + foreach (KeyValuePair subnet in m_subnets) + { + byte[] subnetBytes = subnet.Value.GetAddressBytes(); + byte[] localBytes = subnet.Key.GetAddressBytes(); + byte[] destBytes = destination.GetAddressBytes(); + + if(subnetBytes.Length != destBytes.Length || subnetBytes.Length != localBytes.Length) + return null; + + bool valid = true; + + for(int i=0;i