* Implements automatic loopback handling for standalone regions.

* This /should/ make OpenSim behave properly when hosting behind a NAT router and utilizing port forwarding (but the router doesn't support Loopback)
0.6.6-post-fixes
Adam Frisby 2009-05-23 06:29:08 +00:00
parent e9ea959263
commit 6b312d9340
4 changed files with 44 additions and 15 deletions

View File

@ -163,11 +163,17 @@ namespace OpenSim.Client.Linden
if (m_serversInfo.HttpUsesSSL)
{
seedcap = "https://" + m_serversInfo.HttpSSLCN + ":" + m_serversInfo.httpSSLPort + capsSeedPath;
// For NAT
string host = NetworkUtil.GetHostFor(remoteClient.Address, m_serversInfo.HttpSSLCN);
seedcap = "https://" + host + ":" + m_serversInfo.httpSSLPort + capsSeedPath;
}
else
{
seedcap = "http://" + regionInfo.ExternalHostName + ":" + m_serversInfo.HttpListenerPort + capsSeedPath;
// For NAT
string host = NetworkUtil.GetHostFor(remoteClient.Address, regionInfo.ExternalHostName);
seedcap = "http://" + host + ":" + m_serversInfo.HttpListenerPort + capsSeedPath;
}
response.SeedCapability = seedcap;

View File

@ -279,11 +279,17 @@ namespace OpenSim.Framework.Communications.Services
if (m_serversInfo.HttpUsesSSL)
{
seedcap = "https://" + m_serversInfo.HttpSSLCN + ":" + regionInfo.HttpPort + capsSeedPath;
// For NAT
string host = NetworkUtil.GetHostFor(remoteClient.Address, m_serversInfo.HttpSSLCN);
seedcap = "https://" + host + ":" + m_serversInfo.httpSSLPort + capsSeedPath;
}
else
{
seedcap = "http://" + regionInfo.ExternalHostName + ":" + regionInfo.HttpPort + capsSeedPath;
// For NAT
string host = NetworkUtil.GetHostFor(remoteClient.Address, regionInfo.ExternalHostName);
seedcap = "http://" + host + ":" + m_serversInfo.HttpListenerPort + capsSeedPath;
}
response.SeedCapability = seedcap;

View File

@ -270,10 +270,12 @@ namespace OpenSim.Grid.UserServer.Modules
string capsPath = CapsUtil.GetRandomCapsObjectPath();
// Take off trailing / so that the caps path isn't //CAPS/someUUID
if (regionInfo.httpServerURI.EndsWith("/"))
regionInfo.httpServerURI = regionInfo.httpServerURI.Substring(0, regionInfo.httpServerURI.Length - 1);
response.SeedCapability = regionInfo.httpServerURI + CapsUtil.GetCapsSeedPath(capsPath);
// For NAT
string host = NetworkUtil.GetHostFor(remoteClient.Address, regionInfo.ServerIP);
// TODO: This doesnt support SSL. -Adam
string serverURI = "http://" + host + ":" + regionInfo.ServerPort;
response.SeedCapability = serverURI + CapsUtil.GetCapsSeedPath(capsPath);
// Notify the target of an incoming user
m_log.InfoFormat(

View File

@ -811,6 +811,19 @@ namespace OpenSim.Region.Framework.Scenes
avatar.CloseChildAgents(newRegionX, newRegionY);
if (Util.IsOutsideView(oldRegionX, newRegionX, oldRegionY, newRegionY))
{
#region IP Translation for NAT
IClientIPEndpoint ipepClient;
if (avatar.ClientView.TryGet(out ipepClient))
{
capsPath
= "http://"
+ NetworkUtil.GetHostFor(ipepClient.EndPoint, reg.ExternalHostName)
+ ":"
+ reg.HttpPort
+ CapsUtil.GetCapsSeedPath(agentCircuit.CapsPath);
}
else
{
capsPath
= "http://"
@ -818,11 +831,13 @@ namespace OpenSim.Region.Framework.Scenes
+ ":"
+ reg.HttpPort
+ CapsUtil.GetCapsSeedPath(agentCircuit.CapsPath);
}
#endregion
if (eq != null)
{
#region IP Translation for NAT
IClientIPEndpoint ipepClient;
// Uses ipepClient above
if (avatar.ClientView.TryGet(out ipepClient))
{
endPoint.Address = NetworkUtil.GetIPFor(ipepClient.EndPoint, endPoint.Address);