diff --git a/OpenSim/Framework/General/Types/RegionInfo.cs b/OpenSim/Framework/General/Types/RegionInfo.cs index 57bb398fe8..ef05534d29 100644 --- a/OpenSim/Framework/General/Types/RegionInfo.cs +++ b/OpenSim/Framework/General/Types/RegionInfo.cs @@ -207,7 +207,14 @@ namespace OpenSim.Framework.Types this.m_internalEndPoint.Port = (int)configuration_result; break; case "external_host_name": - this.m_externalHostName = (string)configuration_result; + if ((string)configuration_result != "SYSTEMIP") + { + this.m_externalHostName = (string)configuration_result; + } + else + { + this.m_externalHostName = Util.GetLocalHost().ToString(); + } break; case "terrain_file": this.estateSettings.terrainFile = (string)configuration_result; diff --git a/OpenSim/Framework/General/Util.cs b/OpenSim/Framework/General/Util.cs index bbee4b2c16..9e687bae14 100644 --- a/OpenSim/Framework/General/Util.cs +++ b/OpenSim/Framework/General/Util.cs @@ -256,6 +256,26 @@ namespace OpenSim.Framework.Utilities return null; } + public static IPAddress GetLocalHost() + { + string dnsAddress = "localhost"; + + IPAddress[] hosts = Dns.GetHostEntry(dnsAddress).AddressList; + + foreach (IPAddress host in hosts) + { + if (!IPAddress.IsLoopback(host) && host.AddressFamily == System.Net.Sockets.AddressFamily.InterNetwork) + { + return host; + } + } + + if (hosts.Length > 0) + return hosts[0]; + + return null; + } + public Util() {