UserAgentService: change handling of its external IP
parent
0ebb1f3f4b
commit
b7c1d6e7f5
|
@ -99,15 +99,8 @@ namespace OpenSim.Services.Connectors.Simulation
|
||||||
}
|
}
|
||||||
|
|
||||||
public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, EntityTransferContext ctx, out string reason)
|
public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, EntityTransferContext ctx, out string reason)
|
||||||
{
|
|
||||||
string tmp = String.Empty;
|
|
||||||
return CreateAgent(source, destination, aCircuit, flags, ctx, out tmp, out reason);
|
|
||||||
}
|
|
||||||
|
|
||||||
public bool CreateAgent(GridRegion source, GridRegion destination, AgentCircuitData aCircuit, uint flags, EntityTransferContext ctx, out string myipaddress, out string reason)
|
|
||||||
{
|
{
|
||||||
reason = String.Empty;
|
reason = String.Empty;
|
||||||
myipaddress = String.Empty;
|
|
||||||
|
|
||||||
if (destination == null)
|
if (destination == null)
|
||||||
{
|
{
|
||||||
|
@ -134,7 +127,6 @@ namespace OpenSim.Services.Connectors.Simulation
|
||||||
|
|
||||||
reason = data["reason"].AsString();
|
reason = data["reason"].AsString();
|
||||||
success = data["success"].AsBoolean();
|
success = data["success"].AsBoolean();
|
||||||
myipaddress = data["your_ip"].AsString();
|
|
||||||
return success;
|
return success;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -149,7 +141,6 @@ namespace OpenSim.Services.Connectors.Simulation
|
||||||
|
|
||||||
reason = data["reason"].AsString();
|
reason = data["reason"].AsString();
|
||||||
success = data["success"].AsBoolean();
|
success = data["success"].AsBoolean();
|
||||||
myipaddress = data["your_ip"].AsString();
|
|
||||||
m_log.WarnFormat(
|
m_log.WarnFormat(
|
||||||
"[REMOTE SIMULATION CONNECTOR]: Remote simulator {0} did not accept compressed transfer, suggest updating it.", destination.RegionName);
|
"[REMOTE SIMULATION CONNECTOR]: Remote simulator {0} did not accept compressed transfer, suggest updating it.", destination.RegionName);
|
||||||
return success;
|
return success;
|
||||||
|
|
|
@ -73,6 +73,7 @@ namespace OpenSim.Services.HypergridService
|
||||||
protected static FriendsSimConnector m_FriendsSimConnector; // grid
|
protected static FriendsSimConnector m_FriendsSimConnector; // grid
|
||||||
|
|
||||||
protected static string m_GridName;
|
protected static string m_GridName;
|
||||||
|
protected static string m_MyExternalIP = "";
|
||||||
|
|
||||||
protected static int m_LevelOutsideContacts;
|
protected static int m_LevelOutsideContacts;
|
||||||
protected static bool m_ShowDetails;
|
protected static bool m_ShowDetails;
|
||||||
|
@ -147,9 +148,20 @@ namespace OpenSim.Services.HypergridService
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!m_GridName.EndsWith("/"))
|
if (!string.IsNullOrEmpty(m_GridName))
|
||||||
m_GridName = m_GridName + "/";
|
{
|
||||||
|
m_GridName = m_GridName.ToLowerInvariant();
|
||||||
|
if (!m_GridName.EndsWith("/"))
|
||||||
|
m_GridName = m_GridName + "/";
|
||||||
|
Uri gateURI;
|
||||||
|
if(!Uri.TryCreate(m_GridName, UriKind.Absolute, out gateURI))
|
||||||
|
throw new Exception(String.Format("[UserAgentService] could not parse gatekeeper uri"));
|
||||||
|
string host = gateURI.DnsSafeHost;
|
||||||
|
IPAddress ip = Util.GetHostFromDNS(host);
|
||||||
|
if(ip == null)
|
||||||
|
throw new Exception(String.Format("[UserAgentService] failed to resolve gatekeeper host"));
|
||||||
|
m_MyExternalIP = ip.ToString();
|
||||||
|
}
|
||||||
// Finally some cleanup
|
// Finally some cleanup
|
||||||
m_Database.DeleteOld();
|
m_Database.DeleteOld();
|
||||||
|
|
||||||
|
@ -189,7 +201,6 @@ namespace OpenSim.Services.HypergridService
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
public GridRegion GetHomeRegion(UUID userID, out Vector3 position, out Vector3 lookAt)
|
public GridRegion GetHomeRegion(UUID userID, out Vector3 position, out Vector3 lookAt)
|
||||||
{
|
{
|
||||||
position = new Vector3(128, 128, 0); lookAt = Vector3.UnitY;
|
position = new Vector3(128, 128, 0); lookAt = Vector3.UnitY;
|
||||||
|
@ -222,7 +233,7 @@ namespace OpenSim.Services.HypergridService
|
||||||
m_log.DebugFormat("[USER AGENT SERVICE]: Request to login user {0} {1} (@{2}) to grid {3}",
|
m_log.DebugFormat("[USER AGENT SERVICE]: Request to login user {0} {1} (@{2}) to grid {3}",
|
||||||
agentCircuit.firstname, agentCircuit.lastname, (fromLogin ? agentCircuit.IPAddress : "stored IP"), gatekeeper.ServerURI);
|
agentCircuit.firstname, agentCircuit.lastname, (fromLogin ? agentCircuit.IPAddress : "stored IP"), gatekeeper.ServerURI);
|
||||||
|
|
||||||
string gridName = gatekeeper.ServerURI;
|
string gridName = gatekeeper.ServerURI.ToLowerInvariant();
|
||||||
|
|
||||||
UserAccount account = m_UserAccountService.GetUserAccount(UUID.Zero, agentCircuit.AgentID);
|
UserAccount account = m_UserAccountService.GetUserAccount(UUID.Zero, agentCircuit.AgentID);
|
||||||
if (account == null)
|
if (account == null)
|
||||||
|
@ -269,8 +280,13 @@ namespace OpenSim.Services.HypergridService
|
||||||
TravelingAgentInfo old = null;
|
TravelingAgentInfo old = null;
|
||||||
TravelingAgentInfo travel = CreateTravelInfo(agentCircuit, region, fromLogin, out old);
|
TravelingAgentInfo travel = CreateTravelInfo(agentCircuit, region, fromLogin, out old);
|
||||||
|
|
||||||
|
if(!fromLogin && old != null && !string.IsNullOrEmpty(old.ClientIPAddress))
|
||||||
|
{
|
||||||
|
m_log.DebugFormat("[USER AGENT SERVICE]: stored IP = {0}. Old circuit IP: {1}", old.ClientIPAddress, agentCircuit.IPAddress);
|
||||||
|
agentCircuit.IPAddress = old.ClientIPAddress;
|
||||||
|
}
|
||||||
|
|
||||||
bool success = false;
|
bool success = false;
|
||||||
string myExternalIP = string.Empty;
|
|
||||||
|
|
||||||
m_log.DebugFormat("[USER AGENT SERVICE]: this grid: {0}, desired grid: {1}, desired region: {2}", m_GridName, gridName, region.RegionID);
|
m_log.DebugFormat("[USER AGENT SERVICE]: this grid: {0}, desired grid: {1}, desired region: {2}", m_GridName, gridName, region.RegionID);
|
||||||
|
|
||||||
|
@ -282,7 +298,7 @@ namespace OpenSim.Services.HypergridService
|
||||||
{
|
{
|
||||||
//TODO: Should there not be a call to QueryAccess here?
|
//TODO: Should there not be a call to QueryAccess here?
|
||||||
EntityTransferContext ctx = new EntityTransferContext();
|
EntityTransferContext ctx = new EntityTransferContext();
|
||||||
success = m_GatekeeperConnector.CreateAgent(source, region, agentCircuit, (uint)Constants.TeleportFlags.ViaLogin, ctx, out myExternalIP, out reason);
|
success = m_GatekeeperConnector.CreateAgent(source, region, agentCircuit, (uint)Constants.TeleportFlags.ViaLogin, ctx, out reason);
|
||||||
}
|
}
|
||||||
|
|
||||||
if (!success)
|
if (!success)
|
||||||
|
@ -300,14 +316,6 @@ namespace OpenSim.Services.HypergridService
|
||||||
|
|
||||||
// Everything is ok
|
// Everything is ok
|
||||||
|
|
||||||
if (!fromLogin)
|
|
||||||
{
|
|
||||||
// Update the perceived IP Address of our grid
|
|
||||||
m_log.DebugFormat("[USER AGENT SERVICE]: Gatekeeper sees me as {0}", myExternalIP);
|
|
||||||
}
|
|
||||||
|
|
||||||
travel.MyIpAddress = myExternalIP;
|
|
||||||
|
|
||||||
StoreTravelInfo(travel);
|
StoreTravelInfo(travel);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
|
@ -384,10 +392,12 @@ namespace OpenSim.Services.HypergridService
|
||||||
|
|
||||||
TravelingAgentInfo travel = new TravelingAgentInfo(hgt);
|
TravelingAgentInfo travel = new TravelingAgentInfo(hgt);
|
||||||
|
|
||||||
bool result = travel.ClientIPAddress == reportedIP || travel.MyIpAddress == reportedIP; // NATed
|
bool result = travel.ClientIPAddress == reportedIP;
|
||||||
|
if(!result && !string.IsNullOrEmpty(m_MyExternalIP))
|
||||||
|
result = reportedIP == m_MyExternalIP; // NATed
|
||||||
|
|
||||||
m_log.DebugFormat("[USER AGENT SERVICE]: Comparing {0} with login IP {1} and MyIP {1}; result is {3}",
|
m_log.DebugFormat("[USER AGENT SERVICE]: Comparing {0} with login IP {1} and MyIP {2}; result is {3}",
|
||||||
reportedIP, travel.ClientIPAddress, travel.MyIpAddress, result);
|
reportedIP, travel.ClientIPAddress, m_MyExternalIP, result);
|
||||||
|
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
@ -704,7 +714,6 @@ namespace OpenSim.Services.HypergridService
|
||||||
hgt.Data["GridExternalName"] = travel.GridExternalName;
|
hgt.Data["GridExternalName"] = travel.GridExternalName;
|
||||||
hgt.Data["ServiceToken"] = travel.ServiceToken;
|
hgt.Data["ServiceToken"] = travel.ServiceToken;
|
||||||
hgt.Data["ClientIPAddress"] = travel.ClientIPAddress;
|
hgt.Data["ClientIPAddress"] = travel.ClientIPAddress;
|
||||||
hgt.Data["MyIPAddress"] = travel.MyIpAddress;
|
|
||||||
|
|
||||||
m_Database.Store(hgt);
|
m_Database.Store(hgt);
|
||||||
}
|
}
|
||||||
|
@ -719,7 +728,6 @@ namespace OpenSim.Services.HypergridService
|
||||||
public string GridExternalName = string.Empty;
|
public string GridExternalName = string.Empty;
|
||||||
public string ServiceToken = string.Empty;
|
public string ServiceToken = string.Empty;
|
||||||
public string ClientIPAddress = string.Empty; // as seen from this user agent service
|
public string ClientIPAddress = string.Empty; // as seen from this user agent service
|
||||||
public string MyIpAddress = string.Empty; // the user agent service's external IP, as seen from the next gatekeeper
|
|
||||||
|
|
||||||
public TravelingAgentInfo(HGTravelingData t)
|
public TravelingAgentInfo(HGTravelingData t)
|
||||||
{
|
{
|
||||||
|
@ -730,7 +738,6 @@ namespace OpenSim.Services.HypergridService
|
||||||
GridExternalName = t.Data["GridExternalName"];
|
GridExternalName = t.Data["GridExternalName"];
|
||||||
ServiceToken = t.Data["ServiceToken"];
|
ServiceToken = t.Data["ServiceToken"];
|
||||||
ClientIPAddress = t.Data["ClientIPAddress"];
|
ClientIPAddress = t.Data["ClientIPAddress"];
|
||||||
MyIpAddress = t.Data["MyIPAddress"];
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -743,7 +750,6 @@ namespace OpenSim.Services.HypergridService
|
||||||
GridExternalName = old.GridExternalName;
|
GridExternalName = old.GridExternalName;
|
||||||
ServiceToken = old.ServiceToken;
|
ServiceToken = old.ServiceToken;
|
||||||
ClientIPAddress = old.ClientIPAddress;
|
ClientIPAddress = old.ClientIPAddress;
|
||||||
MyIpAddress = old.MyIpAddress;
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in New Issue